मेमोरी व्यूअर टूल

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

मेमोरी व्यूअर में दिखाई गई सारी जानकारी पूरी तरह से स्टैटिक होती है. इसे XLA कंपाइलर से हासिल किया जाता है. रनटाइम की डाइनैमिक जानकारी, मेमोरी प्रोफ़ाइल टूल में दिखाई जाती है.

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

TPU: काम करता है

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

मेमोरी व्यूअर के कॉम्पोनेंट

मेमोरी व्यूअर में कई मुख्य कॉम्पोनेंट होते हैं:

  1. उपयोगकर्ता के कंट्रोल वाले ड्रॉपडाउन, जिनकी मदद से विज़ुअलाइज़ किए जा रहे डेटा को पसंद के मुताबिक बनाया जा सकता है:
    • मेमोरी टाइप: इस्तेमाल किए जा सकने वाले मेमोरी टाइप, ऐक्सेलरेटर पर निर्भर करते हैं. जीपीयू के लिए, हाई बैंडविड्थ मेमोरी (एचबीएम) पर फ़ोकस किया जाता है. वहीं, टीपीयू के लिए, चिप पर मौजूद मेमोरी के इस्तेमाल को भी देखा जा सकता है. इनमें VMEM, SMEM, CMEM, सिंक फ़्लैग (SFlag), स्पैर्सीकोर, और होस्ट मेमोरी शामिल हैं.
    • मॉड्यूल: ये ऐसे XLA प्रोग्राम हैं जो आपके एक्सीक्यूशन का हिस्सा थे. अक्सर, टॉप लेवल मॉड्यूल, शुरुआत करने का अच्छा तरीका होता है. इस मॉड्यूल पर “jit_train_step” या “jit_generate” जैसा लेबल होता है.
  2. टेक्स्ट की खास जानकारी वाले सेक्शन में, प्रोग्राम के लिए ज़रूरी पीक मेमोरी ऐलोकेशन, आर्ग्युमेंट बनाम अस्थायी वैरिएबल के बीच का बंटवारा वगैरह जैसी खास जानकारी मिलती है. पैडिंग की वजह से ओवरहेड होता है. यह ज़रूरी है, क्योंकि ऐक्सेलरेटर पर टेंसर के काम करने वाले शेप पर पाबंदियां होती हैं. अगर यह पैडिंग, कुल बजट का ज़्यादा हिस्सा है, तो इसका मतलब है कि ऑप्टिमाइज़ेशन का मौका है.
  3. “मेमोरी ऐलोकेशन साइज़ बनाम प्रोग्राम ऑर्डर” लाइन चार्ट में, मेमोरी के इस्तेमाल के मुकाबले प्रोग्राम पॉइंट (एचएलओ क्रम) को प्लॉट किया जाता है. प्रोग्राम पॉइंट, कंपाइलर के शेड्यूल के मुताबिक होते हैं.
    • ध्यान दें कि एक्स-ऐक्सिस, समय नहीं है.
    • चार्ट में, प्रोग्राम के उस पॉइंट को हाइलाइट किया जाता है जहां चुने गए मॉड्यूल का इस्तेमाल करके सबसे ज़्यादा मेमोरी का इस्तेमाल किया गया है. प्रोफ़ाइलर और टूल, किसी चिप/मेमोरी पर मॉड्यूल के साथ-साथ मौजूद होने के बारे में नहीं जानते. जब हर मॉड्यूल को संकलित किया जाता है, तो कंपाइलर प्रोफ़ाइल में, एलोकेट की गई कुल मेमोरी के “बेसलाइन” शुरुआती पॉइंट के साथ एनोटेट करता है. यह मेमोरी, इस मॉड्यूल से पहले संकलित किए गए मॉड्यूल से एलोकेट की गई होती है. साथ ही, आगे एलोकेशन और डीलोकेशन होने पर, प्रोफ़ाइल में मेमोरी की संख्या बढ़ती और घटती रहती है. हालांकि, प्रोग्राम को चलाने से पहले इकट्ठा किए गए अन्य मॉड्यूल के लिए, आने वाले समय में किए जाने वाले ऐलोकेशन कैप्चर नहीं किए जाते. OOM की स्थितियों को डीबग करते समय, इस बात का ध्यान रखें.
  4. पेज पर सबसे नीचे मौजूद बफ़र चार्ट, प्रोग्राम के सबसे ज़्यादा इस्तेमाल के समय मेमोरी के इस्तेमाल की जानकारी देते हैं. इस जानकारी को मेमोरी के इस्तेमाल के लाइन चार्ट में वर्टिकल लाइन से दिखाया जाता है. यहां तीन चार्ट दिए गए हैं. इनमें प्रोग्राम के लिए, बफ़र का पूरा सेट दिख रहा है. हालांकि, इन्हें तीन अलग-अलग तरीकों से क्रम में लगाया गया है:

    • प्रोग्राम के क्रम के हिसाब से: प्रोग्राम के दौरान, ये उसी क्रम में दिखते हैं जिस क्रम में इन्हें लागू किया गया था. सबसे पुराने प्रोग्राम बाईं ओर दिखते हैं.
    • साइज़ के हिसाब से: सबसे ज़्यादा मेमोरी इस्तेमाल करने वाले आइटम बाईं ओर होते हैं.
    • पैडिंग के ओवरहेड के हिसाब से: हार्डवेयर के हिसाब से सबसे “बेकार” विकल्प बाईं ओर दिखते हैं.

      ध्यान दें कि बफ़र के रंगों का कोई खास मतलब नहीं होता.

  5. तीनों चार्ट में से किसी भी बफ़र पर कर्सर घुमाने पर, दो और डिसप्ले दिखते हैं:

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