קטגוריה: זמן ריצה: חוסר התאמה במאגר הנתונים הזמני של קלט התוכנית
השגיאה הזו מתרחשת כשזמן הריצה של XLA מזהה חוסר התאמה בין הגודל של מאגר הזיכרון שתוכנית מהודרת מצפה לו לבין הגודל של המאגר שסופק בפועל בזמן הריצה.
הודעת שגיאה לדוגמה:
XlaRuntimeError: INVALID_ARGUMENT: Executable(jit_embedding_pipeline_step_fn) expected parameter 2482 of size 5242880 (bf16[16,1280,40]{2,1,0:T(8,128)(2,1)}) but got buffer with incompatible size 1638400 (bf16[16,1280,40]{1,2,0:T(8,128)(2,1)}): while running replica 0 and partition 0 of a replicated computation (other replicas may have failed as well).
XLA backends: TPU
סקירה כללית
בהודעת השגיאה מצוינים גם הגודל הצפוי וגם הגודל בפועל, וגם הצורות והפריסות של הטנסור. שימו לב שהשגיאות האלה יכולות להתרחש גם אם לשני טנסורים יש את אותו הצורה, אבל הגודל שלהם בזיכרון יכול להיות שונה אם הפריסה הפיזית שלהם (איך הנתונים מחולקים ומסודרים בחומרה) שונה.
הסיבות העיקריות לשגיאות האלה הן:
- אי התאמה בין ההגדרה של נקודת הבדיקה לבין ההגדרה של XLA: מודל מאומן ונקודת בדיקה נשמרת. הפריסה הפיזית של המשקלים בנקודת הבדיקה הזו נקבעת לפי הגרסה וההגדרה המדויקות של XLA (למשל, דגלי XLA) באותו זמן. בהמשך, נקודת הבדיקה הזו נטענת בסביבה אחרת שבה התצורה השתנתה. דגל חדש, ערך ברירת מחדל שונה או שינוי בקוד של המודל או של XLA יכולים לגרום לסביבת זמן הריצה לצפות בפריסה פיזית שונה של המשקלים. כשמאגר הנתונים הישן מנקודת הבדיקה מועבר לתוכנית XLA החדשה שעברה קומפילציה, סביבת זמן הריצה מחזירה שגיאה.
- פריסות ספציפיות לחומרה או לטופולוגיה: קומפיילר XLA יכול לבחור פריסות פיזיות שונות לטנסורים כדי לבצע אופטימיזציה של הביצועים בחומרה שונה. פריסה אופטימלית ל-TPU מדור v4 יכולה להיות שונה מפריסה ל-TPU מדור v5, או אפילו שונה עבור פרוסות פוד שונות של אותו שבב (למשל, 4x4x4 לעומת 4x8). השגיאה מתרחשת כשמהדר מורכב עם הנחה לגבי פריסת טופולוגיה מסוימת, אבל בזמן הריצה הוא מתוזמן בטופולוגיה אחרת, או שיש באג בלוגיקת הפריסה של המהדר עבור רכיב חומרה ספציפי.
ניפוי באגים
- מוודאים שההגדרה עקבית בין ייצוא המודל לבין הפעלות חוזרות מנקודות ביקורת
- מומלץ להימנע משימוש בנקודות עצירה ישנות עם קוד חדש, אלא אם אתם בטוחים שלא בוצעו שינויים שמשפיעים על הפריסה.
- אם אתם חושדים שיש אי התאמה בין נקודת ביקורת לבין ההגדרה, הפתרון הכי אמין הוא לייצא מחדש את המודל השמור באמצעות אותו codebase ואותה הגדרה (עדכניים) שבהם אתם משתמשים להסקת מסקנות או לכוונון עדין.
- בודקים אם יש שינויים בהגדרות (למשל, דגלים של XLA) בין שתי ההרצות.
- פריסות ספציפיות לחומרה או לטופולוגיה
- אם מחליפים חומרה או טופולוגיות, צריך לבדוק אם יש אי התאמות בגרסת החומרה ובטופולוגיה.