توفر هذه الصفحة نظرة عامة حول كيفية تنفيذ واجهة برمجة تطبيقات الشبكات العصبية (NNAPI)
السائق. للمزيد من التفاصيل، يُرجى الاطّلاع على المستندات المتوفّرة في تعريف HAL.
الملفات في
hardware/interfaces/neuralnetworks
يتوفّر نموذج تنفيذ لبرنامج التشغيل
frameworks/ml/nn/driver/sample
لمزيد من المعلومات عن واجهة برمجة تطبيقات الشبكات العصبونية، راجع واجهة برمجة التطبيقات للشبكات العصبية.
طبقة تجريد الأجهزة (HAL) للشبكات العصبية
تُعرّف الشبكة العصبونية (NN) HAL تجريدًا لمختلف الأجهزة،
مثل وحدات معالجة الرسومات (GPUs) ومعالجات الإشارات الرقمية (DSP).
الموجودة في منتج ما (على سبيل المثال، هاتف أو جهاز لوحي). إن العوامل المسببة لهذه
أن تتوافق الأجهزة مع NN HAL. يتم تحديد الواجهة في HAL.
من ملفات التعريف في
hardware/interfaces/neuralnetworks
يصور التدفق العام للواجهة بين إطار العمل وبرنامج التشغيل في الشكل 1.
الشكل 1. تدفق الشبكات العصبية
الإعداد
عند الإعداد، يستفسر إطار العمل عن برنامج التشغيل عن إمكاناته باستخدام
IDevice::getCapabilities_1_3
تتضمن بنية @1.3::Capabilities
جميع أنواع البيانات
يمثل الأداء غير المريح باستخدام متجه.
لتحديد كيفية تخصيص عمليات حوسبة للأجهزة المتاحة، الإمكانات لفهم مدى سرعة وآلية استهلاك الطاقة كفاءة كل سائق في تنفيذ عملية التنفيذ. لتقديم هذه المعلومات، يجب أن يقدّم برنامج التشغيل أرقام أداء موحّدة بناءً على عملية التنفيذ من أعباء العمل المرجعية
لتحديد القيم التي يقوم برنامج التشغيل بإرجاعها استجابةً
IDevice::getCapabilities_1_3
، استخدِم تطبيق قياس الأداء NNAPI لقياس
الأداء لأنواع البيانات المقابلة. الإصداران 1 و2 من MobileNet، asr_float
ويُنصَح باستخدام طرازين (tts_float
) لقياس أداء الأجهزة التي تعمل بنظام 32 بت.
قيم النقطة العائمة والنماذج الكميّة للإصدار 1 و2 من MobileNet
يوصى بها للقيم الكميّة المكونة من 8 بت. لمزيد من المعلومات، يُرجى مراجعة
حزمة اختبار تعلُّم الآلة من Android
في الإصدار 9 من نظام Android والإصدارات الأقدم، تشمل بنية Capabilities
أداء برنامج التشغيل.
فقط للنقطة العائمة والأعداد الكَمية ولا تتضمن
أنواع البيانات العددية.
وكجزء من عملية الإعداد، قد يستفسر إطار العمل عن المزيد من المعلومات،
استخدام
IDevice::getType
,
IDevice::getVersionString
،
IDevice:getSupportedExtensions
،
أو
IDevice::getNumberOfCacheFilesNeeded
.
بين عمليات إعادة تشغيل المنتج، يتوقع إطار العمل جميع طلبات البحث الموضحة في للإبلاغ دائمًا عن القيم نفسها لبرنامج تشغيل معين. بخلاف ذلك، لا يعمل أن استخدام برنامج التشغيل هذا قد يتسبب في انخفاض مستوى الأداء أو سلوك غير صحيح.
موسيقى مجمّعة
ويحدِّد إطار العمل الأجهزة التي سيتم استخدامها عندما يتلقّى طلبًا من التطبيق. في Android 10، يمكن للتطبيقات اكتشاف ونحدّد الأجهزة الذي يختاره إطار العمل لمزيد من المعلومات، يُرجى مراجعة اكتشاف الجهاز وتعيينه:
في وقت تجميع النموذج، يرسل إطار العمل النموذج إلى كل مرشح
السائق عن طريق الاتصال
IDevice::getSupportedOperations_1_3
يعرض كل برنامج تشغيل صفيفة من القيم المنطقية التي تشير إلى
والعمليات الخاصة بالنموذج. يمكن للسائق تحديد أنه لا يمكنه
وتعتمد عملية معينة لعدد من الأسباب. مثلاً:
- لا يتوافق برنامج التشغيل مع نوع البيانات.
- لا يدعم برنامج التشغيل إلا العمليات التي تتضمن معلَمات إدخال معيّنة. بالنسبة على سبيل المثال، قد يدعم برنامج التشغيل الالتفاف 7×7 العمليات التجارية.
- توجد قيود على الذاكرة في السائق تمنعه من التعامل مع الحجم الكبير والرسوم البيانية أو المدخلات.
أثناء التحويل البرمجي، يتم إدخال المدخلات والمخرجات والمعاملات الداخلية للنموذج،
موصوفة في
OperandLifeTime
,
يمكن أن يكون لها أبعاد أو ترتيب غير معروف. لمزيد من المعلومات، يُرجى مراجعة
شكل الإخراج:
يوجه إطار العمل كل برنامج تشغيل محدد للاستعداد لتنفيذ مجموعة فرعية من
النموذج من خلال استدعاء
IDevice::prepareModel_1_3
ثم يجمع كل برنامج تشغيل مجموعته الفرعية. على سبيل المثال، قد
إنشاء التعليمات البرمجية أو إنشاء نسخة مُعاد ترتيبها للأوزان. لأنه يمكن أن يكون هناك
مقدارًا كبيرًا من الوقت بين تجميع النموذج
تنفيذ الطلبات، إلا أنه لا ينبغي حذف الموارد مثل الأجزاء الكبيرة من ذاكرة الجهاز
تعيينه أثناء التحويل البرمجي.
عند النجاح، يُرجع السائق @1.3::IPreparedModel
الاسم المعرِّف. إذا أرجع برنامج التشغيل رمز خطأ عند إعداد مجموعة فرعية من
النموذج، فإن إطار العمل يشغل النموذج بأكمله على وحدة المعالجة المركزية.
لتقليل الوقت المُستغرَق في التجميع عند تشغيل تطبيق ما، يمكن للسائق عناصر تجميع ذاكرة التخزين المؤقت. لمزيد من المعلومات، يرجى الاطّلاع على تجميع التخزين المؤقت:
التنفيذ
عندما يطلب أحد التطبيقات من إطار العمل تنفيذ طلب، يستدعي إطار العمل
الـ
IPreparedModel::executeSynchronously_1_3
لإجراء عملية تنفيذ متزامن على نموذج مُعدّ بشكل تلقائي، يتم استخدام طريقة HAL.
ويمكن أيضًا تنفيذ الطلب بشكل غير متزامن باستخدام ملف
execute_1_3
الطريقة،
executeFenced
(راجِع التنفيذ السيسي)
أو تنفيذها باستخدام
تنفيذ الصور المتسلسلة.
تعمل طلبات التنفيذ المتزامنة على تحسين الأداء وتقليل سلاسل المحادثات مقارنةً بالطلبات غير المتزامنة نظرًا لإرجاع التحكم إلى عملية التطبيق فقط بعد اكتمال التنفيذ. وهذا يعني أن لا يحتاج برنامج التشغيل إلى آلية منفصلة لإعلام عملية التطبيق يتم اكتمال التنفيذ.
باستخدام طريقة execute_1_3
غير المتزامنة، يعود عنصر التحكم إلى
عملية التطبيق بعد بدء التنفيذ، ويجب أن يعلم برنامج التشغيل
إطار العمل عند اكتمال التنفيذ، وباستخدام
@1.3::IExecutionCallback
تتضمّن مَعلمة Request
التي تم تمريرها إلى طريقة التنفيذ بيانات المدخلات والمخرجات.
المعاملات المستخدمة للتنفيذ. يجب أن تخزّن الذاكرة التي تخزّن بيانات المعامل
استخدام ترتيب الصفوف الرئيسية مع تكرار البُعد الأول الأبطأ بدون
المساحة المتروكة في نهاية أي صف. لمزيد من المعلومات عن أنواع المعاملات،
الرؤية
العاملون.
بالنسبة إلى برامج تشغيل NN HAL 1.2 أو أعلى، عندما يتم إرسال طلب مكتملة وحالة الخطأ وشكل الإخراج يتم إرجاع معلومات التوقيت على إطار العمل. وأثناء التنفيذ، يمكن للمخرجات أو المعاملات الداخلية للنموذج أن لها بُعد غير معروف واحد أو أكثر أو ترتيب غير معروف. عندما يكون ناتج واحد على الأقل المعامل له بُعد أو ترتيب غير معروف، يجب أن يعود السائق معلومات مخرجات ذات حجم ديناميكي.
بالنسبة إلى برامج التشغيل التي تحمل الإصدار 1.1 من NN HAL 1.1 أو أقل، يتم عرض حالة الخطأ فقط عندما اكتمل طلبك. يجب أن تكون أبعاد معاملات الإدخال والمخرجات كاملة المحددة لاكتمال التنفيذ بنجاح. يمكن للمعاملات الداخلية لها بُعد واحد أو أكثر غير معروف، لكن يجب أن يكون لها ترتيب محدد.
بالنسبة إلى طلبات المستخدمين التي تغطي برامج تشغيل متعددة، يكون إطار العمل مسؤولاً عن حجز ذاكرة وسيطة وتسلسل الاتصالات لكل برنامج تشغيل.
يمكن تقديم طلبات متعددة بالتوازي على نفس
@1.3::IPreparedModel
يمكن لبرنامج التشغيل تنفيذ الطلبات بالتوازي أو تنفيذ عمليات التنفيذ بشكل متسلسل.
يمكن لإطار العمل أن يطلب من السائق الاحتفاظ بأكثر من نموذج واحد جاهز. بالنسبة
مثلاً، إعداد النموذج "m1
"، ثم إعداد m2
، وتنفيذ الطلب r1
على "m1
"، وتنفيذ
r2
في m2
، يتم تنفيذ r3
في m1
، وتنفيذ r4
في m2
، الإصدار (الموضّح في
تنظيف) m1
، وإصدار m2
.
لتجنب التنفيذ الأول البطيء الذي قد يؤدي إلى تجربة مستخدم سيئة (على سبيل المثال، مثل تذبذب الإطار الأول)، فينبغي أن يُجري برنامج التشغيل معظم عمليات التهيئة في مرحلة التجميع. يجب أن يقتصر الإعداد عند التنفيذ الأول على هي الإجراءات التي تؤثر سلبًا على سلامة النظام عند تنفيذها مبكرًا، مثل الاحتفاظ بمستودعات مؤقتة كبيرة أو زيادة معدل الساعة للجهاز. قد تتضمن برامج التشغيل التي يمكنها إعداد عدد محدود فقط من النماذج المتزامنة إجراء التهيئة عند التنفيذ الأول.
في نظام التشغيل Android 10 أو الإصدارات الأحدث، في الحالات التي عمليات التنفيذ بنفس النموذج المُعدّ يتم تنفيذها بتتابع سريع، فقد يختار العميل استخدام عملية تنفيذ صورة متسلسلة للاتصال بين عمليات التطبيق وبرامج التشغيل. لمزيد من المعلومات، المعلومات، راجع عمليات التنفيذ المتسلسلة وقوائم انتظار الرسائل السريعة:
لتحسين الأداء لعمليات تنفيذ متعددة في تتابع سريع، يحتاج برنامج التشغيل الاحتفاظ بالموارد الاحتياطية المؤقتة أو زيادة معدلات الساعة. جارٍ إنشاء مراقب النظام يُنصَح باستخدام سلسلة المحادثات لإصدار الموارد في حال عدم إنشاء أي طلبات جديدة بعد لفترة زمنية ثابتة.
شكل الإخراج
للطلبات التي لا يحتوي فيها معامل إخراج واحد أو أكثر على جميع السمات
محددة، يجب أن يقدم برنامج التشغيل قائمة بأشكال المخرجات التي تحتوي على
معلومات البُعد لكل مُعامِل إخراج بعد التنفيذ. لمزيد من المعلومات،
معلومات عن الأبعاد، يمكنك مراجعة
OutputShape
إذا تعذَّر التنفيذ بسبب المخزن المؤقت للناتج أصغر حجمًا، يجب أن الإشارة إلى معاملات الإخراج التي ليس لها حجم كاف للمخزن المؤقت في قائمة وأشكال المخرجات، كما يجب أن يقدم أكبر قدر ممكن من المعلومات المتعلقة بالأبعاد، تستخدم صفرًا للأبعاد غير المعروفة.
التوقيت
في نظام Android 10، يمكن للتطبيق أن يطلب التنفيذ
الوقت إذا كان التطبيق
جهازًا واحدًا لاستخدامه أثناء عملية التحويل البرمجي. بالنسبة
التفاصيل، راجع
MeasureTiming
واكتشاف الجهاز وتعيينه.
في هذه الحالة،
يجب أن يقيس برنامج تشغيل NN HAL 1.2 مدة التنفيذ أو يقدم تقرير UINT64_MAX
(إلى
للإشارة إلى أن المدة غير متاحة) عند تنفيذ الطلب. السائق
تقليل أي عواقب على الأداء ناتجة عن قياس التنفيذ
المدة.
يُبلغ برنامج التشغيل عن المدد التالية بالميكرو ثانية في
Timing
البنية:
- مدة التنفيذ على الجهاز: لا تشمل وقت التنفيذ برنامج التشغيل الذي يعمل على المعالج المضيف.
- مدة التنفيذ في برنامج التشغيل: يشمل وقت التنفيذ على الجهاز.
يجب أن تتضمن هذه المدد الوقت الذي يتم فيه تعليق التنفيذ، على سبيل المثال، عندما تكون هناك مهام أخرى ممنوعة من التنفيذ أو عندما في انتظار توفر مورد.
عندما لا يُطلب من السائق قياس مدة التنفيذ أو متى
حدث خطأ في التنفيذ، فيجب على برنامج التشغيل الإبلاغ عن المدد
UINT64_MAX
حتى عندما يُطلب من السائق قياس التنفيذ
المدة، يمكنه بدلاً من ذلك الإبلاغ عن UINT64_MAX
لمعرفة الوقت على الجهاز، والوقت في
أو السائق أو كليهما. عندما يُبلغ برنامج التشغيل عن كلتا المدد كقيمة بخلاف
UINT64_MAX
، يجب أن يساوي وقت التنفيذ في برنامج التشغيل أو يتجاوز الوقت
الجهاز.
التنفيذ بدون قيود
في Android 11، تسمح واجهة NNAPI بتنفيذ
قائمة بمقبض sync_fence
مع إمكانية عرض عنصر sync_fence
اختياريًا،
عند اكتمال التنفيذ. يقلل هذا من النفقات العامة للشركات
ونماذج التسلسل وحالات استخدام البث. تتيح عملية التنفيذ المحدودة أيضًا المزيد من
التوافقية الفعال مع المكونات الأخرى التي يمكنها الإشارة أو الانتظار
sync_fence
لمزيد من المعلومات عن sync_fence
، يُرجى الاطّلاع على
إطار عمل المزامنة.
في عملية تنفيذ مسيئة، يستدعي إطار العمل
IPreparedModel::executeFenced
لبدء تنفيذ مسيطر وغير متزامن على نموذج مُعَدّ باستخدام
خط متجه المزامنة. إذا انتهت المهمة غير المتزامنة قبل
يعود السبب إلى ظهور المكالمة، فيمكن عرض اسم معرِّف فارغ لـ sync_fence
. إنّ
يجب أيضًا إرجاع الكائن IFencedExecutionCallback
للسماح بإطار العمل.
للاستعلام عن معلومات حالة الخطأ والمدة.
بعد اكتمال التنفيذ، يتم تنفيذ الإجراءين التاليين
قيم التوقيت
قياس مدة التنفيذ يمكن الاستعلام عنه من خلال
IFencedExecutionCallback::getExecutionInfo
timingLaunched
: المدة من وقت اتصالexecuteFenced
إلى وقتexecuteFenced
يشير إلىsyncFence
المعروض.timingFenced
: المدة من الوقت الذي تمت فيه مزامنة كل القيود الذي ينتظره التنفيذ، تتم الإشارة إلى وقت إشاراتexecuteFenced
syncFence
الذي تم إرجاعه.
مسار التحكّم
بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث، يمكن استخدام واجهة NNAPI
يتضمن عمليتَي تدفق التحكم، IF
وWHILE
، تستخدمان نماذج أخرى
كوسيطات وتنفيذها بشكل مشروط (IF
) أو بشكل متكرر (WHILE
). بالنسبة
لمزيد من المعلومات حول كيفية تنفيذ ذلك، راجِع
التحكّم في التدفق:
جودة الخدمة
وفي Android 11، تشمل واجهة NNAPI تحسين جودة الخدمة (QoS) من خلال السماح للتطبيق بالإشارة إلى الأولويات النسبية والنماذج القصوى للوقت المتوقع لإعداد النموذج الحد الأقصى للوقت المتوقع لاكتمال التنفيذ. بالنسبة مزيد من المعلومات، راجع جودة الخدمة:
تنظيف
عند الانتهاء من استخدام نموذج مُعدّ في أحد التطبيقات، يتم إصدار إطار العمل.
مرجعها إلى
@1.3::IPreparedModel
. عندما تتم إزالة الإشارة إلى الكائن IPreparedModel
، يكون
يتم تلفه تلقائيًا في خدمة برنامج التشغيل التي أنشأتها. خاص بالطراز
التي يمكن استردادها في الوقت الحالي أثناء تنفيذ برنامج التشغيل
أداة التدمير. إذا كانت خدمة السائق تريد إزالة العنصر IPreparedModel
تلقائيًا عندما لا يحتاج العميل إلى ذلك، فيجب ألا تحتفظ
أي إشارات إلى الكائن IPreparedModel
بعد الكائن IPreparedeModel
تم إرجاعها من خلال
IPreparedModelCallback::notify_1_3
استخدام وحدة المعالجة المركزية
من المتوقع أن تستخدم برامج التشغيل وحدة المعالجة المركزية (CPU) لإعداد العمليات الحسابية. لا ينبغي للسائقين استخدام وحدة المعالجة المركزية لإجراء عمليات حسابية بالرسم البياني لأن ذلك يتداخل مع قدرة إطار العمل على تخصيص العمل بشكل صحيح. يجب على السائق الإبلاغ والأجزاء التي لا يمكنها التعامل معها لإطار العمل، والسماح للإطار بالتعامل مع أَرْتَاح
ويوفر إطار العمل تنفيذ وحدة المعالجة المركزية (CPU) لجميع عمليات NNAPI باستثناء العمليات التي يحددها البائع. لمزيد من المعلومات، يُرجى مراجعة إضافات المورّدين:
تشير رسالة الأشكال البيانية العمليات التي تم إطلاقها في Android 10 (المستوى 29 من واجهة برمجة التطبيقات) وحدة المعالجة المركزية (CPU) المرجعية فقط للتحقّق من أنّ اختبارات CTS وVTS صحيحة. عمليات التنفيذ المحسَّنة المتضمّنة في تعلُّم الآلة للأجهزة الجوّالة تُفضل أطر العمل على تطبيق وحدة المعالجة المركزية (CPU) NNAPI.
وظائف المرافق
يشتمل قاعدة رموز NNAPI على دوال فائدة يمكن استخدامها بواسطة برنامج التشغيل
تشير رسالة الأشكال البيانية
frameworks/ml/nn/common/include/Utils.h
يحتوي ملف على دوال أداة مساعدة متنوعة، مثل تلك المستخدمة في التسجيل
للتحويل بين إصدارات NN HAL المختلفة.
فيديو التسجيل:
VLOG
هو وحدة ماكرو برنامج تضمين حولLOG
في Android تسجيل الرسالة إذا تم ضبط العلامة المناسبة في علامة تبويبdebug.nn.vlog
الموقع.initVLogMask()
يجب أن يتم الاتصال به قبل أي مكالمات إلىVLOG
. يمكن استخدام وحدة ماكروVLOG_IS_ON
يُستخدم للتحقق مما إذا كانVLOG
مُفعَّلاً حاليًا، مما يتيح التسجيل المعقد تعليمة برمجية يجب تخطيها إذا لم تكن هناك حاجة إليها. يجب أن تكون قيمة الموقع واحد مما يلي:- سلسلة فارغة، تشير إلى أنّه لن يتم التسجيل.
- الرمزان المميزّان
1
أوall
للإشارة إلى أنّ كل عملية التسجيل يجب إتمامها. - يشير ذلك المصطلح إلى قائمة علامات تفصل بينها مسافات أو فواصل أو نقطتين.
للإشارة إلى التسجيل الذي سيتم إجراؤه. العلامات هي
compilation
،cpuexe
وdriver
وexecution
وmanager
وmodel
compliantWithV1_*
: تعرضtrue
إذا كان من الممكن تحويل كائن NN HAL. إلى النوع نفسه من إصدار مختلف من HAL بدون فقدان المعلومات. بالنسبة على سبيل المثال، يؤدي استدعاءcompliantWithV1_0
علىV1_2::Model
إلى إرجاعfalse
إذا يشمل النموذج أنواع العمليات التي تم إدخالها في NN HAL 1.1 أو NN HAL 1.2.convertToV1_*
: يحوِّل كائن NN HAL من إصدار إلى آخر. يتم تسجيل تحذير في حالة ما إذا أدى التحويل إلى فقدان بعض المعلومات (وأن هو إذا لم يتمكن الإصدار الجديد من النوع من تمثيل القيمة بشكل كامل).الإمكانات:
nonExtensionOperandPerformance
وupdate
والدوال للمساعدة في إنشاءCapabilities::operandPerformance
.سمات طلبات البحث الخاصة بأنواعها:
isExtensionOperandType
,isExtensionOperationType
،nonExtensionSizeOfData
،nonExtensionOperandSizeOfData
،nonExtensionOperandTypeIsScalar
،tensorHasUnspecifiedDimensions
تشير رسالة الأشكال البيانية
frameworks/ml/nn/common/include/ValidateHal.h
يحتوي الملف على دوال فائدة للتحقق من صلاحية كائن NN HAL.
وفقًا لمواصفات إصدار HAL.
validate*
: تعرضtrue
إذا كان كائن NN HAL صالحًا. وفقًا لمواصفات إصدار HAL. أنواع المصنّعين الأصليين والإضافات التي لم يتم التحقق من صحتها. على سبيل المثال، تعرض الدالةvalidateModel
القيمةfalse
إذا كانت يحتوي النموذج على عملية تشير إلى فهرس معامل لا أو عملية غير متوافقة مع إصدار HAL هذا.
تشير رسالة الأشكال البيانية
frameworks/ml/nn/common/include/Tracing.h
ملف يحتوي على وحدات ماكرو لتبسيط عملية إضافة
systracing إلى رمز الشبكات العصبية.
على سبيل المثال، يمكن الاطّلاع على استدعاءات ماكرو NNTRACE_*
في
نموذج برنامج التشغيل.
تشير رسالة الأشكال البيانية
frameworks/ml/nn/common/include/GraphDump.h
يحتوي ملف على دالة أداة لتفريغ محتوى Model
بتنسيق
لأغراض تصحيح الأخطاء.
graphDump
: كتابة تمثيل للنموذج باستخدام Graphviz (.dot
) إلى مصدر البيانات المحدّد (إذا تم توفيره) أو إلى أداة Logcat (إذا تم توفيره) لا يتم توفير أي بث).
التحقُّق
لاختبار تنفيذ واجهة NNAPI، استخدِم اختبارات VTS وCTS المضمَّنة في إطار عمل Android. تمارس خدمة VTS السائقين مباشرةً (دون استخدام ، في حين أن CTS تمارسها بشكل غير مباشر من خلال إطار العمل. هذه اختبار كل طريقة من طرق واجهة برمجة التطبيقات والتحقق من أن جميع العمليات التي تتوافق مع السائقين يعملون بشكل صحيح ويقدمون النتائج التي تلبي متطلبات الدقة.
فيما يلي متطلبات الدقة في CTS وVTS لواجهة NNAPI:
النقطة العائمة: abs(المتوقع - فعلي) <= atol + rtol * abs(Suggested); حيث:
- بالنسبة إلى fp32، Atol = 1e-5f، rtol = 5.0f * 1.1920928955078125e-7
- بالنسبة إلى fp16، Atol = rtol = 5.0f * 0.0009765625f
الكمية: فردية (باستثناء
mobilenet_quantized
، والتي تتعارض مع ثلاثة)منطقي: مطابقة تامة
تتمثل إحدى طرق اختبار CTS لـ NNAPI في إنشاء رسوم بيانية عشوائية عشوائية
يُستخدم لاختبار ومقارنة نتائج التنفيذ من كل برنامج تشغيل
تنفيذ مرجع NNAPI بالنسبة للسائقين الذين لديهم NN HAL 1.2 أو أعلى، إذا كانت
لا تتوافق النتائج مع معايير الدقة، تُبلغ CTS عن خطأ وتجمع
ملف مواصفات للنموذج الذي تعذّر تنفيذه ضمن /data/local/tmp
لتصحيح الأخطاء.
للحصول على مزيد من التفاصيل حول معايير الدقة، يمكنك الاطّلاع على
TestRandomGraph.cpp
أو
TestHarness.h
اختبار الزغب
إن الغرض من اختبار التشويش هو العثور على الأعطال والتأكيدات وانتهاكات الذاكرة أو سلوك عام غير محدد في التعليمة البرمجية قيد الاختبار بسبب عوامل مثل المدخلات غير المتوقعة. لاختبارات الأخطاء في NNAPI، يستخدم Android اختبارات بناءً على libFuzzer، وهي وفعالين في التشابه لأنها تستخدم تغطية الخط لحالات الاختبار السابقة لإنشاء مدخلات عشوائية جديدة. على سبيل المثال، تفضل libFuzzer حالات الاختبار التي يتم إجراؤها في سطور الرمز الجديدة. ويقلل هذا بشكل كبير من الوقت الذي تستغرقه الاختبارات للعثور على التعليمات البرمجية التي تحتوي على مشكلة.
لإجراء اختبار الإخفاق للتحقق من صحة تنفيذ برنامج التشغيل، عليك تعديل
frameworks/ml/nn/runtime/test/android_fuzzing/DriverFuzzTest.cpp
في أداة اختبار libneuralnetworks_driver_fuzzer
الموجودة في AOSP لتضمين
رمز السائق. لمزيد من المعلومات عن اختبار الأخطاء في NNAPI، يمكنك الاطلاع على
frameworks/ml/nn/runtime/test/android_fuzzing/README.md
الأمان
ولأن العمليات في التطبيقات تتواصل مباشرة مع عملية السائق،
يجب على السائقين التحقق من صحة وسيطات الاتصالات التي يتلقونها. عملية التحقق هذه
والتحقق منه بواسطة VTS. رمز التحقق في
frameworks/ml/nn/common/include/ValidateHal.h
يجب أن يتأكد السائقون أيضًا من عدم إمكانية تداخل التطبيقات مع التطبيقات عند استخدام الجهاز نفسه.
حزمة اختبار تعلُّم الآلة من Android
"حزمة اختبار تعلُّم الآلة" من Android (MLTS) هي معيار من معايير NNAPI CTS وVTS للتحقق من دقة النماذج الحقيقية على أجهزة المورد. تشير رسالة الأشكال البيانية يقيّم مقياس الأداء وقت الاستجابة والدقة، ويقارن مدى استجابة السائقين. نتائج مع النتائج باستخدام TF Lite التي تعمل على وحدة المعالجة المركزية (CPU)، لنفس النموذج ومجموعات البيانات. ويضمن ذلك دقة بيانات السائق هو أسوأ من التنفيذ المرجعي لوحدة المعالجة المركزية (CPU).
يستخدم مطوّرو أنظمة Android الأساسية أيضًا تكنولوجيا MLTS لتقييم وقت الاستجابة والدقة. السائقين.
يمكن العثور على معيار NNAPI في مشروعين في AOSP:
platform/test/mlts/benchmark
(تطبيق قياس الأداء)platform/test/mlts/models
(النماذج ومجموعات البيانات)
النماذج ومجموعات البيانات
يستخدم معيار NNAPI النماذج ومجموعات البيانات التالية.
- بيانات MobileNetV1 عائمة وu8 محددة بأحجام مختلفة، شغِّلها مقابل مجموعة فرعية صغيرة (1,500 صورة) من مجموعة بيانات الصور المفتوحة الإصدار 4.
- العدد العشري لـ MobileNetV2 والعدد u8 المحسوب بأحجام مختلفة، يقابله مجموعة فرعية صغيرة (1,500 صورة) من مجموعة بيانات الصور المفتوحة الإصدار 4.
- النموذج الصوتي المستند إلى الذاكرة القصيرة المدى (LSTM) لتحويل النص إلى كلام مع مجموعة فرعية صغيرة من مجموعة مزوّد بيانات "مطابقة العملاء" في القطب الشمالي.
- نموذج صوتي يستند إلى LSTM للتعرّف التلقائي على الكلام، يتم تشغيله مع مجموعة فرعية صغيرة من مجموعة بيانات LibriSpeech.
لمزيد من المعلومات، يُرجى مراجعة
platform/test/mlts/models
اختبار الإجهاد
تتضمّن "حزمة اختبار تعلُّم الآلة" من Android سلسلة من اختبارات الأعطال التحقّق من مرونة السائقين في ظل ظروف الاستخدام الكثيفة أو في ركن المركبات حالات العملاء السلوك.
توفِّر جميع اختبارات الأعطال الميزات التالية:
- رصد التعليق: في حال توقُّف عميل NNAPI أثناء الاختبار،
تعذُّر الاختبار بسبب الفشل
HANG
ومجموعة الاختبار للانتقال إلى الاختبار التالي. - رصد أعطال عميل NNAPI: تظل الاختبارات في حالة أعطال العميل والاختبارات.
إخفاق بسبب الفشل
CRASH
. - رصد حوادث السير: يمكن للاختبارات رصد حوادث اصطدام السائق.
التي تتسبب في إخفاق طلب NNAPI. يُرجى العِلم أنّه قد تكون هناك أعطال في
عمليات برنامج التشغيل التي لا تتسبب في فشل NNAPI ولا تتسبب في الاختبار
إلى الفشل. لمعالجة هذا النوع من الإخفاق، يُنصح بتشغيل
tail
. في سجل النظام بحثًا عن أخطاء أو أعطال تتعلق ببرنامج التشغيل. - استهداف جميع مسرِّعات الأعمال المتاحة: يتم إجراء الاختبارات مقابل كل السائقين المتوفرين.
تؤدي جميع اختبارات الأعطال إلى النتائج الأربع المحتملة التالية:
SUCCESS
: اكتمل التنفيذ بدون خطأ.FAILURE
: تعذَّر التنفيذ. يحدث عادةً بسبب الإخفاق عند اختبار نموذج، مع الإشارة إلى تعذُّر تجميع برنامج التشغيل أو تنفيذه النموذج.HANG
: أصبحت عملية الاختبار غير مستجيبة.CRASH
: تعطّلت عملية الاختبار.
لمزيد من المعلومات حول اختبار الإجهاد والاطّلاع على قائمة كاملة باختبارات الأعطال، يُرجى الاطّلاع على
platform/test/mlts/benchmark/README.txt
استخدام ميزة "المقاطع الصوتية بعدّة لغات"
لاستخدام ميزة "المقاطع الصوتية بعدّة لغات":
- عليك توصيل جهاز مستهدَف بمحطة العمل الخاصة بك والتأكّد من أنّه
يمكن الوصول إليه من خلال
adb.
تصدير الجهاز المستهدَف
ANDROID_SERIAL
متغير البيئة إذا تم توصيل أكثر من جهاز واحد. cd
في دليل المصدر العالي المستوى على Android.source build/envsetup.sh lunch aosp_arm-userdebug # Or aosp_arm64-userdebug if available. ./test/mlts/benchmark/build_and_run_benchmark.sh
في نهاية عملية قياس الأداء، يتم عرض النتائج في شكل صفحة HTML. وتم إرسالها إلى
xdg-open
.
لمزيد من المعلومات، يُرجى مراجعة
platform/test/mlts/benchmark/README.txt
إصدارات HAL للشبكات العصبية
يصف هذا القسم التغييرات التي طرأت على نظام Android وطريقة عرض المحتوى العصبي. إصدارات HAL للشبكات.
Android 11
يقدّم Android 11 الإصدار NN HAL 1.3، والذي يتضمّن بعد التغييرات الملحوظة.
- إتاحة قياس الكمّي بنظام 8 بت في NNAPI. إضافة
TENSOR_QUANT8_ASYMM_SIGNED
ونوع المعامل. برامج التشغيل التي تتضمن NN HAL 1.3 التي تدعم العمليات التي لا تتضمن طريقة كمية غير موقَّعة يجب أن تكون متوافقة أيضًا مع خيارات المنتج الموقَّعة على تلك العمليات. عند تشغيل إصدارات موقعة وغير موقعة من معظم العمليات الكميّة، فيجب أن ينتج عن السائقين نفس النتائج حتى إزاحة 128. ثمة خمسة استثناءات لهذا الشرط:CAST
،HASHTABLE_LOOKUP
وLSH_PROJECTION
وPAD_V2
وQUANTIZED_16BIT_LSTM
لا تتوافق عمليةQUANTIZED_16BIT_LSTM
مع المعاملات الموقَّعة العمليات الأربع الأخرى تدعم الكمّي الموقّع ولكنها لا تتطلب النتائج هي نفسها. - دعم عمليات التنفيذ المحدودة حيث يستدعي إطار العمل
IPreparedModel::executeFenced
لبدء تنفيذ مسيطر وغير متزامن على نموذج مُعَدّ باستخدام خط متجه المزامنة. لمزيد من المعلومات، يُرجى مراجعة التنفيذ المحدود: - دعم تدفق التحكم. إضافة عمليتَي
IF
وWHILE
اللتين تتطلّبان نماذج أخرى كوسيطات وتنفيذها بشكل مشروط (IF
) أو بشكل متكرر (WHILE
). لمزيد من المعلومات، يُرجى مراجعة التحكّم في التدفق: - تحسين جودة الخدمة (QoS)، حيث قد تشير التطبيقات إلى القيمة النسبية لأولويات نماذجها، وهو الحد الأقصى للوقت المتوقع من النموذج الذي سيتم إعداده، والحد الأقصى للوقت المتوقع والتنفيذ. لمزيد من المعلومات، يُرجى مراجعة جودة الخدمة:
- دعم نطاقات الذاكرة التي توفر واجهات تخصيص الموارد الاحتياطية التي يديرها برنامج التشغيل. يسمح هذا الإجراء بنقل الذكريات الأصلية على الجهاز. لجميع عمليات التنفيذ، ومنع نسخ البيانات وتحويلها غير الضرورية بين عمليات التنفيذ المتتالية على برنامج التشغيل نفسه. لمزيد من المعلومات راجِع نطاقات الذاكرة.
Android 10
يقدّم Android 10 الإصدار NN HAL 1.2، والذي يتضمّن بعد التغييرات الملحوظة.
- تتضمّن بنية
Capabilities
جميع أنواع البيانات، بما في ذلك البيانات القياسية. وأنواع البيانات، ويمثل أداءً غير مريح باستخدام متجه بدلاً من الحقول المسماة. - تتيح الطريقتان
getVersionString
وgetType
لإطار العمل استرداد نوع الجهاز (DeviceType
) ومعلومات الإصدار. عرض اكتشاف الجهاز وتعيينه: - يتم استدعاء طريقة
executeSynchronously
تلقائيًا لإجراء وتنفيذه بشكل متزامن. تطلب الطريقةexecute_1_2
من إطار العمل تنفيذ عملية تنفيذ بشكل غير متزامن. يُرجى الاطّلاع على التنفيذ. - المعلمة
MeasureTiming
إلىexecuteSynchronously
،execute_1_2
، وتنفيذ الصور المتسلسلة يحدد ما إذا كان برنامج التشغيل سيقيس التنفيذ المدة. يتم عرض النتائج في بنيةTiming
. عرض التوقيت: - دعم عمليات التنفيذ التي يكون فيها معامل إخراج غير معروف أو أكثر البعد أو الترتيب. راجِع شكل الإخراج.
- دعم إضافات الموردين، وهي مجموعات من العناصر التي يحددها المورد
والعمليات وأنواع البيانات. تُبلغ تقارير برنامج التشغيل عن الإضافات المتوافقة من خلال
طريقة
IDevice::getSupportedExtensions
. عرض إضافات المورّدين: - يشير هذا المصطلح إلى قدرة كائن الصور المتسلسلة على التحكّم في مجموعة من عمليات تنفيذ الصور المتسلسلة باستخدام. قوائم انتظار الرسائل السريعة (FMQs) للتواصل بين التطبيق وبرامج التشغيل مما يقلل من وقت الاستجابة. عرض عمليات التنفيذ المتسلسلة وقوائم انتظار الرسائل السريعة:
- دعم A ApplianceBuffer للسماح لبرنامج التشغيل بإجراء عمليات التنفيذ دون نسخ البيانات. عرض ADeviceBuffer.
- دعم محسَّن للتخزين المؤقت لأدوات التجميع لتقليل الوقت المستخدمة للتجميع عند بدء تشغيل التطبيق. عرض التخزين المؤقت للتجميع:
يقدّم Android 10 أنواع المعاملات العمليات التجارية.
-
ANEURALNETWORKS_BOOL
ANEURALNETWORKS_FLOAT16
ANEURALNETWORKS_TENSOR_BOOL8
ANEURALNETWORKS_TENSOR_FLOAT16
ANEURALNETWORKS_TENSOR_QUANT16_ASYMM
ANEURALNETWORKS_TENSOR_QUANT16_SYMM
ANEURALNETWORKS_TENSOR_QUANT8_SYMM
ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL
-
ANEURALNETWORKS_ABS
ANEURALNETWORKS_ARGMAX
ANEURALNETWORKS_ARGMIN
ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM
ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_LSTM
ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_RNN
ANEURALNETWORKS_BOX_WITH_NMS_LIMIT
ANEURALNETWORKS_CAST
ANEURALNETWORKS_CHANNEL_SHUFFLE
ANEURALNETWORKS_DETECTION_POSTPROCESSING
ANEURALNETWORKS_EQUAL
ANEURALNETWORKS_EXP
ANEURALNETWORKS_EXPAND_DIMS
ANEURALNETWORKS_GATHER
ANEURALNETWORKS_GENERATE_PROPOSALS
ANEURALNETWORKS_GREATER
ANEURALNETWORKS_GREATER_EQUAL
ANEURALNETWORKS_GROUPED_CONV_2D
ANEURALNETWORKS_HEATMAP_MAX_KEYPOINT
ANEURALNETWORKS_INSTANCE_NORMALIZATION
ANEURALNETWORKS_LESS
ANEURALNETWORKS_LESS_EQUAL
ANEURALNETWORKS_LOG
ANEURALNETWORKS_LOGICAL_AND
ANEURALNETWORKS_LOGICAL_NOT
ANEURALNETWORKS_LOGICAL_OR
ANEURALNETWORKS_LOG_SOFTMAX
ANEURALNETWORKS_MAXIMUM
ANEURALNETWORKS_MINIMUM
ANEURALNETWORKS_NEG
ANEURALNETWORKS_NOT_EQUAL
ANEURALNETWORKS_PAD_V2
ANEURALNETWORKS_POW
ANEURALNETWORKS_PRELU
ANEURALNETWORKS_QUANTIZE
ANEURALNETWORKS_QUANTIZED_16BIT_LSTM
ANEURALNETWORKS_RANDOM_MULTINOMIAL
ANEURALNETWORKS_REDUCE_ALL
ANEURALNETWORKS_REDUCE_ANY
ANEURALNETWORKS_REDUCE_MAX
ANEURALNETWORKS_REDUCE_MIN
ANEURALNETWORKS_REDUCE_PROD
ANEURALNETWORKS_REDUCE_SUM
ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR
ANEURALNETWORKS_ROI_ALIGN
ANEURALNETWORKS_ROI_POOLING
ANEURALNETWORKS_RSQRT
ANEURALNETWORKS_SELECT
ANEURALNETWORKS_SIN
ANEURALNETWORKS_SLICE
ANEURALNETWORKS_SPLIT
ANEURALNETWORKS_SQRT
ANEURALNETWORKS_TILE
ANEURALNETWORKS_TOPK_V2
ANEURALNETWORKS_TRANSPOSE_CONV_2D
ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_LSTM
ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_RNN
يقدّم Android 10 تحديثات للعديد من ميزات العمليات التجارية. التحديثات هي يتعلق بشكل أساسي بما يلي:
- دعم تنسيق الذاكرة NCHW
- دعم مؤشرات التسلل التي لها رتبة مختلفة عن 4 في softmax عمليات التسوية
- دعم الالتفافات المتوسعة
- دعم المدخلات ذات الكمي المختلط في
ANEURALNETWORKS_CONCATENATION
توضح القائمة أدناه العمليات التي تم تعديلها في الإصدار 10 من نظام التشغيل Android لكامل الشاشة تفاصيل التغييرات، راجع رمز العملية في الوثائق المرجعية لـ NNAPI.
ANEURALNETWORKS_ADD
ANEURALNETWORKS_AVERAGE_POOL_2D
ANEURALNETWORKS_BATCH_TO_SPACE_ND
ANEURALNETWORKS_CONCATENATION
ANEURALNETWORKS_CONV_2D
ANEURALNETWORKS_DEPTHWISE_CONV_2D
ANEURALNETWORKS_DEPTH_TO_SPACE
ANEURALNETWORKS_DEQUANTIZE
ANEURALNETWORKS_DIV
ANEURALNETWORKS_FLOOR
ANEURALNETWORKS_FULLY_CONNECTED
ANEURALNETWORKS_L2_NORMALIZATION
ANEURALNETWORKS_L2_POOL_2D
ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION
ANEURALNETWORKS_LOGISTIC
ANEURALNETWORKS_LSH_PROJECTION
ANEURALNETWORKS_LSTM
ANEURALNETWORKS_MAX_POOL_2D
ANEURALNETWORKS_MEAN
ANEURALNETWORKS_MUL
ANEURALNETWORKS_PAD
ANEURALNETWORKS_RELU
ANEURALNETWORKS_RELU1
ANEURALNETWORKS_RELU6
ANEURALNETWORKS_RESHAPE
ANEURALNETWORKS_RESIZE_BILINEAR
ANEURALNETWORKS_RNN
ANEURALNETWORKS_ROI_ALIGN
ANEURALNETWORKS_SOFTMAX
ANEURALNETWORKS_SPACE_TO_BATCH_ND
ANEURALNETWORKS_SPACE_TO_DEPTH
ANEURALNETWORKS_SQUEEZE
ANEURALNETWORKS_STRIDED_SLICE
ANEURALNETWORKS_SUB
ANEURALNETWORKS_SVDF
ANEURALNETWORKS_TANH
ANEURALNETWORKS_TRANSPOSE
الإصدار 9 من نظام التشغيل Android
تم تقديم NN HAL 1.1 في الإصدار 9 من نظام التشغيل Android ويتضمن الميزات التالية التغييرات.
- تتضمّن السمة "
IDevice::prepareModel_1_1
" السمةExecutionPreference
. . ويمكن للسائق استخدام هذا الإعداد لضبط تحضيره، مع العلم أن يفضل التطبيق الحفاظ على البطارية أو سينفذ النموذج في مكالمات سريعة ومتتالية. - تمّت إضافة تسع عمليات جديدة:
BATCH_TO_SPACE_ND
وDIV
وMEAN
وPAD
،SPACE_TO_BATCH_ND
،SQUEEZE
،STRIDED_SLICE
،SUB
،TRANSPOSE
. - يمكن لأي تطبيق تحديد إمكانية إجراء العمليات الحسابية العائمة 32 بت.
باستخدام نطاق عائم 16 بت و/أو الدقة من خلال تحديد
Model.relaxComputationFloat32toFloat16
إلىtrue
Capabilities
يحتوي struct على الحقل الإضافيrelaxedFloat32toFloat16Performance
، لذا حتى يتمكن السائق من إبلاغ إطار العمل عن أدائه المريح.
الإصدار 8.1 من نظام التشغيل Android
تم إصدار HAL (1.0) للشبكات العصبية الأولية في Android 8.1. لمزيد من المعلومات،
المعلومات، راجع
/neuralnetworks/1.0/