קטגוריה: 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, במיוחד במודלים גדולים של הטמעות (LEMs).
מספר העותקים הלוגיים הוא פרמטר פנימי של קומפיילר שקובע איך קבוצות קלט מחולקות כדי לנהל את העומס על הקצאת הזיכרון הזמני. הקומפיילר מנסה לפצל את עומס העבודה למקטעים קטנים יותר (עותקים) כדי שהמאגרים הזמניים שנדרשים לכל מקטע יתאימו לזיכרון ה-Scratchpad המוגבל של SparseCore. באופן כללי, מספר גבוה יותר של רפליקות לוגיות מפחית את העומס על הקצאת הזיכרון, כי המערכת מעבדת בכל פעם קבוצות קטנות יותר של נתונים.
השגיאה הזו מציינת שגם אחרי ניסיון של הגדרות שונות לפיצול, הקומפיילר לא הצליח למצוא הגדרה שבה המאגרים הנדרשים מתאימים לזיכרון Tilespmem. גודל ההקצאה נקבע לפי שילוב של:
-
sample_count: מספר מזהי החיפוש של ההטמעה שמוקצים לכל SparseCore (נגזר מגודל האצווה). -
feature_width: גודל הממד של ההטמעה. -
max_nz_per_row: המספר המקסימלי של מזהים לא ייחודיים של חיפוש הטמעה בכל ה-SparseCores. -
max_unique_nz_per_row: המספר המקסימלי של מזהי חיפוש ייחודיים של הטמעה.
ניפוי באגים
כדי לפתור את השגיאה הזו, צריך להפחית את העומס על הזיכרון של SparseCore scratchpad.
1. שיפור ההערכות של המטא-נתונים
הקומפיילר מקצה זיכרון על סמך max_nz_per_row ו-max_unique_nz_per_row. אם הערכים האלה מוערכים באופן שמרני (כלומר, מוגדרים גבוהים בהרבה מהנדרש לפי הנתונים בפועל), הקומפיילר ישמור מקום מיותר, וזה מה שגורם לשגיאה הזו. חשוב לוודא שהפרמטרים האלה משקפים בצורה מדויקת את התפלגות המזהים בפועל במערך הנתונים.
כדי לקבוע את הערכים האופטימליים של הפרמטרים האלה, אפשר להשתמש באופטימיזציה מבוססת-משוב (FDO).
2. הקטנת גודל האצווה
הערך של sample_count נגזר ישירות מגודל הקבוצה הגלובלי. הקטנת גודל האצווה מקטינה את כמות הנתונים שכל SparseCore צריך לעבד בכל שלב, וכך מקטינה את הגודל של מאגרי הנתונים הזמניים הנדרשים.