ابزار مشاهده ردیابی
شما میتوانید از Trace Viewer برای تجسم جدول زمانی رویدادهایی که در طول جلسه پروفایلینگ رخ دادهاند، استفاده کنید. این ابزار مدت زمان عملیات اجرا شده توسط مدل شما را در بخشهای مختلف سیستم، مانند میزبان (CPU) و شتابدهندهها (GPU یا TPU) نمایش میدهد. این به شما امکان میدهد تا بفهمید مدل شما چگونه از منابع سختافزاری استفاده میکند، گلوگاههای عملکرد را شناسایی کنید و مدل خود را برای اجرای سریعتر بهینه کنید.

پلتفرمهای پشتیبانیشده
هم TPU و هم GPU پشتیبانی میشوند.
نمایشگر ردیابی برای پردازندههای گرافیکی (GPU) رویدادها را بر اساس جدول زمانی به ازای هر تراشه GPU و جریانهای درون آن گروهبندی میکند، در حالی که برای TPUها، رویدادها را بر اساس جدول زمانی به ازای هر تراشه و هسته TPU سازماندهی میکند. در هر صورت، نمایشگر ردیابی همچنین رویدادها را بر اساس جدول زمانی به ازای هر رشته برای پردازنده میزبان که شتابدهندهها به آن متصل هستند، ارائه میدهد.

