परफ़ॉर्मेंस के सबसे सही तरीके

मोबाइल और एम्बेड किए गए डिवाइसों में, कंप्यूटेशनल रिसॉर्स सीमित होते हैं. इसलिए, यह ज़रूरी है कि आपके ऐप्लिकेशन के रिसॉर्स को ज़्यादा असरदार बनाया जाए. हमने सबसे सही तरीकों और रणनीतियों की एक सूची तैयार की है. इनका इस्तेमाल करके, अपने TensorFlow Lite मॉडल की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.

टास्क के लिए सबसे सही मॉडल चुनें

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

मॉडल के साइज़ और उसके सटीक
होने की तुलना करने वाला ग्राफ़

सटीक होने और इंतज़ार के समय का ग्राफ़

मोबाइल डिवाइसों के लिए ऑप्टिमाइज़ किए गए मॉडल का एक उदाहरण MobileNets है. इन्हें मोबाइल विज़न ऐप्लिकेशन के लिए ऑप्टिमाइज़ किया गया है. TensorFlow Hub में ऐसे कई अन्य मॉडल की सूची है जिन्हें खास तौर पर मोबाइल और एम्बेड किए गए डिवाइसों के लिए ऑप्टिमाइज़ किया गया है.

ट्रांसफ़र लर्निंग का इस्तेमाल करके, सूची में शामिल मॉडल को अपने डेटासेट पर फिर से ट्रेनिंग दी जा सकती है.

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

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

अपने Android ऐप्लिकेशन में मॉडल की प्रोफ़ाइल बनाने के लिए, स्टैंडर्ड Android सिस्टम ट्रेसिंग का इस्तेमाल करके TensorFlow Lite ट्रेसिंग का भी इस्तेमाल किया जा सकता है. साथ ही, जीयूआई आधारित प्रोफ़ाइलिंग टूल की मदद से, समय के हिसाब से ऑपरेटर के बोले जाने वाले अनुरोधों को विज़ुअलाइज़ किया जा सकता है.

ग्राफ़ में मौजूद ऑपरेटर की प्रोफ़ाइल बनाएं और उन्हें ऑप्टिमाइज़ करें

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

अपने मॉडल को ऑप्टिमाइज़ करना

मॉडल ऑप्टिमाइज़ेशन का मकसद ऐसे छोटे मॉडल बनाना है जो आम तौर पर ज़्यादा तेज़ और ऊर्जा की ज़्यादा बचत करते हैं, ताकि उन्हें मोबाइल डिवाइसों पर डिप्लॉय किया जा सके. TensorFlow Lite, क्वांटाइज़ेशन जैसी कई ऑप्टिमाइज़ेशन तकनीकों के साथ काम करता है.

ज़्यादा जानकारी के लिए, मॉडल ऑप्टिमाइज़ेशन दस्तावेज़ देखें.

थ्रेड की संख्या को कम करें

TensorFlow Lite, कई ऑपरेटर के लिए मल्टी-थ्रेड कर्नेल के साथ काम करता है. इससे थ्रेड की संख्या बढ़ाई जा सकती है और ऑपरेटर को तेज़ी से एक्ज़ीक्यूट किया जा सकता है. हालांकि, थ्रेड की संख्या बढ़ाने से आपका मॉडल ज़्यादा संसाधनों और ताकत का इस्तेमाल करेगा.

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

ग़ैर-ज़रूरी कॉपी हटाएं

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

प्लैटफ़ॉर्म के हिसाब से टूल की मदद से, अपने ऐप्लिकेशन की प्रोफ़ाइल बनाएं

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

यह मूल्यांकन करना कि आपके मॉडल को डिवाइस पर उपलब्ध हार्डवेयर ऐक्सेलरेटर का इस्तेमाल करने से फ़ायदा मिलता है या नहीं

TensorFlow Lite ने जीपीयू, डीएसपी, और न्यूरल ऐक्सेलरेटर जैसे ज़्यादा तेज़ हार्डवेयर की मदद से मॉडल की रफ़्तार बढ़ाने के नए तरीके जोड़े हैं. आम तौर पर, इन ऐक्सेलरेटर को डेलीगेट सबमॉड्यूल की मदद से दिखाया जाता है, जो अनुवादक मोड को एक्ज़ीक्यूट करने का काम करते हैं. TensorFlow Lite इन तरीकों से डेलिगेट का इस्तेमाल कर सकता है:

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

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