मॉडल ऑप्टिमाइज़ेशन

एज डिवाइसों में अक्सर सीमित मेमोरी या कंप्यूटेशनल पावर होती है. मॉडल पर कई तरह के ऑप्टिमाइज़ेशन लागू किए जा सकते हैं, ताकि उन्हें इन सीमाओं के अंदर चलाया जा सके. इसके अलावा, कुछ ऑप्टिमाइज़ेशन तेज़ी से अनुमान लगाने के लिए खास हार्डवेयर का इस्तेमाल करने की अनुमति देते हैं.

TensorFlow Lite और TensorFlow मॉडल ऑप्टिमाइज़ेशन टूलकिट में ऐसे टूल मिलते हैं जिनसे अनुमान को ऑप्टिमाइज़ करने में आने वाली समस्याओं को कम किया जा सकता है.

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

मॉडल को ऑप्टिमाइज़ क्यों किया जाना चाहिए

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

साइज़ कम करने की सुविधा

मॉडल का साइज़ कम करने के लिए, ऑप्टिमाइज़ेशन के कुछ तरीकों का इस्तेमाल किया जा सकता है. छोटे मॉडल के ये फ़ायदे हैं:

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

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

इंतज़ार के समय में कमी

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

फ़िलहाल, क्वांटाइज़ेशन का इस्तेमाल इंतज़ार के समय को कम करने के लिए किया जा सकता है, क्योंकि अनुमान के दौरान होने वाली कैलकुलेशन को आसान बनाया जा सकता है. हालांकि, ऐसा करने में कुछ कमियां हो सकती हैं.

ऐक्सेलरेटर के काम करने की सुविधा

कुछ हार्डवेयर ऐक्सेलरेटर, जैसे कि Edge TPU, सही तरीके से ऑप्टिमाइज़ किए गए मॉडल के साथ अनुमान को बहुत तेज़ी से चला सकते हैं.

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

ट्रेड-ऑफ़

ऑप्टिमाइज़ेशन की वजह से, मॉडल के सटीक होने में बदलाव हो सकते हैं. ऐप्लिकेशन बनाते समय इस पर ध्यान देना चाहिए.

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

ऑप्टिमाइज़ेशन के टाइप

फ़िलहाल, TensorFlow Lite, संख्या बढ़ाने, छांटने का तरीका, और क्लस्टरिंग के ज़रिए ऑप्टिमाइज़ेशन की सुविधा देता है.

ये TensorFlow मॉडल ऑप्टिमाइज़ेशन टूलकिट का हिस्सा हैं. इससे मॉडल को ऑप्टिमाइज़ करने की उन तकनीकों के संसाधन मिलते हैं जो TensorFlow के साथ काम करती हैं.

क्वांटाइज़ेशन

क्वांटाइज़ेशन, किसी मॉडल के पैरामीटर को दिखाने के लिए इस्तेमाल की जाने वाली संख्याओं को कम करके काम करता है. ये पैरामीटर, डिफ़ॉल्ट रूप से 32-बिट फ़्लोटिंग पॉइंट नंबर होते हैं. इससे, मॉडल का साइज़ छोटा हो जाता है और कंप्यूटेशन तेज़ी से काम करता है.

TensorFlow Lite में, इस तरह के क्वांटाइज़ेशन की सुविधा उपलब्ध है:

तकनीक डेटा से जुड़ी ज़रूरी शर्तें साइज़ कम करने की सुविधा सटीक जानकारी इस्तेमाल किया जा सकने वाला हार्डवेयर
ट्रेनिंग के बाद, फ़्लोट16 को ट्रैक करने की सुविधा कोई डेटा नहीं मिला 50% तक नतीजों में ज़्यादा सटीक होने की कमी सीपीयू (CPU), जीपीयू
ट्रेनिंग के बाद डाइनैमिक रेंज की संख्या को ट्रैक करना कोई डेटा नहीं मिला 75% तक सबसे कम सटीक जानकारी सीपीयू, जीपीयू (Android)
ट्रेनिंग के बाद पूर्णांक की संख्या तय करना बिना लेबल वाला प्रतिनिधि सैंपल 75% तक ऐप्लिकेशन के सटीक होने की थोड़ी-बहुत गड़बड़ी सीपीयू (CPU), जीपीयू (Android), EdgeTPU
क्वांटाइज़ेशन की जानकारी से जुड़ी ट्रेनिंग लेबल किया गया ट्रेनिंग डेटा 75% तक सबसे कम सटीक जानकारी सीपीयू (CPU), जीपीयू (Android), EdgeTPU

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

