קטגוריה: זמן ריצה: ליבת המערכת נעצרה באופן בלתי צפוי
השגיאה הזו מעידה על כך שליבת TPU הפסיקה להריץ הוראות לפני הזמן. זהו מצב שגיאה קריטית שבו החומרה כופה עצירה בגלל תקלה שלא ניתן לתקן, הפרה של מגבלות החומרה או הפרעה מכוונת שהופעלה על ידי טענות זמן ריצה שנוצרו על ידי קומפיילר.
הודעת שגיאה לדוגמה:
INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 ...
XLA backends: TPU
סקירה כללית
XLA קומפלר (compiler) של תוכניות JAX לרצף של הוראות assembly ברמה נמוכה. בזמן הריצה, מכשיר ה-TPU מבצע את ההוראות האלה ברצף. השגיאה Core Halted Unexpectedly (הליבה נעצרה באופן לא צפוי) מתרחשת כשציוד ה-TPU נתקל במצב שלא ניתן לשחזר, שמונע את המשך הביצוע ומכריח את הליבה להיכנס למצב קטלני של HALTED (נעצרה).
השגיאה הזו יכולה לנבוע מכשלים בחומרה הפיזית, באגים בקומפיילר או בעיות בקוד המשתמש (במיוחד בקרנלים בהתאמה אישית), ולכן צריך לנתח בקפידה את הודעות היומן כדי לזהות את הסיבה הספציפית.
ניפוי באגים
כדי לפתור את השגיאה הזו, צריך קודם לזהות איזה מבין שלושת התרחישים הספציפיים גרם לעצירה הלא צפויה. צריך לבדוק את היומנים כדי למצוא את החתימות הספציפיות של הטקסט שמתוארות בהמשך.
תרחיש 1: קריסת תשתיות (חומרה/רשת/חשמל)
חתימה: ביומנים מצוין במפורש observed errors are: [Network] או
observed errors are: [Power] או observed errors are: [Hardware].
השגיאה הזו מצביעה על כשל בתשתית הפיזית שלא קשור לתוכנה או ללוגיקה של המודל. שבב ה-TPU, רשת החיבור בין השבבים או ספק הכוח נכשלו.
- מנסים שוב להריץ את העבודה: אם הבעיה הייתה ירידה זמנית במתח או שיבוש ברשת, יכול להיות שניסיון חוזר יפתור את הבעיה.
- זיהוי והסרה של צמתים פגומים: אם השגיאה נמשכת באותה משימה או באותו מארח ספציפיים, סביר להניח שיש פגם בחומרה. משתמשים בכלי ניהול האשכול כדי לבצע 'ניקוי' או 'בידוד' של הצומת המושפע ומפעילים מחדש את העבודה בצמתים תקינים.
תרחיש 2: הפרות של מגבלות חומרה
חתימה: היומנים מציינים observed errors are: [User].
השגיאה הזו מציינת שהקומפיילר של XLA יצר הוראה שהפרה מגבלה חומרית שאי אפשר להפר (לדוגמה, הוראה שמנסה לגשת לכתובת זיכרון מחוץ לתחום בזיכרון HBM או בזיכרון Scratchpad). למרות שהשגיאה מסומנת כ'משתמש', היא נגרמת לעיתים רחוקות בגלל קוד משתמש ברמה גבוהה.
- דיווח על באג ב-XLA: סביר להניח שמדובר בבאג בקומפיילר, כי הקומפיילר אף פעם לא אמור להפיק הוראות שמפירות את מפרטי החומרה. מומלץ לשלוח דוח על באג.
תרחיש 3: כשלים בהצהרות שנוצרו על ידי מהדר XLA
חתימה: הודעת השגיאה מכילה פרטים ספציפיים על הטענה שנוצרה על ידי הקומפיילר ונכשלה. מחפשים את מילות המפתח הבאות:
BoundsCheck,scheckne,scheckeq,schecklt,scheckge,scheckbetween
השגיאה הזו מציינת שאסרשן שנוצר על ידי קומפיילר בתוכנית שעברה קומפילציה נכשל במהלך הביצוע. מנתחים את הודעת השגיאה הספציפית כדי לקבוע את סוג המשנה:
תרחיש 3.א: חוסר התאמה בין קבוצת ההשקה
הודעת שגיאה לדוגמה:
Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 (from TensorCoreSequencer:1:0x309): scheckne: An unexpected leader shows up in the launch group with a different launch id than the current group leader.
הסיבה: השגיאה הזו מתרחשת בדרך כלל בסביבות TPU מרובות-מארחים. השגיאה מציינת שליבות ה-TPU, שאמורות להריץ את אותה תוכנית באופן מסונכרן (כחלק מ'קבוצת הפעלה'), יצאו מסנכרון. באופן ספציפי, ליבת TPU הצטרפה לקבוצת סנכרון עם מזהה תוכנית שונה מזה של מוביל הקבוצה הנוכחי, מה שמצביע על תוכניות לא עקביות במארחים.
- אימות דגלי XLA: מוודאים שכל המארחים משתמשים באותו
XLA_FLAGSבדיוק. - תוכניות Jax עקביות: צריך לוודא שכל המארחים מריצים תוכנית Jax זהה. צריך לבדוק את תמונות ה-Docker, את הגרסאות של libtpu וכו'.
תרחיש 3.ב: בדיקת גבולות נכשלה
הודעת שגיאה לדוגמה:
Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:23:0x292 (from TensorCoreSequencer:23:0xd74a): BoundsCheck 92 [deref of %s931] for %937 = dma.hbm_to_vmem [thread:$0] /*hbm=*/%s931, /*size_in_granules=*/16384, /*vmem=*/%s935, /*dst_syncflagno=*/%s860, /*src_stride=*/512, /*dst_stride=*/128, /*steps_per_stride=*/8
הגורם: התוכנית ניסתה לגשת לזיכרון מחוץ לגבולות שהוקצו. הודעת השגיאה כוללת בדרך כלל פרטים על סוג הגישה לזיכרון (למשל, dma.hbm_to_vmem) ועל חישוב הכתובת.
- ניפוי באגים של ליבות מותאמות אישית: אם משתמשים ב-Pallas, צריך לבדוק את חישובי האינדקס.
משתמשים ב-
pl.debug_printאו ב-checkifyכדי לאמת את אינדקסים של טנסורים. - בדיקת חלוקה למקטעים: מוודאים שההערות לגבי חלוקה למקטעים עקביות עם צורות הטנסור.
תרחיש 3.ג: סנכרון Mosaic/Pallas
הודעת שגיאה לדוגמה:
Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:21:0xae5 (from TensorCoreSequencer:21:0x54c5): Semaphore (scratch argument 1) has a nonzero value upon exit from a Mosaic kernel. Make sure every DMA is awaited, and every semaphore signal is paired with a wait.
הסיבה: השגיאה הזו ספציפית לקוד שנוצר על ידי קומפיילר Mosaic (שמשמש את Pallas JAX). הוא מציין בעיה בסנכרון בתוך ליבת מערכת הפעלה בהתאמה אישית. יחידות TPU משתמשות בסמפורים כדי לנהל תלות (למשל, כדי לוודא ש-DMA הושלם לפני השימוש). השגיאה הזו מצביעה על כך שלא בוצעה המתנה תקינה לאות בסמפור.
- בדיקת סנכרון: מוודאים שלכל
dma_startישdma_waitתואם. - בדיקת סמפורים: מוודאים שאותות הסמפורים וההמתנות משויכים באופן מדויק.
בעיות ללא שיוך לקטגוריה
אם יומן השגיאות לא תואם לתרחיש 1, 2 או 3 (כלומר, אין שגיאות שנצפו, אין תגי scheck ואין הודעות ספציפיות לגבי גבולות או סמפורים):
- פעולה: סביר להניח שמדובר בבאג פנימי ב-XLA. מומלץ לשלוח דוח על באג.