ابزار Megascale Viewer به درک و عیبیابی مشکلات پیچیده عملکرد در بارهای کاری چند برشی که از MegascaleXLA استفاده میکنند، کمک میکند. این ابزار، امکان مشاهده معیارهای مرتبط مانند میزان استفاده از شبکه، تأخیر شبکه و زمان توقف TPU را فراهم میکند. همچنین با نشان دادن وابستگیهای بین رویدادهای رخ داده در TPU و میزبان، به کاربر اجازه میدهد تا درک عمیقتری از عملکرد نمونههای منفرد از مجموعههای Megascale داشته باشد.
دسترسی به ابزار
برای دسترسی به این ابزار، یک پروفایل در xprof باز کنید، سپس به آیتم 'Megascale Viewer' در فهرست کشویی 'Tools' در نوار سمت چپ بروید. یک میزبان را در فهرست کشویی 'Hosts' انتخاب کنید، سپس روی دکمه 'Open in Perfetto' کلیک کنید.

طرح ردیابی
پس از اتمام بارگذاری ردیابی توسط ابزار، بخشی با عنوان «شمارندههای سراسری» را مشاهده خواهید کرد که شامل چندین خط شمارنده (مثلاً میزان استفاده از شبکه) است. این شمارندهها در تمام مجموعههای مگامقیاس در تمام TPUهای پروفایلشده روی میزبان انتخابشده، تجمیع شدهاند. در زیر آن، بخشی با عنوان «TPUها» خواهید دید که تمام TPUها را نشان میدهد.

با باز کردن یکی از بخشهای TPU، چندین خط نمایش داده میشود که کلاسهای مختلفی از رویدادها را در آن TPU نشان میدهند. این خطوط عبارتند از:
- مراحل : مراحل آموزشی را نشان میدهد (مطابق با ردیابی xprof)
- ماژولهای XLA : تمام اجراها/اجراهای تمام برنامههای XLA که در طول دوره پروفایلشده اجرا شدهاند را نشان میدهد.
- عملیات XLA : تمام عملیاتهای XLA (و هستههای سفارشی) که روی TPU اجرا میشوند را نشان میدهد.
- XLA TraceMe : رویدادهای همگامسازی را نشان میدهد. (مثلاً barrier-cores)
- مگااسکیل : این یک مسیر والد است که شامل یک مسیر فرزند برای هر مجموعهی منحصر به فرد مگااسکیل میشود.

گسترش مسیر والد مگااسکیل، مسیرهای فرزند زیادی را آشکار میکند؛ یکی برای هر مجموعه مگااسکیل. نام هر مسیر، نام مجموعه مگااسکیل است. عدد داخل پرانتز، شناسه دستگاه مگااسکیل TPU محلی است که ترکیبی از شناسه برش و شناسه منطقی TPU است. رویدادهایی که در این مسیر ظاهر میشوند، نمودار عملکرد این مجموعه مگااسکیل را نشان میدهند. این رویدادها به درک زمان نسبت داده شده به پردازش شبکه و میزبان و نحوه تأثیر آن بر زمانهای توقف recv-done یا send-done کمک میکنند.

اتصال TPU Ops به Megascale Action Graph
وقتی به یک عملیات TPU با مقیاس بزرگ و کند (مثلاً recv-done) نگاه میکنید، گام بعدی رایج، رفتن به اجرای گراف اکشن مربوط به آن در مقیاس بزرگ است. این کار را میتوان با کلیک روی recv-done مورد نظر و سپس کلیک روی رویداد «recv-done END» مربوط به آن در پنل پایین رابط کاربری Perfetto انجام داد.

پس از کلیک روی رویداد «پایان»، یک فلش جریان در رابط کاربری مشاهده خواهید کرد که اجرای گراف مگااسکیل را نشان میدهد که recv-done انتخاب شده را از حالت مسدود خارج میکند.

همچنین میتوانید روی رویداد فوری «DeviceToHost START» در ابتدای خط نمودار عملیات کلیک کنید تا گزینه «send» مربوطه را در TPU مشاهده کنید.

رویدادهای روی مسیرهای Megascale به گونهای فشرده میشوند که در هر نقطه زمانی مشخص، فقط یکی از آنها نمایش داده میشود. این کار برای جلوگیری از نمایش همزمان همه اقدامات فعال و کاهش بینظمی انجام میشود. در هر نقطه زمانی، چندین اقدام در حال انجام هستند. اقدامی که در این خط فشرده نمایش داده میشود، اقدامی است که زودتر به پایان میرسد. برای دریافت اطلاعات بیشتر (مثلاً زمان شروع واقعی یک رویداد، تأخیر شبکه، شناسههای دستگاه همتا)، به آرگومانهای رویداد در پنل پایین رابط کاربری Perfetto مراجعه کنید.

