جودة الخدمة

بدءًا من Android 11 ، يقدم NNAPI جودة خدمة أفضل (QoS) من خلال السماح للتطبيق بالإشارة إلى الأولويات النسبية لنماذجه ، والحد الأقصى للوقت المتوقع لإعداد نموذج معين ، والحد الأقصى من الوقت المتوقع يتعين استكمال تنفيذ معين. علاوة على ذلك ، يقدم Android 11 قيمًا إضافية لخطأ NNAPI مما يمكّن الخدمة من الإشارة بشكل أكثر دقة إلى الخطأ الذي حدث عند حدوث عطل حتى يتمكن تطبيق العميل من الاستجابة والتعافي بشكل أفضل.

أفضلية

بالنسبة لنظام التشغيل Android 11 أو أعلى ، يتم إعداد النماذج مع إعطاء الأولوية في NN HAL 1.3. هذه الأولوية متعلقة بالنماذج المعدة الأخرى التي يمتلكها نفس التطبيق. يمكن أن تستخدم عمليات الإعدام ذات الأولوية الأعلى موارد حسابية أكثر من عمليات الإعدام ذات الأولوية الأقل ، ويمكن أن تمنع عمليات الإعدام ذات الأولوية الأقل أو تجويعها.

استدعاء NN HAL 1.3 الذي يتضمن Priority كوسيطة صريحة هو IDevice::prepareModel_1_3 . لاحظ أن IDevice::prepareModelFromCache_1_3 يتضمن ضمنيًا Priority في وسيطات ذاكرة التخزين المؤقت.

هناك العديد من الاستراتيجيات الممكنة لدعم الأولويات اعتمادًا على قدرات السائق والمُسرع. فيما يلي عدة استراتيجيات:

  • بالنسبة للسائقين الذين لديهم دعم أولوية مدمج ، انشر حقل Priority مباشرة إلى المسرع.
  • استخدم قائمة انتظار أولوية لكل تطبيق لدعم الأولويات المختلفة حتى قبل أن يصل التنفيذ إلى المسرع.
  • قم بإيقاف أو إلغاء النماذج ذات الأولوية المنخفضة التي يتم تنفيذها حاليًا لتحرير المسرع لتنفيذ النماذج ذات الأولوية العالية. قم بذلك إما عن طريق إدراج نقاط التحقق في النماذج ذات الأولوية المنخفضة التي ، عند الوصول إليها ، تستعلم عن علامة لتحديد ما إذا كان يجب إيقاف التنفيذ الحالي قبل الأوان أو عن طريق تقسيم النموذج إلى نماذج فرعية والاستعلام عن العلامة بين عمليات تنفيذ النموذج الفرعي. لاحظ أن استخدام نقاط التحقق أو النماذج الفرعية في النماذج المعدة ذات الأولوية يمكن أن يؤدي إلى زيادة حمل إضافي غير موجود للنماذج التي ليس لها أولوية في الإصدارات الأقل من NN HAL 1.3.

    • لدعم الإجراءات الاستباقية ، حافظ على سياق التنفيذ بما في ذلك العملية التالية أو النموذج الفرعي الذي سيتم تنفيذه وأي بيانات معامل وسيطة ذات صلة. استخدم سياق التنفيذ هذا لاستئناف التنفيذ في وقت لاحق.
    • الدعم الوقائي الكامل ليس ضروريًا ، لذلك لا داعي للاحتفاظ بسياق التنفيذ. نظرًا لأن عمليات تنفيذ طراز NNAPI حتمية ، يمكن إعادة تشغيل عمليات التنفيذ من البداية في وقت لاحق.

يمكّن Android الخدمات من التمييز بين تطبيقات الاتصال المختلفة من خلال استخدام AID (Android UID). يحتوي HIDL على آليات مضمنة لاسترداد UID الخاص بتطبيق الاستدعاء من خلال الطريقة ::android::hardware::IPCThreadState::getCallingUid . يمكن العثور على قائمة بمساعدات الإيدز في libcutils/include/cutils/android_filesystem_config.h .

المواعيد النهائية

