ابزار مشاهده حافظه
می توانید از Memory Viewer برای تجسم استفاده از حافظه در طول عمر برنامه استفاده کنید. میتوانید در نقطه اوج استفاده از حافظه، از جمله برای رفع اشکال موقعیتهای خارج از حافظه (OOM) به جزئیات محتوای حافظه بپردازید. Memory Viewer می تواند به شما کمک کند میزان استفاده از حافظه جهانی و میزان نزدیک بودن محاسبات به کمبود حافظه را مشاهده کنید.
تمام اطلاعات نمایش داده شده در Memory Viewer کاملا ثابت هستند و از کامپایلر XLA به دست آمده اند. اطلاعات زمان اجرا پویا در ابزار Memory Profile ارائه شده است.
پلتفرم های پشتیبانی شده
TPU: پشتیبانی می شود
GPU: پشتیبانی می شود
اجزای نمایشگر حافظه
Memory Viewer از چندین جزء کلیدی تشکیل شده است:
- کرکره های کنترل کاربر که به شما امکان می دهد داده هایی را که تجسم می کنید سفارشی کنید:
- انواع حافظه: انواع حافظه های پشتیبانی شده وابسته به شتاب دهنده هستند. برای پردازندههای گرافیکی، تمرکز روی حافظه با پهنای باند بالا (HBM) و حافظه میزبان است. برای TPU ها، علاوه بر این، می توانید استفاده از حافظه های روی تراشه شامل VMEM، SMEM، CMEM، Sync Flags (SFlag) و Sparsecore و همچنین حافظه میزبان را مشاهده کنید.
- ماژول ها: اینها برنامه های XLA هستند که بخشی از اجرای شما بودند. یک نقطه شروع خوب اغلب یک ماژول سطح بالا است که چیزی مانند "jit_train_step" یا "jit_generate" نامگذاری شده است.
- بخش نمای کلی متنی اطلاعات سطح بالایی مانند تخصیص حداکثر حافظه مورد نیاز برای برنامه، تقسیم بین آرگومانها در مقابل متغیرهای موقت و غیره را ارائه میکند. سرباری که توسط padding تحمیل میشود، به دلیل محدودیتهایی در شکلهای پشتیبانی شده تانسورها در شتابدهندهها ضروری است. اگر این بالشتک کسری بزرگ از کل تخصیص باشد، ممکن است نشان دهنده یک فرصت بهینه سازی باشد.
- نمودار خطی "اندازه تخصیص حافظه در مقابل ترتیب برنامه" میزان استفاده از حافظه را در مقابل نقاط برنامه (توالی HLO) طبق برنامه ریزی کامپایلر ترسیم می کند.
- توجه داشته باشید که محور x زمان نیست .
- نمودار به طور خاص نقطه برنامه را با حداکثر استفاده از حافظه ماژول انتخاب شده برجسته می کند. نمایه ساز و ابزارها از محل اقامت مشترک ماژول ها در یک تراشه/حافظه معین بی اطلاع هستند. هنگامی که هر ماژول کامپایل می شود، کامپایلر نمایه را با نقطه شروع "خط پایه" کل حافظه تخصیص یافته (توسط ماژول هایی که قبل از این کامپایل شده اند) حاشیه نویسی می کند و از آنجا به عنوان تخصیص و تخصیص بیشتر شمارش می کند. با این حال، هر گونه تخصیص آینده توسط ماژول های دیگر که قبل از اجرا کامپایل شده اند، ضبط نمی شوند. این را در هنگام اشکال زدایی موقعیت های OOM در نظر داشته باشید.
نمودارهای بافر در پایین صفحه، میزان مصرف حافظه را در نقطه اوج برنامه مصرف (که با خط عمودی در نمودار خط مصرف حافظه نشان داده شده است) تجزیه می کنند. سه نمودار وجود دارد که همگی کل مجموعه بافرهای اختصاص داده شده توسط برنامه را نشان می دهند، اما به سه روش مختلف مرتب شده اند:
- با ترتیب برنامه: ترتیبی که در طول اجرای برنامه زنده شدند و قدیمی ترین آنها در سمت چپ ظاهر شدند.
- بر اساس اندازه: مواردی که بیشترین تأثیر را بر نقطه اوج استفاده از حافظه دارند در سمت چپ قرار دارند.
آنها با بالشتک بالا تحمیل می کنند: «ناکارآمدترین» از منظر سخت افزاری در سمت چپ ظاهر می شوند.
توجه داشته باشید که رنگ های بافرها معنای خاصی ندارند.
با کلیک بر روی پیوند "خط زمانی" در کنار عنوان نمودار تصویری از تخصیص حافظه با یک سری کادر رنگی، یکی در هر تخصیص ظاهر می شود. با نگه داشتن نشانگر روی بلوک، اطلاعات اضافی درباره تخصیص ظاهر می شود؛ برای مثال، عملیات HLO که تخصیص را ایجاد کرده است، شکل تخصیص، و غیره. تجسم ممکن است به صورت زیر تفسیر شود:
- محور x ترتیب برنامه است.
- ارتفاع هر بلوک در محور y اندازه تخصیص است.
- عرض هر بلوک از نظر ترتیب برنامه، طول عمر تخصیص است.
با نگه داشتن ماوس روی یک بافر در هر یک از سه نمودار، دو نمایشگر اضافی ظاهر می شوند:
- یک پوشش روی نمودار خط مصرف حافظه به رنگی که با کارت بافر مطابقت دارد و طول عمر آن بافر را نشان می دهد. به عنوان مثال، یک نوار افقی که لبه های چپ و راست آن نقاط تخصیص و توزیع را در ترتیب برنامه نشان می دهد. ارتفاع نوار افقی نشان دهنده اندازه نسبی بافر انتخاب شده در مقایسه با تخصیص پیک است.
- یک کارت جزئیات بافر جداگانه، معمولاً در سمت چپ، با جزئیات مربوط به عملیات خاص در صورت لزوم. یک کارت معمولی شامل اطلاعات زیر است:
- نام: نام عملیات XLA که می توانید آن را در Graph Viewer یا Trace Viewer جستجو کنید.
- اندازه: اندازه تخصیص بافر، با و بدون بالشتک.
- شکل: رتبه، اندازه و نوع داده آرایه N بعدی را توصیف می کند.
- Framework op name: نام عملیات چارچوب مرتبط با این تخصیص را نشان می دهد.
- نوع تخصیص: تخصیص بافر را به انواع زیر دسته بندی می کند: پارامتر، خروجی، موضوع محلی، و موقت (به عنوان مثال، تخصیص بافر در داخل یک ترکیب).
- منبع: مکان کد منبع (فایل و شماره خط) را برای عملیاتی که بافر ایجاد کرده است را نشان می دهد.
- پشته منبع: پشته تماس کامل را برای عملیات نمایش می دهد و زمینه اجرایی را ارائه می دهد که منجر به تخصیص بافر می شود.