קוד שגיאה: E3001

קטגוריה: CompileTime: SparseCore No Viable Logical Replica Count

השגיאה הזו מתרחשת כשהקומפיילר XLA:SparseCore לא מצליח לקבוע הגדרה תקפה של מספר רפליקות לוגיות שמאפשרת להתאים את עומס העבודה לזיכרון המקומי של ה-SparseCore (Tilespmem).

הודעות שגיאה לדוגמה:

XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...

XLA Backends: TPU

סקירה כללית

השגיאה הזו ספציפית לתרחישי שימוש ב-SparseCore, במיוחד במודלים גדולים של הטמעות (LEM).

מספר העותקים הלוגיים הוא פרמטר פנימי של קומפיילר שקובע איך קבוצות קלט מחולקות כדי לנהל את העומס על הקצאת הזיכרון הזמני. הקומפיילר מנסה לפצל את עומס העבודה לחלקים קטנים יותר (עותקים) כדי שהמאגרים הזמניים שנדרשים לכל חלק יתאימו לזיכרון ה-Scratchpad המוגבל של SparseCore. באופן כללי, מספר גבוה יותר של רפליקות לוגיות מפחית את העומס על הקצאת הזיכרון, כי המערכת מעבדת בכל פעם קבוצות קטנות יותר של נתונים.

השגיאה הזו מציינת שגם אחרי ניסיון של הגדרות שונות לפיצול, הקומפיילר לא הצליח למצוא הגדרה שבה המאגרים הנדרשים מתאימים לזיכרון Tilespmem. גודל ההקצאה נקבע לפי שילוב של:

  • sample_count: מספר מזהי החיפוש של ההטמעה שמוקצים לכל SparseCore (נגזר מגודל האצווה).
  • feature_width: גודל ממד ההטמעה.
  • max_nz_per_row: המספר המקסימלי של מזהי חיפוש לא ייחודיים של הטמעה בכל ליבות SparseCore.
  • max_unique_nz_per_row: המספר המקסימלי של מזהי חיפוש הטמעה ייחודיים.

ניפוי באגים

כדי לפתור את השגיאה הזו, צריך להפחית את העומס על הזיכרון של ה-scratchpad של SparseCore.

1. שיפור ההערכות של המטא-נתונים

הקומפיילר מקצה זיכרון על סמך max_nz_per_row ו-max_unique_nz_per_row. אם הערכים האלה מוערכים באופן שמרני (כלומר, מוגדרים גבוהים בהרבה מהנדרש בפועל), הקומפיילר ישמור מקום מיותר, וזה מה שגורם לשגיאה הזו. חשוב לוודא שהפרמטרים האלה משקפים בצורה מדויקת את התפלגות המזהים בפועל במערך הנתונים.

כדי לקבוע את הערכים האופטימליים של הפרמטרים האלה, אפשר להשתמש באופטימיזציה מבוססת-משוב (FDO).

2. הקטנת גודל האצווה

הערך של sample_count נגזר ישירות מגודל הקבוצה הגלובלי. הקטנת גודל האצווה מקטינה את כמות הנתונים שכל SparseCore צריך לעבד בכל שלב, וכך מקטינה את הגודל של מאגרי הנתונים הזמניים הנדרשים.