TensorFlow लाइट प्रतिनिधि

परिचय

प्रतिनिधि GPU और डिजिटल सिग्नल प्रोसेसर (DSP) जैसे ऑन-डिवाइस एक्सेलेरेटर का लाभ उठाकर TensorFlow Lite मॉडल के हार्डवेयर त्वरण को सक्षम करते हैं।

डिफ़ॉल्ट रूप से, TensorFlow Lite CPU कर्नेल का उपयोग करता है जो ARM नियॉन निर्देश सेट के लिए अनुकूलित होते हैं। हालाँकि, सीपीयू एक बहुउद्देश्यीय प्रोसेसर है जो आमतौर पर मशीन लर्निंग मॉडल (उदाहरण के लिए, कनवल्शन और सघन परतों में शामिल मैट्रिक्स गणित) में पाए जाने वाले भारी अंकगणित के लिए अनुकूलित नहीं है।

दूसरी ओर, अधिकांश आधुनिक मोबाइल फोन में ऐसे चिप्स होते हैं जो इन भारी परिचालनों को संभालने में बेहतर होते हैं। तंत्रिका नेटवर्क संचालन के लिए उनका उपयोग विलंबता और बिजली दक्षता के मामले में भारी लाभ प्रदान करता है। उदाहरण के लिए, जीपीयू विलंबता में 5 गुना तक स्पीडअप प्रदान कर सकता है, जबकि क्वालकॉम® हेक्सागोन डीएसपी ने हमारे प्रयोगों में बिजली की खपत को 75% तक कम करने में मदद की है।

इनमें से प्रत्येक त्वरक में संबद्ध एपीआई हैं जो कस्टम गणनाओं को सक्षम करते हैं, जैसे मोबाइल जीपीयू के लिए ओपनसीएल या ओपनजीएल ईएस और डीएसपी के लिए क्वालकॉम® हेक्सागोन एसडीके । आमतौर पर, आपको इन इंटरफेस के माध्यम से तंत्रिका नेटवर्क चलाने के लिए बहुत सारे कस्टम कोड लिखने होंगे। चीजें तब और भी जटिल हो जाती हैं जब आप मानते हैं कि प्रत्येक त्वरक के अपने फायदे और नुकसान हैं और यह तंत्रिका नेटवर्क में हर ऑपरेशन को निष्पादित नहीं कर सकता है। TensorFlow Lite का डेलीगेट API TFLite रनटाइम और इन निचले स्तर के API के बीच एक सेतु के रूप में कार्य करके इस समस्या को हल करता है।

प्रतिनिधियों के साथ रनटाइम

एक प्रतिनिधि का चयन

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

मंच द्वारा प्रतिनिधि

क्रॉस-प्लेटफ़ॉर्म (एंड्रॉइड और आईओएस)

  • GPU प्रतिनिधि - GPU प्रतिनिधि का उपयोग Android और iOS दोनों पर किया जा सकता है। इसे 32-बिट और 16-बिट फ्लोट आधारित मॉडल चलाने के लिए अनुकूलित किया गया है जहां जीपीयू उपलब्ध है। यह 8-बिट क्वांटाइज्ड मॉडल का भी समर्थन करता है और उनके फ्लोट संस्करणों के बराबर जीपीयू प्रदर्शन प्रदान करता है। GPU प्रतिनिधि के विवरण के लिए, GPU पर TensorFlow Lite देखें। Android और iOS के साथ GPU प्रतिनिधि का उपयोग करने पर चरण-दर-चरण ट्यूटोरियल के लिए, TensorFlow Lite GPU प्रतिनिधि ट्यूटोरियल देखें।

एंड्रॉयड

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

आईओएस

  • नए आईफोन और आईपैड के लिए कोर एमएल प्रतिनिधि - नए आईफोन और आईपैड के लिए जहां न्यूरल इंजन उपलब्ध है, आप 32-बिट या 16-बिट फ्लोटिंग-पॉइंट मॉडल के अनुमान में तेजी लाने के लिए कोर एमएल प्रतिनिधि का उपयोग कर सकते हैं। न्यूरल इंजन A12 SoC या उच्चतर वाले Apple मोबाइल डिवाइस पर उपलब्ध है। कोर एमएल प्रतिनिधि के अवलोकन और चरण-दर-चरण निर्देशों के लिए, TensorFlow Lite Core ML प्रतिनिधि देखें।

मॉडल प्रकार के अनुसार प्रतिनिधि

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

