Android के लिए त्वरण सेवा (बीटा)

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

एंड्रॉइड के लिए एक्सेलेरेशन सेवा एक एपीआई है जो रनटाइम त्रुटि या सटीकता समस्याओं के जोखिम को कम करते हुए आपको किसी दिए गए उपयोगकर्ता डिवाइस और आपके .tflite मॉडल के लिए इष्टतम हार्डवेयर त्वरण कॉन्फ़िगरेशन चुनने में मदद करती है।

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

अपना मॉडल, डेटा नमूने और अपेक्षित परिणाम ("गोल्डन" इनपुट और आउटपुट) प्रदान करें और एक्सेलेरेशन सेवा आपको हार्डवेयर अनुशंसाएं प्रदान करने के लिए एक आंतरिक टीएफलाइट अनुमान बेंचमार्क चलाएगी।

छवि

एक्सेलेरेशन सेवा एंड्रॉइड के कस्टम एमएल स्टैक का हिस्सा है और Google Play सेवाओं में TensorFlow Lite के साथ काम करती है।

अपने प्रोजेक्ट में निर्भरताएँ जोड़ें

अपने एप्लिकेशन की बिल्ड.ग्रेडल फ़ाइल में निम्नलिखित निर्भरताएँ जोड़ें:

implementation  "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"

एक्सेलेरेशन सर्विस एपीआई Google Play Services में TensorFlow Lite के साथ काम करती है। यदि आप अभी तक Play Services के माध्यम से प्रदान किए गए TensorFlow Lite रनटाइम का उपयोग नहीं कर रहे हैं, तो आपको अपनी निर्भरता को अपडेट करने की आवश्यकता होगी।

एक्सेलेरेशन सर्विस एपीआई का उपयोग कैसे करें

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

छवि

त्वरण कॉन्फ़िगरेशन बनाएं

एक्सेलेरेशन कॉन्फ़िगरेशन हार्डवेयर कॉन्फ़िगरेशन का प्रतिनिधित्व है जिसे निष्पादन समय के दौरान प्रतिनिधियों में अनुवादित किया जाता है। एक्सेलेरेशन सेवा तब परीक्षण अनुमान लगाने के लिए आंतरिक रूप से इन कॉन्फ़िगरेशन का उपयोग करेगी।

फिलहाल त्वरण सेवा आपको GpuAccelerationConfig और CPU अनुमान ( CpuAccelerationConfig के साथ) के साथ GPU कॉन्फ़िगरेशन (निष्पादन समय के दौरान GPU प्रतिनिधि में परिवर्तित) का मूल्यांकन करने में सक्षम बनाती है। हम भविष्य में अन्य हार्डवेयर तक पहुँचने के लिए अधिक प्रतिनिधियों का समर्थन करने पर काम कर रहे हैं।

जीपीयू त्वरण विन्यास

निम्नानुसार एक GPU त्वरण कॉन्फ़िगरेशन बनाएं:

AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
  .setEnableQuantizedInference(false)
  .build();

आपको यह निर्दिष्ट करना होगा कि आपका मॉडल setEnableQuantizedInference() के साथ परिमाणीकरण का उपयोग कर रहा है या नहीं।

सीपीयू त्वरण विन्यास

सीपीयू त्वरण इस प्रकार बनाएं:

AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
  .setNumThreads(2)
  .build();

सीपीयू अनुमान का मूल्यांकन करने के लिए आप जिस थ्रेड का उपयोग करना चाहते हैं उसकी संख्या निर्धारित करने के लिए setNumThreads() विधि का उपयोग करें।

सत्यापन कॉन्फ़िगरेशन बनाएं

सत्यापन कॉन्फ़िगरेशन आपको यह परिभाषित करने में सक्षम बनाता है कि आप एक्सेलेरेशन सेवा से अनुमानों का मूल्यांकन कैसे करना चाहते हैं। आप इन्हें पास करने के लिए उपयोग करेंगे:

  • इनपुट नमूने,
  • अपेक्षित आउटपुट,
  • सटीकता सत्यापन तर्क।

उन इनपुट नमूनों को प्रदान करना सुनिश्चित करें जिनके लिए आप अपने मॉडल के अच्छे प्रदर्शन की उम्मीद करते हैं (जिन्हें "गोल्डन" नमूने भी कहा जाता है)।

CustomValidationConfig.Builder के साथ निम्नानुसार एक ValidationConfig बनाएं:

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenOutputs(outputBuffer)
   .setAccuracyValidator(new MyCustomAccuracyValidator())
   .build();

setBatchSize() के साथ सुनहरे नमूनों की संख्या निर्दिष्ट करें। setGoldenInputs() उपयोग करके अपने सुनहरे नमूनों के इनपुट पास करें। setGoldenOutputs() के साथ पारित इनपुट के लिए अपेक्षित आउटपुट प्रदान करें।