क्वांटाइज़ेशन-डिसिशन-ट्री

नीचे कुछ मॉडल पर, ट्रेनिंग के बाद संख्या बढ़ाने और संख्या बताने की जानकारी देने वाली ट्रेनिंग में लगने वाले समय और सटीक होने के नतीजे दिए गए हैं. इंतज़ार के समय को मापने के सभी आंकड़े एक ही बड़े कोर सीपीयू का इस्तेमाल करके, Pixel 2 डिवाइस पर मापे जाते हैं. जैसे-जैसे टूलकिट बेहतर होता जाएगा, वैसे-वैसे यहां आंकड़े भी बेहतर होंगे:

मॉडल सबसे सटीक जानकारी (मूल) टॉप-1 सटीक (ट्रेनिंग के बाद की संख्या के हिसाब से) टॉप-1 सटीक (क्वांटाइज़ेशन अवेयर ट्रेनिंग) इंतज़ार का समय (मूल) (मि॰से॰) इंतज़ार का समय (ट्रेनिंग के बाद का समय) (मि॰से॰) इंतज़ार का समय (क्वांटाइज़ेशन अवेयर ट्रेनिंग) (मि॰से॰) साइज़ (मूल) (एमबी) साइज़ (ऑप्टिमाइज़ किया गया) (एमबी)
Mobilenet-v1-1-224यूरो0.6570.70 12411264यूरो4.3
Mobilenet-v2-1-224यूरो0.637यूरो 899854143.6
Inception_v3यूरो0.772यूरो 1130845543यूरोयूरो
Resnet_v2_1010.770यूरोलागू नहीं 39732868लागू नहीं178.3यूरो
टेबल 1 CNN के चुनिंदा मॉडल के लिए, संख्या बढ़ाने के मॉडल के फ़ायदे

int16 ऐक्टिवेशन और int8 वेट के साथ फ़ुल इंटीजर क्वांटाइज़ेशन

int16 ऐक्टिवेशन के साथ क्वांटाइज़ेशन एक फ़ुल इंटीजर क्वांटाइज़ेशन स्कीम है, जिसमें int16 में ऐक्टिवेशन और इंटी8 में वेट (महत्व) शामिल हैं. यह मोड, फ़ुल इंटीजर क्वांटाइज़ेशन स्कीम की तुलना में क्वांटाइज़्ड मॉडल को ज़्यादा सटीक बनाता है. इसका सुझाव तब दिया जाता है, जब चालू करने को क्वांटाइज़ेशन के लिए संवेदनशील होना चाहिए.

ध्यान दें: फ़िलहाल, इस संख्या बढ़ाने की स्कीम के लिए, TFLite में सिर्फ़ ऐसे रेफ़रंस कर्नेल लागू करने की सुविधा उपलब्ध है जिन्हें ऑप्टिमाइज़ नहीं किया गया है. इसलिए, int8 kernel की तुलना में, TFLite में डिफ़ॉल्ट रूप से परफ़ॉर्मेंस धीमी होगी. फ़िलहाल, इस मोड के सभी फ़ायदे खास हार्डवेयर या कस्टम सॉफ़्टवेयर की मदद से ऐक्सेस किए जा सकते हैं.

इस मोड का फ़ायदा पाने वाले कुछ मॉडल के लिए, सबसे सटीक नतीजे नीचे दिए गए हैं.

मॉडल सटीक मेट्रिक टाइप सटीक (फ़्लोट 32 ऐक्टिवेशन) सटीक होने की जानकारी (int8 ऐक्टिवेशन) सटीक होने की जानकारी (int16 ऐक्टिवेशन)
Wav2letterWER6.7%7.7% 7.2%
डीप स्पीच 0.5.1 (अनरोल किया गया)सीईआर6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1टॉप-1 ऐक्यूरसी0.7062यूरो 0.6936
MobileNetV2टॉप-1 ऐक्यूरसी0.7180.7,126 0.7137
MobileBertF1(एग्ज़ैक्ट मैच)88.81(81.23)2.08(0) 88.73(81.15)
टेबल 2 int16 ऐक्टिवेशन के साथ मॉडल क्वांटाइज़ेशन के फ़ायदे

काट-छांट करना

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

आने वाले समय में, TensorFlow Lite, छोटे किए गए मॉडल के लिए इंतज़ार के समय को कम करने की सुविधा देगा.

गुच्छ

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

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

डेवलपमेंट वर्कफ़्लो

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

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

अगर आपको अपने मॉडल के साइज़ को और कम करना है, तो अपने मॉडल की संख्या तय करने से पहले, काट-छांट करें और/या क्लस्टरिंग करें.