परिचय
प्रतिनिधि GPU और डिजिटल सिग्नल प्रोसेसर (DSP) जैसे ऑन-डिवाइस त्वरक का लाभ उठाकर TensorFlow लाइट मॉडल के हार्डवेयर त्वरण को सक्षम करते हैं।
डिफ़ॉल्ट रूप से, TensorFlow Lite सीपीयू कर्नेल का उपयोग करता है जो एआरएम नियॉन निर्देश सेट के लिए अनुकूलित हैं। हालांकि, सीपीयू एक बहुउद्देश्यीय प्रोसेसर है जो कि मशीन लर्निंग मॉडल में आमतौर पर पाए जाने वाले भारी अंकगणित के लिए जरूरी नहीं है (उदाहरण के लिए, कनवल्शन और सघन परतों में शामिल मैट्रिक्स गणित)।
दूसरी ओर, अधिकांश आधुनिक मोबाइल फोन में ऐसे चिप्स होते हैं जो इन भारी कार्यों को संभालने में बेहतर होते हैं। तंत्रिका नेटवर्क संचालन के लिए उनका उपयोग करने से विलंबता और शक्ति दक्षता के मामले में भारी लाभ मिलता है। उदाहरण के लिए, GPU विलंबता में 5x तक की गति प्रदान कर सकते हैं, जबकि Qualcomm® Hexagon DSP ने हमारे प्रयोगों में बिजली की खपत को 75% तक कम करने के लिए दिखाया है।
इनमें से प्रत्येक त्वरक में संबद्ध एपीआई होते हैं जो कस्टम कंप्यूटेशंस को सक्षम करते हैं, जैसे मोबाइल जीपीयू के लिए ओपनसीएल या ओपनजीएल ईएस और डीएसपी के लिए क्वालकॉम® हेक्सागोन एसडीके । आमतौर पर, आपको इन इंटरफेस के माध्यम से एक तंत्रिका नेटवर्क चलाने के लिए बहुत सारे कस्टम कोड लिखने होंगे। चीजें और भी जटिल हो जाती हैं जब आप समझते हैं कि प्रत्येक त्वरक के अपने फायदे और नुकसान हैं और तंत्रिका नेटवर्क में हर ऑपरेशन को निष्पादित नहीं कर सकते हैं। TensorFlow Lite का प्रतिनिधि API TFlite रनटाइम और इन निम्न-स्तरीय API के बीच एक सेतु के रूप में कार्य करके इस समस्या को हल करता है।
एक प्रतिनिधि चुनना
TensorFlow Lite कई प्रतिनिधियों का समर्थन करता है, जिनमें से प्रत्येक को कुछ प्लेटफ़ॉर्म और विशेष प्रकार के मॉडल के लिए अनुकूलित किया गया है। आम तौर पर, आपके उपयोग-मामले पर दो प्रमुख मानदंडों के आधार पर कई प्रतिनिधि लागू होंगे: आपके द्वारा लक्षित प्लेटफ़ॉर्म ( एंड्रॉइड या आईओएस?) .
मंच द्वारा प्रतिनिधि
क्रॉस-प्लेटफ़ॉर्म (एंड्रॉइड और आईओएस)
- GPU प्रतिनिधि - GPU प्रतिनिधि का उपयोग Android और iOS दोनों पर किया जा सकता है। यह 32-बिट और 16-बिट फ्लोट आधारित मॉडल चलाने के लिए अनुकूलित है जहां एक GPU उपलब्ध है। यह 8-बिट मात्रात्मक मॉडल का भी समर्थन करता है और उनके फ्लोट संस्करणों के बराबर GPU प्रदर्शन प्रदान करता है। GPU प्रतिनिधि के विवरण के लिए, GPU पर TensorFlow Lite देखें। Android और iOS के साथ GPU प्रतिनिधि का उपयोग करने पर चरण-दर-चरण ट्यूटोरियल के लिए, TensorFlow Lite GPU प्रतिनिधि ट्यूटोरियल देखें।
एंड्रॉयड
- नए Android उपकरणों के लिए NNAPI प्रतिनिधि - NNAPI प्रतिनिधि का उपयोग GPU, DSP और / या NPU के साथ Android उपकरणों पर मॉडल को गति देने के लिए किया जा सकता है। यह एंड्रॉइड 8.1 (एपीआई 27+) या उच्चतर में उपलब्ध है। NNAPI प्रतिनिधि, चरण-दर-चरण निर्देशों और सर्वोत्तम प्रथाओं के अवलोकन के लिए, TensorFlow Lite NNAPI प्रतिनिधि देखें।
- पुराने Android उपकरणों के लिए हेक्सागोन प्रतिनिधि - क्वालकॉम हेक्सागोन डीएसपी के साथ एंड्रॉइड डिवाइस पर मॉडल को गति देने के लिए हेक्सागोन प्रतिनिधि का उपयोग किया जा सकता है। इसका उपयोग Android के पुराने संस्करण चलाने वाले उपकरणों पर किया जा सकता है जो NNAPI का समर्थन नहीं करते हैं। अधिक विवरण के लिए TensorFlow Lite षट्भुज प्रतिनिधि देखें।
आईओएस
- नए आईफोन और आईपैड के लिए कोर एमएल प्रतिनिधि - नए आईफोन और आईपैड के लिए जहां न्यूरल इंजन उपलब्ध है, आप 32-बिट या 16-बिट फ्लोटिंग-पॉइंट मॉडल के अनुमान को तेज करने के लिए कोर एमएल प्रतिनिधि का उपयोग कर सकते हैं। न्यूरल इंजन A12 SoC या उच्चतर के साथ Apple मोबाइल डिवाइस उपलब्ध है। कोर एमएल प्रतिनिधि और चरण-दर-चरण निर्देशों के अवलोकन के लिए, TensorFlow लाइट कोर एमएल प्रतिनिधि देखें।
मॉडल प्रकार द्वारा प्रतिनिधि
प्रत्येक त्वरक को डेटा की एक निश्चित बिट-चौड़ाई को ध्यान में रखकर बनाया गया है। यदि आप एक प्रतिनिधि को एक फ़्लोटिंग-पॉइंट मॉडल प्रदान करते हैं जो केवल 8-बिट मात्रात्मक संचालन (जैसे हेक्सागोन प्रतिनिधि ) का समर्थन करता है, तो यह इसके सभी कार्यों को अस्वीकार कर देगा और मॉडल पूरी तरह से सीपीयू पर चलेगा। इस तरह के आश्चर्य से बचने के लिए, नीचे दी गई तालिका मॉडल प्रकार के आधार पर प्रतिनिधि समर्थन का अवलोकन प्रदान करती है:
मॉडल प्रकार | जीपीयू | एनएनएपीआई | षट्भुज | कोरएमएल |
---|---|---|---|---|
फ़्लोटिंग-पॉइंट (32 बिट) | हाँ | हाँ | नहीं | हाँ |
प्रशिक्षण के बाद फ्लोट16 परिमाणीकरण | हाँ | नहीं | नहीं | हाँ |
प्रशिक्षण के बाद गतिशील रेंज परिमाणीकरण | हाँ | हाँ | नहीं | नहीं |
प्रशिक्षण के बाद पूर्णांक परिमाणीकरण | हाँ | हाँ | हाँ | नहीं |
परिमाणीकरण-जागरूक प्रशिक्षण | हाँ | हाँ | हाँ | नहीं |
प्रदर्शन की पुष्टि
इस खंड की जानकारी प्रतिनिधियों को शॉर्टलिस्ट करने के लिए एक मोटे दिशानिर्देश के रूप में कार्य करती है जो आपके आवेदन में सुधार कर सकती है। हालांकि, यह नोट करना महत्वपूर्ण है कि प्रत्येक प्रतिनिधि के पास संचालन का एक पूर्व-निर्धारित सेट होता है जो इसका समर्थन करता है, और मॉडल और डिवाइस के आधार पर अलग-अलग प्रदर्शन कर सकता है; उदाहरण के लिए, एनएनएपीआई प्रतिनिधि किसी अन्य डिवाइस पर डीएसपी का उपयोग करते समय पिक्सेल फोन पर Google के एज-टीपीयू का उपयोग करना चुन सकता है। इसलिए, आमतौर पर यह अनुशंसा की जाती है कि आप यह मापने के लिए कुछ बेंचमार्किंग करें कि एक प्रतिनिधि आपकी आवश्यकताओं के लिए कितना उपयोगी है। यह TensorFlow Lite रनटाइम में एक प्रतिनिधि को जोड़ने से जुड़ी बाइनरी आकार वृद्धि को सही ठहराने में भी मदद करता है।
TensorFlow Lite में व्यापक प्रदर्शन और सटीकता-मूल्यांकन टूलिंग है जो डेवलपर्स को अपने आवेदन में प्रतिनिधियों का उपयोग करने में आश्वस्त होने के लिए सशक्त बना सकती है। इन उपकरणों की चर्चा अगले भाग में की गई है।
मूल्यांकन के लिए उपकरण
विलंबता और स्मृति पदचिह्न
TensorFlow Lite के बेंचमार्क टूल का उपयोग मॉडल के प्रदर्शन का अनुमान लगाने के लिए उपयुक्त मापदंडों के साथ किया जा सकता है, जिसमें औसत अनुमान विलंबता, आरंभीकरण ओवरहेड, मेमोरी फ़ुटप्रिंट आदि शामिल हैं। यह टूल आपके मॉडल के लिए सर्वश्रेष्ठ प्रतिनिधि कॉन्फ़िगरेशन का पता लगाने के लिए कई फ़्लैग का समर्थन करता है। उदाहरण के लिए, --gpu_backend=gl
को --use_gpu
के साथ निर्दिष्ट किया जा सकता है ताकि OpenGL के साथ GPU निष्पादन को मापा जा सके। समर्थित प्रतिनिधि पैरामीटर की पूरी सूची विस्तृत दस्तावेज़ीकरण में परिभाषित की गई है।
adb
के माध्यम से जीपीयू के साथ मात्रात्मक मॉडल के लिए यहां एक उदाहरण चलाया गया है:
adb shell /data/local/tmp/benchmark_model \
--graph=/data/local/tmp/mobilenet_v1_224_quant.tflite \
--use_gpu=true
आप Android के लिए इस टूल का पूर्व-निर्मित संस्करण, 64-बिट ARM आर्किटेक्चर यहां ( अधिक विवरण ) डाउनलोड कर सकते हैं।
शुद्धता और शुद्धता
प्रतिनिधि आमतौर पर अपने सीपीयू समकक्षों की तुलना में एक अलग परिशुद्धता पर गणना करते हैं। नतीजतन, हार्डवेयर त्वरण के लिए एक प्रतिनिधि का उपयोग करने से जुड़ा एक (आमतौर पर मामूली) सटीकता ट्रेडऑफ है। ध्यान दें कि यह हमेशा सच नहीं होता है; उदाहरण के लिए, चूंकि GPU मात्रात्मक मॉडल को चलाने के लिए फ्लोटिंग-पॉइंट परिशुद्धता का उपयोग करता है, इसलिए इसमें थोड़ा सा सटीक सुधार हो सकता है (उदाहरण के लिए, <1% ILSVRC छवि वर्गीकरण में शीर्ष -5 सुधार)।
TensorFlow Lite में यह मापने के लिए दो प्रकार के टूलिंग हैं कि एक प्रतिनिधि किसी दिए गए मॉडल के लिए कितना सही व्यवहार करता है: कार्य-आधारित और कार्य-अज्ञेयवादी । इस खंड में वर्णित सभी उपकरण पिछले अनुभाग के बेंचमार्किंग टूल द्वारा उपयोग किए गए उन्नत डेलिगेशन पैरामीटर का समर्थन करते हैं। ध्यान दें कि नीचे दिए गए उप-अनुभाग मॉडल मूल्यांकन के बजाय प्रतिनिधि मूल्यांकन (क्या प्रतिनिधि सीपीयू के समान प्रदर्शन करते हैं?) पर ध्यान केंद्रित करते हैं (क्या मॉडल स्वयं कार्य के लिए अच्छा है?)
कार्य-आधारित मूल्यांकन
TensorFlow Lite में दो छवि-आधारित कार्यों की शुद्धता का मूल्यांकन करने के लिए उपकरण हैं:
ILSVRC 2012 (छवि वर्गीकरण) शीर्ष- K सटीकता के साथ
औसत औसत परिशुद्धता (एमएपी) के साथ कोको ऑब्जेक्ट डिटेक्शन (डब्ल्यू/बाउंडिंग बॉक्स )
इन उपकरणों के पूर्वनिर्मित बायनेरिज़ (एंड्रॉइड, 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-बिट एआरएम बाइनरी आर्किटेक्चर बाइनरी यहां )
Inference Diff दो सेटिंग्स में TensorFlow Lite निष्पादन (विलंबता और आउटपुट-मूल्य विचलन के संदर्भ में) की तुलना करता है:
- सिंगल-थ्रेडेड सीपीयू इंट्रेंस
- उपयोगकर्ता-परिभाषित अनुमान - इन मापदंडों द्वारा परिभाषित
ऐसा करने के लिए, उपकरण यादृच्छिक गाऊसी डेटा उत्पन्न करता है और इसे दो TFLite दुभाषियों के माध्यम से पारित करता है - एक एकल-थ्रेडेड CPU कर्नेल चल रहा है, और दूसरा उपयोगकर्ता के तर्कों द्वारा पैरामीटर किया गया है।
यह दोनों की विलंबता को मापता है, साथ ही प्रति-तत्व के आधार पर प्रत्येक दुभाषिया से आउटपुट टेंसर के बीच पूर्ण अंतर को मापता है।
एकल आउटपुट टेंसर वाले मॉडल के लिए, आउटपुट इस तरह दिख सकता है:
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 जितना अधिक हो सकता है।