न्यूरल नेटवर्क एपीआई ड्राइवर

इस पेज पर, न्यूरल नेटवर्क एपीआई (एनएनएपीआई) को लागू करने के तरीके के बारे में खास जानकारी दी गई है ड्राइवर. ज़्यादा जानकारी के लिए, एचएएल की परिभाषा में मौजूद दस्तावेज़ देखें इसमें फ़ाइलें hardware/interfaces/neuralnetworks. सैंपल ड्राइवर को लागू करने की सेटिंग frameworks/ml/nn/driver/sample.

Neural Networks API के बारे में ज़्यादा जानकारी के लिए, यहां देखें न्यूरल नेटवर्क एपीआई.

न्यूरल नेटवर्क एचएएल

न्यूरल नेटवर्क्स (एनएन) एचएएल अलग-अलग डिवाइसों की ऐब्स्ट्रैक्ट जानकारी देता है, जैसे, ग्राफ़िक्स प्रोसेसिंग यूनिट (जीपीयू) और डिजिटल सिग्नल प्रोसेसर (डीएसपी), जो किसी प्रॉडक्ट (जैसे कि फ़ोन या टैबलेट) में हों. इन वजहों से काम करने वाले डिवाइस NN HAL के अनुरूप होने चाहिए. इंटरफ़ेस की जानकारी एचएएल में दी गई है में परिभाषा फ़ाइलें hardware/interfaces/neuralnetworks.

फ़्रेमवर्क और ड्राइवर के बीच इंटरफ़ेस के सामान्य फ़्लो को दिखाया गया है पहली इमेज में दिखाया गया है.

न्यूरल नेटवर्क फ़्लो

पहला डायग्राम. न्यूरल नेटवर्क फ़्लो

प्रोसेस शुरू करना

शुरू करने के दौरान, फ़्रेमवर्क इसकी क्षमताओं के लिए ड्राइवर से क्वेरी करता है. IDevice::getCapabilities_1_3. @1.3::Capabilities स्ट्रक्चर में सभी तरह का डेटा और वेक्टर का इस्तेमाल करके आसानी से न मिलने वाली परफ़ॉर्मेंस को दिखाता है.

यह तय करने के लिए कि उपलब्ध डिवाइसों के हिसाब से कंप्यूटेशन को कैसे बांटा जाए, फ़्रेमवर्क इन सुविधाओं का इस्तेमाल करके, यह समझने में मदद करता है कि कितनी तेज़ी से और कितनी ऊर्जा कि हर ड्राइवर बेहतर तरीके से कैसे एक्ज़ीक्यूट कर सके. यह जानकारी देने के लिए, एक्ज़ीक्यूशन के आधार पर ड्राइवर को स्टैंडर्ड परफ़ॉर्मेंस नंबर देने होंगे के हिसाब से काम करते हैं.

वे वैल्यू तय करने के लिए जिन्हें ड्राइवर दिखाता है IDevice::getCapabilities_1_3, NNAPI बेंचमार्क ऐप्लिकेशन का इस्तेमाल करके, परफ़ॉर्मेंस को बेहतर बनाने के लिए किया जा सकता है. MobileNet v1 और v2, asr_float, और 32-बिट की परफ़ॉर्मेंस को मेज़र करने के लिए, tts_float मॉडल का सुझाव दिया जाता है फ़्लोटिंग पॉइंट वैल्यू और MobileNet v1 और v2 के क्वांटाइज़ किए गए मॉडल 8-बिट क्वांटाइज़्ड वैल्यू के लिए इसका सुझाव दिया जाता है. ज़्यादा जानकारी के लिए, यह देखें Android मशीन लर्निंग टेस्ट सुइट.

Android 9 और उससे पहले वाले वर्शन के Capabilities स्ट्रक्चर में ड्राइवर की परफ़ॉर्मेंस शामिल है सिर्फ़ फ़्लोटिंग पॉइंट और क्वांटाइज़्ड टेंसर के लिए जानकारी दी जाती है. इसमें स्केलर डेटा टाइप का इस्तेमाल करता है.

