इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

Profiler का उपयोग करके TensorFlow प्रदर्शन का अनुकूलन करें

अपने TensorFlow मॉडल के प्रदर्शन को ट्रैक करने के लिए Profiler के पास उपलब्ध टूल का उपयोग करें। देखें कि आपका मॉडल होस्ट (CPU), डिवाइस (GPU) पर या होस्ट और डिवाइस (दोनों) के संयोजन पर कैसा प्रदर्शन करता है।

प्रोफाइलिंग आपको अपने मॉडल में विभिन्न TensorFlow संचालन (ops) के हार्डवेयर संसाधन की खपत (समय और मेमोरी) को समझने में मदद करता है और प्रदर्शन की बाधाओं को हल करता है और अंत में, मॉडल को तेजी से निष्पादित करता है।

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

यदि आप क्लाउड टीपीयू पर अपने मॉडल के प्रदर्शन को प्रोफाइल करना चाहते हैं, तो क्लाउड टीपीयू गाइड को देखें।

Profiler और GPU पूर्वापेक्षाएँ स्थापित करें

GitHub रिपॉजिटरी से install_and_run.py स्क्रिप्ट डाउनलोड और चलाकर प्रोफाइलर को स्थापित करें।

GPU पर प्रोफ़ाइल करने के लिए, आपको चाहिए:

  1. CUDA® टूलकिट 10.1 या नए को स्थापित करें । CUDA® टूलकिट 10.1 केवल एकल GPU प्रोफाइलिंग का समर्थन करता है। कई GPUs प्रोफ़ाइल के लिए, देखें प्रोफ़ाइल कई GPUs । सुनिश्चित करें कि आपके द्वारा स्थापित CUDA® ड्राइवर संस्करण लिनक्स के लिए कम से कम 440.33 या विंडोज के लिए 441.22 है।
  2. सुनिश्चित करें कि CUPTI रास्ते में मौजूद है:
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | \
grep libcupti

यदि आपके पास रास्ते में CUPTI नहीं है, तो अपनी संस्थापन निर्देशिका को $LD_LIBRARY_PATH पर्यावरण चर पर चलने से पहले छोड़ दें:

export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH

CUPTI लायब्रेरी को सत्यापित करने के लिए ldconfig कमांड को फिर से ऊपर चलाएँ।

प्रोफ़ाइल कई GPU

TensorFlow वर्तमान में केवल एक होस्ट सिस्टम के लिए कई GPU प्रोफाइलिंग का समर्थन करता है। मल्टी-होस्ट सिस्टम के लिए एकाधिक GPU प्रोफाइलिंग वर्तमान में समर्थित नहीं है। CUDA® टूलकिट 10.2 स्थापित करें या बाद में एकाधिक GPU प्रोफाइल करने के लिए। चूंकि TensorFlow केवल 10.1 तक CUDA® टूलकिट संस्करणों का समर्थन करता है, libcudart.so.10.1 और libcupti.so.10.1 को प्रतीकात्मक लिंक libcupti.so.10.1

sudo ln -s /usr/local/cuda/lib64/libcudart.so.10.2 /usr/local/cuda/lib64/libcudart.so.10.1
sudo ln -s /usr/local/cuda/extras/CUPTI/lib64/libcupti.so.10.2 /usr/local/cuda/extras/CUPTI/lib64/libcupti.so.10.1

बहु-कार्यकर्ता जीपीयू कॉन्फ़िगरेशन को प्रोफाइल करने के लिए, स्वतंत्र रूप से व्यक्तिगत श्रमिकों को प्रोफाइल करें।

विशेषाधिकार के मुद्दों को हल करें

जब आप Docker वातावरण में या Linux पर CUDA® टूलकिट 10.1 के साथ प्रोफाइलिंग चलाते हैं, तो आप अपर्याप्त CUPTI विशेषाधिकारों ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ) से संबंधित समस्याओं का सामना कर सकते हैं। लिनक्स पर इन मुद्दों को कैसे हल कर सकते हैं, इसके बारे में और जानने के लिए NVIDIA डेवलपर डॉक्स देखें।

डॉकर वातावरण में CUPTI विशेषाधिकार के मुद्दों को हल करने के लिए, चलाएं

docker run option '--privileged=true'

प्रोफाइलर उपकरण

TensorBoard में प्रोफाइल टैब से प्रोफाइलर तक पहुंचें जो आपके द्वारा कुछ मॉडल डेटा कैप्चर करने के बाद ही दिखाई देता है।

प्रोफाइलर के पास प्रदर्शन विश्लेषण में मदद करने के लिए उपकरणों का चयन है:

  • अवलोकन पृष्ठ
  • इनपुट पाइपलाइन विश्लेषक
  • TensorFlow आँकड़े
  • ट्रेस दर्शक
  • GPU कर्नेल आँकड़े
  • मेमोरी प्रोफाइल टूल

अवलोकन पृष्ठ

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

अवलोकन पृष्ठ डेटा निम्नानुसार प्रदर्शित करता है:

