نمایشگر مگااسکیل، نمایشگر مگااسکیل

ابزار Megascale Viewer به درک و عیب‌یابی مشکلات پیچیده عملکرد در بارهای کاری چند برشی که از MegascaleXLA استفاده می‌کنند، کمک می‌کند. این ابزار، امکان مشاهده معیارهای مرتبط مانند میزان استفاده از شبکه، تأخیر شبکه و زمان توقف TPU را فراهم می‌کند. همچنین با نشان دادن وابستگی‌های بین رویدادهای رخ داده در TPU و میزبان، به کاربر اجازه می‌دهد تا درک عمیق‌تری از عملکرد نمونه‌های منفرد از مجموعه‌های Megascale داشته باشد.

دسترسی به ابزار

برای دسترسی به این ابزار، یک پروفایل در xprof باز کنید، سپس به آیتم 'Megascale Viewer' در فهرست کشویی 'Tools' در نوار سمت چپ بروید. یک میزبان را در فهرست کشویی 'Hosts' انتخاب کنید، سپس روی دکمه 'Open in Perfetto' کلیک کنید.

اسکرین شاتی که لیست کشویی و دکمه را نشان می‌دهد

طرح ردیابی

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

تصویر صفحه، طرح ردیابی را در رابط کاربری Perfeto نشان می‌دهد.

با باز کردن یکی از بخش‌های TPU، چندین خط نمایش داده می‌شود که کلاس‌های مختلفی از رویدادها را در آن TPU نشان می‌دهند. این خطوط عبارتند از:

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

تصویری که خطوط TPU را در رابط کاربری Perfeto نشان می‌دهد

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

تصویری که خطوط مگااسکیل را در رابط کاربری Perfeto نشان می‌دهد

اتصال TPU Ops به Megascale Action Graph

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

تصویر صفحه، پیوندهایی به رویدادهای recv-done قبل و بعد را نشان می‌دهد

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

تصویر صفحه نمایش، فلش جریان را از رویداد Megascale H2D تا پایان بازیابی TPU نشان می‌دهد.

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

تصویر صفحه نمایش، فلش جریان را از TPU ارسال شده به شروع Megascale DeviceToHost نشان می‌دهد.

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

تصویر، آرگومان‌های رویداد مربوط به رویداد Megascale NetworkSend را نشان می‌دهد.

در مثال تصویر بالا، می‌توانیم ببینیم که رویداد «NetworkSend END» در رابط کاربری به صورت یک برش ۱۳.۵ میلی‌ثانیه‌ای نمایش داده می‌شود. مدت زمان واقعی این عمل در آرگومان رویداد «action_duration_ns» است که ۲۰.۶ میلی‌ثانیه است.

مشاهده آمار و یافتن رویدادهای جالب

رابط کاربری Perfetto امکان پرس‌وجو از رویدادها را با استفاده از PerfettoSQL فراهم می‌کند. این به کاربران امکان می‌دهد آمار مفیدی تولید کنند و به یافتن رویدادهای جالب (مثلاً داده‌های پرت) کمک می‌کند.

کوئری‌های PerfettoSQL را می‌توان در صفحه «Query (SQL)» در پنل سمت چپ رابط کاربری Perfetto وارد کرد. کوئری نمونه زیر تمام نمونه‌های recv-done.28 op را نشان می‌دهد. سپس از رابط کاربری برای فهرست کردن آنها به ترتیب نزولی مدت زمان استفاده می‌شود.

تصویر صفحه نمایش نتایج پرس و جوی Perfetto SQL برای recv-done.28

کاربر می‌تواند برای مشاهده نتایج جستجو در زیر جدول زمانی، به برگه «جدول زمانی» (Timeline) مراجعه کند. اگر نتیجه جستجو حاوی شناسه‌های برش باشد، کلیک روی شناسه، به برش مورد نظر در جدول زمانی پرش می‌کند.

نمونه سوالات

برخی از نمونه سوالات مفید را می‌توانید اینجا پیدا کنید.

مثالی از سفر کاربر