शुरू करने की प्रोसेस के तहत, फ़्रेमवर्क ज़्यादा जानकारी के लिए क्वेरी कर सकता है, इसका उपयोग कर रहा है IDevice::getType, IDevice::getVersionString IDevice:getSupportedExtensions, और IDevice::getNumberOfCacheFilesNeeded.

प्रॉडक्ट को फिर से चालू करने पर, फ़्रेमवर्क में इस दिए गए विकल्प का इस्तेमाल करें. या फिर, किसी ऐप्लिकेशन पर उस ड्राइवर का उपयोग करने से प्रदर्शन में कमी या गलत व्यवहार प्रदर्शित हो सकता है.

कंपाइलेशन

फ़्रेमवर्क यह तय करता है कि किसी है. Android 10 में, ऐप्लिकेशन और उन डिवाइसों की जानकारी दें जिसकी मदद से फ़्रेमवर्क चुनता है. ज़्यादा जानकारी के लिए, यह देखें डिवाइस खोजना और असाइनमेंट.

मॉडल कंपाइलेशन के समय, फ़्रेमवर्क हर उम्मीदवार को मॉडल भेजता है कॉल करके ड्राइवर को IDevice::getSupportedOperations_1_3. हर ड्राइवर बूलियन का कलेक्शन दिखाता है, जिससे पता चलता है कि मॉडल की कार्रवाइयां समर्थित हैं. ड्राइवर तय कर सकता है कि वह नहीं किसी कार्रवाई का कई कारणों से समर्थन किया जाता है. उदाहरण के लिए:

  • ड्राइवर, डेटा टाइप के साथ काम नहीं करता.
  • ड्राइवर सिर्फ़ खास इनपुट पैरामीटर वाले ऑपरेशन के साथ काम करता है. इसके लिए उदाहरण के लिए, ड्राइवर 3x3 और 5x5 के साथ काम कर सकता है, लेकिन 7x7 कन्वर्ज़न के साथ नहीं कार्रवाइयां.
  • ड्राइवर की मेमोरी में कमी है. यह इसे बड़े लेवल पर हैंडल करने से रोकती है ग्राफ़ या इनपुट शामिल करें.

कंपाइलेशन के दौरान, मॉडल के इनपुट, आउटपुट, और इंटरनल ऑपरेंड, जैसे कि इसमें बताया गया है 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 या उसके बाद के ड्राइवर के लिए, जब अनुरोध पूरा हुआ, गड़बड़ी की स्थिति, आउटपुट का आकार, और समय की जानकारी दिखती है ज़रूरी है. एक्ज़ीक्यूशन के दौरान, मॉडल के आउटपुट या इंटरनल ऑपरेंड से जिनके डाइमेंशन की जानकारी नहीं है या रैंक की जानकारी नहीं है. जब कम से कम एक आउटपुट हो ऑपरेंड में एक अज्ञात आयाम या रैंक है, ड्राइवर को वापस करना होगा आउटपुट जानकारी को डाइनैमिक रूप से बड़ा किया जाता है.

NN HAL 1.1 या उससे पहले के वर्शन वाले ड्राइवर के लिए, सिर्फ़ गड़बड़ी की स्थिति तब दिखती है, जब अनुरोध पूरा हो गया. इनपुट और आउटपुट ऑपरेंड के डाइमेंशन पूरी तरह से होने चाहिए निष्पादन सफलतापूर्वक पूरा करने के लिए दर्ज किया गया. आंतरिक ऑपरेंड यह कर सकते हैं एक या उससे ज़्यादा अज्ञात डाइमेंशन हैं, लेकिन उनकी रैंक तय होनी चाहिए.

एक से ज़्यादा ड्राइवर के लिए बनाए गए उपयोगकर्ता अनुरोधों के लिए, फ़्रेमवर्क इन कामों के लिए ज़िम्मेदार होता है इंटरमीडिएट मेमोरी रिज़र्व करना और हर ड्राइवर को कॉल क्रम से लगाना.