छवि

  • प्रदर्शन सारांश - आपके मॉडल प्रदर्शन का एक उच्च-स्तरीय सारांश प्रदर्शित करता है। प्रदर्शन सारांश के दो भाग हैं:

    1. स्टेप-टाइम ब्रेकडाउन - जहां खर्च किया जाता है, वहां की कई श्रेणियों में औसत चरण समय को तोड़ता है:

      • संकलन - संकलित गुठली का समय
      • इनपुट - समय पढ़ने इनपुट डेटा बिताया
      • आउटपुट - आउटपुट डेटा पढ़ने में समय व्यतीत होता है
      • कर्नेल लॉन्च - होस्ट द्वारा गुठली लॉन्च करने के लिए बिताया गया समय
      • मेजबान गणना समय
      • डिवाइस-टू-डिवाइस संचार समय
      • ऑन-डिवाइस गणना समय
      • पायथन ओवरहेड सहित सभी अन्य
    2. डिवाइस कंप्यूट प्रीडिसेस - 16 और 32-बिट कंप्यूटर्स का उपयोग करने वाले डिवाइस कंप्यूट समय का प्रतिशत रिपोर्ट करता है

  • स्टेप-टाइम ग्राफ - नमूना चरणों में डिवाइस चरण समय (मिलीसेकंड में) का एक ग्राफ प्रदर्शित करता है। प्रत्येक चरण को कई श्रेणियों (विभिन्न रंगों के साथ) में तोड़ा जाता है जहां समय व्यतीत होता है। रेड एरिया उस समय के भाग से मेल खाता है जब डिवाइस होस्ट से इनपुट डेटा के इंतजार में बेकार बैठे थे। हरा क्षेत्र दिखाता है कि डिवाइस वास्तव में कितना समय काम कर रहा था

  • डिवाइस पर शीर्ष 10 TensorFlow संचालन - सबसे लंबे समय तक चलने वाले डिवाइस को प्रदर्शित करता है।

    प्रत्येक पंक्ति एक सेशन का सेल्फ टाइम (सभी ऑप्स द्वारा लिए गए समय के प्रतिशत के रूप में), संचयी समय, श्रेणी और नाम प्रदर्शित करती है।

  • रन पर्यावरण - मॉडल रन पर्यावरण सहित एक उच्च-स्तरीय सारांश प्रदर्शित करता है:

    • उपयोग किए जाने वाले मेजबानों की संख्या
    • डिवाइस प्रकार (GPU / TPU)
    • डिवाइस कोर की संख्या
  • अगले चरणों के लिए अनुशंसा - रिपोर्ट जब एक मॉडल बाध्य होता है और मॉडल प्रदर्शन बाधाओं का पता लगाने और हल करने के लिए उपयोग किए जा सकने वाले टूल की सिफारिश करता है

इनपुट पाइपलाइन विश्लेषक

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

फ़ाइलों से रिकॉर्ड पढ़ने के लिए एक विशिष्ट पाइपलाइन में निम्नलिखित चरण हैं:

  1. फाइल पढ़ना
  2. फ़ाइल प्रीप्रोसेसिंग (वैकल्पिक)
  3. होस्ट से डिवाइस तक फ़ाइल स्थानांतरण

एक अयोग्य इनपुट पाइपलाइन आपके आवेदन को गंभीर रूप से धीमा कर सकती है। किसी अनुप्रयोग को इनपुट बाउंड माना जाता है जब वह इनपुट पाइपलाइन में समय का एक महत्वपूर्ण हिस्सा खर्च करता है। इनपुट पाइपलाइन विश्लेषक से प्राप्त अंतर्दृष्टि का उपयोग यह समझने के लिए करें कि इनपुट पाइपलाइन कहां अक्षम है।

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

अपने डेटा इनपुट पाइपलाइनों को अनुकूलित करने के लिए अनुशंसित सर्वोत्तम प्रथाओं के लिए इनपुट पाइपलाइन प्रदर्शन पर मार्गदर्शन देखें।

इनपुट पाइपलाइन डैशबोर्ड

इनपुट पाइपलाइन विश्लेषक खोलने के लिए, प्रोफ़ाइल का चयन करें, फिर टूल ड्रॉपडाउन से input_pipeline_analyzer का चयन करें।

छवि

डैशबोर्ड में तीन खंड हैं:

  1. सारांश - इस बारे में जानकारी के साथ समग्र इनपुट पाइपलाइन को सारांशित करता है कि आपका आवेदन इनपुट बाध्य है और यदि हां, तो कितना
  2. डिवाइस-साइड विश्लेषण - प्रत्येक चरण में कोर पर इनपुट डेटा की प्रतीक्षा में डिवाइस चरण-समय और डिवाइस समय की सीमा सहित विस्तृत, डिवाइस-साइड विश्लेषण परिणाम प्रदर्शित करता है
  3. मेजबान-पक्ष विश्लेषण - मेजबान पक्ष पर एक विस्तृत विश्लेषण दिखाता है, जिसमें मेजबान पर इनपुट प्रसंस्करण समय का टूटना शामिल है