فرض کنید می‌خواهیم بفهمیم کدام recv-done بیشترین سهم را در زمان کلی گام دارد. می‌توانیم این کار را با استفاده از کوئری recv-done stats و مرتب‌سازی خروجی بر اساس 'duration_ns_sum' انجام دهیم.

تصویر صفحه نمایش نتایج ماکروی آمار recv-done را نشان می‌دهد

در این مثال، می‌بینیم که recv-done.28 بیشترین سهم را دارد (تقریباً ۲.۲ ثانیه از کل مدت زمان پروفایل که حدود ۱۴ ثانیه است). همچنین می‌بینیم که مدت زمان tail/p99 برای این عملیات به طور قابل توجهی بالاتر از میانه و میانگین است. این نشان می‌دهد که ممکن است جایی برای بهبود وجود داشته باشد.

(اختیاری) نمودار بازیابی انجام شده تأخیر

گاهی اوقات نگاه کردن به نمودار خطی مدت زمان در طول زمان نیز مفید است. می‌توانیم این کار را با استفاده از کوئری «recv-done ops» و سپس با استفاده از ویژگی «Add debug track» در Perfetto برای اضافه کردن trackهایی از نوع «counter» انجام دهیم.

تصویر صفحه نمایش نحوه اضافه کردن شمارنده برای مدت زمان انجام عملیات بازیابی به تفکیک شناسه HLO را نشان می‌دهد

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

تصویر صفحه نمایش، شمارنده‌های آهنگ را برای مدت زمان انجام عملیات بازیابی نشان می‌دهد.

یافتن نمونه‌های کند از یک recv-done

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

تصویر صفحه نمایش نحوه ویرایش کوئری SQL در رابط کاربری Perfeto را نشان می‌دهد

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

تصویر نشان می‌دهد که چگونه می‌توان از نتایج جدول SQL به یک رویداد در نمای تایم‌لاین پرش کرد

در این مرحله، می‌توانید به صورت دستی (با استفاده از ماوس یا کلیدهای WASD صفحه کلید) روی رویداد زوم کنید، یا می‌توانید کلید «F» را روی صفحه کلید فشار دهید تا به آن گزینه بروید و کاملاً روی آن زوم کنید.

از اینجا می‌توانید خطوط شبکه را بررسی کنید (شاید هنگام اجرای این عملیات، میزان استفاده از شبکه به حداکثر رسیده بوده است؟). همچنین می‌توانید با کلیک بر روی فلش «recv-done END» همانطور که در بخش قبل نشان داده شده است، به نمودار مگامقیاس این عملیات بروید.

نکته: رابط کاربری Perfetto امکان پین کردن چندین خط را در بالا فراهم می‌کند. اگر خطوط مورد نظر شما از یکدیگر دور هستند، آنها را پین کنید تا همه آنها در بالای صفحه نزدیک یکدیگر قرار گیرند. نماد پین وقتی ظاهر می‌شود که ماوس را نزدیک نام آهنگ نگه دارید.

برای درک تأخیر از نمودار کنش مگااسکیل استفاده کنید

می‌توانید برای درک بهتر دلیل طولانی شدن عملیات recv-done به رویدادهای موجود در نمودار مگااسکیل نگاه کنید. در این مورد، یک مشکل بالقوه این است که تأخیر شبکه برای برخی از انتقال‌های ورودی زیاد بوده است. به عنوان مثال، آخرین NetworkReceive برای انتقال ۳.۵ مگابایت، ۲۷ میلی‌ثانیه طول کشید که خیلی طولانی است.

توجه داشته باشید که مدت زمان برش "NetworkReceive END" برابر با 11 میلی‌ثانیه و 36 میکروثانیه است. این مدت زمان اساساً بی‌معنی است و ناشی از نحوه نمایش اقدامات Megascale در یک خط است. مدت زمان واقعی عمل (action_duration_ns) 47.2 میلی‌ثانیه است. 27 میلی‌ثانیه از این مقدار مربوط به تأخیر شبکه است.

تصویر صفحه نمایش، تأخیر انتقال شبکه و اندازه انتقال را برای یک اقدام NetworkReceive نشان می‌دهد