כלי לצפייה ב-Trace

אפשר להשתמש ב-Trace Viewer כדי להציג גרפית את ציר הזמן של האירועים שהתרחשו במהלך סשן היצירה של הפרופיל. בתרשים מוצגות משכי הזמן של הפעולות שהמודל מבצע בחלקים שונים של המערכת, כמו המארח (מעבד) ומאיצי ה-GPU או ה-TPU. כך תוכלו להבין איך המודל משתמש במשאבי החומרה, לזהות צווארי בקבוק בביצועים ולבצע אופטימיזציה של המודל כדי להאיץ את הביצועים. ממשק המשתמש של Trace Viewer מבוסס על זה שמשמש ב-chrome://tracing, ולכן צריך להשתמש בדפדפן Chrome.

פלטפורמות נתמכות

TPU: נתמך

GPU: נתמך

כלי Trace Viewer ל-GPUs מקבצ אירועים על צירי זמן לכל צ'יפ GPU והזרמים בתוכו, ואילו ל-TPUs הוא מארגן אירועים על צירי זמן לכל צ'יפ TPU וליבה. בכל מקרה, Trace Viewer מציג גם אירועים על צירי זמן לכל חוט במעבד המארח שאליו מחוברים המאיצים.

אינטראקציה עם ציר הזמן

