מדריך: איך להקטין את צריכת הזכרון באימון מודלים עמוקים?
איך לאמן מודלים תוך שימוש בפחות זכרון
המדריך כתוב בטורצ'. ההעדפה האישית שלי היא טנזורפלו אבל עובדים עם מה שיש.. אז הקוד כאן בטורצ'.
צבירת גרדיאנטים – Gradient Accumulation
אמ;לק: במקום לנסות להכניס באצ'ים גדולים יותר לזיכרון: נעדכן את המודל רק כל כמה צעדים.
-
"להכפיל את מספר הדגימות" = "להכפיל את צריכת הזיכרון".
וזה לא טוב.
[כי אם הינו מאמנים בבאצ' גדול – תרומת כל דוגמה היתה קטנה יותר כי יש יותר דוגמאות].
הקפאת משקולות
אמ;לק: במקום לאמן כל הפרמטרים במודל. בואו פשוט לא נאמן אותם.
ולמי שלא מכיר: Automatic Mixed Precision
אמ;לק: Nvidia מספקת לנו "קסמים עם typeים" ואנחנו מקבלים בתמורה אימון מהיר יותר עם צריכת זכרון קטנה יותר.
-
הרעיון הוא להשתמש בPrecision נמוך יותר לחישוב גרדיאנטים אבל לעדכן את המודל בPrecision המלא. כדי לעבור בניהם בלי לפגוע בביצועים המאמר המקורי מציע שיטת Scaling לערכים.
אופטימיזציה ב8-ביט
אמ;לק: על ידי שימוש ברעיון דומה לרעיון למעלה נוכל לחשב את כל האופטימייזר ב8-ביט ובכך נחסוך זכרון.
-
במאמר הראשון בנושא [2] פרסמו הכותבים (מטא) סדרת ניסוים גדולה בה הם בדקו את יציבות האימון ב8-ביט על גבי טווח היפרפרמטרים רחב והראו כי האימון מגיע לאותן התוצאות פחות או יותר ויציב באותה המידה.
-
כדי להשתמש באופטימייזר הזה במציאות הכותבים שחררו חבילה המכילה את כל האלגוריתמים "bitsandbytes". בחבילה זו ישנה גרסת 8 ביט של האופטימיזר הפופולרי: AdamW שפועלת ב-8-ביט: AdamW8bit.
יש גם הרבה אחרים..
שמירת גרדיאנטים – Gradient Checkpoint
אמ;לק: במהלך הריצה קדימה ואחורה על גבי המודל לצורך חישוב הנגזרות אין לנו צורך להחזיק את כל הנגזרות של כל המודל כל הזמן, על ידי שחרור חכם של זכרון ושמירה יותר מתוחכמת לאורך הריצה נוכל לחסוך הרבה זכרון.
-
במאמר [3] מוצג טריק מתוחכם לחישוב גרדיאנטים המצריך מאיתנו להחזיק חלקים קטנים יותר מהמודל בזכרון בכל שלב בו אני מתקדמים לעומק המודל לצורך חישוב הנגזרות. כשהמודל גדול שיטה זו חוסכת דרמטית בצריכת הזכרון תוך כדי עלות חישובית נוספת יחסית קטנה.
-
[1] – הטריק של https://arxiv.org/abs/1710.03740 :Mixed Precision
-
[2] – המאמר על אופטימיזציה ב8-ביט: https://arxiv.org/abs/2110.02861
-
[3] – המאמר על Gradient Checkpointing כאן: https://arxiv.org/abs/1604.06174