एक ही विज्ञापन के साथ एक साथ कई अनुरोध किए जा सकते हैं @1.3::IPreparedModel. ड्राइवर, अनुरोधों को साथ-साथ एक्ज़ीक्यूट कर सकता है या उन्हें क्रम के हिसाब से एक्ज़ीक्यूशन कर सकता है.

फ़्रेमवर्क में, ड्राइवर से एक से ज़्यादा तैयार मॉडल रखने के लिए कहा जा सकता है. इसके लिए उदाहरण के लिए, मॉडल m1 तैयार करें, m2 तैयार करें, m1 पर अनुरोध r1 लागू करें, लागू करें m2 पर r2, m1 पर r3, m2 पर r4 एक्ज़ीक्यूट करें, रिलीज़ करें (इसमें बताया गया है क्लीनअप करें) 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 को लौटाया गया.

कंट्रोल फ़्लो

Android 11 या उसके बाद के वर्शन वाले डिवाइसों के लिए, NNAPI इसमें दो कंट्रोल फ़्लो कार्रवाइयां, IF और WHILE शामिल हैं, जो अन्य मॉडल लेते हैं आर्ग्युमेंट के तौर पर इस्तेमाल करें और उन्हें शर्तों के हिसाब से (IF) या बार-बार (WHILE) एक्ज़ीक्यूट करें. इसके लिए इसे लागू करने के तरीके की ज़्यादा जानकारी के लिए, यह देखें कंट्रोल फ़्लो.

सेवा की क्वालिटी

Android 11 के लिए, एनएनएपीआई में सेवा (QoS) की मदद से, ऐप्लिकेशन को यह बताने की अनुमति देता है कि वह किस तरह की सेवाएं देता है मॉडल, मॉडल को तैयार होने में लगने वाला ज़्यादा से ज़्यादा समय, और निष्पादन पूरा होने में लगने वाला ज़्यादा से ज़्यादा समय. इसके लिए ज़्यादा जानकारी के लिए, देखें सेवा की क्वालिटी.

क्लीनअप करें

जब किसी ऐप्लिकेशन में पहले से तैयार मॉडल का इस्तेमाल किया जाता है, तो फ़्रेमवर्क रिलीज़ हो जाता है @1.3::IPreparedModel ऑब्जेक्ट है. जब IPreparedModel ऑब्जेक्ट का रेफ़रंस नहीं दिया जाता है, तो यह उसे ड्राइवर सेवा में अपने आप नष्ट कर दिया गया जिसने इसे बनाया था. मॉडल के हिसाब से ड्राइवर के इस्तेमाल की प्रोसेस में, संसाधनों का फिर से दावा किया जा सकता है डिस्ट्रक्टर. अगर ड्राइवर सेवा चाहती है कि IPreparedModel ऑब्जेक्ट हो क्लाइंट को ज़रूरत न होने पर अपने-आप खत्म हो जाता है, यह होल्ड नहीं होना चाहिए IPreparedeModel ऑब्जेक्ट के बाद, IPreparedModel ऑब्जेक्ट का कोई रेफ़रंस के ज़रिए वापस लाया गया है IPreparedModelCallback::notify_1_3.

सीपीयू का इस्तेमाल

ड्राइवर से उम्मीद की जाती है कि वे कंप्यूटेशन (कंप्यूटेशन) सेट अप करने के लिए, सीपीयू का इस्तेमाल करेंगे. ड्राइवर को यह नहीं करना चाहिए ग्राफ़ कंप्यूटेशन (हिसाब लगाना) करने के लिए सीपीयू का इस्तेमाल करते हैं, क्योंकि यह काम का सही बंटवारा कर पाने की फ़्रेमवर्क की क्षमता. ड्राइवर को शिकायत करनी चाहिए ऐसे हिस्से जिन्हें वह फ़्रेमवर्क को हैंडल नहीं कर सकता और फ़्रेमवर्क को आराम.

