כלי להצגת זיכרון
אפשר להשתמש ב-Memory Viewer כדי להציג באופן חזותי את השימוש בזיכרון במהלך החיים של התוכנית. אפשר להציג פירוט של תוכן הזיכרון בנקודת השימוש המקסימלי בזיכרון, כולל ניפוי באגים במצבים של זיכרון מוגבל (OOM). בעזרת 'תצוגת הזיכרון' תוכלו לראות את השימוש בזיכרון הגלובלי ואת מידת הקרבה של החישוב למצב של חוסר זיכרון.
כל המידע שמוצג ב-Memory Viewer הוא סטטי לחלוטין, ומגיע מהמחשבר של XLA. מידע דינמי בזמן ריצה מוצג בכלי Memory Profile.
פלטפורמות נתמכות
TPU: נתמך
GPU: נתמך
רכיבים של 'צפייה בזיכרון'
'כלי הצפייה בזיכרון' מורכב מכמה רכיבים עיקריים:
- תפריטים נפתחים של אמצעי בקרה למשתמש שמאפשרים להתאים אישית את הנתונים שמוצגים בתצוגה החזותית:
- סוגי זיכרון: סוגי הזיכרון הנתמכים תלויים במאיץ. ב-GPUs, הדגש הוא על זיכרון בעל רוחב פס גבוה (HBM), ואילו ב-TPUs אפשר לראות גם את השימוש בזיכרונות שבשבב, כולל VMEM, SMEM, CMEM, Sync Flags (SFlag), Sparsecore וגם זיכרון המארח.
- מודולים: אלה תוכניות ה-XLA שהיו חלק מההפעלה. נקודת התחלה טובה היא לרוב מודול ברמה העליונה, שמסומן בתווית כמו jit_train_step או jit_generate.
- הקטע של הסקירה הכללית בטקסט מספק מידע ברמה גבוהה, כמו הקצאת הזיכרון המקסימלית הנדרשת לתוכנית, הפיצול בין ארגומנטים לבין משתנים זמניים וכו'. יש עלות ריבית מיותרת שנובעת מהתוספת של שטח פנוי, שנדרשת בגלל ההגבלות על הצורות הנתמכות של טינסורים במאיצי ה-TPU. אם הקצאת ה-padding הזו היא חלק גדול מההקצאה הכוללת, יכול להיות שזו הזדמנות לאופטימיזציה.
- בתרשים הקו 'גודל הקצאת הזיכרון לעומת סדר התוכנית' מוצג השימוש בזיכרון לעומת נקודות התוכנית (רצף HLO) כפי שהן מתוזמנות על ידי המהדר.
- חשוב לזכור שציר X לא מייצג זמן.
- התרשים מדגיש במיוחד את הנקודה בתוכנית שבה השימוש בזיכרון מגיע לשיא במודול שנבחר. הכלי לניתוח פרופיל והכלים לא יודעים על המיקום של המודולים שבשבב או בזיכרון נתון. כשכל מודול עובר הידור, המהדר מוסיף הערה לפרופיל עם נקודת ההתחלה של נפח הזיכרון המוקצה הכולל (על ידי מודולים שעברו הידור לפניו), ומתחיל לספור למעלה ולמטה משם ככל שמתרחשות הקצאות וביטולים של הקצאות נוספות. עם זאת, המערכת לא מתעדת הקצאות עתידיות של מודולים אחרים שעבר קומפילציה לפני הביצוע. חשוב לזכור זאת בזמן ניפוי באגים של מצבים של OOM.
תרשימי מאגרים בחלק התחתון של הדף מפרטים את השימוש בזיכרון בנקודת השימוש השיא בתוכנית (הקו האנכי בתרשים הקו של שימוש בזיכרון מציין את הנקודה הזו). יש שלושה תרשימים, שבהם מוצגת כל קבוצת המאגרים שהוקצו על ידי התוכנית, אבל הם ממוינים בשלוש דרכים שונות:
- לפי סדר התוכנית: הסדר שבו הם הופיעו במהלך ביצוע התוכנית, כאשר הישנים ביותר מופיעים בצד ימין.
- לפי גודל: הגורמים שמשפיעים בצורה המשמעותית ביותר על נקודת השימוש המקסימלי בזיכרון מופיעים בצד ימין.
לפי יתרת האחסון שהן מחייבות: האפשרויות 'הכי לא יעילות' מבחינת החומרה מופיעות בצד ימין.
חשוב לדעת שלצבעים של מאגרי הנתונים אין משמעות מיוחדת.
כשמעבירים את העכבר מעל מאגר באחד משלושת התרשימים, מוצגים שני תצוגות נוספות:
- שכבת-על בתרשים הקו של שימוש בזיכרון, בצבע שתואם לכרטיס המאגר, שמציינת את משך החיים של המאגר. כלומר, עמודה אופקית שהקצוות הימניים והשמאליים שלה מציינים את נקודות ההקצאה והביטול של המאגר, לפי סדר התוכנית. הגובה של העמודה האופקית מייצג את הגודל היחסי של מאגר הנתונים שנבחר בהשוואה להקצאה המקסימלית.
- כרטיס נפרד של פרטי מאגר, בדרך כלל בצד ימין, עם פרטים על הפעולה הספציפית, לפי הצורך. כרטיס אופייני כולל את הפרטים הבאים:
- שם: שם הפעולה ב-XLA, שאפשר לחפש ב-Graph Viewer או ב-Trace Viewer.
- גודל: הגודל של הקצאת המאגר, עם וגם בלי תוספת מרווח.
- צורה: מתארת את הדירוג, הגודל וסוג הנתונים של המערך המימדי N.
- Framework op name: השם של פעולת המסגרת שמשויכת להקצאה הזו.
- סוג ההקצאה: הקצאות המאגרים הזמניים מסווגות לפי הסוגים הבאים: פרמטר, פלט, מקומי לשרשור וזמני (למשל, הקצאת מאגר זמני בתוך מיזוג).