تعامل با خط زمانی
Trace Viewer ابزارها و روشهای مختلفی را برای پیمایش و بررسی جدول زمانی ارائه میدهد:
- پیمایش: پس از کلیک روی یک رویداد در جدول زمانی، میتوانید از میانبرهای صفحهکلید زیر استفاده کنید:
- W: بزرگنمایی کنید.
- س: کوچکنمایی کنید.
- الف) به سمت چپ حرکت کنید.
- د: به راست حرکت کنید.
- انتخابگر ابزار: یک انتخابگر ابزار شناور شامل ابزارهایی است که میتوانید با کلیک روی آیکونهای مربوطه یا با استفاده از میانبرهای صفحه کلید مربوطه از آنها استفاده کنید:
- ابزار انتخاب (1 یا !): برای انتخاب یک رویداد و مشاهده جزئیات آن در پنل جزئیات، روی آن کلیک کنید. برای مشاهده خلاصه، چندین رویداد را با استفاده از ctrl+click انتخاب کنید.
- ابزار Pan (2 یا @): برای جابجایی افقی یا عمودی جدول زمانی، آن را بکشید.
- ابزار بزرگنمایی (3 یا #): برای بزرگنمایی در یک ناحیه خاص از جدول زمانی، آن را بکشید.
- ابزار زمانبندی (۴ یا $): برای علامتگذاری یک بازه زمانی، آن را بکشید. مدت زمان بازه علامتگذاری شده نمایش داده میشود. همچنین میتوانید از کلید 'm' برای علامتگذاری یک انتخاب و تعیین مدت زمان کل آن استفاده کنید.
- بزرگنمایی روی رویدادهای انتخابشده (f): یک یا چند رویداد را انتخاب کنید و کلید «f» را فشار دهید تا به سرعت روی آن بخش از جدول زمانی بزرگنمایی شود. این برای تمرکز روی یک مرحله آموزشی خاص مفید است.

هنگام مدیریت تعداد زیادی از رویدادهای ردیابی، Trace Viewer در حالت پخش جریانی کار میکند. این بدان معناست که هنگام حرکت و بزرگنمایی در جدول زمانی، دادهها را بر اساس تقاضا بارگیری میکند، مشابه نحوه کار برنامههای نقشه. اگر سریعتر از بارگذاری دادهها بزرگنمایی کنید، ممکن است تا زمان اتمام بارگیری، نمایشی با وضوح پایین از دادهها مشاهده کنید.
اجزای رابط نمایشگر ردیابی
اجزای اصلی رابط کاربری در Trace Viewer عبارتند از:
- محور زمان به صورت افقی در بالا قرار دارد و زمان را نسبت به شروع نمودار نشان میدهد.
- خطوط زمانی بر اساس بخشها و مسیرها سازماندهی شدهاند و برچسبها در محور عمودی سمت چپ قرار دارند. هر بخش نشاندهنده یک عنصر پردازشی (مثلاً یک گره دستگاه یا رشتههای میزبان) است و میتواند گسترش یافته یا جمع شود. در هر بخش، مسیرهایی وجود دارد که خطوط زمانی برای فعالیتهای خاص هستند.
- رویدادها، بلوکهای مستطیلی رنگی روی مسیرهای جدول زمانی هستند که مدت زمان یک عملیات یا یک رویداد متا مانند یک مرحله آموزشی را نشان میدهند. رنگ رویدادها معنای خاصی ندارد.
پنجره جزئیات، که هنگام انتخاب یک یا چند رویداد در پایین جدول زمانی ظاهر میشود، اطلاعات اضافی در مورد رویدادهای انتخاب شده، مانند نام، زمان شروع و مدت زمان آنها را نشان میدهد. هنگامی که یک عملیات XLA انتخاب میشود، میتوانید پیوندهایی به عملیات در ابزار Graph Viewer و سایر اطلاعاتی را که توسط چارچوب و کامپایلر در دسترس قرار میگیرد، از جمله اشارهگرها به کد منبع و/یا ردیابی پشته پایتون، عملیات چارچوبی که باعث تولید این عملیات XLA شده است و غیره، مشاهده کنید. همچنین ممکن است FLOPS (تعداد عملیات ممیز شناور اجرا شده توسط عملیات) و بایتهای مورد دسترسی توسط عملیات را نشان دهد. این اطلاعات به صورت ایستا از XLA در طول کامپایل به دست میآید، نه اطلاعات زمان اجرا از پروفایل.

بخشها و مسیرهای معمول
Trace Viewer بخشها و مسیرهای زیر را ارائه میدهد.
- یک بخش برای هر گره TPU، با مسیرهای زیر:
- مراحل : مدت زمان مراحل آموزشی که روی آن هسته TPU اجرا میشوند را نشان میدهد، البته اگر به طور مناسب در برنامه یا چارچوب کاربر حاشیهنویسی شده باشند.
- ماژولهای XLA : برنامه XLA در حال اجرا.
- XLA Ops : عملیات XLA HLO که روی هسته TPU اجرا شدهاند را نشان میدهد. هر عملیات چارچوب سطح بالاتر (مثلاً JAX، Tensorflow یا PyTorch) به یک یا چند عملیات XLA ترجمه میشود که سپس برای اجرا روی TPU کامپایل میشوند.
- XLA TraceMe : حاشیهنویسیهای مشخصشده توسط کاربر در کد آنها که واحدهای منطقی کار مورد نظر برای ردیابی را توصیف میکنند. حتی اگر هیچ حاشیهنویسی اضافه نکرده باشید، ممکن است همچنان دادهها را در اینجا مشاهده کنید؛ این دادهها معمولاً توسط XLA (مثلاً هستههای مانع) یا خود XProf (مثلاً ورودیهای ردیابی حذفشده) اضافه میشوند.
- محدوده نام فریمورک : برای هر عملیات فریمورک، تصویری از ردپای پشته نمایش داده میشود. برای اختصار، این ردپا فقط برای یک دستگاه واحد نمایش داده میشود.
- عملیات چارچوب : عملیات چارچوب (مثلاً JAX، Tensorflow یا PyTorch) که روی هسته TPU اجرا میشوند را نمایش میدهد، البته اگر به طور مناسب در برنامه کاربر یا چارچوب حاشیهنویسی شده باشند.
- محدوده نام فریمورک : برای هر عملیات فریمورک، تصویری از ردپای پشته نمایش داده میشود. برای اختصار، این ردپا فقط برای یک دستگاه واحد نمایش داده میشود.
- کد منبع : مسیر کد منبعی که در حال اجرا است، در صورت موجود بودن در پروفایل.
- واحد اسکالر : برای TPUها، رویدادهایی که روی واحد اسکالر اجرا میشوند، در صورت وجود در پروفایل نمایش داده میشوند.
- پرچمهای همگامسازی TensorCore : مکانیسم همگامسازی روی TPUها، که در صورت وجود در پروفایل، نمایش داده میشوند.
- تخلیه بار میزبان : عملیاتی که دادهها را به صورت غیرهمزمان بین حافظه میزبان و حافظه شتابدهنده جابجا میکنند. معمولاً عملیات شروع و توقف مربوطه در خط XLA Ops ظاهر میشوند که نشان میدهد شتابدهنده برای انتقال دادهها آماده میشود (مثلاً، علامتگذاری مناطق حافظه منبع/مقصد به عنوان "در حال استفاده" برای مدت زمان انتقال). اگر چندین عملیات تخلیه بار به صورت موازی اجرا شوند، ممکن است چندین ردیف تخلیه بار میزبان وجود داشته باشد که نیاز به نمایش همزمان چندین رویداد توسط نمایشگر ردیابی دارد.
- یک بخش برای هر گره Sparsecore: برخی از نسلهای TPU (مثلاً TPU v5p و Trillium ) علاوه بر واحدهای MXU محاسباتی متراکم، به یک یا چند واحد SparseCore نیز مجهز هستند؛ ماژولها، عملیاتها و TraceMeهای مرتبط با این هستهها در این بخش نمایش داده میشوند.
- یک بخش برای هر گره GPU، با مسیرهای زیر:
- یک مسیر برای هر جریان، که نام جریان شامل اطلاعاتی در مورد انواع عملیات اجرا شده روی جریان (Memcpy، Compute و غیره) نیز میشود.
- آمار راهاندازی : حداکثر و میانگین زمان صرفشده در مرحله راهاندازی را نشان میدهد.
- مراحل ، ماژولهای XLA ، عملیات چارچوب ، محدوده نام چارچوب ، کد منبع : همه اینها مشابه بخشهای TPU هستند.
- XLA TraceMe برای پردازندههای گرافیکی (GPU) پشتیبانی نمیشود.
- عملیاتهای XLA در بخشهای GPU ظاهر میشوند، اما در حال حاضر همیشه دقیق نیستند، زیرا از دادههای جریانی مشتق شدهاند. بنابراین، نمیتوانند به طور کامل مدل اجرای GPU را توضیح دهند، جایی که ممکن است نگاشت N:M از عملیاتهای XLA به هستههای واقعی که در جریانهای مختلف اجرا میشوند و زمانبندی پویای چندین جریان روی SMهای مختلف در سختافزار وجود داشته باشد.
- یک بخش برای هر کامپوننت (مثلاً یک threadpool) که روی CPU دستگاه میزبان اجرا میشود، با یک مسیر برای هر thread، در مورد threadpoolها. همچنین در اینجا میتوانید traceهای پایتون را در صورت فعال بودن در طول جمعآوری پروفایل مشاهده کنید.
توجه داشته باشید که فقط XLA Ops برای TPUها و دادههای جریانی برای GPUها مستقیماً در پروفایل جمعآوریشده پایهگذاری شدهاند؛ تمام خطوط دیگر «خطوط مشتقشده» هستند که شامل اطلاعات «باند جانبی» اختیاری ارائه شده توسط کامپایلر، حاشیهنویسیهای اختیاری کاربر و/یا اکتشافات اعمال شده توسط XProf میباشند. بنابراین، این خطوط مشتقشده ممکن است در پروفایلهای خاصی ظاهر شوند یا نشوند.
سایر ویژگیها
میتوانید با استفاده از نوار جستجوی «یافتن رویدادها...» نام رویدادهای خاص را جستجو کنید. در حال حاضر، این گزینه فقط در محدوده زمانی قابل مشاهده روی صفحه جستجو میکند، نه کل مسیر.

رویدادهای جریان : فعال کردن این گزینه با کلیک بر روی دکمه «رویدادهای جریان» در نوار بالا، تجسمهایی را اضافه میکند که رویدادها را در یک رشته یا خط به رویدادهای خط رشته دیگر پیوند میدهد. به عنوان مثال، ممکن است یک فلش از op روی میزبان که کار را برای یک شتابدهنده در صف قرار میدهد یا راهاندازی میکند، به op روی شتابدهندهای که آن کار را اجرا میکند، کشیده شود. XProf این پیوندها را از طریق ترکیبی از حاشیهنویسیهای کاربر، اکتشافات داخلی و با اطلاعات پسپردازشی که از اجزای مختلف دریافت میکند (مانند درایورهای CUPTI، شناسههای راهاندازی هسته، اطلاعات زمان اجرای TPU و غیره) تعیین میکند.