इनपुट पाइपलाइन सारांश

यदि आपका कार्यक्रम होस्ट से इनपुट के इंतजार में खर्च किए गए डिवाइस समय का प्रतिशत प्रस्तुत करता है, तो सारांश रिपोर्ट करता है। यदि आप एक मानक इनपुट पाइपलाइन का उपयोग कर रहे हैं जो कि उपकरण है, तो उपकरण रिपोर्ट करता है जहां अधिकांश इनपुट प्रसंस्करण समय खर्च होता है।

डिवाइस-साइड विश्लेषण

डिवाइस-साइड विश्लेषण होस्ट पर डिवाइस बनाम खर्च किए गए समय पर अंतर्दृष्टि प्रदान करता है और होस्ट से इनपुट डेटा के इंतजार में डिवाइस समय कितना खर्च किया गया था।

  1. चरण संख्या के विरुद्ध प्लॉट किया गया समय - सभी चरणों में नमूना किए गए डिवाइस चरण समय (मिलीसेकंड में) का ग्राफ़ प्रदर्शित करता है। प्रत्येक चरण को कई श्रेणियों (विभिन्न रंगों के साथ) में तोड़ा जाता है जहां समय व्यतीत होता है। रेड एरिया उस समय के भाग से मेल खाता है जब डिवाइस होस्ट से इनपुट डेटा के इंतजार में बेकार बैठे थे। हरा क्षेत्र दिखाता है कि डिवाइस वास्तव में कितना समय काम कर रहा था
  2. चरण समय आँकड़े - डिवाइस चरण समय के औसत, मानक विचलन और रेंज ([न्यूनतम, अधिकतम]) की रिपोर्ट करता है

होस्ट-साइड विश्लेषण

मेजबान-पक्ष विश्लेषण इनपुट प्रसंस्करण समय ( tf.data एपीआई ऑप्स पर बिताए समय) के टूटने की रिपोर्ट को कई श्रेणियों में होस्ट करता है:

  • डिमांड पर फाइलों से डेटा पढ़ना - कैशिंग, प्रीफेटिंग और इंटरलेविंग के बिना फाइलों से डेटा पढ़ने में समय व्यतीत होता है
  • पहले से फाइलों से डेटा पढ़ना - कैशिंग, प्रीफ़ेटिंग और इंटरलेविंग सहित फ़ाइलों को पढ़ने में समय व्यतीत होता है
  • डेटा प्रीप्रोसेसिंग - इमेज अपघटन जैसे प्रीप्रोसेसिंग ऑप्स पर बिताया गया समय
  • डिवाइस में ट्रांसफर किए जाने के लिए एनक्यूइंग डेटा - डिवाइस को डेटा ट्रांसफर करने से पहले डेटा को एक इन्फ़ीड क्यू में डालकर बिताया जाता है

निष्पादन समय के अनुसार टूटे हुए व्यक्तिगत इनपुट ऑप्स और उनकी श्रेणियों के आंकड़ों को देखने के लिए इनपुट ओप सांख्यिकी का विस्तार करें।

छवि

निम्न जानकारी वाली प्रत्येक प्रविष्टि के साथ एक स्रोत डेटा तालिका दिखाई देती है:

  1. इनपुट ओप - इनपुट ऑप्स के TensorFlow op सेशन का नाम दिखाता है
  2. गणना - प्रोफाइलिंग अवधि के दौरान ऑप निष्पादन की कुल संख्या को दर्शाता है
  3. कुल समय (एमएस में) - उन उदाहरणों में से प्रत्येक पर खर्च किए गए समय की संचयी राशि को दर्शाता है
  4. कुल समय% - एक सेशन पर खर्च किए गए कुल समय को इनपुट प्रोसेसिंग में खर्च किए गए कुल समय के अंश के रूप में दिखाता है
  5. कुल स्व समय (एमएस में) - उन उदाहरणों में से प्रत्येक पर खर्च किए गए स्व समय के संचयी योग को दर्शाता है। यहाँ स्वयं समय, फ़ंक्शन निकाय के अंदर बिताए गए समय को मापता है, इसे उस फ़ंक्शन में बिताए गए समय को छोड़कर।
  6. कुल स्व समय% इनपुट प्रोसेसिंग पर खर्च किए गए कुल समय के अंश के रूप में कुल स्व समय को दर्शाता है
  7. श्रेणी । इनपुट ऑप की प्रोसेसिंग श्रेणी को दर्शाता है

TensorFlow आँकड़े

TensorFlow Stats टूल प्रत्येक TensorFlow op (op) के प्रदर्शन को प्रदर्शित करता है, जिसे एक प्रोफाइलिंग सत्र के दौरान होस्ट या डिवाइस पर निष्पादित किया जाता है।

छवि

