מבוא ל-Cloud TPU
יחידות לעיבוד טנסורים (TPU) הן מעגלים משולבים לאפליקציות ספציפיות (ASIC) שפותחו על ידי Google כדי לעזור להאיץ עומסי עבודה של למידת מכונה. מידע נוסף על חומרת TPU זמין במאמר ארכיטקטורת TPU.
יחידות TPU מאמנות את המודלים שלכם ביעילות באמצעות חומרה שמיועדת לביצוע פעולות מטריצה גדולות, שנפוצות באלגוריתמים של למידת מכונה. ל-TPU יש זיכרון HBM (זיכרון עם רוחב פס גבוה) על השבב, שמאפשר להשתמש במודלים גדולים יותר ובגדלים גדולים יותר של אצווה. אפשר לחבר יחידות TPU בקבוצות שנקראות slices, כדי להגדיל את נפח העבודה בלי לבצע שינויים בקוד או עם שינויים מינוריים בלבד.
קוד שמופעל ב-TPU צריך לעבור קומפילציה על ידי קומפיילר אלגברה לינארית מואצת (XLA). XLA הוא קומפיילר בזמן ריצה שמקבל את הגרף שנוצר על ידי אפליקציית מסגרת ML ומקמפל את רכיבי האלגברה הלינארית, ההפסד והשיפוע של הגרף לשפת מכונה של TPU. שאר התוכנית פועלת במחשב המארח של ה-TPU. הקומפיילר XLA הוא חלק מתמונת ה-TPU VM שפועלת במחשב מארח TPU.
מידע נוסף על יחידות לעיבוד טנסורים זמין במאמר איך כדאי לחשוב על יחידות לעיבוד טנסורים.
מתי כדאי להשתמש במעבדי TPU
יחידות Cloud TPU מותאמות לעומסי עבודה ספציפיים. במצבים מסוימים, יכול להיות שתרצו להשתמש ב-GPU או ב-CPU במכונות של Compute Engine כדי להריץ את עומסי העבודה של למידת המכונה. באופן כללי, אתם יכולים להחליט איזה חומרה הכי מתאימה לעומס העבודה שלכם על סמך ההנחיות הבאות.
מעבדים (CPU)
- יצירת אב טיפוס מהירה שדורשת גמישות מקסימלית
- מודלים פשוטים שלא לוקח הרבה זמן לאמן
- מודלים קטנים עם גודלי קבוצות קטנים ויעילים
- מודלים שמכילים הרבה פעולות TensorFlow מותאמות אישית שנכתבו ב-C++
- מודלים שמוגבלים על ידי קלט/פלט זמין או רוחב הפס של הרשת במערכת המארחת
יחידות GPU
- מודלים עם מספר משמעותי של פעולות מותאמות אישית של PyTorch/JAX שצריכות לפעול לפחות באופן חלקי במעבדי CPU
- מודלים עם פעולות TensorFlow שלא זמינות ב-Cloud TPU (אפשר לעיין ברשימת פעולות TensorFlow הזמינות)
- מודלים בינוניים עד גדולים עם גדלים גדולים יותר של קבוצות (batch) יעילות
TPUs
- מודלים שבהם יש דומיננטיות לחישובים של מטריצות
- מודלים ללא פעולות PyTorch/JAX בהתאמה אישית בתוך לולאת האימון הראשית
- מודלים שעוברים אימון במשך שבועות או חודשים
- מודלים גדולים עם גודלי אצווה אפקטיביים גדולים
- מודלים עם הטמעות גדולות במיוחד, שמשמשים בדרך כלל לעומסי עבודה מתקדמים של דירוג והמלצות
יחידות Cloud TPU לא מתאימות לעומסי העבודה הבאים:
- תוכניות אלגברה לינארית שנדרש בהן פיצול תכוף או שמכילות הרבה פעולות אלגבריות ברמת האלמנט
- עומסי עבודה שדורשים חישובים אריתמטיים ברמת דיוק גבוהה
- עומסי עבודה של רשתות נוירונים שמכילים פעולות בהתאמה אישית בלולאת האימון הראשית
מעבדי TPU ב Google Cloud
אפשר להשתמש ב-TPU דרך Compute Engine, Google Kubernetes Engine ו-Vertex AI. הוצאנו משימוש את Cloud TPU API. מידע נוסף זמין במאמר העברה מ-Cloud TPU API. בטבלה הבאה מפורטים המשאבים לכל שירות של Google Cloud .
| שירותGoogle Cloud | משאבים |
|---|---|
| Compute Engine | משאבי TPU ב-Compute Engine |
| Google Kubernetes Engine | |
| Vertex AI |
שיטות מומלצות לפיתוח מודלים
תוכנית שבה החישובים מבוססים בעיקר על פעולות שאינן מטריצות, כמו חיבור, שינוי צורה או שרשור, כנראה לא תשיג ניצול גבוה של MXU. ההנחיות הבאות יעזרו לכם לבחור ולפתח מודלים שמתאימים ל-Cloud TPU.
פריסה
הקומפיילר של XLA מבצע טרנספורמציות של קוד, כולל חלוקה של מכפלת מטריצות לבלוקים קטנים יותר, כדי לבצע חישובים ביחידת המטריצות (MXU) בצורה יעילה. המהדר XLA משתמש במבנה של חומרת ה-MXU, שהיא מערך סיסטולי בגודל 128x128, ובתכנון של מערכת המשנה של הזיכרון ב-TPU, שמעדיפה ממדים שהם כפולות של 8, כדי לייעל את חלוקת הזיכרון.
לכן, יש פריסות שמתאימות יותר לסידור חלונות צמודים, ויש פריסות שצריך לשנות את הצורה שלהן כדי שיהיה אפשר לסדר אותן בצורה כזו. פעולות שינוי צורה הן לרוב מוגבלות בזיכרון ב-Cloud TPU.
צורות
הקומפיילר של XLA מבצע קומפילציה של גרף ML בדיוק בזמן לעיבוד של האצווה הראשונה. אם יש צורות שונות באצווה כלשהי אחרי האצווה הראשונה, המודל לא פועל. (הידור מחדש של התרשים בכל פעם שהצורה משתנה הוא תהליך איטי מדי). לכן, כל מודל שיש בו טנסורים עם צורות דינמיות לא מתאים ל-TPU.
מרווח פנימי
תוכנית Cloud TPU עם ביצועים גבוהים היא תוכנית שבה אפשר לחלק את המחשוב הצפוף לחלקים בגודל 128x128. אם חישוב מטריצה לא יכול לתפוס את כל יחידת ה-MXU, הקומפיילר מוסיף טנסורים עם אפסים. יש שני חסרונות לשימוש במרווח פנימי:
- שימוש בטנסורים עם ריפוד באפסים לא מנצל את ליבת ה-TPU בצורה יעילה.
- הוספת ריפוד מגדילה את כמות הזיכרון שנדרשת לטנסור בשבב, ובמקרה קיצוני עלולה לגרום לשגיאה של חוסר זיכרון.
הוספת ריפוד מתבצעת באופן אוטומטי על ידי מהדר XLA כשצריך, אבל אפשר לקבוע את כמות הריפוד באמצעות הכלי op_profile. כדי להימנע מריפוד, כדאי לבחור ממדי טנסור שמתאימים למעבדי TPU.
מידות
בחירה של ממדי טנסור מתאימים עוזרת מאוד להפיק את הביצועים המקסימליים מחומרת ה-TPU, במיוחד מה-MXU. הקומפיילר של XLA מנסה להשתמש בגודל אצווה או במאפיין של מימד כדי להשתמש ב-MXU בצורה מקסימלית. לכן, אחד מהערכים האלה צריך להיות כפולה של 128. אחרת, הקומפיילר יוסיף לאחד מהם ריפוד עד ל-128. באופן אידיאלי, גודל האצווה וממדי התכונות צריכים להיות כפולות של 8, מה שמאפשר להפיק ביצועים גבוהים ממערכת המשנה של הזיכרון.
תחילת העבודה עם Cloud TPU
כדי להתחיל להשתמש ב-TPU באמצעות Compute Engine, פועלים לפי השלבים הבאים:
- כדי להגדיר את הפרויקט, להפעיל את Compute Engine API ולקבל את ההרשאות הנדרשות, פועלים לפי השלבים במאמר הגדרת פרויקט. Google Cloud
- מידע על גרסאות TPU, הגדרות, מכסות ותמחור מופיע במאמר תכנון משאבי Cloud TPU.
- כדי להתחיל להשתמש ב-TPU, אפשר לעיין במאמר מדריך למתחילים: יצירת מופע TPU. מידע נוסף על יצירת TPU זמין במאמר סקירה כללית על יצירת TPU.
בקשת עזרה
לקבלת עזרה, אפשר לפנות לתמיכה של Cloud TPU. אם יש לכם פרויקט פעיל של Google Cloud , תצטרכו לספק את הפרטים הבאים:
- מזהה הפרויקט Google Cloud
- שם ה-TPU, אם קיים
- מידע נוסף שרוצים לספק