קוד שגיאה: E0200

קטגוריה: זמן ריצה: ליבת המערכת נעצרה באופן בלתי צפוי

השגיאה הזו מעידה על כך שליבת 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: [Hardware] או observed errors are: [Network] או observed errors are: [Power].

השגיאה הזו מצביעה על כשל בתשתית הפיזית שלא קשור לתוכנה או ללוגיקה של המודל. שבב ה-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.C: סנכרון 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 ואין הודעות ספציפיות לגבי גבולות או סמפורים):