अपने मशीन लर्निंग (एमएल) मॉडल को चलाने के लिए ग्राफिक्स प्रोसेसिंग यूनिट (जीपीयू) का उपयोग करना आपके मॉडल के प्रदर्शन और आपके एमएल-सक्षम अनुप्रयोगों के उपयोगकर्ता अनुभव में नाटकीय रूप से सुधार कर सकता है। TensorFlow Lite हार्डवेयर ड्राइवर के माध्यम से GPU और अन्य विशेष प्रोसेसर के उपयोग को सक्षम बनाता है जिसे डेलिगेट कहा जाता है। अपने TensorFlow Lite ML अनुप्रयोगों के साथ GPU के उपयोग को सक्षम करने से निम्नलिखित लाभ मिल सकते हैं:
- गति - GPU बड़े पैमाने पर समानांतर वर्कलोड के उच्च थ्रूपुट के लिए बनाए गए हैं। यह डिज़ाइन उन्हें गहरे तंत्रिका जाल के लिए अच्छी तरह से अनुकूल बनाता है, जिसमें बड़ी संख्या में ऑपरेटर होते हैं, प्रत्येक इनपुट टेंसर पर काम करते हैं जिन्हें समानांतर में संसाधित किया जा सकता है, जिसके परिणामस्वरूप आमतौर पर कम विलंबता होती है। सर्वोत्तम परिदृश्य में, आपके मॉडल को GPU पर चलाने से रीयल-टाइम अनुप्रयोगों को सक्षम करने के लिए पर्याप्त तेज़ी से चल सकता है जो पहले संभव नहीं थे।
- शक्ति दक्षता - GPU बहुत ही कुशल और अनुकूलित तरीके से ML संगणना करते हैं, आमतौर पर कम बिजली की खपत करते हैं और CPU पर चलने वाले समान कार्य की तुलना में कम गर्मी उत्पन्न करते हैं।
यह दस्तावेज़ TensorFlow Lite में GPU समर्थन और GPU प्रोसेसर के लिए कुछ उन्नत उपयोगों का अवलोकन प्रदान करता है। विशिष्ट प्लेटफ़ॉर्म पर GPU समर्थन लागू करने के बारे में अधिक विशिष्ट जानकारी के लिए, निम्नलिखित मार्गदर्शिकाएँ देखें:
GPU ML संचालन समर्थन
TensorFlow ML संचालन, या ops , को TensorFlow Lite GPU प्रतिनिधि द्वारा त्वरित किया जा सकता है, इसकी कुछ सीमाएँ हैं। प्रतिनिधि 16-बिट और 32-बिट फ्लोट परिशुद्धता में निम्नलिखित ऑप्स का समर्थन करता है:
-
ADD
-
AVERAGE_POOL_2D
-
CONCATENATION
-
CONV_2D
-
DEPTHWISE_CONV_2D v1-2
-
EXP
-
FULLY_CONNECTED
-
LOGISTIC
-
LSTM v2 (Basic LSTM only)
-
MAX_POOL_2D
-
MAXIMUM
-
MINIMUM
-
MUL
-
PAD
-
PRELU
-
RELU
-
RELU6
-
RESHAPE
-
RESIZE_BILINEAR v1-3
-
SOFTMAX
-
STRIDED_SLICE
-
SUB
-
TRANSPOSE_CONV
डिफ़ॉल्ट रूप से, सभी ऑप्स केवल संस्करण 1 पर समर्थित हैं। परिमाणीकरण समर्थन को सक्षम करने से उपयुक्त संस्करण सक्षम होते हैं, उदाहरण के लिए, V2 जोड़ें।
समस्या निवारण GPU समर्थन
यदि कुछ ऑप्स GPU प्रतिनिधि द्वारा समर्थित नहीं हैं, तो फ्रेमवर्क केवल GPU पर ग्राफ़ का एक भाग और CPU पर शेष भाग चलाएगा। सीपीयू/जीपीयू तुल्यकालन की उच्च लागत के कारण, इस तरह के एक विभाजन निष्पादन मोड के परिणामस्वरूप अक्सर धीमी गति से प्रदर्शन होता है जब पूरे नेटवर्क को अकेले सीपीयू पर चलाया जाता है। इस मामले में, एप्लिकेशन चेतावनी उत्पन्न करता है, जैसे:
WARNING: op code #42 cannot be handled by this delegate.
इस प्रकार की विफलताओं के लिए कोई कॉलबैक नहीं है, क्योंकि यह वास्तविक रन-टाइम विफलता नहीं है। GPU प्रतिनिधि के साथ अपने मॉडल के निष्पादन का परीक्षण करते समय, आपको इन चेतावनियों के लिए सतर्क रहना चाहिए। इन चेतावनियों की एक बड़ी संख्या यह संकेत दे सकती है कि आपका मॉडल GPU त्वरण के लिए उपयोग के लिए सबसे उपयुक्त नहीं है, और मॉडल के रीफैक्टरिंग की आवश्यकता हो सकती है।
उदाहरण मॉडल
निम्नलिखित उदाहरण मॉडल TensorFlow Lite के साथ GPU त्वरण का लाभ उठाने के लिए बनाए गए हैं और संदर्भ और परीक्षण के लिए प्रदान किए गए हैं:
- MobileNet v1 (224x224) छवि वर्गीकरण - मोबाइल और एम्बेडेड आधारित दृष्टि अनुप्रयोगों के लिए डिज़ाइन किया गया एक छवि वर्गीकरण मॉडल। ( मॉडल )
- डीपलैब सेगमेंटेशन (257x257) - इमेज सेगमेंटेशन मॉडल जो इनपुट इमेज में प्रत्येक पिक्सेल को सिमेंटिक लेबल प्रदान करता है, जैसे कि कुत्ता, बिल्ली, कार। ( मॉडल )
- मोबाइलनेट एसएसडी ऑब्जेक्ट डिटेक्शन - एक छवि वर्गीकरण मॉडल जो बाउंडिंग बॉक्स के साथ कई वस्तुओं का पता लगाता है। ( मॉडल )
- मुद्रा अनुमान के लिए पोज़नेट - एक दृष्टि मॉडल जो छवि या वीडियो में लोगों के पोज़ का अनुमान लगाता है। ( मॉडल )
GPU के लिए अनुकूलन
TensorFlow Lite GPU प्रतिनिधि का उपयोग करके GPU हार्डवेयर पर मॉडल चलाते समय निम्नलिखित तकनीकें आपको बेहतर प्रदर्शन प्राप्त करने में मदद कर सकती हैं:
रीशेप ऑपरेशंस - कुछ ऑपरेशन जो सीपीयू पर त्वरित होते हैं, मोबाइल उपकरणों पर जीपीयू के लिए उच्च लागत हो सकती है। BATCH_TO_SPACE ,
SPACE_TO_BATCH
,SPACE_TO_DEPTH
, इत्यादि सहितBATCH_TO_SPACE
ऑपरेशन चलाना विशेष रूप से महंगा है। आपको रीशेप ऑपरेशंस के उपयोग की बारीकी से जांच करनी चाहिए, और विचार करना चाहिए कि इसे केवल डेटा की खोज के लिए या आपके मॉडल के शुरुआती पुनरावृत्तियों के लिए लागू किया गया हो। उन्हें हटाने से प्रदर्शन में काफी सुधार हो सकता है।छवि डेटा चैनल - GPU पर, टेंसर डेटा को 4-चैनलों में विभाजित किया जाता है, और इसलिए
[B,H,W,5]
आकार के साथ एक टेंसर पर एक गणना आकार के टेंसर पर उसी के बारे में प्रदर्शन करती है[B,H,W,8]
, लेकिन[B,H,W,4]
से काफी खराब है। यदि आप जिस कैमरा हार्डवेयर का उपयोग कर रहे हैं, वह RGBA में छवि फ़्रेम का समर्थन करता है, तो उस 4-चैनल इनपुट को फीड करना काफी तेज़ है, क्योंकि यह 3-चैनल RGB से 4-चैनल RGBX की मेमोरी कॉपी से बचता है।मोबाइल-अनुकूलित मॉडल - सर्वोत्तम प्रदर्शन के लिए, आपको अपने क्लासिफायरियर को मोबाइल-अनुकूलित नेटवर्क आर्किटेक्चर के साथ फिर से प्रशिक्षित करने पर विचार करना चाहिए। ऑन-डिवाइस अनुमान के लिए अनुकूलन मोबाइल हार्डवेयर सुविधाओं का लाभ उठाकर विलंबता और बिजली की खपत को नाटकीय रूप से कम कर सकता है।
उन्नत GPU समर्थन
आप अपने मॉडल के लिए परिमाणीकरण और क्रमांकन सहित बेहतर प्रदर्शन को सक्षम करने के लिए GPU प्रसंस्करण के साथ अतिरिक्त, उन्नत तकनीकों का उपयोग कर सकते हैं। निम्नलिखित खंड इन तकनीकों का अधिक विस्तार से वर्णन करते हैं।
परिमाणित मॉडल का उपयोग करना
यह खंड बताता है कि कैसे GPU प्रतिनिधि 8-बिट मात्रात्मक मॉडल को तेज करता है, जिसमें निम्न शामिल हैं:
- क्वांटिज़ेशन-जागरूक प्रशिक्षण के साथ प्रशिक्षित मॉडल
- पोस्ट-ट्रेनिंग डायनेमिक-रेंज क्वांटिज़ेशन
- प्रशिक्षण के बाद पूर्ण-पूर्णांक परिमाणीकरण
प्रदर्शन को अनुकूलित करने के लिए, ऐसे मॉडल का उपयोग करें जिनमें फ्लोटिंग-पॉइंट इनपुट और आउटपुट टेंसर दोनों हों।
यह कैसे काम करता है?
चूंकि GPU बैकएंड केवल फ़्लोटिंग-पॉइंट निष्पादन का समर्थन करता है, हम इसे मूल मॉडल का 'फ़्लोटिंग-पॉइंट व्यू' देकर परिमाणित मॉडल चलाते हैं। उच्च स्तर पर, इसमें निम्नलिखित चरण शामिल हैं:
लगातार टेंसर (जैसे वज़न/पूर्वाग्रह) को GPU मेमोरी में एक बार डी-क्वांटाइज़ किया जाता है। यह कार्रवाई तब होती है जब प्रतिनिधि को TensorFlow Lite के लिए सक्षम किया जाता है।
GPU प्रोग्राम के इनपुट और आउटपुट , यदि 8-बिट मात्राबद्ध हैं, तो प्रत्येक अनुमान के लिए डी-मात्राबद्ध और मात्राबद्ध (क्रमशः) हैं। यह ऑपरेशन CPU पर TensorFlow Lite के अनुकूलित कर्नेल का उपयोग करके किया जाता है।
परिमाणीकरण सिमुलेटर संचालन के बीच मात्रात्मक व्यवहार की नकल करने के लिए डाले जाते हैं। यह दृष्टिकोण उन मॉडलों के लिए आवश्यक है जहां ऑप्स सक्रियण की अपेक्षा करता है कि वह परिमाणीकरण के दौरान सीखी गई सीमाओं का पालन करे।
GPU प्रतिनिधि के साथ इस सुविधा को सक्षम करने के बारे में जानकारी के लिए, निम्नलिखित देखें:
- Android पर GPU के साथ परिमाणित मॉडल का उपयोग करना
- IOS पर GPU के साथ परिमाणित मॉडल का उपयोग करना
क्रमांकन के साथ आरंभीकरण समय को कम करना
GPU प्रतिनिधि सुविधा आपको पूर्व-संकलित कर्नेल कोड से लोड करने की अनुमति देती है और मॉडल डेटा को क्रमबद्ध और पिछले रन से डिस्क पर सहेजा जाता है। यह दृष्टिकोण पुन: संकलन से बचता है और स्टार्टअप समय को 90% तक कम कर सकता है। यह सुधार समय की बचत के लिए डिस्क स्थान का आदान-प्रदान करके प्राप्त किया जाता है। आप इस सुविधा को कुछ कॉन्फ़िगरेशन विकल्पों के साथ सक्षम कर सकते हैं, जैसा कि निम्नलिखित कोड उदाहरणों में दिखाया गया है:
सी++
TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default(); options.experimental_flags |= TFLITE_GPU_EXPERIMENTAL_FLAGS_ENABLE_SERIALIZATION; options.serialization_dir = kTmpDir; options.model_token = kModelToken; auto* delegate = TfLiteGpuDelegateV2Create(options); if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
जावा
GpuDelegate delegate = new GpuDelegate( new GpuDelegate.Options().setSerializationParams( /* serializationDir= */ serializationDir, /* modelToken= */ modelToken)); Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
क्रमांकन सुविधा का उपयोग करते समय, सुनिश्चित करें कि आपका कोड इन कार्यान्वयन नियमों का अनुपालन करता है:
- क्रमांकन डेटा को एक निर्देशिका में संग्रहीत करें जो अन्य ऐप्स के लिए सुलभ नहीं है। Android उपकरणों पर,
getCodeCacheDir()
का उपयोग करें जो उस स्थान को इंगित करता है जो वर्तमान एप्लिकेशन के लिए निजी है। - विशिष्ट मॉडल के लिए मॉडल टोकन डिवाइस के लिए अद्वितीय होना चाहिए। आप
farmhash::Fingerprint64
जैसे पुस्तकालयों का उपयोग करके मॉडल डेटा से एक फिंगरप्रिंट उत्पन्न करके एक मॉडल टोकन की गणना कर सकते हैं।