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

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

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

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

आप बादल tpus पर अपने मॉडल प्रदर्शन प्रोफ़ाइल चाहते हैं, का उल्लेख बादल TPU गाइड

प्रोफाइलर और जीपीयू पूर्वापेक्षाएँ स्थापित करें

TensorBoard के लिए pip के साथ Profiler प्लगइन स्थापित करें। ध्यान दें कि Profiler को TensorFlow और TensorBoard (>=2.2) के नवीनतम संस्करणों की आवश्यकता होती है।

pip install -U tensorboard_plugin_profile

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

  1. मिलिए NVIDIA® GPU चालकों और पर सूचीबद्ध CUDA® टूलकिट आवश्यकताओं TensorFlow GPU समर्थन सॉफ्टवेयर आवश्यकताओं
  2. सुनिश्चित करें कि NVIDIA® CUDA® रूपरेखा उपकरण इंटरफ़ेस (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

फिर, चलाने ldconfig कि CUPTI पुस्तकालय पाया जाता है सत्यापित करने के लिए फिर से उपरोक्त आदेश।

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

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

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

docker run option '--privileged=true'

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

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

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

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

अवलोकन पृष्ठ

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

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

छवि

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

    1. चरण-समय विश्लेषण: औसत चरण समय को कई श्रेणियों में विभाजित करता है जहां समय व्यतीत होता है:

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

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

  • डिवाइस पर शीर्ष 10 TensorFlow आपरेशन (जैसे GPU): प्रदर्शित करता है डिवाइस पर मौजूद ऑप्स कि सबसे लंबे समय तक भाग गया।

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

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

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

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

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

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

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

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

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

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

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

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

छवि

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

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

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

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

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

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

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

मेजबान-पक्ष विश्लेषण

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

  • मांग पर फ़ाइलों से डेटा पढ़ना: समय, कैशिंग बिना फ़ाइलों से डाटा पढ़ने प्रीफ़ेचिंग, और interleaving पर खर्च।
  • पहले से फ़ाइलों से डेटा पढ़ना: समय फ़ाइलें पढ़ने खर्च,, कैशिंग सहित प्रीफ़ेचिंग, और interleaving।
  • डाटा preprocessing: समय छवि विसंपीड़न के रूप में preprocessing ऑप्स, पर खर्च किया।
  • Enqueuing डेटा डिवाइस को हस्तांतरित करने: समय डिवाइस के लिए डेटा स्थानांतरित करने से पहले एक infeed कतार में डेटा डाल बिताया।

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

छवि

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

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

TensorFlow आँकड़े

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

छवि

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

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

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

    ध्यान दें कि:

    • अगर किसी ऑप्स में चाइल्ड ऑप्स हैं:

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

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

    • यदि कोई ऑप होस्ट पर निष्पादित होता है:

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

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

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

ट्रेस व्यूअर

ट्रेस व्यूअर एक समयरेखा प्रदर्शित करता है जो दिखाता है:

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

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

ट्रेस व्यूअर इंटरफ़ेस

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

छवि

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

  1. समय फलक: ये दिखाती हैं ऑप्स कि डिवाइस और मेजबान समय के साथ फांसी दे दी।
  2. विवरण फलक: समय फलक में चयनित ऑप्स के लिए शो में अतिरिक्त जानकारी।

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

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

ट्रेस व्यूअर में निम्नलिखित खंड होते हैं:

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

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

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

छवि

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

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

छवि

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

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

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

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

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

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

  • मेमोरी (ओओएम) के चरम मेमोरी उपयोग और TensorFlow ops के संबंधित मेमोरी आवंटन को इंगित करके डिबग आउट ऑफ़ मेमोरी (OOM) समस्याएँ। तुम भी यह OOM मुद्दों पैदा हो सकता है कि जब आप चलाने डीबग कर सकते हैं बहु किरायेदारी अनुमान।
  • डीबग मेमोरी फ़्रेग्मेंटेशन समस्याएँ।

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

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

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

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

मेमोरी प्रोफाइल सारांश में छह क्षेत्र हैं:

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

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

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

छवि

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

छवि

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

  • टाइमस्टैम्प (ms): समय पर चयनित स्थान दिया गया है।
  • घटना: घटना के प्रकार (आवंटन या आवंटन रद्द करने)।
  • requested_size (Gibs): स्मृति की मात्रा का अनुरोध किया। यह डीललोकेशन इवेंट के लिए एक ऋणात्मक संख्या होगी।
  • allocation_size (Gibs): स्मृति की वास्तविक राशि आवंटित। यह डीललोकेशन इवेंट के लिए एक ऋणात्मक संख्या होगी।
  • tf_op: TensorFlow सेशन कि आवंटन / आवंटन रद्द करने का अनुरोध करता है।
  • step_id: प्रशिक्षण कदम है जिसमें यह घटना हुई।
  • REGION_TYPE: डेटा इकाई प्रकार है कि इस आबंटित स्मृति के लिए है। संभावित मान हैं temp temporaries के लिए, output सक्रियण और ढ़ाल के लिए, और persist / dynamic वजन और स्थिरांक के लिए।
  • DATA_TYPE: टेन्सर तत्व प्रकार (जैसे, 8 बिट अहस्ताक्षरित पूर्णांक के लिए uint8)।
  • tensor_shape: टेन्सर के आकार आवंटित / पुनः आवंटित की जाती जा रहा है।
  • memory_in_use (Gibs): कुल स्मृति समय के इस बिंदु पर उपयोग में है।

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

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

छवि

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

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

पॉड व्यूअर

पॉड व्यूअर टूल सभी कर्मचारियों के प्रशिक्षण चरण के टूटने को दिखाता है।

छवि

  • चरण संख्या का चयन करने के लिए ऊपरी फलक में एक स्लाइडर होता है।
  • निचला फलक एक स्टैक्ड कॉलम चार्ट प्रदर्शित करता है। यह एक-दूसरे के ऊपर रखी गई चरण-समय की टूटी-फूटी श्रेणियों का एक उच्च स्तरीय दृश्य है। प्रत्येक स्टैक्ड कॉलम एक अद्वितीय कार्यकर्ता का प्रतिनिधित्व करता है।
  • जब आप किसी स्टैक्ड कॉलम पर होवर करते हैं, तो बाईं ओर का कार्ड स्टेप ब्रेकडाउन के बारे में अधिक विवरण दिखाता है।

tf.डेटा अड़चन विश्लेषण

tf.data टोंटी विश्लेषण उपकरण स्वचालित रूप से बाधाओं का पता लगाता है tf.data अपने कार्यक्रम में इनपुट पाइपलाइनों और उन्हें ठीक करने के बारे में सुझाव देता है। यह उपयोग कर किसी भी कार्यक्रम के साथ काम करता tf.data मंच (CPU / GPU / TPU) की परवाह किए बिना। इसका विश्लेषण और सिफारिशें इस पर आधारित हैं गाइड

यह इन चरणों का पालन करके एक अड़चन का पता लगाता है:

  1. सबसे अधिक इनपुट बाउंड होस्ट खोजें।
  2. एक के सबसे धीमी निष्पादन का पता लगाएं tf.data इनपुट पाइपलाइन।
  3. प्रोफाइलर ट्रेस से इनपुट पाइपलाइन ग्राफ का पुनर्निर्माण करें।
  4. इनपुट पाइपलाइन ग्राफ़ में क्रांतिक पथ ज्ञात कीजिए।
  5. एक अड़चन के रूप में महत्वपूर्ण पथ पर सबसे धीमे परिवर्तन की पहचान करें।

प्रदर्शन का विश्लेषण सारांश, सभी इनपुट पाइपलाइन और इनपुट पाइपलाइन ग्राफ़ का सारांश: यूआई तीन वर्गों में विभाजित किया गया है।

प्रदर्शन विश्लेषण सारांश

छवि

यह खंड विश्लेषण का सारांश प्रदान करता है। यह धीमी गति से पर रिपोर्ट tf.data इनपुट प्रोफ़ाइल में पाया पाइपलाइनों। यह खंड सबसे अधिक इनपुट बाउंड होस्ट और अधिकतम विलंबता के साथ इसकी सबसे धीमी इनपुट पाइपलाइन को भी दिखाता है। सबसे महत्वपूर्ण बात यह है कि यह पहचानता है कि इनपुट पाइपलाइन का कौन सा हिस्सा अड़चन है और इसे कैसे ठीक किया जाए। अड़चन की जानकारी इटरेटर प्रकार और उसके लंबे नाम के साथ प्रदान की जाती है।

tf.data इटरेटर का लंबा नाम कैसे पढ़ें

एक लंबे नाम के रूप में स्वरूपित है Iterator::<Dataset_1>::...::<Dataset_n> । लंबा नाम में, <Dataset_n> इटरेटर प्रकार से मेल खाता है और लंबे समय के नाम पर अन्य ऐसे डेटासेट नीचे की ओर परिवर्तनों का प्रतिनिधित्व करते हैं।

उदाहरण के लिए, निम्नलिखित इनपुट पाइपलाइन डेटासेट पर विचार करें:

dataset = tf.data.Dataset.range(10).map(lambda x: x).repeat(2).batch(5)

उपरोक्त डेटासेट से इटरेटर्स के लिए लंबे नाम होंगे:

इटरेटर प्रकार लंबा नाम
रेंज Iterator::Batch::Repeat::Map::Range
नक्शा Iterator::Batch::Repeat::Map
दोहराना Iterator::Batch::Repeat
जत्था इटरेटर :: बैच

सभी इनपुट पाइपलाइनों का सारांश

छवि

यह खंड सभी मेजबानों में सभी इनपुट पाइपलाइनों का सारांश प्रदान करता है। आमतौर पर एक इनपुट पाइपलाइन होती है। वितरण रणनीति का उपयोग कर, वहाँ एक मेजबान इनपुट पाइपलाइन कार्यक्रम के चल रहा है tf.data कोड और कई डिवाइस इनपुट मेजबान इनपुट पाइपलाइन से डेटा प्राप्त करने और उपकरणों के लिए यह स्थानांतरित पाइपलाइनों।

प्रत्येक इनपुट पाइपलाइन के लिए, यह इसके निष्पादन समय के आंकड़े दिखाता है। यदि कॉल 50 μs से अधिक समय लेती है तो उसे धीमी गति से गिना जाता है।

इनपुट पाइपलाइन ग्राफ

छवि

यह खंड निष्पादन समय की जानकारी के साथ इनपुट पाइपलाइन ग्राफ दिखाता है। आप किस होस्ट और इनपुट पाइपलाइन को देखने के लिए चुनने के लिए "होस्ट" और "इनपुट पाइपलाइन" का उपयोग कर सकते हैं। इनपुट पाइप लाइन के लिए सजा का आदेश है जो आप रैंक लटकती का उपयोग कर चयन कर सकते हैं अवरोही क्रम में निष्पादन समय से हल कर रहे हैं।

छवि

महत्वपूर्ण पथ के नोड्स में बोल्ड आउटलाइन हैं। अड़चन नोड, जो कि महत्वपूर्ण पथ पर सबसे लंबे समय तक सेल्फ टाइम वाला नोड है, की रूपरेखा लाल होती है। अन्य गैर-महत्वपूर्ण नोड्स में धूसर धराशायी रूपरेखा होती है।

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

कुल अवधि निष्पादन की दीवार का समय है। यदि इसे कई बार निष्पादित किया जाता है, तो यह सभी निष्पादनों के दीवार समय का योग है।

स्व समय इसके तत्काल बच्चे नोड्स के साथ ओवरलैप समय बिना कुल समय है।

"# कॉल" इनपुट पाइपलाइन निष्पादित होने की संख्या है।

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

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

प्रोफाइलिंग एपीआई

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

  • TensorBoard Keras कॉलबैक (का उपयोग कर प्रोग्रामेटिक मोड tf.keras.callbacks.TensorBoard )

    # 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 समारोह एपीआई

    tf.profiler.experimental.start('logdir')
    # Train the model here
    tf.profiler.experimental.stop()
    
  • संदर्भ प्रबंधक का उपयोग करके प्रोग्रामेटिक मोड

    with tf.profiler.experimental.Profile('logdir'):
        # Train the model here
        pass
    

  • नमूना मोड: पर मांग का उपयोग करके रूपरेखा प्रदर्शन करना tf.profiler.experimental.server.start अपने TensorFlow मॉडल रन के साथ एक gRPC सर्वर शुरू करने के लिए। GRPC सर्वर शुरू करने और अपने मॉडल चलाने के बाद, आप TensorBoard प्रोफ़ाइल प्लगइन में कैद प्रोफाइल बटन के माध्यम से एक प्रोफाइल पर कब्जा कर सकते हैं। यदि यह पहले से नहीं चल रहा है तो TensorBoard इंस्टेंस लॉन्च करने के लिए ऊपर प्रोफाइलर स्थापित करें अनुभाग में स्क्रिप्ट का उपयोग करें।

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

    # Start a profiler server before your model runs.
    tf.profiler.experimental.server.start(6009)
    # (Model code goes here).
    #  Send a request to the profiler server to collect a trace of your model.
    tf.profiler.experimental.client.trace('grpc://localhost:6009',
                                          'gs://your_tb_logdir', 2000)
    

    एकाधिक श्रमिकों की रूपरेखा के लिए एक उदाहरण:

    # E.g. your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you
    # would like to profile for a duration of 2 seconds.
    tf.profiler.experimental.client.trace(
        'grpc://10.0.0.2:8466,grpc://10.0.0.3:8466,grpc://10.0.0.4:8466',
        'gs://your_tb_logdir',
        2000)
    

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

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

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

अपने TensorFlow कोड में कस्टम प्रशिक्षण छोरों प्रोफ़ाइल करने के लिए, साधन के साथ प्रशिक्षण पाश tf.profiler.experimental.Trace एपीआई प्रोफाइलर के लिए कदम सीमाओं को चिह्नित करने के।

name तर्क चरण के नाम के लिए एक उपसर्ग के रूप में इस्तेमाल किया जाता है, step_num कीवर्ड तर्क चरण के नाम में जोड़ दिया जाता है, और _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 इनपुट पाइपलाइन का सटीक विश्लेषण के लिए संदर्भ।

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

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

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

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

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

नीचे दी गई तालिका ऊपर बताए गए TensorFlow- समर्थित उपयोग मामलों का एक त्वरित अवलोकन प्रदान करती है:

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

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

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

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

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

अपने डेटा इनपुट पाइपलाइन को अनुकूलित करने के लिए [#input_pipeline_analyzer] से डेटा का उपयोग करें। एक कुशल डेटा इनपुट पाइपलाइन डिवाइस के निष्क्रिय समय को कम करके आपके मॉडल निष्पादन की गति में अत्यधिक सुधार कर सकती है। में विस्तृत सर्वोत्तम प्रथाओं को शामिल करने का प्रयास करें tf.data एपीआई के साथ बेहतर प्रदर्शन के लिए अपने डेटा इनपुट पाइपलाइन और अधिक कुशल बनाने के लिए गाइड और नीचे।

  • सामान्य तौर पर, किसी भी ऑप्स को समानांतर करना जिसे क्रमिक रूप से निष्पादित करने की आवश्यकता नहीं है, डेटा इनपुट पाइपलाइन को महत्वपूर्ण रूप से अनुकूलित कर सकता है।

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

  • इनपुट पाइपलाइन एक प्रदर्शन बाधा है या नहीं यह जांचने के लिए सिंथेटिक डेटा के साथ अपना मॉडल चलाने का प्रयास करें।

  • उपयोग tf.data.Dataset.shard बहु GPU प्रशिक्षण के लिए। सुनिश्चित करें कि आप थ्रूपुट में कटौती को रोकने के लिए इनपुट लूप में बहुत जल्दी शार्प करते हैं। TFRecords के साथ काम करते समय, सुनिश्चित करें कि आपने TFRecords की सूची को शार्प किया है न कि TFRecords की सामग्री को।

  • गतिशील रूप से मूल्य निर्धारित करके कई ऑप्स parallelize num_parallel_calls का उपयोग कर tf.data.AUTOTUNE

  • के उपयोग को सीमित करने पर विचार करें tf.data.Dataset.from_generator के रूप में यह धीमी शुद्ध TensorFlow ऑप्स की तुलना में है।

  • के उपयोग को सीमित करने पर विचार करें tf.py_function के रूप में यह धारावाहिक नहीं किया जा सकता और वितरित TensorFlow में चलाने के लिए समर्थित नहीं है।

  • उपयोग tf.data.Options इनपुट पाइप लाइन के लिए स्थिर अनुकूलन को नियंत्रित करने के।

इसके अलावा पढ़ tf.data प्रदर्शन विश्लेषण गाइड अपने इनपुट पाइपलाइन के अनुकूलन के बारे में अधिक मार्गदर्शन के लिए।

डेटा वृद्धि का अनुकूलन करें

जब छवि डेटा के साथ काम करने के लिए, अपने कर डेटा वृद्धि आदि flipping के रूप में स्थानिक परिवर्तनों, लागू करने के बाद विभिन्न डेटा प्रकार के लिए कास्टिंग, फसल, घूर्णन, द्वारा और अधिक कुशल

NVIDIA® डाली का उपयोग करें

कुछ उदाहरणों में, जैसे कि जब आपके पास एक उच्च GPU से CPU अनुपात वाला सिस्टम होता है, तो उपरोक्त सभी अनुकूलन CPU चक्रों की सीमाओं के कारण डेटा लोडर में बाधाओं को समाप्त करने के लिए पर्याप्त नहीं हो सकते हैं।

आप कंप्यूटर दृष्टि और ऑडियो गहरी सीखने अनुप्रयोगों के लिए NVIDIA® GPUs उपयोग कर रहे हैं, पर विचार करें डाटा लोड हो रहा है लाइब्रेरी (का उपयोग कर डाली डेटा पाइपलाइन में तेजी लाने के लिए)।

चेक संचालन: NVIDIA® डाली समर्थित डाली ऑप्स की एक सूची के लिए दस्तावेज़।

थ्रेडिंग और समानांतर निष्पादन का उपयोग करें

के साथ कई सीपीयू धागे पर चलने ऑप्स tf.config.threading एपीआई ताकि उन्हें आसानी से निष्पादित करने के लिए।

TensorFlow डिफ़ॉल्ट रूप से स्वचालित रूप से समानांतरवाद थ्रेड्स की संख्या सेट करता है। TensorFlow ops चलाने के लिए उपलब्ध थ्रेड पूल उपलब्ध CPU थ्रेड्स की संख्या पर निर्भर करता है।

का उपयोग करके एक भी सेशन के लिए अधिकतम समानांतर speedup नियंत्रण tf.config.threading.set_intra_op_parallelism_threads । ध्यान दें कि यदि आप समानांतर में एकाधिक ऑप्स चलाते हैं, तो वे सभी उपलब्ध थ्रेड पूल साझा करेंगे।

आप स्वतंत्र गैर अवरुद्ध ऑप्स (ग्राफ पर उनके बीच कोई निर्देशित पथ के साथ ऑप्स) है, तो उपयोग tf.config.threading.set_inter_op_parallelism_threads समवर्ती उपलब्ध थ्रेड पूल का उपयोग कर उन्हें चलाने के लिए।

विविध

जब NVIDIA® GPUs पर छोटे मॉडल के साथ काम करने के लिए, आप सेट कर सकते हैं tf.compat.v1.ConfigProto.force_gpu_compatible=True सभी सीपीयू tensors मजबूर करने के लिए मॉडल प्रदर्शन के लिए एक महत्वपूर्ण बढ़ावा देने के लिए CUDA पिन किए गए स्मृति आवंटित किया जाना है। हालांकि, अज्ञात/बहुत बड़े मॉडल के लिए इस विकल्प का उपयोग करते समय सावधानी बरतें क्योंकि यह होस्ट (सीपीयू) के प्रदर्शन को नकारात्मक रूप से प्रभावित कर सकता है।

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

यहाँ और में विस्तृत सर्वोत्तम प्रथाओं का पालन करें GPU प्रदर्शन के अनुकूलन गाइड का अनुकूलन उपकरण पर मौजूद TensorFlow मॉडल प्रदर्शन करने के लिए।

यदि आप NVIDIA GPU का उपयोग कर रहे हैं, तो GPU और मेमोरी उपयोग को CSV फ़ाइल में चलाकर लॉग इन करें:

nvidia-smi
--query-gpu=utilization.gpu,utilization.memory,memory.total,
memory.free,memory.used --format=csv

डेटा लेआउट कॉन्फ़िगर करें

चैनल जानकारी (जैसे छवियों) वाले डेटा के साथ काम करते समय, डेटा लेआउट प्रारूप को अंतिम चैनल पसंद करने के लिए अनुकूलित करें (एनसीएचडब्ल्यू पर एनएचडब्ल्यूसी)।

चैनल-पिछले डेटा स्वरूप में सुधार टेन्सर कोर उपयोग और महत्वपूर्ण प्रदर्शन में सुधार विशेष रूप से convolutional मॉडल में जब एएमपी के साथ मिलकर प्रदान करते हैं। NCHW डेटा लेआउट अभी भी Tensor Cores द्वारा संचालित किए जा सकते हैं, लेकिन स्वचालित ट्रांसपोज़ ऑप्स के कारण अतिरिक्त ओवरहेड पेश करते हैं।

आप की स्थापना करके NHWC लेआउट पसंद करते हैं करने के लिए डेटा लेआउट का अनुकूलन कर सकते data_format="channels_last" जैसे परतों के लिए tf.keras.layers.Conv2D , tf.keras.layers.Conv3D , और tf.keras.layers.experimental.preprocessing.RandomRotation

उपयोग tf.keras.backend.set_image_data_format Keras बैकएंड एपीआई के लिए डिफ़ॉल्ट डेटा लेआउट प्रारूप निर्धारित करने के लिए।

L2 कैश को अधिकतम करें

When working with NVIDIA® GPUs, execute the code snippet below before the training loop to max out the L2 fetch granularity to 128 bytes.

import ctypes

_libcudart = ctypes.CDLL('libcudart.so')
# Set device limit on the current device
# cudaLimitMaxL2FetchGranularity = 0x05
pValue = ctypes.cast((ctypes.c_int*1)(), ctypes.POINTER(ctypes.c_int))
_libcudart.cudaDeviceSetLimit(ctypes.c_int(0x05), ctypes.c_int(128))
_libcudart.cudaDeviceGetLimit(pValue, ctypes.c_int(0x05))
assert pValue.contents.value == 128

Configure GPU thread usage

The GPU thread mode decides how GPU threads are used.

Set the thread mode to gpu_private to make sure that preprocessing does not steal all the GPU threads. This will reduce the kernel launch delay during training. You can also set the number of threads per GPU. Set these values using environment variables.

import os

os.environ['TF_GPU_THREAD_MODE']='gpu_private'
os.environ['TF_GPU_THREAD_COUNT']='1'

Configure GPU memory options

In general, increase the batch size and scale the model to better utilize GPUs and get higher throughput. Note that increasing the batch size will change the model's accuracy so the model needs to be scaled by tuning hyperparameters like the learning rate to meet the target accuracy.

Also, use tf.config.experimental.set_memory_growth to allow GPU memory to grow to prevent all the available memory from being fully allocated to ops that require only a fraction of the memory. This allows other processes which consume GPU memory to run on the same device.

To learn more, check out the Limiting GPU memory growth guidance in the GPU guide to learn more.

Miscellaneous

  • Increase the training mini-batch size (number of training samples used per device in one iteration of the training loop) to the maximum amount that fits without an out of memory (OOM) error on the GPU. Increasing the batch size impacts the model's accuracy—so make sure you scale the model by tuning hyperparameters to meet the target accuracy.

  • Disable reporting OOM errors during tensor allocation in production code. Set report_tensor_allocations_upon_oom=False in tf.compat.v1.RunOptions .

  • For models with convolution layers, remove bias addition if using batch normalization. Batch normalization shifts values by their mean and this removes the need to have a constant bias term.

  • Use TF Stats to find out how efficiently on-device ops run.

  • Use tf.function to perform computations and optionally, enable the jit_compile=True flag ( tf.function(jit_compile=True ). To learn more, go to Use XLA tf.function .

  • Minimize host Python operations between steps and reduce callbacks. Calculate metrics every few steps instead of at every step.

  • Keep the device compute units busy.

  • Send data to multiple devices in parallel.

  • Consider using 16-bit numerical representations , such as fp16 —the half-precision floating point format specified by IEEE—or the Brain floating-point bfloat16 format.

Additional resources

Known limitations

Profiling multiple GPUs on TensorFlow 2.2 and TensorFlow 2.3

TensorFlow 2.2 and 2.3 support multiple GPU profiling for single host systems only; multiple GPU profiling for multi-host systems is not supported. To profile multi-worker GPU configurations, each worker has to be profiled independently. From TensorFlow 2.4 multiple workers can be profiled using the tf.profiler.experimental.client.trace API.

CUDA® Toolkit 10.2 or later is required to profile multiple GPUs. As TensorFlow 2.2 and 2.3 support CUDA® Toolkit versions only up to 10.1, you need to create symbolic links to libcudart.so.10.1 and 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