मॉडल प्रकार जीपीयू एनएनएपीआई षट्भुज कोरएमएल
फ़्लोटिंग-पॉइंट (32 बिट) हाँ हाँ नहीं हाँ
प्रशिक्षण के बाद फ़्लोट16 परिमाणीकरण हाँ नहीं नहीं हाँ
प्रशिक्षण के बाद गतिशील रेंज परिमाणीकरण हाँ हाँ नहीं नहीं
प्रशिक्षण के बाद पूर्णांक परिमाणीकरण हाँ हाँ हाँ नहीं
परिमाणीकरण-जागरूक प्रशिक्षण हाँ हाँ हाँ नहीं

प्रदर्शन का सत्यापन

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

TensorFlow Lite में व्यापक प्रदर्शन और सटीकता-मूल्यांकन टूलींग है जो डेवलपर्स को अपने एप्लिकेशन में प्रतिनिधियों का उपयोग करने में आश्वस्त होने के लिए सशक्त बना सकता है। इन उपकरणों पर अगले भाग में चर्चा की गई है।

मूल्यांकन के लिए उपकरण

विलंबता और स्मृति पदचिह्न

टेन्सरफ्लो लाइट के बेंचमार्क टूल का उपयोग मॉडल के प्रदर्शन का अनुमान लगाने के लिए उपयुक्त मापदंडों के साथ किया जा सकता है, जिसमें औसत अनुमान विलंबता, इनिशियलाइज़ेशन ओवरहेड, मेमोरी फ़ुटप्रिंट आदि शामिल हैं। यह टूल आपके मॉडल के लिए सर्वोत्तम प्रतिनिधि कॉन्फ़िगरेशन का पता लगाने के लिए कई फ़्लैग का समर्थन करता है। उदाहरण के लिए, OpenGL के साथ GPU निष्पादन को मापने के लिए --gpu_backend=gl --use_gpu के साथ निर्दिष्ट किया जा सकता है। समर्थित प्रतिनिधि मापदंडों की पूरी सूची विस्तृत दस्तावेज़ में परिभाषित की गई है।

यहां adb के माध्यम से जीपीयू के साथ एक क्वांटाइज्ड मॉडल के लिए चलाया गया एक उदाहरण दिया गया है:

adb shell /data/local/tmp/benchmark_model \
  --graph=/data/local/tmp/mobilenet_v1_224_quant.tflite \
  --use_gpu=true

आप एंड्रॉइड के लिए इस टूल का पूर्व-निर्मित संस्करण, 64-बिट एआरएम आर्किटेक्चर यहां ( अधिक विवरण ) डाउनलोड कर सकते हैं।

सटीकता और शुद्धता

प्रतिनिधि आमतौर पर अपने सीपीयू समकक्षों की तुलना में अलग सटीकता से गणना करते हैं। परिणामस्वरूप, हार्डवेयर त्वरण के लिए एक प्रतिनिधि के उपयोग से जुड़ी एक (आमतौर पर मामूली) सटीकता ट्रेडऑफ़ होती है। ध्यान दें कि यह हमेशा सत्य नहीं है; उदाहरण के लिए, चूँकि GPU परिमाणित मॉडलों को चलाने के लिए फ़्लोटिंग-पॉइंट परिशुद्धता का उपयोग करता है, इसलिए थोड़ा परिशुद्धता सुधार हो सकता है (उदाहरण के लिए, ILSVRC छवि वर्गीकरण में <1% टॉप-5 सुधार)।

TensorFlow Lite में यह मापने के लिए दो प्रकार के टूलींग हैं कि कोई प्रतिनिधि किसी दिए गए मॉडल के लिए कितना सटीक व्यवहार करता है: कार्य-आधारित और कार्य-अज्ञेयवादी । इस अनुभाग में वर्णित सभी उपकरण पिछले अनुभाग से बेंचमार्किंग टूल द्वारा उपयोग किए गए उन्नत प्रतिनिधिमंडल मापदंडों का समर्थन करते हैं। ध्यान दें कि नीचे दिए गए उप-अनुभाग मॉडल मूल्यांकन (क्या मॉडल स्वयं कार्य के लिए अच्छा है?) के बजाय प्रतिनिधि मूल्यांकन (क्या प्रतिनिधि सीपीयू के समान प्रदर्शन करता है?) पर ध्यान केंद्रित करता है।

कार्य-आधारित मूल्यांकन

TensorFlow Lite में दो छवि-आधारित कार्यों पर शुद्धता का मूल्यांकन करने के लिए उपकरण हैं:

दस्तावेज़ीकरण के साथ इन उपकरणों (एंड्रॉइड, 64-बिट एआरएम आर्किटेक्चर) की पूर्वनिर्मित बायनेरिज़ यहां पाई जा सकती हैं:

