ट्रेस व्यूअर टूल

प्रोफ़ाइलिंग सेशन के दौरान हुए इवेंट की टाइमलाइन को विज़ुअलाइज़ करने के लिए, ट्रेस व्यूअर का इस्तेमाल किया जा सकता है. यह आपके मॉडल के ज़रिए, सिस्टम के अलग-अलग हिस्सों पर किए गए ऑपरेशन की अवधि दिखाता है. जैसे, होस्ट (सीपीयू) और ऐक्सेलरेटर (जीपीयू या टीपीयू). इससे आपको यह समझने में मदद मिलती है कि आपका मॉडल, हार्डवेयर संसाधनों का इस्तेमाल कैसे करता है. साथ ही, परफ़ॉर्मेंस की समस्याओं का पता लगाने और तेज़ी से लागू करने के लिए, अपने मॉडल को ऑप्टिमाइज़ करने में भी मदद मिलती है. ट्रेस व्यूअर का यूज़र इंटरफ़ेस (यूआई), chrome://tracing में इस्तेमाल किए गए यूआई पर आधारित है. इसलिए, इसके लिए Chrome ब्राउज़र का इस्तेमाल करना ज़रूरी है.

इन प्लैटफ़ॉर्म पर काम करता है

TPU: काम करता है

जीपीयू: काम करता है

जीपीयू के लिए ट्रेस व्यूअर, हर जीपीयू चिप और उसमें मौजूद स्ट्रीम के हिसाब से टाइमलाइन पर इवेंट को ग्रुप करता है. वहीं, टीपीयू के लिए, यह हर टीपीयू चिप और कोर के हिसाब से टाइमलाइन पर इवेंट को व्यवस्थित करता है. दोनों ही मामलों में, ट्रेस व्यूअर, होस्ट सीपीयू के लिए हर थ्रेड की टाइमलाइन पर इवेंट भी दिखाता है.

टाइमलाइन के साथ इंटरैक्ट करना

