אמל"ק;
בדף הזה מתואר המבנה הפנימי של מודל העלויות שמשמש את Latency Hiding Scheduler (מתזמן להסתרת זמן האחזור). אם אתם רוצים לשנות את המודל, אתם יכולים לעבור ישירות אל הקטע בנושא שינוי המודל.
ה-Latency Hiding Scheduler (LHS) הוא שלב קומפילציה שמתזמן HLO DAG באופן שממזער את הזמן שחלף.
ההחלטות שלו מבוססות על מודל העלויות המאוחד, שמשתמש בשילוב של טבלאות ביצועים ומודלים אנליטיים. בפרט, XLA מטמיע טבלאות ביצועים של GEMM ושל קולקטיבים עם קישוריות מהירה, ומשתמש במודל עלויות של מיזוג וניתוח רשתות במקרים אחרים. בהמשך המסמך מוסבר איך הם פועלים, ברמה גבוהה.
טבלאות ביצועים – קולקטיבים של ICI
טבלת הביצועים מורכבת משני רכיבים עיקריים: כלי לאיסוף נתונים וכלי לאינטרפולציה.
תוכנת Collector
הכלי לאיסוף נתונים הוא כלי C++ שאחראי ליצירת טבלאות הביצועים לפעולות קולקטיביות. הוא מודד את הביצועים של פעולות HLO ספציפיות (למשל, all-gather, all-reduce) על פני מרחב פרמטרים שמוגדר באופן סטטי.
איך זה עובד
הכלי מבצע סריקה בטווח של פעולות קולקטיביות, גדלי העברה ותוכניות העברה עבור אשכול נתון. הוא משתמש בתשתית הקיימת של רץ HLO מרובה מארחים ובנתוני ExecutionProfile כדי להריץ את ה-HLO שנוצר ולאסוף מדדי ביצועים.
פרמטרים של איסוף נתונים
טבלאות השהיות נאספות עבור שילוב של הפרמטרים הבאים:
- סוג הקולקטיב:
all-reduceall-gatherreduce-scatter
- גודל ההעברה:
- סולם לוגריתמי מ-1,024B עד 2GiB (למשל, 1024B, 2048B, 4096B וכו')
- Transfer Scheme:
rail-alignednon-rail-aligned
הסריקה הזו מופעלת באשכולות תוך-צמתיים עם 2, 4 ו-8 מכשירים.
פלט
התוצאה של הרצת איסוף היא טבלת חביון בפורמט .pbtxt (כ-116KB לכל פלטפורמה).
אינטרפולטור
ה-interpolator הוא רכיב של הקומפיילר שמשתמש בטבלאות הביצועים שנוצרו כדי לספק אומדנים בזמן הריצה במהלך הקומפילציה.
מבנה נתונים פנימי
במהלך האתחול, האובייקט Interpolator מעבד את טבלת הביצועים למפה.
המפה הזו משתמשת בטופל של (collective_type, transfer_scheme) בתור המפתח שלה.
הערך שמשויך לכל מפתח הוא מישור אוקלידי דו-ממדי. המישור הזה מבצע אינדוקס של קצב העברת הנתונים ברשת (שנמדד על ידי כלי האיסוף) על סמך שני צירים:
- גודל ההעברה.
- מספר המכשירים שהיו מעורבים.
חיפוש ואינטרפולציה
כשהקומפיילר נתקל בפעולה קולקטיבית, ה-Interpolator מבצע את השלבים הבאים:
- הוא מזהה את מישור התפוקה הדו-ממדי הנכון באמצעות
(collective_type, transfer_scheme)של הפעולה כמפתח המפה. - לאחר מכן, המערכת משתמשת בשליפה של ממוצע משוקלל (על סמך מרחק אוקלידי) במישור הדו-ממדי הזה, באמצעות
(transfer_size, num_devices)של הפעולה כנקודת השאילתה. - התוצאה של החיפוש הזה היא ערך יחיד וייחודי של קצב העברת הנתונים ברשת.
הסבר: תפוקה ואקסטרפולציה
המערכת נועדה לאחסן תפוקת רשת ולא זמן אחזור גולמי. הבחירה הזו בעיצוב מפשטת משמעותית את האקסטרפולציה של הביצועים לגבי גדלי העברה שלא מוצגים במפורש בטבלה.
אם טבלאות ההשהיה מתעדות את נקודת הרוויה של רוחב הפס ברשת בגודל כולל של S, התפוקה T בנקודה הזו נחשבת למקסימלית. לכל קבוצה חדשה בגודל S' > S, זמן הריצה יכול להיות מוערך כך:
\[\text{EstimatedTime}(S') = \frac{S'}{T_{\text{saturated} } }\]
כך המודל יכול להעריך את הביצועים של קבוצות בכל גודל, גם של קבוצות גדולות יותר מהגודל המקסימלי של 2GB שנמדד על ידי כלי האיסוף.
- הערכה נמוכה מדי של התפוקה המקסימלית.
- לכן, מומלץ להעריך יתר על המידה את זמן הריצה להעברות גדולות.
באופן כללי, צוותי XLA:GPU מתחזקים טבלאות ביצועים, אבל במקרים שבהם משתמשים מחליטים לספק טבלאות משלהם, באחריות המשתמשים שיוצרים את הטבלאות לוודא שהן מייצגות וכוללות מדידות באזור הרוויה של רוחב הפס עבור החומרה המיועדת.
טבלאות ביצועים – GEMM
בדומה למערכת של קולקטיבים, טבלאות השהיות של GEMM נתמכות על ידי שני רכיבים: מאסף ואינטרפולטור.
תוכנת Collector
הכלי לאיסוף נתונים הוא כלי C++ שמחשב טבלאות ביצועים עבור General Matrix Multiplications (GEMMs). הוא מודד את הביצועים של הכפלות מטריצות ברמת האופרטור dot HLO.
איך זה עובד
הכלי מבצע סריקה של מרחב סטטי של ממדי GEMM (batch, שני ממדים לא מכווצים וממד מכווץ אחד) וסוגי נתונים.
- סוגי נתונים שמוגדרים כברירת מחדל:
LHS = bf16,f32, RHS = bf16,f32, OUT = bf16,f32. - תשתית: נעשה שימוש חוזר בפרופיל של פעולות HLO.
פרמטרים של אוסף
טבלאות של זמן האחזור נאספות עבור שילוב של המאפיינים הבאים:
- batch:
{1, 2, 4} - m (לא חוזי):
{256, 512, ..., 4096} - n (לא בהסכם):
{256, 512, ..., 4096} - k (כיווץ):
{256, 512, ..., 4096}
פלט ואחסון
סריקה מלאה יוצרת טבלת חביון .pbtxt, שמוכנה לשימוש על ידי
interpolator.
אינטרפולטור
האינטרפולטור הוא רכיב של הקומפיילר שמשתמש בטבלאות שנוצרו כדי להעריך את הביצועים של GEMM.
הסבר: ניצול מלא של FLOPS
טבלאות ההשהיה שנאספו מאפשרות למתאם לשחזר את FLOPS לכל רשומה:
\[\text{FLOPS} = \frac{2 \times b \times m \times n \times k}{\text{runtime} }\]
תובנה חשובה היא שערכי ה-FLOPS מגיעים לנקודת רוויה בשלב מסוים. כלומר, החומרה מגיעה לערך ה-FLOPS המקסימלי מעבר לצורה מסוימת של מטריצה. הרוויה הזו מאפשרת להשתמש באותה שיטת אקסטרפולציה שמשמשת לחישוב של קולקטיבים.
חיפוש ואינטרפולציה
האינטרפולטור יוצר מרחב אוקלידי תלת-ממדי מנתוני הטבלה. כדי לספק אומדן של הביצועים, המערכת מבצעת אינטרפולציה של ממוצע משוקלל במרחב ה-4D הזה. אם אין טבלה לסוג נתונים מסוים, כל מאפיין מנורמל למספר הבייטים.
מודל עלויות אנליטי – DCN
מודל עלות משותפת של עקומת S
מודל העקומה בצורת S הוא מודל אנליטי מלא של כיסוי רשת.
סקירה כללית
המודל נועד להעריך את הביצועים של פעולות קולקטיביות על סמך קבוצה של מאפייני רשת קבועים.
קלט המודל
המודל דורש שני סוגים של קלט:
מאפייני רשת קבועים (מוגדרים על ידי המשתמש):
- הוצאות נלוות להשקה של קולקציה
- מהירות כרטיס הרשת
- זמן הלוך ושוב (RTT)
כברירת מחדל, XLA מזהה פלטפורמה באופן אוטומטי ומשתמש בערכים עבור הארכיטקטורות הנפוצות ביותר. המשתמש יכול להגדיר את המאפיינים האלה. פרטים נוספים זמינים בקטע התאמה.
Per-Collective Inputs:
- סוג קיבוצי (למשל,
AllGather,ReduceScatter) - גודל ההעברה
- מספר הצמתים שמעורבים בתקשורת
- סוג קיבוצי (למשל,
שילוב
מודל העקומה בצורת S משולב ב-XLA:GPU ונעשה בו שימוש ב-Hopper וב-Blackwell.
מודל עלויות אנליטי – מיזוגים
במקרים אחרים, אנחנו מסתמכים על מודל העלות של ביצועי ה-GPU כדי להעריך את זמני הריצה הנכונים. מידע נוסף זמין כאן.
כוונון
אפשר לכוונן את מודל S-curve באמצעות הנפקת דגלי XLA מתאימים. ברוב המקרים, הגדרת ברירת המחדל מספיקה, אבל במקרים אחרים יש אפשרות לשלוט במודל.
export NIC_SPEED_GBPS=... # NIC speed per GPU in Gigabytes
export GPUS_PER_NODE=... # Num of GPUs per cluster interconnected with fast network (e.g. NVLINK)
export XLA_FLAGS=--xla_gpu_analytical_latency_estimator_options="nic_speed_gbps=$NIC_SPEED_GBPS,gpus_per_node=$GPUS_PER_NODE"