ابزار نمایش حافظه

شما می‌توانید از Memory Viewer برای تجسم استفاده از حافظه در طول عمر برنامه استفاده کنید. می‌توانید در نقطه اوج استفاده از حافظه، جزئیات محتوای حافظه را بررسی کنید، از جمله برای اشکال‌زدایی موقعیت‌های کمبود حافظه (OOM). Memory Viewer می‌تواند به شما کمک کند تا میزان استفاده سراسری از حافظه و میزان نزدیک بودن محاسبه به کمبود حافظه را مشاهده کنید.

تمام اطلاعات نمایش داده شده در Memory Viewer کاملاً ایستا هستند و از کامپایلر XLA به دست می‌آیند؛ اطلاعات پویای زمان اجرا در ابزار Memory Profile ارائه می‌شوند.

نمودار خطی نمایشگر حافظه

پلتفرم‌های پشتیبانی‌شده

هم TPU و هم GPU پشتیبانی می‌شوند.

اجزای نمایشگر حافظه

ابزار Memory Viewer از چندین جزء کلیدی تشکیل شده است:

  1. منوی کشویی کنترل کاربر که به شما امکان می‌دهد داده‌هایی را که تجسم می‌کنید، سفارشی کنید:

    • انواع حافظه: انواع حافظه پشتیبانی‌شده وابسته به شتاب‌دهنده هستند. برای پردازنده‌های گرافیکی (GPU)، تمرکز بر حافظه با پهنای باند بالا (HBM) و حافظه میزبان است، در حالی که برای TPUها، می‌توانید علاوه بر این، میزان استفاده از حافظه‌های روی تراشه از جمله VMEM، SMEM، CMEM، پرچم‌های همگام‌سازی (SFlag)، Sparsecore و همچنین حافظه میزبان را نیز مشاهده کنید.

      نمایشگر حافظه، منوی کشویی انواع حافظه

    • ماژول‌های HLO: اینها برنامه‌های XLA هستند که بخشی از اجرای شما بوده‌اند. یک نقطه شروع خوب اغلب یک ماژول سطح بالا است که با برچسب‌هایی مانند jit_train_step یا jit_generate مشخص می‌شود. این منوی کشویی در پنل سمت چپ ظاهر می‌شود.

      منوی کشویی ماژول‌های نمایشگر حافظه

  2. بخش مرور متنی، اطلاعات سطح بالایی مانند حداکثر تخصیص حافظه مورد نیاز برای برنامه، تقسیم بین آرگومان‌ها در مقابل متغیرهای موقت و غیره را ارائه می‌دهد. به دلیل محدودیت‌های مربوط به اشکال پشتیبانی‌شده تنسورها در شتاب‌دهنده‌ها، سربار تحمیل می‌شود. اگر این حاشیه‌بندی بخش بزرگی از کل تخصیص باشد، ممکن است نشان‌دهنده یک فرصت بهینه‌سازی باشد.

    نمایشگر حافظه مرور کلی متن حافظه

  3. نمودار خطی «اندازه تخصیص حافظه در مقابل ترتیب برنامه» ، میزان استفاده از حافظه را در مقابل نقاط برنامه (توالی HLO) طبق برنامه‌ریزی کامپایلر نشان می‌دهد.

    • توجه داشته باشید که محور x زمان نیست .
    • این نمودار به طور خاص نقطه‌ای را در برنامه که بیشترین استفاده از حافظه توسط ماژول انتخاب شده را دارد، برجسته می‌کند. پروفایلر و ابزارها از محل قرارگیری مشترک ماژول‌ها روی یک تراشه/حافظه مشخص بی‌اطلاع هستند. هنگامی که هر ماژول کامپایل می‌شود، کامپایلر پروفایل را با نقطه شروع «خط پایه» کل حافظه اختصاص داده شده (توسط ماژول‌هایی که قبل از این ماژول کامپایل شده‌اند) حاشیه‌نویسی می‌کند و با وقوع تخصیص‌ها و آزادسازی‌های بیشتر، از آنجا به بالا و پایین شمارش می‌کند. با این حال، هرگونه تخصیص آینده توسط سایر ماژول‌های کامپایل شده قبل از اجرا ثبت نمی‌شود. این نکته را هنگام اشکال‌زدایی موقعیت‌های OOM در نظر داشته باشید.
  4. نمودارهای بافر در پایین صفحه، میزان استفاده از حافظه را در نقطه اوج برنامه (که با خط عمودی در نمودار خطی استفاده از حافظه نشان داده شده است) تفکیک می‌کنند. سه نمودار وجود دارد که همه آنها کل مجموعه بافرهای اختصاص داده شده توسط برنامه را نشان می‌دهند، اما به سه روش مختلف مرتب شده‌اند:

    • بر اساس ترتیب برنامه: ترتیبی که در طول اجرای برنامه به وجود آمده‌اند، که قدیمی‌ترین‌ها در سمت چپ ظاهر می‌شوند.
    • بر اساس اندازه: مواردی که بیشترین تأثیر را بر نقطه اوج استفاده از حافظه دارند در سمت چپ قرار دارند.
    • با توجه به سربار اضافی که تحمیل می‌کنند: «ناکارآمدترین»ها از دیدگاه سخت‌افزاری در سمت چپ ظاهر می‌شوند.

      توجه داشته باشید که رنگ‌های بافرها هیچ معنای خاصی ندارند.

  5. کلیک روی پیوند «جدول زمانی» در کنار عنوان نمودار، تصویری از تخصیص حافظه را با مجموعه‌ای از کادرهای رنگی، هر کدام برای هر تخصیص، نمایش می‌دهد. با نگه داشتن ماوس روی بلوک، اطلاعات بیشتری در مورد تخصیص نمایش داده می‌شود؛ به عنوان مثال، عملیات HLO که تخصیص را ایجاد کرده است، شکل تخصیص و غیره. این تصویرسازی را می‌توان به صورت زیر تفسیر کرد:

    • محور x نشان دهنده ترتیب برنامه است.
    • ارتفاع هر بلوک روی محور y، اندازه تخصیص است.
    • عرض هر بلوک، بر حسب ترتیب برنامه، طول عمر تخصیص است.
  6. با نگه داشتن ماوس روی هر یک از سه نمودار، دو نمایش دیگر نیز نمایش داده می‌شود:

    • یک پوشش روی نمودار خطی استفاده از حافظه با رنگی که با کارت بافر مطابقت دارد و طول عمر آن بافر را نشان می‌دهد؛ یعنی یک نوار افقی که لبه‌های چپ و راست آن نقاط تخصیص و آزادسازی را در ترتیب برنامه نشان می‌دهد. ارتفاع نوار افقی نشان دهنده اندازه نسبی بافر انتخاب شده در مقایسه با حداکثر تخصیص است.
    • یک کارت جزئیات بافر جداگانه، معمولاً در سمت چپ، با جزئیات مربوط به عملیات خاص در صورت لزوم. یک کارت معمولی شامل اطلاعات زیر است:

      • نام: نام عملیات XLA که می‌توانید در Graph Viewer یا Trace Viewer جستجو کنید.
      • اندازه: اندازه تخصیص بافر، با و بدون لایه گذاری.
      • شکل (Shape): رتبه، اندازه و نوع داده آرایه N بعدی را توصیف می‌کند.
      • نام عملیات چارچوب: نام عملیات چارچوب مرتبط با این تخصیص را نشان می‌دهد.
      • نوع تخصیص: تخصیص‌های بافر را به انواع زیر دسته‌بندی می‌کند: پارامتر، خروجی، Thread-local و Temporary (مثلاً تخصیص بافر درون یک فیوژن).
      • منبع: محل کد منبع (فایل و شماره خط) را برای عملیاتی که بافر را ایجاد کرده است، نشان می‌دهد.
      • پشته منبع: پشته فراخوانی کامل برای عملیات را نمایش می‌دهد و زمینه اجرایی که منجر به تخصیص بافر شده است را ارائه می‌دهد.

      نمودارهای بافر نمایشگر حافظه