برامج تشغيل واجهة برمجة تطبيقات الشبكات العصبونية

توفر هذه الصفحة نظرة عامة حول كيفية تنفيذ واجهة برمجة تطبيقات الشبكات العصبية (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:

النماذج ومجموعات البيانات

يستخدم معيار 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

استخدام ميزة "المقاطع الصوتية بعدّة لغات"

لاستخدام ميزة "المقاطع الصوتية بعدّة لغات":

  1. عليك توصيل جهاز مستهدَف بمحطة العمل الخاصة بك والتأكّد من أنّه يمكن الوصول إليه من خلال adb. تصدير الجهاز المستهدَف ANDROID_SERIAL متغير البيئة إذا تم توصيل أكثر من جهاز واحد.
  2. 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/