TensorFlow Lite और TensorFlow ऑपरेटर संगतता

आप अपने मॉडल में जिन मशीन लर्निंग (एमएल) ऑपरेटरों का उपयोग करते हैं, वे TensorFlow मॉडल को TensorFlow Lite प्रारूप में परिवर्तित करने की प्रक्रिया को प्रभावित कर सकते हैं। TensorFlow Lite कनवर्टर सामान्य अनुमान मॉडल में उपयोग किए जाने वाले सीमित संख्या में TensorFlow संचालन का समर्थन करता है, जिसका अर्थ है कि प्रत्येक मॉडल सीधे परिवर्तनीय नहीं है। कनवर्टर टूल आपको अतिरिक्त ऑपरेटरों को शामिल करने की अनुमति देता है, लेकिन किसी मॉडल को इस तरह से परिवर्तित करने के लिए आपको अपने मॉडल को निष्पादित करने के लिए उपयोग किए जाने वाले TensorFlow Lite रनटाइम वातावरण को संशोधित करने की भी आवश्यकता होती है, जो Google Play सेवाओं जैसे मानक रनटाइम परिनियोजन विकल्पों का उपयोग करने की आपकी क्षमता को सीमित कर सकता है।

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

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

समर्थित ऑपरेटर

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

टेन्सरफ्लो ऑपरेटर

एमएल मॉडल ऑपरेटरों की इस श्रेणी से, रूपांतरण प्रक्रिया द्वारा समर्थित 3 प्रकार के मॉडल हैं:

  1. केवल TensorFlow Lite अंतर्निर्मित ऑपरेटर वाले मॉडल। ( अनुशंसित )
  2. अंतर्निहित ऑपरेटरों वाले मॉडल और TensorFlow कोर ऑपरेटरों का चयन करें।
  3. अंतर्निहित ऑपरेटरों, TensorFlow कोर ऑपरेटरों और/या कस्टम ऑपरेटरों वाले मॉडल।

यदि आपके मॉडल में केवल वे ऑपरेशन शामिल हैं जो मूल रूप से TensorFlow Lite द्वारा समर्थित हैं, तो आपको इसे परिवर्तित करने के लिए किसी अतिरिक्त झंडे की आवश्यकता नहीं है। यह अनुशंसित पथ है क्योंकि इस प्रकार का मॉडल आसानी से परिवर्तित हो जाएगा और डिफ़ॉल्ट TensorFlow Lite रनटाइम का उपयोग करके अनुकूलन और चलाना आसान है। आपके पास अपने मॉडल के लिए Google Play सेवाओं जैसे अधिक परिनियोजन विकल्प भी हैं। आप TensorFlow Lite कनवर्टर गाइड के साथ शुरुआत कर सकते हैं। अंतर्निहित ऑपरेटरों की सूची के लिए TensorFlow Lite Ops पृष्ठ देखें।

यदि आपको कोर लाइब्रेरी से चुनिंदा TensorFlow संचालन को शामिल करने की आवश्यकता है, तो आपको रूपांतरण के समय इसे निर्दिष्ट करना होगा और सुनिश्चित करना होगा कि आपके रनटाइम में वे संचालन शामिल हैं। विस्तृत चरणों के लिए TensorFlow ऑपरेटर्स का चयन करें विषय देखें।

जब भी संभव हो, अपने परिवर्तित मॉडल में कस्टम ऑपरेटरों को शामिल करने के अंतिम विकल्प से बचें। कस्टम ऑपरेटर या तो कई आदिम TensorFlow कोर ऑपरेटरों को मिलाकर बनाए गए ऑपरेटर होते हैं या एक पूरी तरह से नए को परिभाषित करते हैं। जब कस्टम ऑपरेटरों को परिवर्तित किया जाता है, तो वे अंतर्निहित TensorFlow Lite लाइब्रेरी के बाहर निर्भरता उत्पन्न करके समग्र मॉडल का आकार बढ़ा सकते हैं। कस्टम ऑप्स, यदि विशेष रूप से मोबाइल या डिवाइस परिनियोजन के लिए नहीं बनाए गए हैं, तो सर्वर वातावरण की तुलना में संसाधन सीमित उपकरणों पर तैनात किए जाने पर खराब प्रदर्शन हो सकता है। अंत में, चुनिंदा TensorFlow कोर ऑपरेटरों को शामिल करने की तरह, कस्टम ऑपरेटरों को आपको मॉडल रनटाइम वातावरण को संशोधित करने की आवश्यकता होती है जो आपको Google Play सेवाओं जैसी मानक रनटाइम सेवाओं का लाभ लेने से सीमित करता है।

समर्थित प्रकार

अधिकांश TensorFlow Lite ऑपरेशन फ़्लोटिंग-पॉइंट ( float32 ) और क्वांटाइज़्ड ( uint8 , int8 ) अनुमान दोनों को लक्षित करते हैं, लेकिन कई ऑप्स अभी तक tf.float16 और स्ट्रिंग्स जैसे अन्य प्रकारों के लिए नहीं हैं।

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

सीधे-सीधे रूपांतरण, निरंतर-फोल्डिंग और फ़्यूज़िंग

कई TensorFlow संचालन को TensorFlow Lite द्वारा संसाधित किया जा सकता है, भले ही उनका कोई प्रत्यक्ष समकक्ष न हो। यह उन परिचालनों का मामला है जिन्हें ग्राफ़ ( tf.identity ) से आसानी से हटाया जा सकता है, टेंसर ( tf.placeholder ) द्वारा प्रतिस्थापित किया जा सकता है, या अधिक जटिल संचालन ( tf.nn.bias_add ) में जोड़ा जा सकता है। यहां तक ​​कि कभी-कभी इनमें से किसी एक प्रक्रिया के माध्यम से कुछ समर्थित संचालन को हटाया भी जा सकता है।

यहां TensorFlow संचालन की एक गैर-विस्तृत सूची दी गई है जिसे आमतौर पर ग्राफ़ से हटा दिया जाता है:

प्रायोगिक संचालन

निम्नलिखित TensorFlow Lite ऑपरेशन मौजूद हैं, लेकिन कस्टम मॉडल के लिए तैयार नहीं हैं:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF