במאמר הזה מתואר פילוח דינמי ב-Google Kubernetes Engine (GKE). התכונה 'חלוקה דינמית' מאפשרת להגדיר תת-בלוקים של TPU שהוקצו לטופולוגיות שונות. היכולת הזו מצמצמת את הצורך ליצור מחדש מאגרי צמתים, משפרת את עמידות התקלות בכך שהיא מאפשרת שחזור אוטומטי כשמתרחשת תקלה, ומבצעת אופטימיזציה של ניצול המשאבים.
התכונה 'חלוקה דינמית' מיועדת למהנדסי למידת מכונה (ML) ולמהנדסי פלטפורמה שרוצים לבצע אופטימיזציה של השימוש ב-TPU, לקצר את זמן ההקצאה ולשפר את עמידות התקלות בעומסי עבודה של אימון והסקת מסקנות בקנה מידה גדול.
לפני שקוראים את המסמך הזה, חשוב להכיר את הנושאים הבאים:
- TPU ב-GKE.
- TPU Cluster Director. חלוקה דינמית היא תכונה של TPU שמופעלת על ידי TPU Cluster Director.
- כל ההזמנות במצב קיבולת. תכונות של חלוקה דינמית זמינות באופן בלעדי ב-TPU שמשתמשים במצב 'כל הקיבולת'.
מהי חיתוך דינמי?
החלוקה הדינמית מאפשרת לכם לנהל את הקיבולת של Cloud TPU בצורה גמישה, כי היא מפרידה בין הקצאת ה-TPU לבין הקצאת הזיכרון. תהליך הפילוח הדינמי כולל את השלבים הבאים:
- הקצאת משאבים כיחידות קטנות יותר: הקצאת משאבים כיחידות שנקראות תת-בלוקים. תת-בלוק הוא יחידת הבנייה הלוגית הבסיסית של הקיבולת של Ironwood (TPU7x).
ב-Ironwood (TPU7x), תת-בלוק מייצג קבוצה של 16 צמתים של מכונות וירטואליות של TPU עם טופולוגיה של שבבי TPU שמחוברים זה לזה.
4x4x4בהקשר של מצב 'כל הקיבולת' של TPU וחלוקה דינמית, מאגר צמתים ממופה ישירות לתת-בלוק. - חיבור תת-בלוקים: חלוקה דינמית מחברת את תת-הבלוקים האלה לפלחים גדולים יותר.
היתרונות של פילוח דינמי
התכונה 'פילוח דינמי' עוזרת לכם:
- קיצור הזמן להקצאת משאבים: הקצאת משאבים של תת-בלוקים בנפרד מובילה להקצאת משאבים מהירה יותר באופן כללי, כי היא ממזערת את ההשפעה של כל כשל בודד.
- קיצור הזמן לשחזור: אם מתרחשת תקלה בשבב TPU, יחידת התקלה הקטנה ביותר היא תת-בלוק. החלוקה הדינמית מאפשרת לבודד תת-בלוקים פגומים, כך שאפשר לתזמן מחדש עומסי עבודה בתת-בלוקים תקינים מהר יותר מאשר הקצאה מחדש של פרוסות גדולות שלמות.
- שינוי הקיבולת: אם יש לכם דרישות מגוונות לעומסי עבודה, לא צריך למחוק ולשחזר מאגרי צמתים כדי לבצע שינויים בטופולוגיה. במקום זאת, אפשר להגדיר מחדש באופן דינמי את מאגרי הצמתים שהוקצו כך שיתאימו לצורות שצוינו.
אלמנטים מרכזיים של פילוח דינמי
התכונה 'פילוח דינמי' מציגה את מושגי המפתח הבאים:
- הקצאת משאבים מצטברת של מאגרי צמתים: חלוקה דינמית משתמשת בהקצאת משאבים מצטברת, שהוא מודל הקצאת משאבים של מאגרי צמתים עמיד בכשלים. המודל הזה ממיר את כל הקיבולת של ה-TPU למאגרי צמתים של קבוצות של 16 מכונות TPU VM.
- בקר פלחים: בקר של משאב בהתאמה אישית של Kubernetes שפועל במישור הבקרה של GKE ומנהל פילוח דינמי. בקר הפרוסה מנהל את מחזור החיים של משאב מותאם אישית של Slice, שמייצג פרוסה דינמית. הבקר של ה-Slice מטפל ביצירה, במעקב רציף ובמחיקה של ה-Slice. כשמשתמשים בכלי לתזמון, הכלי מנהל את היצירה והמחיקה של המשאב המותאם אישית Slice.
- Slice custom resource: dynamically stitches sub-blocks together based on the requested TPU topology. התהליך הזה מסתמך על הגדרה דינמית מחדש של רשת OCS כדי לחבר את מאגרי הצמתים של TPU, וכך עוזר להבטיח ביצועים אופטימליים. כדי לבדוק את ההתקדמות או את התקינות של יצירת פרוסות דינמיות, אפשר לבדוק את שדות הסטטוס של משאב ה-Slice המותאם אישית.
שימוש בכלי תזמון לפילוח דינמי
כדי להשתמש בפילוח דינמי, אפשר להשתמש באחת מהאפשרויות הבאות:
- שימוש בכלי לתזמון משלכם כדי לנהל משאבים מותאמים אישית של Slice. האפשרות הזו שימושית אם יש לכם דרישות מורכבות לגבי תזמון או אם אתם רוצים לשלב חלוקה דינמית עם תשתית התזמון הקיימת שלכם. כדי להתחיל, אפשר לעיין במאמר בנושא שימוש בחלוקה דינמית עם מתזמן מותאם אישית.
- אפשר להשתמש בכלי לתזמון כדי ליצור באופן אוטומטי משאב מותאם אישית של Slice. אפשר להגדיר את Kueue ואת Topology Aware Scheduling (TAS) כדי ליצור באופן אוטומטי משאב מותאם אישית מסוג Slice. כדי להתחיל, אפשר לעיין במאמר בנושא תזמון פלחים דינמיים באמצעות Kueue ו-TAS.