उपकरण दो पैन में प्रदर्शन जानकारी प्रदर्शित करता है:

  • ऊपरी फलक चार पाई चार्ट तक प्रदर्शित करता है:

    1. मेजबान पर प्रत्येक ऑप के आत्म-निष्पादन समय का वितरण
    2. मेजबान पर प्रत्येक ऑप प्रकार के आत्म-निष्पादन समय का वितरण
    3. डिवाइस पर प्रत्येक ऑप के आत्म-निष्पादन समय का वितरण
    4. डिवाइस पर प्रत्येक ऑप प्रकार के आत्म-निष्पादन समय का वितरण
  • निचला फलक एक तालिका दिखाता है जो TensorFlow के बारे में डेटा रिपोर्ट करता है प्रत्येक ऑप के लिए एक पंक्ति और प्रत्येक प्रकार के डेटा के लिए एक कॉलम होता है (स्तंभ के शीर्ष पर क्लिक करके कॉलम को सॉर्ट करता है)। इस तालिका से डेटा को CSV फ़ाइल के रूप में निर्यात करने के लिए ऊपरी फलक के दाईं ओर CSV बटन के रूप में निर्यात करें पर क्लिक करें।

    ध्यान दें कि:

    • यदि किसी भी ऑप्स के पास बच्चे के ऑप्स हैं:

      • एक ऑप के कुल "संचित" समय में बच्चे के ऑप्स के अंदर बिताया गया समय शामिल होता है

      • एक सेशन के कुल "स्व" समय में बच्चे के ऑप्स के अंदर बिताया गया समय शामिल नहीं होता है

    • यदि कोई ऑप होस्ट पर अमल करता है:

      • ओप द्वारा किए गए डिवाइस पर कुल स्व-समय का प्रतिशत 0 होगा
      • डिवाइस अप और इस सेशन पर कुल सेल्फ-टाइम का संचयी प्रतिशत 0 होगा
    • यदि कोई op उपकरण पर निष्पादित होता है:

      • इस सेशन द्वारा होस्ट किए गए कुल स्व-समय का प्रतिशत 0 होगा
      • मेजबान तक और इस सेशन पर कुल स्व-समय का संचयी प्रतिशत 0 होगा

आप पाई चार्ट और तालिका में निष्क्रिय समय को शामिल या बाहर करना चुन सकते हैं।

ट्रेस दर्शक

ट्रेस दर्शक समयरेखा दिखाता है जो दिखाता है:

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

ट्रेस दर्शक आपको अपने मॉडल में प्रदर्शन समस्याओं की पहचान करने की अनुमति देता है, फिर उन्हें हल करने के लिए कदम उठाएं। उदाहरण के लिए, उच्च स्तर पर, आप यह पहचान सकते हैं कि इनपुट या मॉडल प्रशिक्षण अधिकांश समय ले रहा है या नहीं। नीचे ड्रिलिंग, आप पहचान सकते हैं कि कौन से ऑप्स को निष्पादित करने में सबसे लंबा समय लगता है। ध्यान दें कि ट्रेस दर्शक प्रति डिवाइस 1 मिलियन घटनाओं तक सीमित है।

ट्रेस दर्शक इंटरफ़ेस

जब आप ट्रेस दर्शक खोलते हैं, तो यह आपके सबसे हालिया प्रदर्शन को प्रदर्शित करता है:

छवि

इस स्क्रीन में निम्नलिखित मुख्य तत्व हैं:

  1. टाइमलाइन फलक - दिखाता है कि डिवाइस और होस्ट समय के साथ निष्पादित होते हैं
  2. विवरण फलक - टाइमलाइन फलक में चुने गए ऑप्स के लिए अतिरिक्त जानकारी दिखाता है

टाइमलाइन फलक में निम्नलिखित तत्व शामिल हैं:

  1. शीर्ष बार - इसमें विभिन्न सहायक नियंत्रण शामिल हैं
  2. समय अक्ष - ट्रेस की शुरुआत के सापेक्ष समय दिखाता है
  3. अनुभाग और ट्रैक लेबल - प्रत्येक अनुभाग में कई ट्रैक होते हैं और बाईं ओर एक त्रिकोण होता है जिसे आप अनुभाग को विस्तारित और संक्षिप्त करने के लिए क्लिक कर सकते हैं। सिस्टम में प्रत्येक प्रसंस्करण तत्व के लिए एक अनुभाग है
  4. टूल सेलेक्टर - इसमें ट्रेस दर्शक जैसे ज़ूम, पैन, सिलेक्ट, और टाइमिंग के साथ बातचीत करने के लिए विभिन्न टूल हैं। टाइम अंतराल को चिह्नित करने के लिए टाइमिंग टूल का उपयोग करें।
  5. घटनाएँ - ये उस समय को दिखाती हैं जिस दौरान एक ऑप को निष्पादित किया गया था या मेटा-इवेंट्स की अवधि, जैसे कि प्रशिक्षण चरण
अनुभागों और पटरियों