आप setInferenceTimeoutMillis() (डिफ़ॉल्ट रूप से 5000 एमएस) के साथ अधिकतम अनुमान समय परिभाषित कर सकते हैं। यदि अनुमान में आपके द्वारा परिभाषित समय से अधिक समय लगता है, तो कॉन्फ़िगरेशन अस्वीकार कर दिया जाएगा।

वैकल्पिक रूप से, आप निम्नानुसार एक कस्टम AccuracyValidator भी बना सकते हैं:

class MyCustomAccuracyValidator implements AccuracyValidator {
   boolean validate(
      BenchmarkResult benchmarkResult,
      ByteBuffer[] goldenOutput) {
        for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
            if (!goldenOutputs[i]
               .equals(benchmarkResult.actualOutput().get(i).getValue())) {
               return false;
            }
         }
         return true;

   }
}

एक सत्यापन तर्क को परिभाषित करना सुनिश्चित करें जो आपके उपयोग के मामले में काम करता है।

ध्यान दें कि यदि सत्यापन डेटा पहले से ही आपके मॉडल में एम्बेडेड है, तो आप EmbeddedValidationConfig उपयोग कर सकते हैं।

सत्यापन आउटपुट उत्पन्न करें

गोल्डन आउटपुट वैकल्पिक हैं और जब तक आप गोल्डन इनपुट प्रदान करते हैं, एक्सेलेरेशन सेवा आंतरिक रूप से गोल्डन आउटपुट उत्पन्न कर सकती है। आप setGoldenConfig() पर कॉल करके इन गोल्डन आउटपुट को उत्पन्न करने के लिए उपयोग किए जाने वाले त्वरण कॉन्फ़िगरेशन को भी परिभाषित कर सकते हैं:

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenConfig(customCpuAccelerationConfig)
   [...]
   .build();

त्वरण कॉन्फ़िगरेशन मान्य करें

एक बार जब आप एक त्वरण कॉन्फ़िगरेशन और एक सत्यापन कॉन्फ़िगरेशन बना लेते हैं तो आप अपने मॉडल के लिए उनका मूल्यांकन कर सकते हैं।

सुनिश्चित करें कि Play Services रनटाइम के साथ TensorFlow Lite ठीक से आरंभ किया गया है और GPU प्रतिनिधि डिवाइस के लिए उपलब्ध है:

TfLiteGpu.isGpuDelegateAvailable(context)
   .onSuccessTask(gpuAvailable -> TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(gpuAvailable)
        .build()
      )
   );

AccelerationService.create() पर कॉल करके AccelerationService इंस्टेंट करें।

फिर आप validateConfig() पर कॉल करके अपने मॉडल के लिए अपने त्वरण कॉन्फ़िगरेशन को सत्यापित कर सकते हैं:

InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
   .validateConfig(model, accelerationConfig, validationConfig)
   .addOnSuccessListener(validatedConfig -> {
      if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
         interpreterOptions.setAccelerationConfig(validatedConfig);
         interpreter = InterpreterApi.create(model, interpreterOptions);
});

आप validateConfigs() कॉल करके और एक Iterable<AccelerationConfig> ऑब्जेक्ट को पैरामीटर के रूप में पास करके कई कॉन्फ़िगरेशन को सत्यापित भी कर सकते हैं।

validateConfig() Google Play सेवाओं टास्क एपीआई से एक Task< ValidatedAccelerationConfigResult > लौटाएगा जो एसिंक्रोनस कार्यों को सक्षम बनाता है।
सत्यापन कॉल से परिणाम प्राप्त करने के लिए, एक addOnSuccessListener() कॉलबैक जोड़ें।

अपने दुभाषिया में मान्य कॉन्फ़िगरेशन का उपयोग करें

यह जांचने के बाद कि कॉलबैक में लौटाया गया ValidatedAccelerationConfigResult वैध है या नहीं, आप अपने दुभाषिया के लिए interpreterOptions.setAccelerationConfig() कॉल करने के लिए मान्य कॉन्फ़िगरेशन को एक्सेलेरेशन कॉन्फ़िगरेशन के रूप में सेट कर सकते हैं।

कॉन्फ़िगरेशन कैशिंग

आपके मॉडल के लिए इष्टतम त्वरण कॉन्फ़िगरेशन डिवाइस पर बदलने की संभावना नहीं है। इसलिए एक बार जब आप एक संतोषजनक त्वरण कॉन्फ़िगरेशन प्राप्त कर लेते हैं, तो आपको इसे डिवाइस पर संग्रहीत करना चाहिए और अपने एप्लिकेशन को इसे पुनः प्राप्त करने देना चाहिए और किसी अन्य सत्यापन को चलाने के बजाय निम्नलिखित सत्रों के दौरान अपने InterpreterOptions बनाने के लिए इसका उपयोग करना चाहिए। ValidatedAccelerationConfigResult में serialize() और deserialize() विधियाँ भंडारण और पुनर्प्राप्ति प्रक्रिया को आसान बनाती हैं।