بدءًا من Android 11 ، يمكن بدء إعداد النموذج وعمليات التنفيذ باستخدام وسيطة الموعد النهائي OptionalTimePoint . بالنسبة للسائقين الذين يمكنهم تقدير المدة التي تستغرقها المهمة ، فإن هذا الموعد النهائي يسمح للسائق بإجهاض المهمة قبل أن تبدأ إذا قدر السائق أنه لا يمكن إكمال المهمة قبل الموعد النهائي. وبالمثل ، يسمح الموعد النهائي للسائق بإجهاض مهمة جارية يقدر أنها لن تكتمل قبل الموعد النهائي. لا تجبر حجة الموعد النهائي السائق على إحباط مهمة إذا لم تكتمل المهمة بحلول الموعد النهائي أو إذا انقضى الموعد النهائي. يمكن استخدام وسيطة الموعد النهائي لتحرير موارد الحساب داخل برنامج التشغيل وإعادة التحكم إلى التطبيق بشكل أسرع مما هو ممكن بدون الموعد النهائي.

استدعاءات NN HAL 1.3 التي تتضمن المواعيد النهائية OptionalTimePoint كوسيطة هي:

  • IDevice::prepareModel_1_3
  • IDevice::prepareModelFromCache_1_3
  • IPreparedModel::execute_1_3
  • IPreparedModel::executeSynchronously_1_3
  • IPreparedModel::executeFenced

لمشاهدة تطبيق مرجعي لميزة الموعد النهائي لكل من الأساليب المذكورة أعلاه ، راجع برنامج تشغيل نموذج NNAPI في frameworks/ml/nn/driver/sample/SampleDriver.cpp .

رموز الخطأ

يشتمل Android 11 على أربع قيم لرموز الخطأ في NN HAL 1.3 لتحسين الإبلاغ عن الأخطاء ، مما يسمح للسائقين بإبلاغ حالتهم وتطبيقاتهم بشكل أفضل لاستردادها بشكل أكثر رشاقة. هذه هي قيم رمز الخطأ في ErrorStatus .

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

في Android 10 أو الإصدارات الأقدم ، يمكن أن يشير برنامج التشغيل فقط إلى حدوث فشل من خلال رمز الخطأ GENERAL_FAILURE . من Android 11 ، يمكن استخدام رمزي الخطأ MISSED_DEADLINE للإشارة إلى أنه تم إحباط حمل العمل بسبب الوصول إلى الموعد النهائي أو لأن برنامج التشغيل توقع أن عبء العمل لن يكتمل بحلول الموعد النهائي. يمكن استخدام رمزي الخطأ RESOURCE_EXHAUSTED للإشارة إلى أن المهمة فشلت بسبب قيود الموارد داخل برنامج التشغيل ، مثل عدم وجود ذاكرة كافية لبرنامج التشغيل للمكالمة.

يشير الإصدار TRANSIENT لكلا الخطأين إلى أن المشكلة مؤقتة ، وأن المكالمات المستقبلية لنفس المهمة قد تنجح بعد تأخير قصير. على سبيل المثال ، يجب إرجاع رمز الخطأ هذا عندما يكون برنامج التشغيل مشغولاً بعمل مسبق طويل الأمد أو كثيف الموارد ، ولكن المهمة الجديدة ستكتمل بنجاح إذا لم يكن برنامج التشغيل مشغولاً بالعمل السابق. يشير الإصدار PERSISTENT لكلا الخطأين إلى أنه من المتوقع دائمًا أن تفشل المكالمات المستقبلية لنفس المهمة. على سبيل المثال ، يجب إرجاع رمز الخطأ هذا عندما يقدر السائق أن المهمة لن تكتمل بحلول الموعد النهائي حتى في ظل ظروف مثالية ، أو أن النموذج كبير جدًا بطبيعته ويتجاوز موارد السائق.

تصديق

يتم اختبار جودة وظائف الخدمة في اختبارات NNAPI VTS ( VtsHalNeuralnetworksV1_3Target ). يتضمن ذلك مجموعة من الاختبارات للتحقق من الصحة ( TestGenerated/ValidationTest#Test/ ) للتأكد من أن السائق يرفض الأولويات غير الصالحة ومجموعة من الاختبارات تسمى DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) للتأكد من أن السائق يتعامل مع المواعيد النهائية بشكل صحيح.