ट्रेस दर्शक में निम्नलिखित भाग होते हैं:

  • प्रत्येक डिवाइस नोड के लिए एक अनुभाग , चिप के भीतर डिवाइस चिप और डिवाइस नोड की संख्या के साथ लेबल (उदाहरण के लिए, /device:GPU:0 (pid 0) )। प्रत्येक डिवाइस नोड अनुभाग में निम्नलिखित ट्रैक होते हैं:
    • चरण - उपकरण पर चल रहे प्रशिक्षण चरणों की अवधि को दर्शाता है
    • TensorFlow ऑप्स - । डिवाइस पर निष्पादित ऑप्स दिखाता है
    • XLA ऑप्स - XLA ऑपरेशंस (ops) दिखाता है जो डिवाइस पर चला गया है अगर XLA इस्तेमाल किया गया कंपाइलर है (प्रत्येक TensorFlow op का एक या कई XLA ऑप्स में अनुवाद किया जाता है। XLA कंपाइलर XLA ऑप्स को उस कोड में ट्रांसलेट करता है जो डिवाइस पर चलता है)।
  • होस्ट मशीन के CPU पर चलने वाले थ्रेड्स के लिए एक सेक्शन, "होस्ट थ्रेड्स" लेबल किया गया है। अनुभाग में प्रत्येक CPU थ्रेड के लिए एक ट्रैक होता है। ध्यान दें कि आप अनुभाग लेबल के साथ प्रदर्शित जानकारी को अनदेखा कर सकते हैं।
आयोजन

समयरेखा के भीतर की घटनाओं को विभिन्न रंगों में प्रदर्शित किया जाता है; रंगों का अपना कोई विशिष्ट अर्थ नहीं है।

ट्रेस दर्शक आपके TensorFlow कार्यक्रम में पायथन फ़ंक्शन कॉल के निशान भी प्रदर्शित कर सकता है। यदि आप tf.profiler.experimental.start() API का उपयोग करते हैं, तो आप प्रोफाइलिंग प्रारंभ करते समय ProfilerOptions नामपट्ट का उपयोग करके पायथन अनुरेखण को सक्षम कर सकते हैं। वैकल्पिक रूप से, यदि आप प्रोफाइलिंग के लिए नमूने मोड का उपयोग करते हैं, तो आप कैप्चर विकल्प डायलॉग में ड्रॉपडाउन विकल्पों का उपयोग करके ट्रेसिंग के स्तर का चयन कर सकते हैं।

छवि

GPU कर्नेल आँकड़े

यह उपकरण प्रदर्शन आँकड़े और हर GPU के लिए उत्पन्न होने वाले ऑप्स को दर्शाता है त्वरित कर्नेल।

छवि

उपकरण दो पैन में सूचना प्रदर्शित करता है:

  • ऊपरी फलक एक पाई चार्ट प्रदर्शित करता है जो CUDA गुठली दिखाता है जो कि कुल समय बीत चुका है

  • निम्न फलक प्रत्येक अद्वितीय कर्नेल-ऑप जोड़ी के लिए निम्न डेटा के साथ एक तालिका प्रदर्शित करता है:

    • कर्नेल-ओप जोड़ी द्वारा समूहीकृत कुल जीपीयू अवधि के अवरोही क्रम में एक रैंक
    • लॉन्च किए गए कर्नेल का नाम
    • कर्नेल द्वारा उपयोग किए जाने वाले GPU रजिस्टर की संख्या
    • बाइट्स में उपयोग किए गए साझा (स्थिर + गतिशील साझा) मेमोरी का कुल आकार
    • ब्लॉक आयाम को blockDim.x, blockDim.y, blockDim.z रूप में व्यक्त किया गया है
    • ग्रिड आयाम gridDim.x, gridDim.y, gridDim.z रूप में व्यक्त किए gridDim.x, gridDim.y, gridDim.z
    • क्या ऑप TensorCores का उपयोग करने के लिए योग्य है
    • क्या कर्नेल में TensorCore निर्देश हैं
    • इस कर्नेल को लॉन्च करने वाले सेशन का नाम
    • इस कर्नेल-ऑप जोड़े की घटनाओं की संख्या
    • माइक्रोसेकंड में कुल बीता हुआ GPU समय
    • औसत माइक्रोफ़ोन सेकंड में GPU समय समाप्त हो गया
    • माइक्रोसेकंड में न्यूनतम बीता हुआ GPU समय
    • माइक्रोसेकंड में अधिकतम बीता हुआ GPU समय

मेमोरी प्रोफाइल टूल

मेमोरी प्रोफाइल टूल प्रोफाइलिंग अंतराल के दौरान आपके डिवाइस के मेमोरी उपयोग की निगरानी करता है। आप इस उपकरण का उपयोग कर सकते हैं:

  • पीक मेमोरी उपयोग और तेनसोरफ्लो ऑप्स के लिए इसी मेमोरी एलोकेशन को मैमोरी (OOM) से बाहर डिबग करें। जब आप बहु-किरायेदारी निष्कर्ष चलाते हैं, तो आप OOM मुद्दों पर भी बहस कर सकते हैं
  • डिबग स्मृति विखंडन मुद्दों

मेमोरी प्रोफाइल टूल तीन खंडों में डेटा प्रदर्शित करता है:

  1. मेमोरी प्रोफाइल सारांश
  2. मेमोरी टाइमलाइन ग्राफ
  3. मेमोरी ब्रेकडाउन टेबल