ב-Trace Viewer יש כמה כלים ושיטות לניווט ולבדיקה של ציר הזמן:

  • ניווט: אפשר להשתמש במקשי הקיצור הבאים:
    • W: הגדלת התצוגה.
    • S: הקטנת התצוגה.
    • תשובה: מזיזים את המסך שמאלה.
    • D: הזזה ימינה.
  • בורר הכלים: אפשר ללחוץ על כלי בבורר הכלים או להשתמש במקש הקיצור המתאים:
    • כלי הבחירה (1 או !‎): לוחצים על אירוע כדי לבחור אותו ולהציג את הפרטים שלו בחלונית הפרטים. כדי להציג סיכום, בוחרים כמה אירועים באמצעות Ctrl+קליק.
    • כלי ההזזה (2 או @): גוררים כדי להזיז את ציר הזמן אופקית או אנכית.
    • כלי שינוי מרחק התצוגה (3 או #): גוררים כדי להגדיל את התצוגה של אזור מסוים בציר הזמן.
    • כלי התזמון (4 או $): גוררים כדי לסמן מרווח זמן. משך הזמן של התקופה שסומנה יוצג. אפשר גם להשתמש במקש 'm' כדי לסמן את הבחירה ולקבוע את משך הזמן הכולל שלה.
  • הגדלת התצוגה לאירועים שנבחרו (f): בוחרים אירוע אחד או יותר ולוחצים על המקש f כדי להגדיל במהירות את התצוגה של החלק הזה בציר הזמן. כך תוכלו להתמקד בשלב מסוים של ההדרכה.

כשמתמודדים עם מספר גדול של אירועי מעקב, Trace Viewer פועל במצב סטרימינג. כלומר, המערכת טוענת נתונים על פי דרישה כשאתם מזיזים את התצוגה ומגדילים או מצמצמים אותה בקו הזמן, בדומה לאופן שבו פועלות אפליקציות מפות. אם תגדילו את התצוגה מהר יותר מהזמן שבו הנתונים נטענים, יכול להיות שתראו ייצוג של הנתונים ברזולוציה נמוכה עד שהטעינה תסתיים.

רכיבי הממשק של Trace Viewer

אלה רכיבי ממשק המשתמש העיקריים ב-Trace Viewer:

  • ציר הזמן נמצא בחלק העליון של המסך, והוא אופקי. הציר מציג את הזמן ביחס להתחלת המעקב.
  • צירי הזמן מאורגנים לפי קטעים וטראקים, והתוויות ממוקמות בציר האנכי הימני. כל קטע מייצג אלמנט עיבוד (למשל צומת של מכשיר או שרתי תהליכים) וניתן להרחיב או לכווץ אותו. בכל קטע יש מסלולים, שהם לוחות זמנים לפעילויות ספציפיות.
  • אירועים הם בלוקים מלבניים צבעוניים במסלולים של ציר הזמן, שמייצגים את משך הזמן של פעולה או של אירוע-על, כמו שלב הדרכה. לצבע של האירועים אין משמעות ספציפית.
  • בחלונית הפרטים מוצג מידע נוסף על האירועים שנבחרו בחלונית ציר הזמן, כמו השם, שעת ההתחלה ומשך הזמן שלהם.

קטעים ומסלולים אופייניים

כלי Trace Viewer כולל את הקטעים והטראקים הבאים.

  • קטע אחד לכל צומת TPU, עם הטראקים הבאים:
    • מודול XLA: תוכנית ה-XLA שמופעלת.
    • XLA Ops: מוצגות הפעולות של XLA HLO שפעלו בליבה של ה-TPU. כל פעולה ברמה גבוהה יותר של מסגרת (למשל, JAX,‏ Tensorflow או PyTorch) מתורגמת לפעולת XLA אחת או יותר, ולאחר מכן מתבצעת הידור שלהן כדי להריץ אותן ב-TPU. כשלוחצים על פעולת XLA, מופיעים קישורים לפעולה ב-Graph Viewer, יחד עם מידע נוסף על הפעולה, כמו זמני ההתחלה והעצירה, משך הזמן ומעקב אחר סטאק המקור (אם המערכת והמקור מתן גישה לכך).
    • XLA TraceMe: הערות שהמשתמשים מציינים בקוד שלהם, שמתארות יחידות לוגיות של עבודה שהם רוצים לעקוב אחריהן. יכול להיות שעדיין יופיעו כאן נתונים גם אם לא הוספתם הערות. בדרך כלל, הערות כאלה מתווספות על ידי XLA (למשל, ליבות של מחסום) או על ידי XProf עצמו (למשל, רשומות מעקב שנמחקו).
    • שלב: משך הזמן של שלבי האימון שפועלים בליבה הזו של TPU, אם הוספו הערות מתאימות בתוכנית או במסגרת של המשתמש.
    • Framework Ops: הצגת פעולות של מסגרת עבודה (למשל, JAX,‏ Tensorflow או PyTorch) שמבוצעות בליבה של ה-TPU, אם הן סומנו כראוי בתוכנית או במסגרת של המשתמש.
    • היקף שם המסגרת: לכל פעולה במסגרת, תצוגה חזותית של מעקב ה-stack. כדי לקצר את הטקסט, הטראק הזה מופיע רק במכשיר אחד.
    • קוד מקור: הנתיב לקוד המקור שמופעל, אם הוא זמין בפרופיל.
    • יחידה סקלרית: ב-TPUs, אירועים שמתבצעים ביחידה הסקלרית, אם הם מופיעים בפרופיל.
    • TensorCore Sync Flags: מנגנון סנכרון ב-TPU, מוצג אם הוא נמצא בפרופיל.
    • העברת עומס מהמארח: פעולות שמעבירות נתונים באופן אסינכרוני בין זיכרון המארח לזיכרון המאיץ. בדרך כלל מופיעות פעולות start ו-stop תואמות בשורה XLA Ops, שמציינות שהמאיץ מתכונן להעברת הנתונים (למשל, סימון אזורי הזיכרון של המקור או היעד כ'בשימוש' למשך ההעברה). יכול להיות שיופיעו כמה שורות של העברת עומסים מהמארח אם מתבצעות כמה פעולות העברת עומסים במקביל, וכתוצאה מכך מוצגים כמה אירועים בו-זמנית בתצוגת המעקב.
  • קטע אחד לכל צומת Sparsecore: בחלק מהדורות ה-TPU (למשל, TPU v5p ו-TPU v6e) מצוידים ביחידה אחת או יותר של SparseCore בנוסף ליחידות MXU לעיבוד נתונים בצפיפות גבוהה. המודולים, הפעולות וה-TraceMes שמשויכים ללישות האלה יופיעו בקטע הזה.
  • קטע אחד לכל צומת GPU, עם הטראקים הבאים:
    • XLA Modules, ‏ Framework Ops, ‏ Framework Name Scope, ‏ Steps, ‏ Source code. כל הקטעים האלה דומים לקטעים של TPU.
    • טראק אחד לכל מקור נתונים, כששם מקור הנתונים כולל גם מידע על סוגי הפעולות שמבוצעות במקור הנתונים (Memcpy,‏ Compute וכו').
    • אין תמיכה ב-XLA TraceMe ב-GPU.
    • פעולות XLA מופיעות בקטעים של GPU, אבל הן לא תמיד מדויקות כי הן נגזרות מנתוני הסטרימינג. לכן, הן לא יכולות להביא בחשבון באופן מלא את מודל הביצועים של ה-GPU, שבו יכול להיות מיפוי N:M של פעולות XLA לליבת המעבד בפועל שמבוצעת בזרמים השונים, ותזמון דינמי של מספר זרמים ל-SM שונים בחומרה.
  • קטע אחד לכל רכיב (למשל, מאגר חוטים אחד) שפועל במעבד של המכונה המארחת, עם טראק אחד לכל חוט, במקרה של מאגרי חוטים. כאן יופיעו גם עקבות של Python, אם הם הופעלו במהלך איסוף הפרופיל.

שימו לב שרק פעולות XLA ל-TPU ונתוני סטרימינג ל-GPU מבוססים ישירות על הפרופיל שנאסף. כל שאר השורות הן 'שורות נגזרות', שכוללות מידע אופציונלי 'צדדי' שמסופק על ידי המהדר, הערות אופציונליות של משתמשים ו/או שיטות ניתוח שהוחלו על ידי XProf. לכן, יכול להיות שהשורות הנגזרות האלה יופיעו בפרופילים מסוימים או לא יופיעו בהם.

תכונות אחרות

  • אפשר לחפש שמות של אירועים ספציפיים באמצעות סרגל החיפוש 'חיפוש אירועים'. נכון לעכשיו, החיפוש מתבצע רק בחלון הזמן הגלוי במסך, ולא בנתיב המלא.
  • אירועי זרימה: הפעלת האפשרות הזו בלחיצה על הלחצן 'אירועי זרימה' בסרגל העליון מוסיפה רכיבי חזותית, שמקשרים בין אירועים בשרשור אחד או בשורה אחת לבין אירועים בשרשור אחר. לדוגמה, יכול להיות שתוצג חץ מהפעולה (op) במארח שמוסיפה עבודה לתור או מפעילה אותה למאיץ, אל הפעולה (op) במאיץ שמבצעת את העבודה הזו. XProf קובע את הקישורים האלה באמצעות שילוב של הערות של משתמשים, שיטות ניתוח נתונים מובנות ומידע שמתקבל מרכיבים שונים לאחר עיבוד (למשל, מנהלי CUPTI, מזהי הפעלה של הליבה, מידע על סביבת זמן הריצה של TPU וכו').
  • לחיצה על פעולת XLA תציג מידע נוסף בחלונית הפרטים. לדוגמה, הוא מקשר לפעולה בכלי Graph Viewer. הוא עשוי גם לספק הפניות לקוד המקור ו/או למעקב אחר סטאק ב-Python, לפעולת המסגרת שגרמה ליצירת פעולת ה-XLA הזו וכו' (אם הם נמצאים בפרופיל). יכול להיות שיוצגו גם FLOPS (מספר הפעולות של נקודת צפה שבוצעו על ידי הפעולה) וגם בייטים שהפעולה ניגשה אליהם. המידע הזה מתקבל באופן סטטי מ-XLA במהלך הידור, ולא מידע בסביבת זמן הריצה מהפרופיל.