नमूना आवेदन

एक्सेलेरेशन सेवा के इन-सीटू एकीकरण की समीक्षा करने के लिए, नमूना ऐप पर एक नज़र डालें।

सीमाएँ

एक्सेलेरेशन सेवा की वर्तमान में निम्नलिखित सीमाएँ हैं:

  • इस समय केवल सीपीयू और जीपीयू त्वरण कॉन्फ़िगरेशन समर्थित हैं,
  • यह केवल Google Play सेवाओं में TensorFlow Lite का समर्थन करता है और यदि आप TensorFlow Lite के बंडल संस्करण का उपयोग कर रहे हैं तो आप इसका उपयोग नहीं कर सकते।
  • यह TensorFlow Lite टास्क लाइब्रेरी का समर्थन नहीं करता है क्योंकि आप सीधे ValidatedAccelerationConfigResult ऑब्जेक्ट के साथ BaseOptions प्रारंभ नहीं कर सकते हैं।
  • एक्सेलेरेशन सर्विस एसडीके केवल एपीआई स्तर 22 और उससे ऊपर का समर्थन करता है।

चेतावनियां

कृपया निम्नलिखित चेतावनियों की सावधानीपूर्वक समीक्षा करें, खासकर यदि आप उत्पादन में इस एसडीके का उपयोग करने की योजना बना रहे हैं:

  • बीटा से बाहर निकलने और एक्सेलेरेशन सर्विस एपीआई के लिए स्थिर संस्करण जारी करने से पहले, हम एक नया एसडीके प्रकाशित करेंगे जिसमें वर्तमान बीटा से कुछ अंतर हो सकते हैं। एक्सेलेरेशन सेवा का उपयोग जारी रखने के लिए, आपको इस नए एसडीके पर माइग्रेट करना होगा और समय पर अपने ऐप पर अपडेट पुश करना होगा। ऐसा न करने पर टूट-फूट हो सकती है क्योंकि बीटा एसडीके कुछ समय के बाद Google Play सेवाओं के साथ संगत नहीं हो सकता है।

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

शर्तें और गोपनीयता

सेवा की शर्तें

एक्सेलेरेशन सर्विस एपीआई का उपयोग Google एपीआई सेवा की शर्तों के अधीन है।
इसके अतिरिक्त, एक्सेलेरेशन सर्विस एपीआई वर्तमान में बीटा में है और, इस प्रकार, इसका उपयोग करके आप उपरोक्त चेतावनी अनुभाग में उल्लिखित संभावित मुद्दों को स्वीकार करते हैं और स्वीकार करते हैं कि एक्सेलेरेशन सर्विस हमेशा निर्दिष्ट के अनुसार प्रदर्शन नहीं कर सकती है।

गोपनीयता

जब आप एक्सेलेरेशन सर्विस एपीआई का उपयोग करते हैं, तो इनपुट डेटा (जैसे चित्र, वीडियो, टेक्स्ट) की प्रोसेसिंग पूरी तरह से डिवाइस पर होती है, और एक्सेलेरेशन सर्विस उस डेटा को Google सर्वर पर नहीं भेजती है । परिणामस्वरूप, आप इनपुट डेटा को संसाधित करने के लिए हमारे एपीआई का उपयोग कर सकते हैं जो डिवाइस को नहीं छोड़ना चाहिए।
एक्सेलेरेशन सर्विस एपीआई बग फिक्स, अपडेटेड मॉडल और हार्डवेयर एक्सेलेरेटर संगतता जानकारी जैसी चीजें प्राप्त करने के लिए समय-समय पर Google सर्वर से संपर्क कर सकती है। एक्सेलेरेशन सर्विस एपीआई आपके ऐप में एपीआई के प्रदर्शन और उपयोग के बारे में Google को मेट्रिक्स भी भेजती है। Google इस मेट्रिक्स डेटा का उपयोग प्रदर्शन को मापने, डिबग करने, एपीआई को बनाए रखने और सुधारने और दुरुपयोग या दुरुपयोग का पता लगाने के लिए करता है, जैसा कि हमारी गोपनीयता नीति में आगे बताया गया है।
आप अपने ऐप के उपयोगकर्ताओं को लागू कानून के अनुसार Google द्वारा एक्सेलेरेशन सर्विस मेट्रिक्स डेटा के प्रसंस्करण के बारे में सूचित करने के लिए जिम्मेदार हैं।
हमारे द्वारा एकत्र किए गए डेटा में निम्नलिखित शामिल हैं:

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

समर्थन और प्रतिक्रिया

आप TensorFlow इश्यू ट्रैकर के माध्यम से फीडबैक दे सकते हैं और समर्थन प्राप्त कर सकते हैं। कृपया Google Play सेवाओं में TensorFlow Lite के लिए समस्या टेम्पलेट का उपयोग करके समस्याओं और समर्थन अनुरोधों की रिपोर्ट करें।