प्रशिक्षण के बाद मात्रा का ठहराव

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

अनुकूलन के तरीके

चुनने के लिए कई पोस्ट-प्रशिक्षण मात्राकरण विकल्प हैं। यहाँ विकल्पों और उनके द्वारा प्रदान किए जाने वाले लाभों की सारांश तालिका है:

तकनीक लाभ हार्डवेयर
गतिशील रेंज परिमाणीकरण 4x छोटा, 2x-3x स्पीडअप सी पी यू
पूर्ण पूर्णांक परिमाणीकरण 4x छोटा, 3x + स्पीडअप सीपीयू, एज टीपीयू, माइक्रोकंट्रोलर
फ्लोट 16 मात्राकरण 2x छोटा, GPU त्वरण सीपीयू, जीपीयू

निम्नलिखित निर्णय वृक्ष यह निर्धारित करने में मदद कर सकते हैं कि आपके उपयोग के मामले में कौन-सा प्रशिक्षण-परिमाणीकरण विधि सर्वोत्तम है:

प्रशिक्षण के बाद अनुकूलन विकल्प

गतिशील रेंज परिमाणीकरण

पोस्ट-प्रशिक्षण परिमाणीकरण का सबसे सरल रूप सांख्यिकीय रूप से फ्लोटिंग पॉइंट से पूर्णांक तक केवल भार को मापता है, जिसमें 8 बिट्स की सटीकता है:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()

अनुमान के अनुसार, वजन को सटीकता के 8-बिट्स से फ्लोटिंग पॉइंट में परिवर्तित किया जाता है और फ्लोटिंग-पॉइंट कर्नेल का उपयोग करके गणना की जाती है। यह रूपांतरण एक बार किया जाता है और विलंबता को कम करने के लिए कैश किया जाता है।

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

पूर्ण पूर्णांक परिमाणीकरण

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

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

def representative_dataset():
  for data in tf.data.Dataset.from_tensor_slices((images)).batch(1).take(100):
    yield [tf.dtypes.cast(data, tf.float32)]

परीक्षण प्रयोजनों के लिए, आप एक डमी डेटासेट का उपयोग इस प्रकार कर सकते हैं:

def representative_dataset():
    for _ in range(100):
      data = np.random.rand(1, 244, 244, 3)
      yield [data.astype(np.float32)]
 

फ्लोट फ़ॉलबैक के साथ पूर्णांक (डिफ़ॉल्ट फ़्लोट इनपुट / आउटपुट का उपयोग करके)

किसी मॉडल को पूरी तरह से पूर्णांक करने के लिए, लेकिन एक पूर्णांक कार्यान्वयन नहीं होने पर फ्लोट ऑपरेटरों का उपयोग करें (रूपांतरण सुनिश्चित करने के लिए आसानी से होता है), निम्न चरणों का उपयोग करें:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
tflite_quant_model = converter.convert()

पूर्णांक केवल

केवल पूर्णांक बनाना मॉडल माइक्रोकंट्रोलर्स और कोरल एज टीपीयू के लिए टेन्सरफ्लो लाइट का एक सामान्य उपयोग मामला है।

इसके अतिरिक्त, पूर्णांक केवल डिवाइस (जैसे 8-बिट माइक्रोकंट्रोलर) और एक्सेलेरेटर (जैसे कोरल एज टीपीयू) के साथ संगतता सुनिश्चित करने के लिए, आप निम्न चरणों का उपयोग करके इनपुट और आउटपुट सहित सभी ऑप्स के लिए पूर्ण पूर्णांक परिमाणीकरण लागू कर सकते हैं:

03 बी 6106 सी 80

फ्लोट 16 मात्राकरण

आप फ्लोट 16 को वेट को बढ़ाकर फ्लोटिंग पॉइंट मॉडल के आकार को कम कर सकते हैं, 16-बिट फ्लोटिंग पॉइंट नंबरों के लिए IEEE मानक। वेट के फ्लोटिंग 16 परिमाणीकरण को सक्षम करने के लिए, निम्नलिखित चरणों का उपयोग करें:

0 ए 413 बी 6 एफ 70

फ्लोट 16 मात्राकरण के लाभ इस प्रकार हैं:

  • यह मॉडल आकार को आधे से कम कर देता है (चूंकि सभी भार उनके मूल आकार के आधे हो जाते हैं)।
  • यह सटीकता में न्यूनतम नुकसान का कारण बनता है।
  • यह कुछ प्रतिनिधियों (जैसे GPU प्रतिनिधि) का समर्थन करता है जो फ्लोट 16 डेटा पर सीधे काम कर सकते हैं, जिसके परिणामस्वरूप फ्लोट 32 संकेंद्रण की तुलना में तेज निष्पादन होता है।