नीचे दिया गया उदाहरण पिक्सेल 4 पर Google के एज-टीपीयू का उपयोग करके एनएनएपीआई के साथ छवि वर्गीकरण मूल्यांकन को दर्शाता है:

adb shell /data/local/tmp/run_eval \
  --model_file=/data/local/tmp/mobilenet_quant_v1_224.tflite \
  --ground_truth_images_path=/data/local/tmp/ilsvrc_images \
  --ground_truth_labels=/data/local/tmp/ilsvrc_validation_labels.txt \
  --model_output_labels=/data/local/tmp/model_output_labels.txt \
  --output_file_path=/data/local/tmp/accuracy_output.txt \
  --num_images=0 # Run on all images. \
  --use_nnapi=true \
  --nnapi_accelerator_name=google-edgetpu

अपेक्षित आउटपुट 1 से 10 तक टॉप-के मेट्रिक्स की एक सूची है:

Top-1 Accuracy: 0.733333
Top-2 Accuracy: 0.826667
Top-3 Accuracy: 0.856667
Top-4 Accuracy: 0.87
Top-5 Accuracy: 0.89
Top-6 Accuracy: 0.903333
Top-7 Accuracy: 0.906667
Top-8 Accuracy: 0.913333
Top-9 Accuracy: 0.92
Top-10 Accuracy: 0.923333

कार्य-अज्ञेयवादी मूल्यांकन

ऐसे कार्यों के लिए जहां कोई स्थापित ऑन-डिवाइस मूल्यांकन उपकरण नहीं है, या यदि आप कस्टम मॉडल के साथ प्रयोग कर रहे हैं, तो TensorFlow Lite में Inference Diff टूल है। (एंड्रॉइड, 64-बिट एआरएम बाइनरी आर्किटेक्चर बाइनरी यहां )

इंफ़रेंस डिफ दो सेटिंग्स में टेन्सरफ्लो लाइट निष्पादन (विलंबता और आउटपुट-मूल्य विचलन के संदर्भ में) की तुलना करता है:

  • सिंगल-थ्रेडेड सीपीयू अनुमान
  • उपयोगकर्ता-परिभाषित अनुमान - इन मापदंडों द्वारा परिभाषित

ऐसा करने के लिए, उपकरण यादृच्छिक गॉसियन डेटा उत्पन्न करता है और इसे दो टीएफलाइट इंटरप्रेटर के माध्यम से पास करता है - एक एकल-थ्रेडेड सीपीयू कर्नेल चला रहा है, और दूसरा उपयोगकर्ता के तर्कों द्वारा पैरामीटरयुक्त है।

यह दोनों की विलंबता को मापता है, साथ ही प्रति-तत्व के आधार पर प्रत्येक इंटरप्रेटर से आउटपुट टेंसर के बीच पूर्ण अंतर को भी मापता है।

एकल आउटपुट टेंसर वाले मॉडल के लिए, आउटपुट इस तरह दिख सकता है:

Num evaluation runs: 50
Reference run latency: avg=84364.2(us), std_dev=12525(us)
Test run latency: avg=7281.64(us), std_dev=2089(us)
OutputDiff[0]: avg_error=1.96277e-05, std_dev=6.95767e-06

इसका मतलब यह है कि इंडेक्स 0 पर आउटपुट टेंसर के लिए, सीपीयू आउटपुट के तत्व प्रतिनिधि आउटपुट से औसतन 1.96e-05 से भिन्न होते हैं।

ध्यान दें कि इन संख्याओं की व्याख्या करने के लिए मॉडल के गहन ज्ञान की आवश्यकता होती है, और प्रत्येक आउटपुट टेंसर क्या दर्शाता है। यदि यह एक साधारण प्रतिगमन है जो किसी प्रकार का स्कोर या एम्बेडिंग निर्धारित करता है, तो अंतर कम होना चाहिए (अन्यथा यह प्रतिनिधि के साथ एक त्रुटि है)। हालाँकि, SSD मॉडल से 'डिटेक्शन क्लास' जैसे आउटपुट की व्याख्या करना थोड़ा कठिन है। उदाहरण के लिए, इस टूल का उपयोग करने से अंतर दिखाई दे सकता है, लेकिन इसका मतलब यह नहीं हो सकता है कि प्रतिनिधि के साथ वास्तव में कुछ गलत है: दो (नकली) वर्गों पर विचार करें: "टीवी (आईडी: 10)", "मॉनिटर (आईडी: 20)" - यदि एक प्रतिनिधि सुनहरे सच से थोड़ा हटकर है और टीवी के बजाय मॉनिटर दिखाता है, इस टेंसर के लिए आउटपुट अंतर 20-10 = 10 जितना अधिक हो सकता है।