بدءًا من 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.
- لدعم الاستبدال، يجب الحفاظ على سياق التنفيذ، بما في ذلك العملية التالية أو النموذج الفرعي الذي سيتم تنفيذه وأي بيانات وسيطة ذات صلة للم Operand. استخدِم سياق التنفيذ هذا ل استئناف التنفيذ في وقت لاحق.
- ليس من الضروري توفير دعم كامل للاقتطاع، لذا ليس من الضروري الاحتفاظ بسياق التنفيذ. بما أنّ عمليات تنفيذ نماذج NNAPI هي عمليات حتمية، يمكن إعادة تنفيذها من البداية في وقت لاحق.
يتيح نظام التشغيل Android للخدمات التفريق بين تطبيقات الاتصال المختلفة من خلال
استخدام معرّف AID (معرّف Android). تتضمّن 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
في الإصدار 10 من نظام التشغيل Android أو الإصدارات الأقدم، لا يمكن لبرنامج تشغيل الإشارة إلى حدوث خطأ إلا من خلال رمز الخطأ
GENERAL_FAILURE
. اعتبارًا من Android 11، يمكن استخدام رمزَي الخطأ MISSED_DEADLINE
للإشارة إلى أنّه تم إلغاء عملية التحميل
لأنّه تم بلوغ الموعد النهائي أو لأنّ برنامج التشغيل توقّع عدم اكتمال عملية التحميل
بحلول الموعد النهائي. يمكن استخدام رمزَي الخطأ RESOURCE_EXHAUSTED
للإشارة إلى تعذُّر تنفيذ المهمة بسبب قيود
الموارد في برنامج التشغيل، مثل عدم توفُّر ذاكرة كافية لبرنامج التشغيل للقيام
بالمكالمة.
يشير الإصدار TRANSIENT
من كلا الخطأَين إلى أنّ المشكلة مؤقتة،
وقد تنجح عمليات الاتصال المستقبلية بالمهمة نفسها بعد تأخير قصير. على سبيل المثال، من المفترض أن يتم عرض رمز الخطأ هذا عندما يكون برنامج التشغيل مشغولاً بأحد المهام السابقة التي تستغرق وقتًا طويلاً أو تستهلك موارد كثيرة، ولكن سيتم إكمال المهمة الجديدة بنجاح إذا لم يكن برنامج التشغيل مشغولاً بالمهمة السابقة. يشير PERSISTENT
الإصدار من كلا الخطأَين إلى أنّه من المتوقع دائمًا أن يؤدي
الاستدعاءات المستقبلية للمهمة نفسها إلى حدوث خطأ. على سبيل المثال، من المفترض أن يتم عرض رمز الخطأ هذا عندما يقدّر المعالج أنّه لن يتم إكمال المهمة بحلول الموعد النهائي حتى في ظل ظروف مثالية، أو أنّ النموذج كبير جدًا بطبيعته ويتجاوز موارد المعالج.
التحقُّق
يتم اختبار وظيفة جودة الخدمة في اختبارات فحص الأداء لواجهة برمجة التطبيقات NNAPI
(VtsHalNeuralnetworksV1_3Target
). ويشمل ذلك مجموعة من اختبارات التحقّق
(TestGenerated/ValidationTest#Test/
) لضمان رفض برنامج التشغيل للأولويات
غير الصالحة ومجموعة من الاختبارات التي تُسمى DeadlineTest
(TestGenerated/DeadlineTest#Test/
) لضمان معالجة برنامج التشغيل للمواعيد النهائية
بشكل صحيح.