यह फ़्रेमवर्क, एनएनएपीआई से जुड़ी सभी कार्रवाइयों के लिए सीपीयू इस्तेमाल करने की सुविधा देता है वेंडर-तय की गई कार्रवाइयां. ज़्यादा जानकारी के लिए, यह देखें वेंडर एक्सटेंशन.

कॉन्टेंट बनाने Android 10 में लॉन्च की गई सुविधाएं (एपीआई लेवल 29) सीटीएस और वीटीएस टेस्ट की पुष्टि करने के लिए, सिर्फ़ रेफ़रंस सीपीयू का इस्तेमाल करें सही हैं. मोबाइल मशीन लर्निंग में, ऑप्टिमाइज़ किए गए तरीकों को शामिल करने के तरीके एनएनएपीआई सीपीयू के बजाय फ़्रेमवर्क का इस्तेमाल किया जाता है.

यूटिलिटी फ़ंक्शन

NNAPI कोड बेस में ऐसे यूटिलिटी फ़ंक्शन शामिल हैं जिनका इस्तेमाल ड्राइवर कर सकता है सेवाओं.

कॉन्टेंट बनाने frameworks/ml/nn/common/include/Utils.h फ़ाइल में अलग-अलग तरह के यूटिलिटी फ़ंक्शन हैं. उदाहरण के लिए, ऐसे फ़ंक्शन जिनका इस्तेमाल लॉगिंग और NN HAL वर्शन के बीच कन्वर्ट करने के लिए इस्तेमाल किया जाता है.

  • VLogging: VLOG, Android के LOG के आस-पास मौजूद एक रैपर मैक्रो है जो सिर्फ़ अगर debug.nn.vlog में सही टैग सेट किया गया है, तो मैसेज लॉग करता है प्रॉपर्टी. initVLogMask() VLOG पर किए जाने वाले किसी भी कॉल से पहले कॉल किया जाना चाहिए. VLOG_IS_ON मैक्रो इसका इस्तेमाल यह जांचने के लिए किया जाता है कि VLOG अभी चालू है या नहीं, जिससे मुश्किल लॉगिंग की सुविधा चालू होती है कोड की ज़रूरत न होने पर, इसे स्किप कर दिया जाता है. प्रॉपर्टी की वैल्यू यह होनी चाहिए इनमें से एक:

    • एक खाली स्ट्रिंग, जिससे पता चलता है कि डेटा को लॉग करने की ज़रूरत नहीं है.
    • 1 या all टोकन, जिससे पता चलता है कि अब आपको सभी डेटा लॉग करने की ज़रूरत है.
    • स्पेस, कॉमा या कोलन से अलग किए गए टैग की सूची. इससे पता चलता है कि कौनसी लॉगिंग की जानी है. टैग compilation हैं, cpuexe, driver, execution, manager, और model.
  • compliantWithV1_*: अगर NN HAL ऑब्जेक्ट को बदला जा सकता है, तो true वैल्यू मिलती है अलग-अलग एचएएल वर्शन के लिए इस्तेमाल किया जा सकता है. इसके लिए उदाहरण के लिए, V1_2::Model पर compliantWithV1_0 को कॉल करने से 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 ऑब्जेक्ट मान्य है, इसकी पुष्टि करने वाले यूटिलिटी फ़ंक्शन मौजूद हैं एचएएल वर्शन की शर्तों के मुताबिक है.

  • validate*: अगर NN HAL ऑब्जेक्ट मान्य है, तो true वैल्यू मिलती है एचएएल वर्शन की शर्तों के मुताबिक है. OEM के टाइप और एक्सटेंशन के टाइप पुष्टि नहीं हुई है. उदाहरण के लिए, validateModel, false वैल्यू दिखाता है, अगर मॉडल में एक ऐसा ऑपरेशन शामिल है जो ऐसे ऑपरेंड इंडेक्स का संदर्भ देता है जो मौजूद है या कोई ऐसी कार्रवाई है जो उस HAL वर्शन पर काम नहीं करती है.

