प्रदर्शन सर्वोत्तम अभ्यास, प्रदर्शन सर्वोत्तम अभ्यास

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

कार्य के लिए सबसे अच्छा मॉडल चुनें

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

Graph of model size vs accuracy

Graph of accuracy vs latency

मोबाइल उपकरणों के लिए अनुकूलित मॉडलों का एक उदाहरण MobileNets हैं, जो मोबाइल दृष्टि अनुप्रयोगों के लिए अनुकूलित हैं। TensorFlow हब कई अन्य मॉडलों को सूचीबद्ध करता है जिन्हें विशेष रूप से मोबाइल और एम्बेडेड उपकरणों के लिए अनुकूलित किया गया है।

आप ट्रांसफर लर्निंग का उपयोग करके अपने स्वयं के डेटासेट पर सूचीबद्ध मॉडलों को फिर से प्रशिक्षित कर सकते हैं। TensorFlow Lite Model Maker का उपयोग करके ट्रांसफर लर्निंग ट्यूटोरियल देखें।

अपने मॉडल को प्रोफाइल करें

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

आप मानक एंड्रॉइड सिस्टम ट्रेसिंग का उपयोग करके अपने एंड्रॉइड एप्लिकेशन में मॉडल को प्रोफाइल करने के लिए टेंसरफ्लो लाइट ट्रेसिंग का भी उपयोग कर सकते हैं, और जीयूआई आधारित प्रोफाइलिंग टूल्स के साथ समय के साथ ऑपरेटर आमंत्रणों को देखने के लिए।

ग्राफ में प्रोफाइल और ऑपरेटरों का अनुकूलन

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

अपने मॉडल का अनुकूलन करें

मॉडल ऑप्टिमाइज़ेशन का उद्देश्य छोटे मॉडल बनाना है जो आम तौर पर तेज़ और अधिक ऊर्जा कुशल होते हैं, ताकि उन्हें मोबाइल उपकरणों पर तैनात किया जा सके। TensorFlow Lite परिमाणीकरण जैसी कई अनुकूलन तकनीकों का समर्थन करता है।

विवरण के लिए मॉडल अनुकूलन दस्तावेज़ देखें।

थ्रेड्स की संख्या में बदलाव करें

TensorFlow Lite कई ऑपरेटरों के लिए बहु-थ्रेडेड कर्नेल का समर्थन करता है। आप थ्रेड्स की संख्या बढ़ा सकते हैं और ऑपरेटरों के निष्पादन में तेजी ला सकते हैं। हालाँकि, थ्रेड्स की संख्या बढ़ाने से आपका मॉडल अधिक संसाधनों और शक्ति का उपयोग करेगा।

कुछ अनुप्रयोगों के लिए, विलंबता ऊर्जा दक्षता से अधिक महत्वपूर्ण हो सकती है। आप दुभाषिया थ्रेड्स की संख्या निर्धारित करके थ्रेड्स की संख्या बढ़ा सकते हैं। बहु-थ्रेडेड निष्पादन, हालांकि, समवर्ती रूप से निष्पादित किए जाने वाले कार्यों के आधार पर बढ़ी हुई प्रदर्शन परिवर्तनशीलता की कीमत पर आता है। यह विशेष रूप से मोबाइल ऐप्स के मामले में है। उदाहरण के लिए, अलग-अलग परीक्षण 2x स्पीड-अप बनाम सिंगल-थ्रेडेड दिखा सकते हैं, लेकिन, यदि कोई अन्य ऐप उसी समय निष्पादित हो रहा है, तो इसका परिणाम सिंगल-थ्रेडेड की तुलना में खराब प्रदर्शन हो सकता है।

अनावश्यक प्रतियों को हटा दें

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

प्लेटफ़ॉर्म विशिष्ट टूल के साथ अपने एप्लिकेशन को प्रोफाइल करें

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

मूल्यांकन करें कि क्या आपके मॉडल को डिवाइस पर उपलब्ध हार्डवेयर एक्सेलेरेटर का उपयोग करने से लाभ होता है

TensorFlow Lite ने GPU, DSP और तंत्रिका त्वरक जैसे तेज़ हार्डवेयर वाले मॉडलों को गति देने के लिए नए तरीके जोड़े हैं। आम तौर पर, इन त्वरक को प्रतिनिधि सबमॉड्यूल के माध्यम से उजागर किया जाता है जो दुभाषिया निष्पादन के कुछ हिस्सों को लेते हैं। TensorFlow लाइट द्वारा प्रतिनिधियों का उपयोग कर सकते हैं:

  • Android के तंत्रिका नेटवर्क API का उपयोग करना। आप अपने मॉडल की गति और दक्षता में सुधार करने के लिए इन हार्डवेयर त्वरक बैकएंड का उपयोग कर सकते हैं। तंत्रिका नेटवर्क API को सक्षम करने के लिए, NNAPI प्रतिनिधि मार्गदर्शिका देखें।
  • GPU प्रतिनिधि क्रमशः OpenGL/OpenCL और Metal का उपयोग करके Android और iOS पर उपलब्ध है। इन्हें आज़माने के लिए, GPU डेलिगेट ट्यूटोरियल और दस्तावेज़ीकरण देखें।
  • षट्कोण प्रतिनिधि Android पर उपलब्ध है। यदि यह डिवाइस पर उपलब्ध है तो यह क्वालकॉम हेक्सागोन डीएसपी का लाभ उठाता है। अधिक जानकारी के लिए हेक्सागोन डेलिगेट ट्यूटोरियल देखें।
  • यदि आपके पास गैर-मानक हार्डवेयर तक पहुंच है, तो अपना स्वयं का प्रतिनिधि बनाना संभव है। अधिक जानकारी के लिए TensorFlow Lite के प्रतिनिधि देखें।

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

और अधिक मदद की आवश्यकता है

TensorFlow टीम आपके द्वारा सामना की जा रही विशिष्ट प्रदर्शन समस्याओं के निदान और समाधान में मदद करने में प्रसन्न है। कृपया समस्या के विवरण के साथ GitHub पर एक समस्या दर्ज करें।