एज डिवाइस में अक्सर सीमित मेमोरी या कम्प्यूटेशनल पावर होती है। मॉडलों पर विभिन्न अनुकूलन लागू किए जा सकते हैं ताकि उन्हें इन बाधाओं के भीतर चलाया जा सके। इसके अलावा, कुछ अनुकूलन त्वरित अनुमान के लिए विशेष हार्डवेयर के उपयोग की अनुमति देते हैं।
TensorFlow Lite और TensorFlow मॉडल ऑप्टिमाइज़ेशन टूलकिट अनुमान के अनुकूलन की जटिलता को कम करने के लिए उपकरण प्रदान करते हैं।
यह अनुशंसा की जाती है कि आप अपनी अनुप्रयोग विकास प्रक्रिया के दौरान मॉडल अनुकूलन पर विचार करें। यह दस्तावेज़ एज हार्डवेयर में परिनियोजन के लिए TensorFlow मॉडल को अनुकूलित करने के लिए कुछ सर्वोत्तम प्रथाओं की रूपरेखा तैयार करता है।
मॉडल को अनुकूलित क्यों किया जाना चाहिए
ऐसे कई मुख्य तरीके हैं जिनसे मॉडल अनुकूलन अनुप्रयोग विकास में मदद कर सकता है।
आकार में कमी
मॉडल के आकार को कम करने के लिए अनुकूलन के कुछ रूपों का उपयोग किया जा सकता है। छोटे मॉडल के निम्नलिखित लाभ हैं:
- छोटा भंडारण आकार: छोटे मॉडल आपके उपयोगकर्ताओं के उपकरणों पर कम संग्रहण स्थान घेरते हैं। उदाहरण के लिए, एक छोटे मॉडल का उपयोग करने वाला Android ऐप उपयोगकर्ता के मोबाइल डिवाइस पर कम संग्रहण स्थान लेगा।
- छोटे डाउनलोड आकार: छोटे मॉडलों को उपयोगकर्ताओं के उपकरणों पर डाउनलोड करने के लिए कम समय और बैंडविड्थ की आवश्यकता होती है।
- कम मेमोरी उपयोग: छोटे मॉडल चलाए जाने पर कम रैम का उपयोग करते हैं, जो आपके एप्लिकेशन के अन्य भागों के उपयोग के लिए मेमोरी को मुक्त करता है, और बेहतर प्रदर्शन और स्थिरता के लिए अनुवाद कर सकता है।
परिमाणीकरण इन सभी मामलों में एक मॉडल के आकार को कम कर सकता है, संभावित रूप से कुछ सटीकता की कीमत पर। प्रूनिंग और क्लस्टरिंग एक मॉडल के आकार को डाउनलोड करने के लिए इसे और अधिक आसानी से संपीड़ित करने योग्य बनाकर कम कर सकता है।
विलंबता में कमी
विलंबता किसी दिए गए मॉडल के साथ एकल अनुमान को चलाने में लगने वाले समय की मात्रा है। अनुकूलन के कुछ रूप एक मॉडल का उपयोग करके अनुमान को चलाने के लिए आवश्यक गणना की मात्रा को कम कर सकते हैं, जिसके परिणामस्वरूप कम विलंबता हो सकती है। विलंबता का बिजली की खपत पर भी प्रभाव पड़ सकता है।
वर्तमान में, परिमाणीकरण का उपयोग अनुमान के दौरान होने वाली गणनाओं को सरल बनाकर विलंबता को कम करने के लिए किया जा सकता है, संभावित रूप से कुछ सटीकता की कीमत पर।
त्वरक अनुकूलता
कुछ हार्डवेयर एक्सेलेरेटर, जैसे कि एज टीपीयू , सही ढंग से अनुकूलित किए गए मॉडल के साथ बहुत तेजी से अनुमान चला सकते हैं।
आम तौर पर, इस प्रकार के उपकरणों के लिए मॉडल को एक विशिष्ट तरीके से परिमाणित करने की आवश्यकता होती है। उनकी आवश्यकताओं के बारे में अधिक जानने के लिए प्रत्येक हार्डवेयर एक्सेलेरेटर के दस्तावेज़ देखें।
व्यापार नापसंद
अनुकूलन संभावित रूप से मॉडल सटीकता में परिवर्तन का परिणाम हो सकता है, जिस पर अनुप्रयोग विकास प्रक्रिया के दौरान विचार किया जाना चाहिए।
सटीकता परिवर्तन व्यक्तिगत मॉडल के अनुकूलित होने पर निर्भर करता है, और समय से पहले भविष्यवाणी करना मुश्किल होता है। आम तौर पर, आकार या विलंबता के लिए अनुकूलित मॉडल सटीकता की थोड़ी मात्रा खो देंगे। आपके आवेदन के आधार पर, यह आपके उपयोगकर्ताओं के अनुभव को प्रभावित कर भी सकता है और नहीं भी। दुर्लभ मामलों में, अनुकूलन प्रक्रिया के परिणामस्वरूप कुछ मॉडल कुछ सटीकता प्राप्त कर सकते हैं।
अनुकूलन के प्रकार
TensorFlow Lite वर्तमान में परिमाणीकरण, छंटाई और क्लस्टरिंग के माध्यम से अनुकूलन का समर्थन करता है।
ये TensorFlow मॉडल ऑप्टिमाइज़ेशन टूलकिट का हिस्सा हैं, जो TensorFlow Lite के साथ संगत मॉडल ऑप्टिमाइज़ेशन तकनीकों के लिए संसाधन प्रदान करता है।
परिमाणीकरण
परिमाणीकरण एक मॉडल के मापदंडों का प्रतिनिधित्व करने के लिए उपयोग की जाने वाली संख्याओं की शुद्धता को कम करके काम करता है, जो कि डिफ़ॉल्ट रूप से 32-बिट फ्लोटिंग पॉइंट नंबर होते हैं। इसका परिणाम छोटे मॉडल आकार और तेज गणना में होता है।
TensorFlow Lite में निम्न प्रकार के परिमाणीकरण उपलब्ध हैं:
तकनीक | डेटा आवश्यकताएं | आकार में कमी | शुद्धता | समर्थित हार्डवेयर |
---|---|---|---|---|
प्रशिक्षण के बाद फ्लोट16 परिमाणीकरण | कोई डेटा नहीं | 50 तक% | नगण्य सटीकता हानि | सीपीयू, जीपीयू |
प्रशिक्षण के बाद गतिशील रेंज परिमाणीकरण | कोई डेटा नहीं | 75% तक | सबसे छोटी सटीकता हानि | सीपीयू, जीपीयू (एंड्रॉइड) |
प्रशिक्षण के बाद पूर्णांक परिमाणीकरण | लेबल रहित प्रतिनिधि नमूना | 75% तक | छोटी सटीकता हानि | सीपीयू, जीपीयू (एंड्रॉइड), एजटीपीयू, हेक्सागोन डीएसपी |
परिमाणीकरण-जागरूक प्रशिक्षण | लेबल प्रशिक्षण डेटा | 75% तक | सबसे छोटी सटीकता हानि | सीपीयू, जीपीयू (एंड्रॉइड), एजटीपीयू, हेक्सागोन डीएसपी |
निम्नलिखित निर्णय ट्री आपको केवल अपेक्षित मॉडल आकार और सटीकता के आधार पर, अपने मॉडल के लिए उपयोग की जाने वाली परिमाणीकरण योजनाओं का चयन करने में मदद करता है।
कुछ मॉडलों पर प्रशिक्षण के बाद के परिमाणीकरण और परिमाणीकरण-जागरूक प्रशिक्षण के लिए विलंबता और सटीकता परिणाम नीचे दिए गए हैं। सभी लेटेंसी नंबरों को Pixel 2 डिवाइस पर सिंगल बिग कोर CPU का उपयोग करके मापा जाता है। जैसे-जैसे टूलकिट में सुधार होगा, वैसे-वैसे यहाँ संख्याएँ भी होंगी:
नमूना | शीर्ष-1 शुद्धता (मूल) | शीर्ष -1 सटीकता (प्रशिक्षण के बाद की मात्रा) | शीर्ष-1 शुद्धता (मात्रा के बारे में जागरूक प्रशिक्षण) | विलंबता (मूल) (एमएस) | विलंबता (प्रशिक्षण के बाद परिमाणित) (एमएस) | विलंबता (मात्राकरण जागरूक प्रशिक्षण) (एमएस) | आकार (मूल) (एमबी) | आकार (अनुकूलित) (एमबी) |
---|---|---|---|---|---|---|---|---|
मोबाइलनेट-v1-1-224 | 0.709 | 0.657 | 0.70 | 124 | 112 | 64 | 16.9 | 4.3 |
मोबाइलनेट-v2-1-224 | 0.719 | 0.637 | 0.709 | 89 | 98 | 54 | 14 | 3.6 |
इंसेप्शन_v3 | 0.78 | 0.772 | 0.775 | 1130 | 845 | 543 | 95.7 | 23.9 |
रेसनेट_v2_101 | 0.770 | 0.768 | एन/ए | 3973 | 2868 | एन/ए | 178.3 | 44.9 |
int16 सक्रियण और int8 भार के साथ पूर्ण पूर्णांक परिमाणीकरण
int16 सक्रियण के साथ परिमाणीकरण एक पूर्ण पूर्णांक परिमाणीकरण योजना है जिसमें int16 में सक्रियण और int8 में भार होता है। यह मोड पूर्ण पूर्णांक परिमाणीकरण योजना की तुलना में परिमाणित मॉडल की सटीकता में सुधार कर सकता है, जिसमें समान मॉडल आकार रखते हुए int8 में सक्रियण और भार दोनों होते हैं। यह अनुशंसा की जाती है जब सक्रियण परिमाणीकरण के प्रति संवेदनशील होते हैं।
नोट: वर्तमान में केवल गैर-अनुकूलित संदर्भ कर्नेल कार्यान्वयन इस परिमाणीकरण योजना के लिए TFLite में उपलब्ध हैं, इसलिए डिफ़ॉल्ट रूप से प्रदर्शन int8 कर्नेल की तुलना में धीमा होगा। इस मोड के पूर्ण लाभ वर्तमान में विशेष हार्डवेयर, या कस्टम सॉफ़्टवेयर के माध्यम से प्राप्त किए जा सकते हैं।
इस मोड से लाभान्वित होने वाले कुछ मॉडलों के लिए सटीकता परिणाम नीचे दिए गए हैं। नमूना शुद्धता मीट्रिक प्रकार शुद्धता (फ्लोट 32 सक्रियण) शुद्धता (int8 सक्रियण) शुद्धता (int16 सक्रियण) Wav2अक्षर WER 6.7% 7.7% 7.2% डीपस्पीच 0.5.1 (अनरोल्ड) प्रमाणपत्र 6.13% 43.67% 6.52% योलोवी3 एमएपी (आईओयू = 0.5) 0.577 0.563 0.574 मोबाइलनेटV1 शीर्ष -1 शुद्धता 0.7062 0.694 0.6936 मोबाइलनेटवी2 शीर्ष -1 शुद्धता 0.718 0.7126 0.7137 मोबाइलबर्ट F1 (सटीक मिलान) 88.81(81.23) 2.08(0) 88.73(81.15)
छंटाई
प्रूनिंग एक ऐसे मॉडल के भीतर के मापदंडों को हटाकर काम करता है जिसका उसके पूर्वानुमानों पर केवल मामूली प्रभाव पड़ता है। प्रून किए गए मॉडल डिस्क पर समान आकार के होते हैं, और उनमें समान रनटाइम विलंबता होती है, लेकिन उन्हें अधिक प्रभावी ढंग से संपीड़ित किया जा सकता है। यह मॉडल डाउनलोड आकार को कम करने के लिए प्रूनिंग को एक उपयोगी तकनीक बनाता है।
भविष्य में, TensorFlow Lite प्रून किए गए मॉडलों के लिए विलंबता में कमी प्रदान करेगा।
क्लस्टरिंग
क्लस्टरिंग एक मॉडल में प्रत्येक परत के भार को समूहों की एक पूर्वनिर्धारित संख्या में समूहित करके काम करता है, फिर प्रत्येक व्यक्तिगत क्लस्टर से संबंधित भार के लिए केन्द्रक मानों को साझा करता है। यह एक मॉडल में अद्वितीय वजन मूल्यों की संख्या को कम करता है, इस प्रकार इसकी जटिलता को कम करता है।
नतीजतन, क्लस्टर मॉडल को अधिक प्रभावी ढंग से संकुचित किया जा सकता है, जो छंटाई के समान परिनियोजन लाभ प्रदान करता है।
विकास कार्यप्रवाह
प्रारंभिक बिंदु के रूप में, जांचें कि क्या होस्टेड मॉडल में मॉडल आपके आवेदन के लिए काम कर सकते हैं। यदि नहीं, तो हम अनुशंसा करते हैं कि उपयोगकर्ता प्रशिक्षण के बाद के परिमाणीकरण उपकरण से शुरू करें क्योंकि यह व्यापक रूप से लागू होता है और इसके लिए प्रशिक्षण डेटा की आवश्यकता नहीं होती है।
ऐसे मामलों के लिए जहां सटीकता और विलंबता लक्ष्य पूरे नहीं होते हैं, या हार्डवेयर त्वरक समर्थन महत्वपूर्ण है, परिमाणीकरण-जागरूक प्रशिक्षण बेहतर विकल्प है। TensorFlow मॉडल ऑप्टिमाइज़ेशन टूलकिट के अंतर्गत अतिरिक्त अनुकूलन तकनीकें देखें।
यदि आप अपने मॉडल के आकार को और कम करना चाहते हैं, तो आप अपने मॉडल की मात्रा निर्धारित करने से पहले छंटाई और/या क्लस्टरिंग का प्रयास कर सकते हैं।