सेवा की गुणवत्ता

एंड्रॉइड 11 से शुरू होकर, एनएनएपीआई एक ऐप को अपने मॉडलों की सापेक्ष प्राथमिकताओं, किसी दिए गए मॉडल को तैयार करने के लिए अपेक्षित अधिकतम समय और अपेक्षित अधिकतम समय को इंगित करने की अनुमति देकर सेवा की बेहतर गुणवत्ता (क्यूओएस) प्रदान करता है। किसी दिए गए निष्पादन को पूरा किया जाना है। इसके अलावा, एंड्रॉइड 11 अतिरिक्त एनएनएपीआई त्रुटि मान पेश करता है जो सेवा को अधिक सटीक रूप से इंगित करने में सक्षम बनाता है कि विफलता होने पर क्या गलत हुआ ताकि क्लाइंट ऐप बेहतर प्रतिक्रिया दे सके और पुनर्प्राप्त कर सके।

प्राथमिकता

एंड्रॉइड 11 या उच्चतर के लिए, मॉडल एनएन एचएएल 1.3 में प्राथमिकता के साथ तैयार किए जाते हैं। यह प्राथमिकता उसी ऐप के स्वामित्व वाले अन्य तैयार मॉडलों से संबंधित है। उच्च-प्राथमिकता वाले निष्पादन निम्न-प्राथमिकता वाले निष्पादनों की तुलना में अधिक गणना संसाधनों का उपयोग कर सकते हैं, और निम्न-प्राथमिकता वाले निष्पादनों को प्रीइम्प्ट या भूखा रख सकते हैं।

एनएन एचएएल 1.3 कॉल जिसमें स्पष्ट तर्क के रूप में Priority शामिल है IDevice::prepareModel_1_3 है। ध्यान दें कि IDevice::prepareModelFromCache_1_3 में कैश तर्कों में Priority शामिल है।

ड्राइवर और एक्सेलेरेटर की क्षमताओं के आधार पर प्राथमिकताओं का समर्थन करने के लिए कई संभावित रणनीतियाँ हैं। यहां कई रणनीतियाँ हैं:

  • उन ड्राइवरों के लिए जिनके पास अंतर्निहित प्राथमिकता समर्थन है, Priority फ़ील्ड को सीधे त्वरक पर प्रचारित करें।
  • निष्पादन के त्वरक तक पहुंचने से पहले ही विभिन्न प्राथमिकताओं का समर्थन करने के लिए प्रति-ऐप प्राथमिकता कतार का उपयोग करें।
  • उच्च-प्राथमिकता वाले मॉडल को निष्पादित करने के लिए त्वरक को मुक्त करने के लिए निष्पादित किए जा रहे कम-प्राथमिकता वाले मॉडल को रोकें या रद्द करें। ऐसा या तो कम-प्राथमिकता वाले मॉडलों में चेकपॉइंट्स डालकर करें, जो पहुंचने पर, यह निर्धारित करने के लिए ध्वज को क्वेरी करें कि क्या वर्तमान निष्पादन को समय से पहले रोका जाना चाहिए या मॉडल को सबमॉडल में विभाजित करके और सबमॉडल निष्पादन के बीच ध्वज को क्वेरी करके। ध्यान दें कि प्राथमिकता के साथ तैयार किए गए मॉडल में चेकपॉइंट या सबमॉडल का उपयोग अतिरिक्त ओवरहेड पेश कर सकता है जो एनएन एचएएल 1.3 से कम संस्करणों में प्राथमिकता के बिना मॉडल के लिए मौजूद नहीं है।

    • प्रीएम्प्शन का समर्थन करने के लिए, निष्पादित किए जाने वाले अगले ऑपरेशन या उप-मॉडल और किसी भी प्रासंगिक मध्यवर्ती ऑपरेंड डेटा सहित निष्पादन संदर्भ को संरक्षित करें। बाद में निष्पादन को फिर से शुरू करने के लिए इस निष्पादन संदर्भ का उपयोग करें।
    • पूर्ण प्रीएम्प्शन समर्थन आवश्यक नहीं है, इसलिए निष्पादन संदर्भ को संरक्षित करने की आवश्यकता नहीं है। क्योंकि एनएनएपीआई मॉडल निष्पादन नियतात्मक हैं, निष्पादन को बाद में शुरुआत से फिर से शुरू किया जा सकता है।

एंड्रॉइड एक एआईडी (एंड्रॉइड यूआईडी) के उपयोग के माध्यम से सेवाओं को विभिन्न कॉलिंग ऐप्स के बीच अंतर करने में सक्षम बनाता है। HIDL में ::android::hardware::IPCThreadState::getCallingUid विधि के माध्यम से कॉलिंग ऐप के UID को पुनः प्राप्त करने के लिए अंतर्निहित तंत्र हैं। AID की एक सूची libcutils/include/cutils/android_filesystem_config.h में पाई जा सकती है।

समय सीमा

