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

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

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

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

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

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

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

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

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

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

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

ग्राफ़ में प्रोफ़ाइल और ऑप्टिमाइज़ ऑपरेटर

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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