डिवाइस ढूंढना और असाइन करना

Android 10 में, Neural Networks API (NNAPI) में ऐसी सुविधाएं जोड़ी गई हैं जिनकी मदद से, मशीन लर्निंग फ़्रेमवर्क लाइब्रेरी और ऐप्लिकेशन, उपलब्ध डिवाइसों के बारे में जानकारी पा सकते हैं. साथ ही, यह तय कर सकते हैं कि किसी मॉडल को किन डिवाइसों पर चलाया जाए. उपलब्ध डिवाइसों के बारे में जानकारी देने से, ऐप्लिकेशन को डिवाइस पर मौजूद ड्राइवर का सही वर्शन मिल जाता है. इससे, जानी-मानी इनकंपैटिबिलिटी से बचा जा सकता है. ऐप्लिकेशन को यह तय करने की सुविधा देकर कि किसी मॉडल के अलग-अलग सेक्शन को किन डिवाइसों पर चलाया जाए, ऐप्लिकेशन को उस प्रॉडक्ट के लिए ऑप्टिमाइज़ किया जा सकता है जिस पर उन्हें डिप्लॉय किया गया है.

NN HAL 1.2 को लागू करने के लिए, डिवाइस डिस्कवरी और असाइनमेंट की सुविधा ज़रूरी है.

लागू करना

NNAPI में डिवाइस डिस्कवरी और असाइनमेंट की सुविधाओं को लागू करने के लिए, getType और getVersionString को IDevice.hal में लागू करें. इससे, फ़्रेमवर्क को डिवाइस का टाइप और ड्राइवर का वर्शन मिल पाएगा.

हर डिवाइस के लिए, टाइप को इन कैटगरी में से किसी एक के तौर पर तय करें जैसा कि में बताया गया है DeviceType में types.hal.

  • OTHER: ऐसा डिवाइस जो किसी भी दूसरी कैटगरी में नहीं आता. इसमें हेटरोज़ीनस इंटरफ़ेस भी शामिल है. यह एक ऐसा IDevice इंटरफ़ेस है जो एक से ज़्यादा डिवाइसों को मैनेज करता है. ये डिवाइस अलग-अलग टाइप के हो सकते हैं. हेटरोज़ीनस इंटरफ़ेस वाले ड्राइवर को अलग-अलग IDevice इंटरफ़ेस भी दिखाने चाहिए. ये इंटरफ़ेस, अलग-अलग डिवाइसों से जुड़े होते हैं. इससे, कोई ऐप्लिकेशन उन डिवाइसों में से किसी को भी चुन सकता है.
  • CPU: सिंगल कोर या मल्टीकोर सीपीयू.
  • GPU: ऐसा जीपीयू जो NNAPI मॉडल चला सकता है. साथ ही, OpenGL ES और Vulkan जैसे ग्राफ़िक एपीआई को तेज़ कर सकता है.
  • ACCELERATOR: एक खास न्यूरल प्रोसेसिंग यूनिट (एनपीयू).

डिवाइस को लागू करने के वर्शन की स्ट्रिंग पाने के लिए, IDevice.hal में getVersionString को लागू करें. इस तरीके से, ऐसी स्ट्रिंग दिखनी चाहिए जिसे लोग आसानी से पढ़ सकें. स्ट्रिंग का फ़ॉर्मैट, वेंडर के हिसाब से अलग-अलग होता है. किसी ड्राइवर के हर नए वर्शन के लिए, वर्शन स्ट्रिंग अलग होनी चाहिए.

IDevice इंटरफ़ेस का नाम, {VENDOR}-{DEVICE_NAME} फ़ॉर्मैट में होना चाहिए.