इस पेज पर, न्यूरल नेटवर्क एपीआई (एनएनएपीआई) को लागू करने के तरीके के बारे में खास जानकारी दी गई है
ड्राइवर. ज़्यादा जानकारी के लिए, एचएएल की परिभाषा में मौजूद दस्तावेज़ देखें
इसमें फ़ाइलें
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 बेंचमार्क को देखा जा सकता है:
platform/test/mlts/benchmark
(मानदंड ऐप्लिकेशन)platform/test/mlts/models
(मॉडल और डेटासेट)
मॉडल और डेटासेट
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 का इस्तेमाल करना
एमएलटीएस का इस्तेमाल करने के लिए:
- टारगेट किए गए डिवाइस को अपने वर्कस्टेशन से कनेक्ट करें और पक्का करें कि यह
इनसे संपर्क किया जा सकता है
adb.
टारगेट डिवाइस
ANDROID_SERIAL
को एक्सपोर्ट करें एक से ज़्यादा डिवाइस कनेक्ट होने पर, एनवायरमेंट वैरिएबल. 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/
.