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


मोबाइल डिवाइसों के लिए ऑप्टिमाइज़ किए गए मॉडल का एक उदाहरण MobileNets है. इन्हें मोबाइल विज़न ऐप्लिकेशन के लिए ऑप्टिमाइज़ किया गया है. Kaggle Models में कई अन्य मॉडल दिए गए हैं. इन्हें खास तौर पर मोबाइल और एम्बेड किए गए डिवाइसों के लिए ऑप्टिमाइज़ किया गया है.
ट्रांसफ़र लर्निंग का इस्तेमाल करके, सूची में शामिल मॉडल को अपने डेटासेट पर फिर से ट्रेन किया जा सकता है.
अपने मॉडल की प्रोफ़ाइल बनाना
अपने टास्क के लिए सही कैंडिडेट मॉडल चुनने के बाद, अपने मॉडल की प्रोफ़ाइल बनाना और उसे बेंचमार्क करना एक अच्छा तरीका है. LiteRT बेंचमार्किंग टूल में एक बिल्ट-इन प्रोफ़ाइलर होता है. यह हर ऑपरेटर के हिसाब से प्रोफ़ाइलिंग के आंकड़े दिखाता है. इससे परफ़ॉर्मेंस से जुड़ी समस्याओं को समझने में मदद मिल सकती है. साथ ही, यह भी पता चल सकता है कि कंप्यूटेशन में सबसे ज़्यादा समय किन ऑपरेटर को लगता है.
आपके पास LiteRT tracing का इस्तेमाल करके, अपने Android ऐप्लिकेशन में मॉडल की प्रोफ़ाइल बनाने का विकल्प भी है. इसके लिए, Android सिस्टम ट्रेसिंग के स्टैंडर्ड टूल का इस्तेमाल करें. साथ ही, समय के हिसाब से ऑपरेटर इनवोकेशन को विज़ुअलाइज़ करने के लिए, जीयूआई पर आधारित प्रोफ़ाइलिंग टूल का इस्तेमाल करें.
ग्राफ़ में ऑपरेटरों की प्रोफ़ाइल बनाना और उन्हें ऑप्टिमाइज़ करना
अगर मॉडल में कोई ऑपरेटर बार-बार दिखता है और प्रोफ़ाइलिंग के आधार पर आपको पता चलता है कि ऑपरेटर सबसे ज़्यादा समय लेता है, तो उस ऑपरेटर को ऑप्टिमाइज़ किया जा सकता है. ऐसा बहुत कम होना चाहिए, क्योंकि TensorFlow Lite में ज़्यादातर ऑपरेटर के लिए ऑप्टिमाइज़ किए गए वर्शन उपलब्ध हैं. हालांकि, अगर आपको ऑपरेटर के काम करने की सीमाओं के बारे में पता है, तो कस्टम ऑप का तेज़ वर्शन लिखा जा सकता है. कस्टम ऑपरेटर गाइड देखें.
अपने मॉडल को ऑप्टिमाइज़ करना
मॉडल ऑप्टिमाइज़ेशन का मकसद, छोटे मॉडल बनाना है. ये मॉडल आम तौर पर ज़्यादा तेज़ी से काम करते हैं और इनमें ऊर्जा की खपत कम होती है, ताकि इन्हें मोबाइल डिवाइसों पर डिप्लॉय किया जा सके. LiteRT, ऑप्टिमाइज़ेशन की कई तकनीकों के साथ काम करता है. जैसे, क्वांटाइज़ेशन.
ज़्यादा जानकारी के लिए, मॉडल ऑप्टिमाइज़ेशन से जुड़े दस्तावेज़ देखें.
थ्रेड की संख्या में बदलाव करना
LiteRT, कई ऑपरेटर के लिए मल्टी-थ्रेड वाले कर्नल के साथ काम करता है. थ्रेड की संख्या बढ़ाई जा सकती है और ऑपरेटरों को तेज़ी से लागू किया जा सकता है. हालांकि, थ्रेड की संख्या बढ़ाने से, आपका मॉडल ज़्यादा संसाधनों और बिजली का इस्तेमाल करेगा.
कुछ ऐप्लिकेशन के लिए, ऊर्जा की खपत से ज़्यादा ज़रूरी लेटेंसी हो सकती है. इंटरप्रेटर के थ्रेड की संख्या सेट करके, थ्रेड की संख्या बढ़ाई जा सकती है. हालांकि, मल्टी-थ्रेडिंग से परफ़ॉर्मेंस में बढ़ोतरी होती है. साथ ही, यह इस बात पर निर्भर करती है कि एक साथ और क्या-क्या प्रोसेस किया जा रहा है. यह खास तौर पर मोबाइल ऐप्लिकेशन के मामले में होता है. उदाहरण के लिए, अलग-अलग टेस्ट में सिंगल-थ्रेड की तुलना में दो गुना तेज़ी से काम करने वाले टेस्ट दिख सकते हैं. हालांकि, अगर कोई दूसरा ऐप्लिकेशन एक ही समय पर काम कर रहा है, तो हो सकता है कि सिंगल-थ्रेड की तुलना में परफ़ॉर्मेंस खराब हो.
डुप्लीकेट कॉपी हटाएं
अगर आपका ऐप्लिकेशन ठीक से डिज़ाइन नहीं किया गया है, तो मॉडल को इनपुट देते समय और उससे आउटपुट पढ़ते समय, डुप्लीकेट कॉपी बन सकती हैं. पक्का करें कि डुप्लीकेट कॉपी न हों. अगर Java जैसे ज़्यादा लेवल वाले एपीआई का इस्तेमाल किया जा रहा है, तो परफ़ॉर्मेंस से जुड़ी चेतावनियों के लिए दस्तावेज़ को ध्यान से देखें. उदाहरण के लिए, अगर ByteBuffers को इनपुट के तौर पर इस्तेमाल किया जाता है, तो Java API बहुत तेज़ी से काम करता है.
प्लैटफ़ॉर्म के हिसाब से उपलब्ध टूल का इस्तेमाल करके, अपने ऐप्लिकेशन की परफ़ॉर्मेंस की जांच करें
Android Profiler और Instruments जैसे प्लैटफ़ॉर्म के हिसाब से टूल, प्रोफ़ाइलिंग की कई तरह की जानकारी देते हैं. इसका इस्तेमाल, अपने ऐप्लिकेशन को डीबग करने के लिए किया जा सकता है. ऐसा हो सकता है कि परफ़ॉर्मेंस से जुड़ी गड़बड़ी, मॉडल में न हो, बल्कि ऐप्लिकेशन कोड के उन हिस्सों में हो जो मॉडल के साथ इंटरैक्ट करते हैं. पक्का करें कि आपको अपने प्लैटफ़ॉर्म के लिए, प्लैटफ़ॉर्म के हिसाब से प्रोफ़ाइलिंग टूल और सबसे सही तरीकों के बारे में पता हो.
यह आकलन करना कि क्या आपके मॉडल को डिवाइस पर उपलब्ध हार्डवेयर ऐक्सलरेटर का इस्तेमाल करने से फ़ायदा मिलता है
LiteRT ने मॉडल को तेज़ी से चलाने के लिए नए तरीके जोड़े हैं. जैसे, जीपीयू, डीएसपी, और न्यूरल ऐक्सलरेटर जैसे तेज़ हार्डवेयर. आम तौर पर, इन ऐक्सलरेटर को delegate सबमॉड्यूल के ज़रिए दिखाया जाता है. ये इंटरप्रेटर के कुछ हिस्सों को अपने कंट्रोल में ले लेते हैं. LiteRT, डेलिगेट का इस्तेमाल इन तरीकों से कर सकता है:
- GPU डेलिगेट, Android और iOS पर उपलब्ध है. इसके लिए, OpenGL/OpenCL और Metal का इस्तेमाल किया जाता है. इन्हें आज़माने के लिए, GPU डेलिगेट देखें.
- अगर आपके पास नॉन-स्टैंडर्ड हार्डवेयर का ऐक्सेस है, तो अपना डेलिगेट बनाया जा सकता है. ज़्यादा जानकारी के लिए, LiteRT डेलिगेट देखें.
ध्यान रखें कि कुछ ऐक्सलरेटर, अलग-अलग तरह के मॉडल के लिए बेहतर तरीके से काम करते हैं. कुछ डेलिगेट सिर्फ़ फ़्लोट मॉडल या किसी खास तरीके से ऑप्टिमाइज़ किए गए मॉडल के साथ काम करते हैं. यह देखना ज़रूरी है कि हर डेलिगेट, आपके आवेदन के लिए सही विकल्प है या नहीं. इसके लिए, हर डेलिगेट की तुलना करें. उदाहरण के लिए, अगर आपके पास बहुत छोटा मॉडल है, तो हो सकता है कि मॉडल को जीपीयू पर डेलिगेट करना फ़ायदेमंद न हो. इसके उलट, ऐक्सलरेटर उन बड़े मॉडल के लिए सबसे सही विकल्प हैं जिनमें अंकगणितीय इंटेंसिटी ज़्यादा होती है.