ट्रेस व्यूअर में, टाइमलाइन पर नेविगेट करने और उसकी जांच करने के लिए कई टूल और तरीके उपलब्ध हैं:

  • नेविगेट करने के लिए: इन कीबोर्ड शॉर्टकट का इस्तेमाल किया जा सकता है:
    • W: ज़ूम इन करें.
    • S: ज़ूम आउट करें.
    • जवाब: बाईं ओर पैन करें.
    • D: दाईं ओर पैन करें.
  • टूल सिलेक्टर: टूल सिलेक्टर में किसी टूल पर क्लिक किया जा सकता है या उससे जुड़े कीबोर्ड शॉर्टकट का इस्तेमाल किया जा सकता है:
    • चुने जाने वाले आइटम को चुनने वाला टूल (1 या !): किसी इवेंट को चुनने के लिए उस पर क्लिक करें और ज़्यादा जानकारी वाले पैनल में उसकी जानकारी देखें. खास जानकारी देखने के लिए, Ctrl+क्लिक करके एक से ज़्यादा इवेंट चुनें.
    • पैन टूल (2 या @): टाइमलाइन को हॉरिज़ॉन्टल या वर्टिकल तौर पर मूव करने के लिए, खींचें और छोड़ें.
    • ज़ूम टूल (3 या #): टाइमलाइन के किसी खास हिस्से पर ज़ूम करने के लिए, खींचें और छोड़ें.
    • टाइमिंग टूल (4 या $): किसी समयावधि को मार्क करने के लिए, उसे खींचें और छोड़ें. मार्क किए गए इंटरवल की अवधि दिखेगी. किसी हिस्से को मार्क करने और उसकी कुल अवधि तय करने के लिए, 'm' बटन का इस्तेमाल भी किया जा सकता है.
  • चुने गए इवेंट पर ज़ूम करें (f): एक या उससे ज़्यादा इवेंट चुनें और टाइमलाइन के उस हिस्से पर तुरंत ज़ूम करने के लिए, 'f' बटन दबाएं. यह किसी खास ट्रेनिंग चरण पर फ़ोकस करने के लिए मददगार है.

बड़ी संख्या में ट्रेस इवेंट को हैंडल करते समय, ट्रेस व्यूअर स्ट्रीमिंग मोड में काम करता है. इसका मतलब है कि टाइमलाइन पर पैन और ज़ूम करने पर, यह मांग के हिसाब से डेटा लोड करता है. यह ठीक वैसे ही काम करता है जैसे मैप ऐप्लिकेशन काम करते हैं. अगर डेटा लोड होने से पहले ज़ूम किया जाता है, तो डेटा लोड होने तक आपको कम रिज़ॉल्यूशन में डेटा दिख सकता है.

ट्रेस व्यूअर इंटरफ़ेस के कॉम्पोनेंट

यहां ट्रेस व्यूअर के मुख्य यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट दिए गए हैं:

  • टाइम ऐक्सिस सबसे ऊपर हॉरिज़ॉन्टल तौर पर चलती है. इसमें, ट्रेस शुरू होने के समय के हिसाब से समय दिखता है.
  • टाइमलाइन को सेक्शन और ट्रैक के हिसाब से व्यवस्थित किया जाता है. साथ ही, लेबल बाएं वर्टिकल ऐक्सिस पर होते हैं. हर सेक्शन, प्रोसेसिंग एलिमेंट (उदाहरण के लिए, डिवाइस नोड या होस्ट थ्रेड) को दिखाता है. साथ ही, इसे बड़ा या छोटा किया जा सकता है. हर सेक्शन में ट्रैक होते हैं, जो खास गतिविधियों की टाइमलाइन होते हैं.
  • इवेंट, टाइमलाइन ट्रैक पर रंगीन और आयताकार ब्लॉक होते हैं. ये किसी ऑपरेशन की अवधि या ट्रेनिंग के चरण जैसे मेटा-इवेंट को दिखाते हैं. इवेंट के रंग का कोई खास मतलब नहीं होता.
  • ज़्यादा जानकारी वाले पैनल में, टाइमलाइन पैनल में चुने गए इवेंट के बारे में ज़्यादा जानकारी दिखती है. जैसे, उनका नाम, शुरू होने का समय, और अवधि.

सामान्य सेक्शन और ट्रैक

ट्रेस व्यूअर में ये सेक्शन और ट्रैक होते हैं.

  • हर TPU नोड के लिए एक सेक्शन, जिसमें ये ट्रैक शामिल हैं:
    • XLA मॉड्यूल: वह XLA प्रोग्राम जिसे चलाया जा रहा है.
    • XLA ऑपरेशन: TPU कोर पर चलने वाले XLA HLO ऑपरेशन दिखाता है. उदाहरण के लिए, हर बेहतर फ़्रेमवर्क ऑपरेशन (जैसे, JAX, Tensorflow या PyTorch) को एक या कई XLA ऑपरेशन में बदला जाता है. इसके बाद, इन्हें TPU पर चलाने के लिए कंपाइल किया जाता है. किसी XLA ऑपरेशन पर क्लिक करने पर, आपको ग्राफ़ व्यूअर में ऑपरेशन के लिंक दिख सकते हैं. साथ ही, ऑपरेशन के बारे में ज़्यादा जानकारी भी दिख सकती है. जैसे, शुरू/खत्म होने का समय, अवधि, और सोर्स स्टैक ट्रेस (अगर फ़्रेमवर्क और कंपाइलर ने उपलब्ध कराया हो).
    • XLA TraceMe: उपयोगकर्ता अपने कोड में एनोटेशन तय करते हैं. इनसे, काम की उन लॉजिकल यूनिट के बारे में पता चलता है जिन्हें ट्रैक करना है. भले ही आपने कोई एनोटेशन न जोड़ा हो, तब भी आपको यहां डेटा दिख सकता है. आम तौर पर, ये एनोटेशन XLA (उदाहरण के लिए, बैरियर कोर) या XProf (उदाहरण के लिए, ड्रॉप की गई ट्रेस एंट्री) जोड़ता है.
    • चरण: यह उस TPU कोर पर चल रहे ट्रेनिंग चरणों की अवधि दिखाता है. हालांकि, ऐसा तब ही होता है, जब उपयोगकर्ता के प्रोग्राम या फ़्रेमवर्क में सही तरीके से एनोटेट किया गया हो.
    • फ़्रेमवर्क ऑपरेशन: TPU कोर पर किए गए फ़्रेमवर्क ऑपरेशन (उदाहरण के लिए, JAX, Tensorflow या PyTorch) दिखाता है. ऐसा तब होता है, जब उपयोगकर्ता के प्रोग्राम या फ़्रेमवर्क में सही तरीके से एनोटेट किया गया हो.
    • फ़्रेमवर्क के नाम का दायरा: हर फ़्रेमवर्क ऑपरेशन के लिए, स्टैक ट्रेस का विज़ुअलाइज़ेशन. कम शब्दों में बताने के लिए, यह ट्रैक सिर्फ़ एक डिवाइस के लिए दिखता है.
    • सोर्स कोड: प्रोफ़ाइल में उपलब्ध होने पर, एक्ज़ीक्यूट किए जा रहे सोर्स कोड का पाथ.
    • स्केलर यूनिट: TPU के लिए, स्केलर यूनिट पर चल रहे इवेंट. इन्हें प्रोफ़ाइल में मौजूद होने पर दिखाया जाता है.
    • TensorCore सिंक फ़्लैग: TPUs पर सिंक करने का तरीका, जो प्रोफ़ाइल में मौजूद होने पर दिखाया जाता है.
    • होस्ट को ऑफ़लोड करना: ऐसे ऑपरेशन जो होस्ट मेमोरी और ऐक्सेलरेटर मेमोरी के बीच डेटा को असिंक्रोनस तरीके से ट्रांसफ़र करते हैं. आम तौर पर, XLA ऑपरेशंस लाइन पर, शुरू और बंद करने से जुड़े ऑपरेशंस दिखते हैं.इनसे पता चलता है कि एक्सेलेरेटर, डेटा ट्रांसफ़र के लिए तैयार हो रहा है. उदाहरण के लिए, ट्रांसफ़र के दौरान सोर्स/डेस्टिनेशन मेमोरी क्षेत्रों को “इस्तेमाल में है” के तौर पर मार्क करना. अगर एक साथ कई ऑफ़लोड ऑपरेशन चल रहे हैं, तो होस्ट की कई ऑफ़लोड लाइनें मौजूद हो सकती हैं. ऐसे में, ट्रेस व्यूअर को एक साथ कई इवेंट दिखाने होंगे.
  • हर स्पैर्सकोर नोड के लिए एक सेक्शन: कुछ TPU जनरेशन (उदाहरण के लिए, TPU v5p और TPU v6e में, डेंस कंप्यूट एमएक्सयू इकाइयों के अलावा, एक या उससे ज़्यादा स्पैर्स कोर इकाइयां होती हैं. इन कोर से जुड़े मॉड्यूल, ऑपरेशन, और ट्रैस मेज़रमेंट इस सेक्शन में दिखेंगे.
  • हर जीपीयू नोड के लिए एक सेक्शन, जिसमें ये ट्रैक शामिल हैं:
    • XLA मॉड्यूल, फ़्रेमवर्क ऑपरेशंस, फ़्रेमवर्क के नाम का दायरा, चरण, सोर्स कोड. ये सभी TPU सेक्शन से मिलते-जुलते हैं.
    • हर स्ट्रीम के लिए एक ट्रैक, जिसमें स्ट्रीम के नाम में स्ट्रीम पर किए गए ऑपरेशन (Memcpy, Compute वगैरह) के टाइप की जानकारी भी शामिल होती है.
    • XLA TraceMe, जीपीयू के साथ काम नहीं करता.
    • XLA ऑपरेशन, GPU सेक्शन में दिखते हैं. हालांकि, फ़िलहाल ये हमेशा सटीक नहीं होते, क्योंकि ये स्ट्रीम डेटा से मिलते हैं. इसलिए, ये पूरी तरह से GPU के एक्सीक्यूशन मॉडल का हिसाब नहीं लगा सकते. ऐसा तब हो सकता है, जब अलग-अलग स्ट्रीम पर चलाए जाने वाले असल कर्नेल के लिए, XLA ऑप्स की N:M मैपिंग हो. साथ ही, हार्डवेयर में अलग-अलग एसएम पर कई स्ट्रीम की डाइनैमिक शेड्यूलिंग हो.
  • होस्ट मशीन के सीपीयू पर चल रहे हर कॉम्पोनेंट (उदाहरण के लिए, एक थ्रेडपूल) के लिए एक सेक्शन. थ्रेडपूल के मामले में, हर थ्रेड के लिए एक ट्रैक. अगर प्रोफ़ाइल इकट्ठा करने के दौरान, Python ट्रैस चालू थे, तो आपको यहां भी ये दिखेंगे.

ध्यान दें कि इकट्ठा की गई प्रोफ़ाइल में, सिर्फ़ TPU के लिए XLA ऑप्स और GPU के लिए स्ट्रीम डेटा को सीधे तौर पर शामिल किया जाता है. बाकी सभी लाइनें “डायरेक्टेड लाइन” होती हैं. इनमें कंपाइलर से मिली वैकल्पिक “साइडबैंड” जानकारी, उपयोगकर्ता के वैकल्पिक एनोटेशन, और/या XProf से लागू किए गए हेयुरिस्टिक्स शामिल होते हैं. इसलिए, हो सकता है कि ये रेफ़रंस कुछ प्रोफ़ाइलों में दिखें या न दिखें.

अन्य सुविधाएं

  • “इवेंट ढूंढें..” खोज बार का इस्तेमाल करके, इवेंट के नाम खोजे जा सकते हैं. फ़िलहाल, यह पूरे ट्रैक के बजाय, स्क्रीन पर दिखने वाली समय-विंडो में ही खोज करता है.
  • फ़्लो इवेंट: सबसे ऊपर मौजूद बार में “फ़्लो इवेंट” बटन पर क्लिक करके, इस विकल्प को चालू करने पर विज़ुअलाइज़ेशन जुड़ जाते हैं. साथ ही, एक थ्रेड या लाइन में मौजूद इवेंट, दूसरी थ्रेड लाइन में मौजूद इवेंट से लिंक हो जाते हैं. उदाहरण के लिए, होस्ट पर मौजूद उस ऑपरेशन से ऐरो खींचा जा सकता है जो किसी ऐक्सेलरेटर के लिए काम को सूची में जोड़ता है या लॉन्च करता है. यह ऐरो, ऐक्सेलरेटर पर मौजूद उस ऑपरेशन तक खींचा जा सकता है जो उस काम को पूरा करता है. XProf, उपयोगकर्ता के एनोटेशन, पहले से मौजूद हेयुरिस्टिक्स, और अलग-अलग कॉम्पोनेंट से मिलने वाली जानकारी को प्रोसेस करने के बाद, इन लिंक का पता लगाता है. जैसे, CUPTI ड्राइवर, कर्नेल लॉन्च आईडी, TPU के रनटाइम की जानकारी वगैरह).
  • किसी XLA ऑपरेशन पर क्लिक करने से, ज़्यादा जानकारी वाले पैनल में ज़्यादा जानकारी मिलती है. उदाहरण के लिए, यह ग्राफ़ व्यूअर टूल में मौजूद ऑपरेटर से लिंक होता है. यह सोर्स कोड और/या Python स्टैक ट्रेस के पॉइंटर भी दे सकता है. साथ ही, प्रोफ़ाइल में मौजूद होने पर, उस फ़्रेमवर्क ऑपरेशन के बारे में भी बता सकता है जिसकी वजह से यह XLA ऑपरेशन जनरेट हुआ. यह एफ़एलओपी (ऑपरेटर के ज़रिए किए गए फ़्लोटिंग पॉइंट ऑपरेशन की संख्या) और ऑपरेटर के ज़रिए ऐक्सेस किए गए बाइट भी दिखा सकता है. यह जानकारी, प्रोफ़ाइल की रनटाइम जानकारी के बजाय, कंपाइलेशन के दौरान XLA से स्टैटिक तौर पर हासिल की जाती है.