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