در مثال تصویر بالا، میتوانیم ببینیم که رویداد «NetworkSend END» در رابط کاربری به صورت یک برش ۱۳.۵ میلیثانیهای نمایش داده میشود. مدت زمان واقعی این عمل در آرگومان رویداد «action_duration_ns» است که ۲۰.۶ میلیثانیه است.
مشاهده آمار و یافتن رویدادهای جالب
رابط کاربری Perfetto امکان پرسوجو از رویدادها را با استفاده از PerfettoSQL فراهم میکند. این به کاربران امکان میدهد آمار مفیدی تولید کنند و به یافتن رویدادهای جالب (مثلاً دادههای پرت) کمک میکند.
کوئریهای PerfettoSQL را میتوان در صفحه «Query (SQL)» در پنل سمت چپ رابط کاربری Perfetto وارد کرد. کوئری نمونه زیر تمام نمونههای recv-done.28 op را نشان میدهد. سپس از رابط کاربری برای فهرست کردن آنها به ترتیب نزولی مدت زمان استفاده میشود.

کاربر میتواند برای مشاهده نتایج جستجو در زیر جدول زمانی، به برگه «جدول زمانی» (Timeline) مراجعه کند. اگر نتیجه جستجو حاوی شناسههای برش باشد، کلیک روی شناسه، به برش مورد نظر در جدول زمانی پرش میکند.
نمونه سوالات
برخی از نمونه سوالات مفید را میتوانید اینجا پیدا کنید.
مثالی از سفر کاربر
فرض کنید میخواهیم بفهمیم کدام recv-done بیشترین سهم را در زمان کلی گام دارد. میتوانیم این کار را با استفاده از کوئری recv-done stats و مرتبسازی خروجی بر اساس 'duration_ns_sum' انجام دهیم.

در این مثال، میبینیم که recv-done.28 بیشترین سهم را دارد (تقریباً ۲.۲ ثانیه از کل مدت زمان پروفایل که حدود ۱۴ ثانیه است). همچنین میبینیم که مدت زمان tail/p99 برای این عملیات به طور قابل توجهی بالاتر از میانه و میانگین است. این نشان میدهد که ممکن است جایی برای بهبود وجود داشته باشد.
(اختیاری) نمودار بازیابی انجام شده تأخیر
گاهی اوقات نگاه کردن به نمودار خطی مدت زمان در طول زمان نیز مفید است. میتوانیم این کار را با استفاده از کوئری «recv-done ops» و سپس با استفاده از ویژگی «Add debug track» در Perfetto برای اضافه کردن trackهایی از نوع «counter» انجام دهیم.

خروجی در زیر آمده است. میتوانیم ببینیم که recv-done.28 در زمانهای خاصی (معمولاً در ابتدا یا انتهای یک مرحله آموزش) مدت زمان بسیار بالاتری دارد. میبینیم که بسیاری از عملیاتهای recv-done دیگر نیز واریانس بالایی دارند.

یافتن نمونههای کند از یک recv-done
بیایید با تغییر کوئری «recv-done ops» به گونهای که فقط روی recv-done.28 تمرکز کند، یک نمونه کند از این عملیات پیدا کنیم.

در اینجا، میتوانیم خروجی را بر اساس هر ستونی مرتب کنیم و سپس روی پیوند موجود در ستون «id» کلیک کنیم تا در نمای جدول زمانی به این رویداد برویم. در این حالت، کندترین رویداد در TPU 1 اتفاق میافتد.

در این مرحله، میتوانید به صورت دستی (با استفاده از ماوس یا کلیدهای WASD صفحه کلید) روی رویداد زوم کنید، یا میتوانید کلید «F» را روی صفحه کلید فشار دهید تا به آن گزینه بروید و کاملاً روی آن زوم کنید.
از اینجا میتوانید خطوط شبکه را بررسی کنید (شاید هنگام اجرای این عملیات، میزان استفاده از شبکه به حداکثر رسیده بوده است؟). همچنین میتوانید با کلیک بر روی فلش «recv-done END» همانطور که در بخش قبل نشان داده شده است، به نمودار مگامقیاس این عملیات بروید.
نکته: رابط کاربری Perfetto امکان پین کردن چندین خط را در بالا فراهم میکند. اگر خطوط مورد نظر شما از یکدیگر دور هستند، آنها را پین کنید تا همه آنها در بالای صفحه نزدیک یکدیگر قرار گیرند. نماد پین وقتی ظاهر میشود که ماوس را نزدیک نام آهنگ نگه دارید.
برای درک تأخیر از نمودار کنش مگااسکیل استفاده کنید
میتوانید برای درک بهتر دلیل طولانی شدن عملیات recv-done به رویدادهای موجود در نمودار مگااسکیل نگاه کنید. در این مورد، یک مشکل بالقوه این است که تأخیر شبکه برای برخی از انتقالهای ورودی زیاد بوده است. به عنوان مثال، آخرین NetworkReceive برای انتقال ۳.۵ مگابایت، ۲۷ میلیثانیه طول کشید که خیلی طولانی است.
توجه داشته باشید که مدت زمان برش "NetworkReceive END" برابر با 11 میلیثانیه و 36 میکروثانیه است. این مدت زمان اساساً بیمعنی است و ناشی از نحوه نمایش اقدامات Megascale در یک خط است. مدت زمان واقعی عمل (action_duration_ns) 47.2 میلیثانیه است. 27 میلیثانیه از این مقدار مربوط به تأخیر شبکه است.