मेमोरी प्रोफाइल सारांश

यह अनुभाग आपके TensorFlow प्रोग्राम की मेमोरी प्रोफाइल का एक उच्च-स्तरीय सारांश प्रदर्शित करता है जैसा कि नीचे दिखाया गया है:

मेमोरी प्रोफ़ाइल सारांश में छह फ़ील्ड हैं:

  1. मेमोरी आईडी - ड्रॉपडाउन जो सभी उपलब्ध डिवाइस मेमोरी सिस्टम को सूचीबद्ध करता है। उस मेमोरी सिस्टम का चयन करें जिसे आप ड्रॉपडाउन से देखना चाहते हैं
  2. # अधिशेष - प्रोफाइलिंग अंतराल के दौरान किए गए मेमोरी आवंटन की संख्या
  3. #Deallocation - प्रोफाइलिंग अंतराल में मेमोरी डीलॉक्शंस की संख्या
  4. मेमोरी क्षमता - आपके द्वारा चयनित मेमोरी सिस्टम की कुल क्षमता (GiBs में)
  5. पीक हीप उपयोग - मॉडल के चलने के बाद से पीक मेमोरी उपयोग (GiBs में)
  6. पीक मेमोरी उपयोग - प्रोफाइलिंग अंतराल में शिखर मेमोरी का उपयोग (GiBs में)। इस फ़ील्ड में निम्नलिखित उप-फ़ील्ड शामिल हैं:
    1. टाइमस्टैम्प - टाइमलाइन ग्राफ़ पर पीक मेमोरी उपयोग के समय का टाइमस्टैम्प
    2. स्टैक आरक्षण - स्टैक पर आरक्षित मेमोरी की मात्रा (GiBs में)
    3. ढेर आवंटन - ढेर पर आवंटित स्मृति की मात्रा (GiBs में)
    4. मुफ्त मेमोरी - मुफ्त मेमोरी की मात्रा (GiBs में)। मेमोरी कैपेसिटी स्टैक रिज़र्वेशन, हीप एलोकेशन और फ्री मेमोरी का कुल योग है
    5. विखंडन - विखंडन का प्रतिशत (कम बेहतर है)। इसकी गणना एक प्रतिशत के रूप में की जाती है (1 - मुक्त मेमोरी / कुल मुक्त मेमोरी के सबसे बड़े हिस्से का आकार)

मेमोरी टाइमलाइन ग्राफ

यह खंड मेमोरी उपयोग (GiBs में) और विखंडन का प्रतिशत बनाम (एमएस में) का एक प्लॉट प्रदर्शित करता है।

छवि

एक्स-अक्ष प्रोफाइलिंग अंतराल के समय (एमएस में) का प्रतिनिधित्व करता है। बाईं ओर Y- अक्ष मेमोरी उपयोग (GiBs में) का प्रतिनिधित्व करता है और दाईं ओर Y- अक्ष विखंडन का प्रतिशत दर्शाता है। एक्स-अक्ष पर समय के प्रत्येक बिंदु पर, कुल मेमोरी तीन श्रेणियों में टूट जाती है: स्टैक (लाल), ढेर (नारंगी में), और मुफ्त (हरे रंग में)। एक विशिष्ट टाइमस्टैम्प पर होवर करें जो कि उस स्थान पर मेमोरी एलोकेशन / डीललोकेशन घटनाओं के बारे में विवरण देखने के लिए नीचे दिए गए हैं:

छवि

पॉप-अप विंडो निम्नलिखित जानकारी प्रदर्शित करती है:

  • टाइमस्टैम्प (एमएस) - समयरेखा पर चयनित घटना का स्थान
  • घटना - घटना का प्रकार (आवंटन या निपटान)
  • request_size (GiBs) - अनुरोधित मेमोरी की मात्रा। यह एक महत्वपूर्ण घटना होगी
  • आवंटन_साइज़ (GiBs) - आवंटित स्मृति की वास्तविक राशि। यह एक महत्वपूर्ण घटना होगी
  • tf_op - TensorFlow Op जो आवंटन / निपटान का अनुरोध करता है
  • step_id - प्रशिक्षण चरण जिसमें यह घटना हुई
  • रीजन_टाइप - वह डेटा एंटिटी जो इस आवंटित मेमोरी के लिए है। संभावित मान हैं temp temporaries के लिए, output सक्रियण और ढ़ाल के लिए, और persist / dynamic वजन और स्थिरांक के लिए
  • data_type - टेंसर तत्व प्रकार (जैसे, 8-बिट अहस्ताक्षरित पूर्णांक के लिए uint8)
  • टेंसोर_शैप - टेंसर के आकार को आवंटित / डीललोकेट किया जा रहा है
  • memory_in_use (GiBs) - इस समय उपयोग में आने वाली कुल मेमोरी

मेमोरी ब्रेकडाउन टेबल

यह तालिका प्रोफाइलिंग अंतराल में शिखर मेमोरी उपयोग के बिंदु पर सक्रिय मेमोरी आवंटन दिखाती है।