फ्लोट 16 परिमाणीकरण के नुकसान इस प्रकार हैं:

  • यह विलंबता को उतना कम नहीं करता जितना कि निश्चित बिंदु गणित को एक परिमाणीकरण।
  • डिफ़ॉल्ट रूप से, एक फ्लोट 16 क्वांटाइज़्ड मॉडल सीपीयू पर चलने पर फ्लोट 32 को वेट वैल्यूज़ "डिक्वांटाइज़" करेगा। (ध्यान दें कि GPU प्रतिनिधि इस निर्विवाद प्रदर्शन नहीं करेगा, क्योंकि यह फ्लोट 16 डेटा पर काम कर सकता है।)

केवल इंटीगर: 8-बिट वेट (प्रयोगात्मक) के साथ 16-बिट सक्रियण

यह एक प्रायोगिक परिमाणीकरण योजना है। यह "केवल पूर्णांक" योजना के समान है, लेकिन सक्रियण उनकी सीमा के आधार पर 16-बिट्स के आधार पर निर्धारित किए जाते हैं, 8-बिट पूर्णांक में भार की मात्रा निर्धारित की जाती है और पूर्वाग्रह को 64-बिट पूर्णांक में मात्राबद्ध किया जाता है। इसे आगे 16x8 परिमाणीकरण कहा जाता है।

इस परिमाणीकरण का मुख्य लाभ यह है कि यह सटीकता में काफी सुधार कर सकता है, लेकिन केवल मॉडल के आकार को थोड़ा बढ़ा सकता है।

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.representative_dataset = representative_dataset
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8]
tflite_quant_model = converter.convert()

यदि मॉडल में कुछ ऑपरेटरों के लिए 16x8 परिमाणीकरण का समर्थन नहीं किया जाता है, तो मॉडल अभी भी मात्रा निर्धारित किया जा सकता है, लेकिन असमर्थित ऑपरेटरों को फ्लोट में रखा गया है। इसे अनुमति देने के लिए निम्नलिखित विकल्प को target_spec में जोड़ा जाना चाहिए।

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.representative_dataset = representative_dataset
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8,
tf.lite.OpsSet.TFLITE_BUILTINS]
tflite_quant_model = converter.convert()

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

इस परिमाणीकरण का नुकसान है:

  • वर्तमान में, अनुकूलन कर्नेल कार्यान्वयन की कमी के कारण 8-बिट पूर्ण पूर्णांक की तुलना में निस्संदेह धीमा है।
  • वर्तमान में यह मौजूदा हार्डवेयर त्वरित TFLite प्रतिनिधियों के साथ असंगत है।

इस परिमाणीकरण मोड के लिए एक ट्यूटोरियल यहाँ पाया जा सकता है

मॉडल की सटीकता

चूंकि वेट को पोस्ट ट्रेनिंग की मात्रा निर्धारित की जाती है, विशेष रूप से छोटे नेटवर्क के लिए सटीकता की हानि हो सकती है। TensorFlow Lite मॉडल रिपॉजिटरी में विशिष्ट नेटवर्क के लिए पूर्व-प्रशिक्षित पूरी तरह से मात्रात्मक मॉडल प्रदान किए जाते हैं। यह सत्यापित करने के लिए मात्रात्मक मॉडल की सटीकता की जांच करना महत्वपूर्ण है कि सटीकता में कोई भी गिरावट स्वीकार्य सीमा के भीतर है। TensorFlow Lite मॉडल सटीकता का मूल्यांकन करने के लिए उपकरण हैं।

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

परिमाणित दसियों के लिए प्रतिनिधित्व

8-बिट परिमाणीकरण निम्नलिखित सूत्र का उपयोग करके फ्लोटिंग पॉइंट मानों को अनुमानित करता है।

$$real\_value = (int8\_value - zero\_point) \times scale$$

प्रतिनिधित्व के दो मुख्य भाग हैं:

  • प्रति-अक्ष (उर्फ प्रति-चैनल) या प्रति-दसवाँ वज़न int8 दो के पूरक मूल्यों द्वारा दर्शाया गया है [0 -127, 127] जिसमें शून्य-अंक 0 के बराबर है।

  • [-128, १२or], रेंज में [complement -१२or, १२ations] के साथ प्रति-दशम सक्रियण मानों द्वारा प्रति-टेनर सक्रियण / इनपुट को दर्शाया गया है [-128, १२ 127]।

हमारी परिमाणीकरण योजना के विस्तृत दृश्य के लिए, कृपया हमारे परिमाणीकरण युक्ति को देखें । हार्डवेयर विक्रेता जो TensorFlow Lite के प्रतिनिधि इंटरफ़ेस में प्लग करना चाहते हैं, उन्हें वहां वर्णित मात्राकरण योजना को लागू करने के लिए प्रोत्साहित किया जाता है।