שיפור הביצועים של המודל באמצעות bfloat16
כברירת מחדל, יחידות ה-TPU מבצעות פעולות של כפל מטריצות עם ערכים של bfloat16 ופעולות של צבירה עם ערכים של IEEE float32. שימוש במספרים של נקודה צפה עם דיוק מופחת מקצר את הזמן עד להגעה למצב יציב בלי לפגוע בדיוק.
הטווח הדינמי של bfloat16 ושל float32 זהה. עם זאת, bfloat16
משתמש בחצי מנפח הזיכרון. מידע נוסף על ביצועים של bfloat16 זמין במאמר A Study of BFLOAT16 for Deep Learning Training.
שימוש מפורש ב-bfloat16
ההמרה האוטומטית של פורמטים ב-TPU מאפשרת לכם לא לחשוב על דיוק מספרי, אבל אתם יכולים לשפר את הביצועים על ידי המרה מפורשת של ערכים ל-bfloat16. יש שתי סיבות להמרה מפורשת של ערכים ל-bfloat16:
אחסון ערכים בפורמט
bfloat16חוסך בזיכרון שבשבב, ומאפשר ל-Cloud TPU לאמן מודלים גדולים יותר או להשתמש בגדלים גדולים יותר של אצווה.חלק מהפעולות מוגבלות על ידי רוחב הפס של הזיכרון, כלומר הזמן שנדרש לטעינת נתונים מהזיכרון יכול להאט את הזמן הכולל שנדרש לביצוע החישוב. אחסון אופרנדים ותוצאות של פעולות כאלה בפורמט
bfloat16מקטין את כמות הנתונים שצריך להעביר, וכך משפר את המהירות הכוללת.
כדי להתחיל, מומלץ לצבור ניסיון עם אחד ממודלי ההפניה של Cloud TPU. לאחר מכן, מדריך כלי הפרופילים ומדריך פתרון הבעיות מספקים מידע טכני מפורט שיעזור לכם ליצור ולבצע אופטימיזציה של מודלים של למידת מכונה בעצמכם.
פרטי המרות בפורמט
ההמרה של הפורמט מ-float32 ל-bfloat16 מוכנסת באופן אוטומטי על ידי
הקומפיילר XLA. ב-TPU, שיטת העיגול בהמרה היא עיגול למספר הזוגי הקרוב ביותר, והגלישה היא ל-inf. בנוסף, bfloat16 ב-Cloud TPU לא תומך במספרים תת-נורמליים, ולכן כל המספרים התת-נורמליים מושבתים לאפס במהלך ההמרה.
ערכים מיוחדים, כמו NaN ו-inf, נשמרים בהמרה.
המרת הפורמט מ-bfloat16 ל-float32 מוכנסת גם היא באופן אוטומטי על ידי מהדר XLA. מכיוון ש-float32 יכול לייצג את כל הערכים המדויקים ב-bfloat16,
ההמרה מוסיפה 16 אפסים לביטים של המנטיסה. הערכים המיוחדים נשמרים בהמרה.
אפשר לפרוס נקודות ביקורת שהתקבלו ממודל שאומן ב-Cloud TPU בפלטפורמות חומרה אחרות (לדוגמה, הסקת מסקנות או כוונון עדין במעבדי CPU או GPU) בלי לבצע המרות ידניות נרחבות.