कॉन्टेंट बनाने frameworks/ml/nn/common/include/Tracing.h फ़ाइल में मैक्रो शामिल हैं, जो जोड़ने की प्रक्रिया को आसान बनाते हैं न्यूरल नेटवर्क कोड को सिस्टम के सिस्टम की जानकारी. उदाहरण के लिए, NNTRACE_* ड्राइवर का सैंपल.

कॉन्टेंट बनाने frameworks/ml/nn/common/include/GraphDump.h फ़ाइल में Model के कॉन्टेंट को ग्राफ़िकल में डंप करने के लिए यूटिलिटी फ़ंक्शन मौजूद है फ़ॉर्म का इस्तेमाल करें.

  • graphDump: ग्राफ़विज़ में मॉडल का निरूपण लिखता है (.dot) फ़ॉर्मैट को स्ट्रीम (अगर दिया गया हो) या Logcat (अगर दिया गया हो) के लिए फ़ॉर्मैट कोई स्ट्रीम नहीं दी गई है).

पुष्टि करें

एनएनएपीआई को लागू करने की जांच करने के लिए, इसमें शामिल वीटीएस और सीटीएस टेस्ट का इस्तेमाल करें Android फ़्रेमवर्क पर आधारित है. VTS, आपके ड्राइवर को सीधे तौर पर कसरत करता है (इसके लिए, फ़्रेमवर्क के ज़रिए, CTS का इस्तेमाल सीधे तौर पर नहीं होता है. ये प्रत्येक API पद्धति का परीक्षण करें और सत्यापित करें कि ड्राइवर सही तरीके से काम करते हैं और ऐसे नतीजे देते हैं जो सटीक होने की शर्तों को पूरा करते हैं.

एनएनएपीआई के लिए सीटीएस और वीटीएस में सटीक होने से जुड़ी ज़रूरी शर्तें यहां दी गई हैं:

  • फ़्लोटिंग-पॉइंट: abs(उम्मीद - असल) <= atol + rtol * abs(उम्मीद के मुताबिक); कहां:

    • fp32 के लिए, atol = 1e-5f, rtol = 5.0f * 1.1920928955078125e-7
    • fp16 के लिए, atol = rtol = 5.0f * 0.0009765625f
  • संख्या में बताया गया: एक-एक करके (mobilenet_quantized को छोड़कर, जो तीन से ज़्यादा है)

  • बूलियन: एग्ज़ैक्ट मैच

सीटीएस की मदद से, एनएनएपीआई को एक तरह से टेस्ट किया जा सकता है. इसके लिए, तय स्यूडोरैंडम ग्राफ़ बनाए जा सकते हैं इसका इस्तेमाल, हर ड्राइवर से मिलने वाले एक्ज़ीक्यूशन के नतीजों की तुलना NNAPI रेफ़रंस को लागू करना. NN HAL 1.2 या उसके बाद के वर्शन वाले ड्राइवरों के लिए, अगर परिणाम शुद्धता मानदंड से मेल नहीं खाते हैं, CTS एक गड़बड़ी की रिपोर्ट करता है और एक डीबग करने के लिए /data/local/tmp के तहत असफल मॉडल की खास जानकारी फ़ाइल. सटीक होने की शर्तों के बारे में ज़्यादा जानकारी के लिए, देखें TestRandomGraph.cpp और TestHarness.h.

फ़ज़ टेस्टिंग

फ़ज़ टेस्टिंग का मकसद क्रैश, दावे, मेमोरी से जुड़े उल्लंघन, या टेस्ट के तहत कोड में सामान्य अनिर्धारित व्यवहार, जैसे कुछ भी अनजान इनपुट शामिल थे. NNAPI फ़ज़ टेस्टिंग के लिए, Android libFoz हुआ, जो कि फ़ज़िंग में कुशल होते हैं, क्योंकि वे पिछले टेस्ट केस की लाइन कवरेज का इस्तेमाल करके नए रैंडम इनपुट जनरेट किए जा सकते हैं. उदाहरण के लिए, libFazizer ऐसे टेस्ट केस का पक्ष लेता है जो को भी शामिल किया जा सकता है. इससे टेस्ट में लगने वाले समय को काफ़ी कम किया जा सकता है समस्या वाला कोड.

अपने ड्राइवर को लागू करने की पुष्टि करने के लिए, फ़ज़ टेस्टिंग की जा सकती है. इसके लिए, बदलाव करें frameworks/ml/nn/runtime/test/android_fuzzing/DriverFuzzTest.cpp AOSP में मिली libneuralnetworks_driver_fuzzer टेस्ट यूटिलिटी में आपका ड्राइवर कोड. NNAPI फ़ज़ टेस्टिंग के बारे में ज़्यादा जानकारी के लिए, यहां देखें frameworks/ml/nn/runtime/test/android_fuzzing/README.md.

सुरक्षा

ऐप्लिकेशन की प्रोसेस, सीधे तौर पर ड्राइवर की प्रोसेस से कम्यूनिकेट करती हैं, ड्राइवरों को उन्हें मिलने वाले कॉल के आर्ग्युमेंट की पुष्टि करनी होगी. यह पुष्टि की पुष्टि वीटीएस ने की है. पुष्टि करने वाला कोड frameworks/ml/nn/common/include/ValidateHal.h.

ड्राइवर को यह भी पक्का करना चाहिए कि ऐप्लिकेशन, अन्य ऐप्लिकेशन के काम में रुकावट न डालें एक ही डिवाइस का इस्तेमाल करते समय ऐप्लिकेशन.

Android मशीन लर्निंग टेस्ट सुइट

Android मशीन लर्निंग टेस्ट सुइट (एमएलटीएस), एक NNAPI बेंचमार्क है. यह इसमें शामिल है वेंडर के डिवाइसों पर असल मॉडल के सटीक होने की पुष्टि करने के लिए सीटीएस और वीटीएस. कॉन्टेंट बनाने मानदंड, इंतज़ार के समय और सटीक होने का आकलन करता है और ड्राइवर की तुलना करता है के साथ नतीजे इसका इस्तेमाल करके TF Lite, जो सीपीयू पर चल रहा हो, एक ही मॉडल और डेटासेट के लिए इस्तेमाल किया जा सकता है. इससे यह पक्का होता है कि ड्राइवर की सटीक जानकारी CPU संदर्भ लागू करने के तरीके से भी बदतर है.

Android प्लैटफ़ॉर्म के डेवलपर, इंतज़ार के समय और सटीक होने का आकलन करने के लिए एमएलटीएस का भी इस्तेमाल करते हैं अच्छी बात है.

एओएसपी के दो प्रोजेक्ट में, NNAPI बेंचमार्क को देखा जा सकता है:

मॉडल और डेटासेट

NNAPI बेंचमार्क इन मॉडल और डेटासेट का इस्तेमाल करता है.

  • MobileNetV1 फ़्लोट और u8 को अलग-अलग साइज़ में मापा जाता है. यह ओपन इमेज डेटासेट v4 का एक छोटा सबसेट (1,500 इमेज).
  • MobileNetV2 फ़्लोट और u8 को अलग-अलग साइज़ में मापा जाता है. यह ओपन इमेज डेटासेट v4 का एक छोटा सबसेट (1,500 इमेज).
  • लिखाई को बोली में बदलने के लिए, लॉन्ग शॉर्ट टर्म मेमोरी (एलएसटीएम) पर आधारित अकूस्टिक मॉडल, इन्हें CMU आर्कटिक सेट के एक छोटे सबसेट पर चलाया जाता है.
  • बोली की अपने-आप पहचान करने के लिए एलएसटीएम पर आधारित अकूस्टिक मॉडल, जो यह LibriSpeech डेटासेट का एक छोटा सबसेट है.

ज़्यादा जानकारी के लिए, यह देखें platform/test/mlts/models.

स्ट्रेस टेस्टिंग

Android मशीन लर्निंग टेस्ट सुइट में क्रैश टेस्ट की सीरीज़ शामिल है, ताकि इस बात की पुष्टि करेगा कि कहीं ज़्यादा समय तक या किसी भी जगह पर, ड्राइवर की स्थिति में कोई बदलाव न हो के मामले में व्यवहार.

सभी क्रैश टेस्ट में ये सुविधाएं मिलती हैं:

  • हैंग का पता लगाना: अगर NNAPI क्लाइंट, जांच के दौरान हैंग हो जाता है, तो गड़बड़ी की वजह HANG और टेस्ट सुइट की वजह से, टेस्ट नहीं हो सका अगले टेस्ट पर जाता है.
  • NNAPI क्लाइंट क्रैश डिटेक्शन: टेस्ट, क्लाइंट क्रैश और टेस्ट में बचे रहते हैं CRASH गड़बड़ी की वजह से अस्वीकार किया गया.
  • ड्राइवर क्रैश का पता लगाने की सुविधा: जांच से ड्राइवर क्रैश का पता लगाया जा सकता है जिसकी वजह से NNAPI कॉल पर गड़बड़ी हो सकती है. ध्यान दें कि इसमें क्रैश हो सकते हैं ऐसी ड्राइवर प्रोसेस जिनकी वजह से NNAPI फ़ेल नहीं होता और टेस्ट भी नहीं होता से बचें. इस तरह की गड़बड़ी को ठीक करने के लिए, tail को चलाने का सुझाव दिया जाता है आदेश: सिस्टम लॉग पर ड्राइवर-संबंधी त्रुटियों या क्रैश के लिए आदेश.
  • सभी उपलब्ध ऐक्सेलरेटर को टारगेट करना: सभी उपलब्ध ऐक्सेलरेटर के हिसाब से टेस्ट किए जाते हैं उपलब्ध ड्राइवर की संख्या का कम से कम इस्तेमाल किया जा सकता है.

सभी क्रैश टेस्ट के ये चार संभावित नतीजे हो सकते हैं:

  • SUCCESS: स्क्रिप्ट चलाने की प्रोसेस बिना किसी गड़बड़ी के पूरी हो गई.
  • FAILURE: स्क्रिप्ट चलाने की प्रोसेस पूरी नहीं हो सकी. आम तौर पर, गड़बड़ी की वजह से ऐसा होता है जब मॉडल की जांच करना. इससे पता चलता है कि ड्राइवर को कंपाइल या एक्ज़ीक्यूट नहीं किया जा सका मॉडल.
  • HANG: जांच की प्रोसेस काम नहीं कर रही.
  • CRASH: परीक्षण प्रक्रिया क्रैश हो गई.

स्ट्रेस टेस्टिंग के बारे में ज़्यादा जानकारी और क्रैश टेस्ट की पूरी सूची के लिए, यहां देखें platform/test/mlts/benchmark/README.txt.

MLTS का इस्तेमाल करना

एमएलटीएस का इस्तेमाल करने के लिए:

  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.

न्यूरल नेटवर्क एचएएल वर्शन

इस सेक्शन में Android और न्यूरल दोनों की टेक्नोलॉजी में हुए बदलावों के बारे में बताया गया है नेटवर्क के एचएएल वर्शन.

Android 11

Android 11 में NN HAL 1.3 लॉन्च किया गया है, जिसमें जिसमें कुछ अहम बदलाव हुए हैं.

  • NNAPI में, साइन किए हुए 8-बिट क्वांटाइज़ेशन की सुविधा. यह जोड़ता है 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 तरीका, फ़्रेमवर्क को एसिंक्रोनस तरीके से एक्ज़ीक्यूशन करें. लागू करना देखें.
  • executeSynchronously, execute_1_2, के लिए MeasureTiming पैरामीटर, और बर्स्ट निष्पादन से यह तय होता है कि ड्राइवर को निष्पादन को मापना है या नहीं अवधि. नतीजे Timing स्ट्रक्चर में रिपोर्ट किए जाते हैं. यहां जाएं: समय.
  • उन निष्पादनों के लिए समर्थन जहां एक या ज़्यादा आउटपुट ऑपरेंड के पास अज्ञात है डाइमेंशन या रैंक. आउटपुट का आकार देखें.
  • वेंडर एक्सटेंशन के लिए सहायता, जो वेंडर के ज़रिए तय किए गए कलेक्शन होते हैं कार्रवाइयां और डेटा टाइप. ड्राइवर, इसके साथ काम करने वाले एक्सटेंशन की रिपोर्ट इनके ज़रिए देता है: IDevice::getSupportedExtensions तरीका. यहां जाएं: वेंडर एक्सटेंशन.
  • बर्स्ट ऑब्जेक्ट का इस्तेमाल करके बर्स्ट एक्ज़ीक्यूशन के सेट को कंट्रोल करने की क्षमता ऐप्लिकेशन और ड्राइवर के बीच संपर्क करने के लिए तेज़ मैसेज की सूची (एफ़एमक्यू) इससे इंतज़ार का समय कम हो जाता है. यहां जाएं: एक क्लिक में कई फ़ोटो (बर्स्ट) लागू और फटाफट मैसेज की सूची.
  • AHardwareBuffer के लिए यह सहायता, ड्राइवर को एक्ज़िक्यूशन करने की अनुमति देती है वह भी पुराने डेटा को कॉपी किए बिना. यहां जाएं: AHardwareBuffer.
  • समय को कम करने के लिए, कंपाइलेशन आर्टफ़ैक्ट को कैश मेमोरी में सेव करने की बेहतर सुविधा ऐप्लिकेशन के शुरू होने पर, कंपाइलेशन के लिए इस्तेमाल किया जाता है. यहां जाएं: कैश मेमोरी में सेव करना.

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 से अलग है और सॉफ़्टमैक्स और नॉर्मलाइज़ेशन ऑपरेशन
  • फैली हुई बातचीत के लिए सहायता
  • मिक्स क्वांटाइज़ेशन के साथ इनपुट के लिए सहायता ANEURALNETWORKS_CONCATENATION अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

नीचे दी गई सूची में वे कार्रवाइयां दिखाई गई हैं जिन्हें Android 10. फ़ुल टाइम बदलावों की जानकारी देखें, तो ऑपरेशन कोड को पढ़ें.

  • 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

Android 9

NN HAL 1.1 को Android 9 में लॉन्च किया गया है. इसमें, यहां दी गई खास जानकारी शामिल है बदलाव.

  • IDevice::prepareModel_1_1 में एक ExecutionPreference शामिल है पैरामीटर. ड्राइवर इसका इस्तेमाल अपनी तैयारी में बदलाव करने के लिए कर सकता है, क्योंकि ऐप्लिकेशन बैटरी बचाना चाहता है या मॉडल पर काम करेगा तेज़ी से कॉल करते हैं.
  • नौ नए ऑपरेशन जोड़े गए: BATCH_TO_SPACE_ND, DIV, MEAN, PAD, SPACE_TO_BATCH_ND, SQUEEZE, STRIDED_SLICE, SUB, TRANSPOSE.
  • ऐप्लिकेशन यह तय कर सकता है कि 32-बिट फ़्लोट कंप्यूटेशन को चलाया जा सकता है 16-बिट फ़्लोट रेंज और/या true के लिए Model.relaxComputationFloat32toFloat16. Capabilities स्ट्रक्ट में अतिरिक्त फ़ील्ड relaxedFloat32toFloat16Performance है, इसलिए ड्राइवर की सुरक्षा को लेकर, उसकी परफ़ॉर्मेंस को फ़्रेमवर्क में शामिल किया जा सके.

Android 8.1

शुरुआती Neural Networks HAL (1.0) को Android 8.1 में रिलीज़ किया गया था. ज़्यादा के लिए जानकारी, देखें /neuralnetworks/1.0/.