קטגוריה: זמן הידור: בלוקים ופסיפסים של קלט/פלט לא מיושרים
השגיאה הזו מתרחשת כשצורת הבלוק של קלט או פלט של ליבה לא תואמת לחלוקה לרכיבים (tiling) שמוגדרת כברירת מחדל של סוג הנתונים בחומרת ה-TPU הספציפית שבה נעשה שימוש.
הודעות שגיאה לדוגמה:
UNIMPLEMENTED: Mosaic failed to compile TPU kernel: Failed to set window params
for input 0: Operand of shape (..., 256, 8192) has tiling (16, 128), but its
block shape (..., 8, 8192) is not divisible by tiling evenly nor matches the
full shape.
XLA Backends: TPU
סקירה כללית
ליבות Tensor (TC) ב-TPU כוללות רגיסטרים של וקטורים דו-ממדיים. שני המאפיינים נקראים נתיב משנה ונתיב. מכיוון שיחידות מחשוב של TPU (למשל, MXU) פועלות ברמת הגרנולריות של רגיסטרי וקטורים, מערכי XLA מסודרים בזיכרון TPU באריחים.
הסידור הזה (למשל, 8x128) מצמצם את טרנספורמציות הנתונים כשמזינים את יחידות החישוב. המידות המדויקות של החלוקה למשבצות (נתיבי משנה × נתיבים) תלויות בדור החומרה ובסוג הנתונים. לדוגמה, פריסה נפוצה לרוב הסוגים היא 8×128.
בזמן ההידור, XLA אוכף את האילוצים הבאים לגבי המימדים המשניים והמימדים המשניים השניוניים של כל קלט/פלט של ליבת המערכת:
- Divisibility: The block dimension must be a multiple of the tile dimension in the underlying tensor, or
- חריגה לגבי צורה מלאה: אם מימד הבלוק לא מתחלק, הוא צריך להיות שווה לגודל המלא של המימד הזה בטנזור הבסיסי.
השגיאה הזו מופעלת כשבלוק מפר את שני התנאים. לדוגמה,
טעינת בלוק של צורה (8, 100) מקלט של צורה (8, 1024) בחומרה עם פסיפס של צורה (8, 128) נכשלת כי 100 לא מתחלק ב-128 וב-100 != 1024. אבל אם צורת הקלט הייתה (32, 100), הפעולה הייתה מותרת.
ניפוי באגים
כדי לפתור את השגיאה הזו, צריך לוודא שצורות הבלוקים של ליבת המערכת תואמות לסידור האריחים הנוכחי של החומרה. משנים את קוד הליבה כך שגודל הבלוק יהיה כפולה של גודל האריחים הנדרש.
- דוגמה: אם בשגיאה מצוין שהריצוף הוא
(16, 128)אבל הצורה של הבלוק היא(8, 128), צריך לשנות את מפרט הבלוק כך שהצורה תהיה(16, 128).