छवि

प्रत्येक TensorFlow Op के लिए एक पंक्ति है और प्रत्येक पंक्ति में निम्नलिखित कॉलम हैं:

  • Op का नाम - TensorFlow op का नाम
  • आवंटन आकार (GiBs) - इस ऑप को आवंटित की गई स्मृति की कुल मात्रा
  • अनुरोधित आकार (GiBs) - इस ऑप के लिए अनुरोधित मेमोरी की कुल मात्रा
  • घटनाएँ - इस सेशन के लिए आवंटन की संख्या
  • क्षेत्र का प्रकार - डेटा इकाई का प्रकार जो इस आवंटित मेमोरी के लिए है। संभावित मान हैं temp temporaries के लिए, output सक्रियण और ढ़ाल के लिए, और persist / dynamic वजन और स्थिरांक के लिए
  • डेटा प्रकार - टेंसर तत्व प्रकार
  • आकार - आवंटित दसियों का आकार

प्रदर्शन डेटा एकत्र करें

TensorFlow Profiler आपके TensorFlow मॉडल की होस्ट गतिविधियाँ और GPU निशान एकत्र करता है। आप प्रोग्रामर मोड या सैंपलिंग मोड के माध्यम से प्रदर्शन डेटा एकत्र करने के लिए प्रोफाइलर को कॉन्फ़िगर कर सकते हैं।

एपीआई की रूपरेखा

प्रोफाइलिंग करने के लिए आप निम्नलिखित एपीआई का उपयोग कर सकते हैं।

# Profile from batches 10 to 15
tb_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir,
                                             profile_batch='10, 15')

# Train the model and use the TensorBoard Keras callback to collect
# performance profiling data
model.fit(train_data,
          steps_per_epoch=20,
          epochs=5,
          callbacks=[tb_callback])
  • tf.profiler फ़ंक्शन API का उपयोग करके प्रोग्रामेटिक मोड
tf.profiler.experimental.start('logdir')
# Train the model here
tf.profiler.experimental.stop()
  • संदर्भ प्रबंधक का उपयोग करके प्रोग्रामेटिक मोड
with tf.profiler.experimental.Profile('logdir'):
    # Train the model here
    pass
  • सैम्पलिंग मोड - अपने TensorFlow मॉडल रन के साथ gRPC सर्वर शुरू करने के लिए tf.profiler.experimental.server.start() का उपयोग करके ऑन-डिमांड प्रोफाइलिंग करें। GRPC सर्वर शुरू करने और अपना मॉडल चलाने के बाद, आप TensorBoard प्रोफ़ाइल प्लगइन में कैप्चर प्रोफ़ाइल बटन के माध्यम से एक प्रोफ़ाइल पर कब्जा कर सकते हैं। यदि यह पहले से ही चालू नहीं है, तो TensorBoard इंस्टेंस को लॉन्च करने के लिए ऊपर के प्रॉफ़ाइलर सेक्शन में स्क्रिप्ट का उपयोग करें।

    उदहारण के लिए,

# Start a gRPC server at port 6009
tf.profiler.experimental.server.start(6009)
# ... TensorFlow program ...

निर्दिष्ट करने के लिए कैप्चर प्रोफ़ाइल संवाद का उपयोग करें:

  • प्रोफ़ाइल सेवा URL या TPU नाम
  • प्रोफाइलिंग अवधि
  • डिवाइस का स्तर, होस्ट और पायथन फ़ंक्शन कॉल ट्रेसिंग
  • यदि आप चाहते हैं कि प्रोफाईलर पहली बार असफल रहने पर प्रोफाइल कैप्चर करने से पीछे हट जाए

कस्टम प्रशिक्षण लूपिंग प्रोफाइलिंग

अपने TensorFlow कोड में कस्टम प्रशिक्षण लूप को प्रोफाइल करने के लिए, Profiler के लिए चरण सीमाओं को चिह्नित करने के लिए tf.profiler.experimental.Trace API के साथ प्रशिक्षण लूप को उपकरण दें। name तर्क का उपयोग चरण नामों के लिए उपसर्ग के रूप में किया जाता है, चरण नामों में step_num कीवर्ड तर्क जोड़ा जाता है, और _r कीवर्ड तर्क इस ट्रेस ईवेंट को _r द्वारा चरण ईवेंट के रूप में संसाधित किया जाता है।

उदहारण के लिए,

for step in range(NUM_STEPS):
    with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
        train_data = next(dataset)
        train_step(train_data)

यह Profiler के कदम-आधारित प्रदर्शन विश्लेषण को सक्षम करेगा और ट्रेस घटनाओं को ट्रेस दर्शक में दिखाने का कारण बनेगा।

सुनिश्चित करें कि आप इनपुट पाइपलाइन के सटीक विश्लेषण के लिए tf.profiler.experimental.Trace संदर्भ में डेटासेट tf.profiler.experimental.Trace शामिल करें।

नीचे दिया गया कोड स्निपेट एक विरोधी पैटर्न है:

for step, train_data in enumerate(dataset):
    with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
        train_step(train_data)