एंड्रॉइड 11 से शुरू करके, मॉडल की तैयारी और निष्पादन को एक OptionalTimePoint समय सीमा तर्क के साथ लॉन्च किया जा सकता है। उन ड्राइवरों के लिए जो यह अनुमान लगा सकते हैं कि किसी कार्य में कितना समय लगेगा, यह समय सीमा ड्राइवर को कार्य शुरू होने से पहले रद्द करने की अनुमति देती है यदि ड्राइवर का अनुमान है कि कार्य समय सीमा से पहले पूरा नहीं किया जा सकता है। इसी तरह, समय सीमा ड्राइवर को चल रहे कार्य को रद्द करने की अनुमति देती है जिसके बारे में उसका अनुमान है कि समय सीमा से पहले पूरा नहीं किया जाएगा। यदि कार्य समय सीमा तक पूरा नहीं हुआ है या यदि समय सीमा समाप्त हो गई है तो समय सीमा तर्क ड्राइवर को कार्य रद्द करने के लिए मजबूर नहीं करता है। समय सीमा तर्क का उपयोग ड्राइवर के भीतर कंप्यूटिंग संसाधनों को मुक्त करने और समय सीमा के बिना संभव से अधिक तेज़ी से ऐप पर नियंत्रण वापस करने के लिए किया जा सकता है।

एनएन एचएएल 1.3 कॉल जिसमें एक तर्क के रूप में OptionalTimePoint समय सीमा शामिल है:

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

उपरोक्त प्रत्येक विधि के लिए समय सीमा सुविधा का संदर्भ कार्यान्वयन देखने के लिए, एनएनएपीआई नमूना ड्राइवर को frameworks/ml/nn/driver/sample/SampleDriver.cpp पर देखें।

त्रुटि कोड

एंड्रॉइड 11 में त्रुटि रिपोर्टिंग को बेहतर बनाने के लिए एनएन एचएएल 1.3 में चार त्रुटि कोड मान शामिल हैं, जिससे ड्राइवर अपनी स्थिति को बेहतर ढंग से संचारित कर सकते हैं और ऐप्स को अधिक शानदार ढंग से पुनर्प्राप्त करने की अनुमति मिलती है। ये ErrorStatus में त्रुटि कोड मान हैं।

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

एंड्रॉइड 10 या उससे पहले के संस्करण में, ड्राइवर केवल GENERAL_FAILURE त्रुटि कोड के माध्यम से विफलता का संकेत दे सकता है। एंड्रॉइड 11 से, दो MISSED_DEADLINE त्रुटि कोड का उपयोग यह इंगित करने के लिए किया जा सकता है कि कार्यभार समाप्त हो गया था क्योंकि समय सीमा समाप्त हो गई थी या क्योंकि ड्राइवर ने भविष्यवाणी की थी कि कार्यभार समय सीमा तक पूरा नहीं होगा। दो RESOURCE_EXHAUSTED त्रुटि कोड का उपयोग यह इंगित करने के लिए किया जा सकता है कि ड्राइवर के भीतर संसाधन सीमा के कारण कार्य विफल हुआ, जैसे कि ड्राइवर के पास कॉल के लिए पर्याप्त मेमोरी नहीं है।

दोनों त्रुटियों का TRANSIENT संस्करण इंगित करता है कि समस्या अस्थायी है, और उसी कार्य के लिए भविष्य की कॉल थोड़े विलंब के बाद सफल हो सकती हैं। उदाहरण के लिए, यह त्रुटि कोड तब लौटाया जाना चाहिए जब ड्राइवर पिछले लंबे समय से चल रहे या संसाधन-गहन कार्य में व्यस्त हो, लेकिन यदि ड्राइवर पिछले कार्य में व्यस्त नहीं था तो नया कार्य सफलतापूर्वक पूरा हो जाएगा। दोनों त्रुटियों का PERSISTENT संस्करण इंगित करता है कि समान कार्य के लिए भविष्य में कॉल हमेशा विफल होने की उम्मीद है। उदाहरण के लिए, यह त्रुटि कोड तब लौटाया जाना चाहिए जब ड्राइवर का अनुमान है कि कार्य सही परिस्थितियों में भी समय सीमा तक पूरा नहीं होगा, या मॉडल स्वाभाविक रूप से बहुत बड़ा है और ड्राइवर के संसाधनों से अधिक है।

मान्यकरण

सेवा कार्यक्षमता की गुणवत्ता का परीक्षण NNAPI VTS परीक्षणों ( VtsHalNeuralnetworksV1_3Target ) में किया जाता है। इसमें सत्यापन के लिए परीक्षणों का एक सेट ( TestGenerated/ValidationTest#Test/ ) शामिल है ताकि यह सुनिश्चित किया जा सके कि ड्राइवर अमान्य प्राथमिकताओं को अस्वीकार कर देता है और परीक्षणों का एक सेट जिसे DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) कहा जाता है ताकि यह सुनिश्चित किया जा सके कि ड्राइवर समय सीमा को सही ढंग से संभाल सके।