प्रोफाइलिंग मामलों का उपयोग करें

प्रोफाइलर चार अलग-अलग कुल्हाड़ियों के साथ कई उपयोग मामलों को कवर करता है। वर्तमान में कुछ संयोजनों का समर्थन किया गया है और अन्य को भविष्य में जोड़ा जाएगा। उपयोग के कुछ मामले हैं:

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

नीचे दी गई तालिका एक त्वरित अवलोकन है कि उपरोक्त उपयोग के मामलों में से कौन सा TensorFlow 2.3 में विभिन्न प्रोफाइलिंग API द्वारा समर्थित है:

प्रोफाइलिंग एपीआई स्थानीय रिमोट कई कार्यकर्ता हार्डवेयर प्लेटफार्म
टेंसोरबोर्ड केर कॉलबैक समर्थित समर्थित नहीं समर्थित नहीं सीपीयू, जीपीयू
tf.experimental.profiler फ़ंक्शन API समर्थित समर्थित नहीं समर्थित नहीं सीपीयू, जीपीयू
संदर्भ प्रबंधक एपीआई समर्थित समर्थित नहीं समर्थित नहीं सीपीयू, जीपीयू
मांग पर एपीआई समर्थित नहीं समर्थित सीमित समर्थन सीपीयू, जीपीयू, टीपीयू

इष्टतम मॉडल प्रदर्शन के लिए सर्वोत्तम अभ्यास

इष्टतम प्रदर्शन प्राप्त करने के लिए अपने TensorFlow मॉडल के लिए लागू निम्न अनुशंसाओं का उपयोग करें।

सामान्य तौर पर, डिवाइस पर सभी परिवर्तन करें और सुनिश्चित करें कि आप अपने प्लेटफॉर्म के लिए cuDNN और Intel MKL जैसे पुस्तकालयों के नवीनतम संगत संस्करण का उपयोग करें।

इनपुट डेटा पाइपलाइन का अनुकूलन करें

एक कुशल डेटा इनपुट पाइपलाइन डिवाइस निष्क्रिय समय को कम करके आपके मॉडल निष्पादन की गति में काफी सुधार कर सकती है। अपने डेटा इनपुट पाइपलाइन को और अधिक कुशल बनाने के लिए निम्नलिखित सर्वोत्तम प्रथाओं को यहाँ विस्तृत रूप में शामिल करने पर विचार करें:

  • डेटा प्रीफ़ैक्ट करें
  • डेटा निष्कर्षण को समानांतर करें
  • डेटा परिवर्तन को समानांतर करें
  • स्मृति में कैश डेटा
  • उपयोगकर्ता-परिभाषित कार्यों को वेक्टर करें
  • ट्रांसफ़ॉर्मेशन लागू करते समय मेमोरी का उपयोग कम करें

इसके अतिरिक्त, इनपुट पाइपलाइन एक प्रदर्शन अड़चन है, यह जांचने के लिए सिंथेटिक मॉडल के साथ अपने मॉडल को चलाने का प्रयास करें।

डिवाइस के प्रदर्शन में सुधार

  • प्रशिक्षण मिनी-बैच आकार बढ़ाएं (प्रशिक्षण लूप के एक पुनरावृत्ति में प्रति उपकरण उपयोग किए गए प्रशिक्षण नमूनों की संख्या)
  • TF-Stats का उपयोग यह पता लगाने के लिए करें कि उपकरण कितनी कुशलता से चलते हैं
  • कम्प्यूटेशन और वैकल्पिक रूप से प्रदर्शन करने के लिए tf.function का उपयोग करें, experimental_compile ध्वज सक्षम करें
  • चरणों के बीच मेजबान पायथन संचालन को कम करें और कॉलबैक को कम करें। हर चरण के बजाय हर कुछ चरणों में मैट्रिक्स की गणना करें
  • डिवाइस कंप्यूट यूनिट्स को व्यस्त रखें
  • समानांतर में कई उपकरणों के लिए डेटा भेजें
  • पहले चैनलों को पसंद करने के लिए डेटा लेआउट का अनुकूलन करें (उदाहरण के लिए NHWC पर NCHW)। NVIDIA® V100 जैसे कुछ GPU एक NHWC डेटा लेआउट के साथ बेहतर प्रदर्शन करते हैं।
  • fp16 जैसे 16-बिट संख्यात्मक अभ्यावेदन का उपयोग करने पर विचार करें, IEEE या ब्रेन फ़्लोटिंग-पॉइंट bfloat16 प्रारूप द्वारा निर्दिष्ट आधा-सटीक फ़्लोटिंग पॉइंट फॉर्मेट
  • केर मिश्रित मिश्रित एपीआई का उपयोग करने पर विचार करें
  • GPU पर प्रशिक्षण देते समय, TensorCore का उपयोग करें। GPU kernels TensorCore का उपयोग करता है जब परिशुद्धता fp16 है और इनपुट / आउटपुट आयाम 8 या 16 (int8 के लिए) से विभाज्य हैं

अतिरिक्त संसाधन