במאמר הזה מוסבר איך להקצות מאגרי צמתים של TPU ולתזמן פרוסות דינמיות ב-Google Kubernetes Engine (GKE) באמצעות Kueue וTopology Aware Scheduling (TAS).
אפשר גם להשתמש בפילוח דינמי באמצעות אינטראקציה ישירה עם פילוח של משאבים בהתאמה אישית. מידע נוסף זמין במאמר בנושא שימוש בחלוקה דינמית עם מתזמן מותאם אישית.
לפני שמבצעים את ההוראות האלה, חשוב להבין את המושגים של חלוקה דינמית.
דרישות
כדי להשתמש בפילוח דינמי ב-GKE, אתם צריכים לעמוד בדרישות הבאות:
- משתמשים באשכול Standard בערוץ מהיר באחת מהגרסאות הבאות:
- כדי להגדיר חלוקה דינמית של סופר-סלייס (טופולוגיות ששווה ל-
4x4x4או גדולות ממנו), צריך להשתמש בגרסה 1.35.2-gke.1842000 ואילך. - כדי להגדיר חלוקה דינמית למקטעי משנה (טופולוגיות קטנות מ-
4x4x4), צריך להשתמש בגרסה 1.36.0-gke.3712000 ואילך.
- כדי להגדיר חלוקה דינמית של סופר-סלייס (טופולוגיות ששווה ל-
- שימוש בגרסת Ironwood (TPU7x).
- משתמשים בקובץ אימג' של מערכת הפעלה שמותאמת לקונטיינרים עבור הצמתים.
- כדי להשתמש בהקצאת משאבים מצטברת, צריך להשתמש בהזמנות במצב 'כל הקיבולת'. כל מצב הקיבולת הוא תכונה שמופעלת על ידי TPU Cluster Director.
- כדי להשתמש בחלוקת משנה דינמית, צריך לוודא שיש בצמתים אירועי תחזוקה בהמתנה. מעקב אחר אירועי תחזוקה בהמתנה במכונות שלכם. אם יש לכם צמתים עם אירוע תחזוקה בהמתנה שזמן הסיום שלו הוא בין 18 בספטמבר 2026 ל-30 בספטמבר 2026, תצטרכו להפעיל ידנית את אירוע התחזוקה של המארח בצמתים האלה כדי שתוכלו להשתמש בחלוקת משנה.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שיש לכם אשכול קיים מסוג Standard בגרסה 1.35.2-gke.1842000 ואילך, בערוץ מהיר. כדי ליצור אשכול חדש, אפשר לעיין במאמר בנושא יצירת אשכול אזורי.
- מוודאים שיש לכם מספיק מכסת שימוש ב-Ironwood (TPU7x) באזור שלכם.
- אם אתם מתכננים להריץ עומסי עבודה של חלוקת נתונים, תצטרכו להתקין את JobSet בגרסה 0.10.1 ואילך.
- בקשה לקיבולת TPU במצב 'כל הקיבולת'.
שימוש בפילוח דינמי ב-GKE עם Kueue
בקטע הזה מתואר תהליך העבודה לשימוש בפילוח דינמי ב-GKE.
- איך רואים את הטופולוגיה ואת סטטוס התקינות של כל ההזמנות במצב 'כל הקיבולת'
- הפעלת בקר הפרוסות באשכול.
- התקנה של Kueue, JobSet ו-LWS
- יצירת מאגרי צמתים של TPU.
- הגדרת Kueue ליצירת משאב מותאם אישית של Slice
- הפעלת עומסי עבודה בפריסה דינמית באמצעות Kueue
- ניקוי.
הפעלת אמצעי הבקרה של התבנית
כדי להשתמש בפילוח דינמי, צריך להפעיל את בקר הפילוח באשכול.
מעדכנים את האשכול:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --enable-slice-controllerמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
LOCATION: האזור שבו נמצא קיבולת ה-TPU הזמינה.
-
כדי לתקשר עם האשכול באמצעות פקודות
kubectl, צריך לקבל פרטי כניסה:gcloud config set container/cluster CLUSTER_NAME gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONבפלט של הפקודה הבאה, מוודאים שהערך
slices.accelerator.gke.ioמופיע:kubectl get crd slices.accelerator.gke.ioהפלט אמור להיראות כך:
slices.accelerator.gke.io 2026-01-09T23:58:02Z
התקנה של Kueue, JobSet ו-LWS
אם כבר התקנתם את Kueue, JobSet ו-LWS, אתם יכולים לדלג על הקטע הזה.
התקנת Kueue
פועלים לפי ההוראות בתיעוד של Kueue או מריצים את הפקודה הבאה:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/KUEUE_VERSION/manifests.yaml
מחליפים את KUEUE_VERSION בגרסת Kueue הנדרשת בהתאם לדרישות הטופולוגיה. כדי להשתמש בחלוקת משנה דינמית, צריך להשתמש ב-Kueue בגרסה 0.18.2 ואילך. כדי להשתמש בפריסה דינמית של נתונים, צריך להשתמש ב-Kueue מגרסה 0.16.6 ואילך.
התקנת JobSet
פועלים לפי ההוראות שמפורטות במסמכי התיעוד של JobSet או מריצים את הפקודה הבאה:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yaml
מחליפים את JOBSET_VERSION בגרסת JobSet הנדרשת בהתאם לדרישות הטופולוגיה. כדי להשתמש בחלוקת משנה דינמית, צריך להשתמש ב-JobSet בגרסה 0.12.0 ואילך. כדי להשתמש ב-dynamic super-slicing, צריך להשתמש ב-JobSet מגרסה 0.11.1 ואילך.
התקנת LWS
הגדרת LeaderWorkerSet (LWS) נדרשת רק לחלוקת משנה דינמית.
פועלים לפי ההוראות בתיעוד של LWS או מריצים את הפקודה הבאה:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/lws/releases/download/LWS_VERSION/manifests.yaml
מחליפים את LWS_VERSION בגרסה הנדרשת של LWS. להשתמש ב-LWS בגרסה 0.8.0 ואילך.
יצירת מאגרי צמתים עם הקצאת משאבים מצטברת
בקטע הזה מוסבר איך ליצור מאגרי צמתים של TPU עם הקצאת משאבים מצטברת. GKE ממיר את כל קיבולת ה-TPU שלכם למאגרי צמתים שכוללים קבוצות של 16 צמתים של מכונות וירטואליות של Ironwood (TPU7x) או בלוקים משניים. GKE מקצה את מאגרי הצמתים האלה גם אם הוא לא מצליח למצוא את כל המכונות הווירטואליות התקינות, על ידי הצבת צמתים בחלקים תקינים של המכונה המארחת והקצאה מצטברת של מכונות לא תקינות בזמן שהן מתוקנות.
אתם יכולים לטרגט את מאגר הצמתים כך שישתייך לאחת מהקטגוריות הבאות:
- בלוק ספציפי של יחידות TPU, שמוצג בהזמנות במצב 'כל הקיבולת'. טירגוט בלוקים מאפשר ל-GKE ליצור את מאגר הצמתים בכל תת-בלוק זמין בתוך הבלוק שצוין.
- תת-בלוק ספציפי או קבוצה ספציפית של 16 צמתים של מכונות וירטואליות של Ironwood (TPU7x) של TPU, כדי לקבל שליטה מפורטת יותר.
יצירת מדיניות של עומס עבודה
כדי ליצור מאגר צמתים של פרוסת TPU עם Ironwood (TPU7x), קודם צריך ליצור מדיניות של עומס עבודה עם השדה accelerator-topology-mode שמוגדר לערך provision_only. ההגדרה הזו מפעילה את תהליך ההקצאה המצטבר.
יוצרים מדיניות של עומסי עבודה:
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--project=PROJECT_ID \
--region=REGION \
--type=HIGH_THROUGHPUT \
--accelerator-topology=4x4x4 \
--accelerator-topology-mode=provision_only
מחליפים את מה שכתוב בשדות הבאים:
-
WORKLOAD_POLICY_NAME: שם למדיניות של עומס העבודה. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REGION: האזור של מדיניות עומס העבודה.
בפקודה הזו, מבצעים את הפעולות הבאות::
- תמיד מגדירים את השדה
accelerator-topologyלערך4x4x4כדי להתאים למספר הכולל של הצ'יפים בתוך בלוק משנה יחיד. - כדי להפעיל את תהליך ההקצאה המצטבר, צריך תמיד להגדיר את השדה
accelerator-topology-modeלערךprovision_only. כשמגדירים את השדהprovision_only, מאגר הצמתים מספק צמתי TPU בלי ליצור קישורי ICI או OCS.
טירגוט מאגר הצמתים כך שישתייך לבלוק או לתת-בלוק
אתם יכולים לטרגט יחידות משנה ספציפיות או יחידות בתוך ההזמנה במצב 'כל הקיבולת'.
- טירגוט של בלוק: כל מאגר צמתים משתמש בקיבולת מבלוק ספציפי. GKE ממקם את מאגר הצמתים בתוך תת-בלוק זמין בבלוק הזה. צריך ליצור מאגרי צמתים כמספר תתי הבלוקים בבלוק שרוצים להשתמש בו.
טירגוט של בלוק משנה: כל מאגר צמתים ממופה לבלוק משנה ספציפי וזמין. כשמשתמשים בטירגוט של בלוק משנה, GKE יוצר את מאגר הצמתים אם לפחות מכונה וירטואלית אחת תקינה. הקצאת הרשאות מצטברת עוזרת לוודא שכל הצמתים ממוקמים בתוך בלוק המשנה שצוין.
חסימה
כדי לאחזר את השם של הבלוק בהזמנה ואת מספר תתי הבלוקים הזמינים בבלוק, צריך לבצע את השלבים הבאים במסמך View the topology and health status of All Capacity Mode reservations:
מזהים את שם הבלוק על ידי הצגת רשימה של כל בלוקי ההזמנות והעתקת הערך בשדה
name:. הערך הזה הוא שם הבלוק אוBLOCK_NAMEבמסמך הזה.כדי לקבוע כמה מאגרי צמתים צריך ליצור, מתארים בלוק של הזמנה ומזהים את הערך בשדה
reservationSubBlockCount. הערך הזה הוא מספר תתי-הבלוקים הזמינים. לדוגמה, הערךreservationSubBlockCount: 4מציין שיש ארבעה בלוקים משניים זמינים בבלוק, וצריך ליצור ארבעה מאגרי צמתים נפרדים.
מגדירים את נתיב ההזמנה:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
RESERVATION_NAME: השם של הזמנת ה-TPU. -
BLOCK_NAME: השם של הבלוק.
-
יוצרים מאגר צמתים לכל תת-בלוק שזוהה בשלב הקודם. לדוגמה, אם המספר הוא
4, מריצים את הפקודה הזו ארבע פעמים. צריך להשתמש בשם ייחודי לכל מאגר צמתים.gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: השם של מאגר הצמתים החדש. -
CLUSTER_NAME: השם של אשכול GKE. -
WORKLOAD_POLICY_NAME: השם של מדיניות עומס העבודה שיצרתם. -
ZONE: האזור של מאגר הצמתים, לדוגמה,us-central1-a.
-
Sub-block
כדי לאחזר את השם של הבלוק ואת המזהים של תתי הבלוקים הזמינים, צריך לבצע את השלבים הבאים במסמך View the topology and health status of All Capacity Mode reservations (הצגת הטופולוגיה וסטטוס התקינות של כל ההזמנות במצב קיבולת):
כדי לזהות את השם של הבלוק, מציגים רשימה של כל בלוקי ההזמנות ומעתיקים את הערך בשדה
name:. הערך הזה הוא השם של הבלוק או שלBLOCK_NAMEבמסמך הזה.כדי לזהות את השם של תת-הבלוקים, מפרטים את כל תת-הבלוקים של בלוק ומעתיקים את הערך בשדה
name:לכל רשומה בקטעreservationSubBlocks. הערך הזה הוא השם של בלוק המשנה אוSUBBLOCK_NAMEבמסמך הזה.
מגדירים את נתיב ההזמנה:
export RESERVATION_PATH="projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUBBLOCK_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
RESERVATION_NAME: השם של הזמנת ה-TPU. -
BLOCK_NAME: השם של הבלוק. -
SUBBLOCK_NAME: השם של בלוק המשנה.
-
יוצרים את מאגר הצמתים:
gcloud container node-pools create NODE_POOL_NAME \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --node-locations=ZONE \ --machine-type=tpu7x-standard-4t \ --num-nodes=16 \ --placement-policy=WORKLOAD_POLICY_NAME \ --reservation-affinity=specific \ --reservation=${RESERVATION_PATH}מחליפים את מה שכתוב בשדות הבאים:
-
NODE_POOL_NAME: שם ייחודי למאגר הצמתים החדש, לדוגמה,sub-block-pool-1. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
CLUSTER_NAME: השם של אשכול GKE. -
ZONE: האזור של מאגר הצמתים, לדוגמה,us-central2-b. WORKLOAD_POLICY_NAME: השם של מדיניות העומס שיצרתם.
-
בשלב הזה, הצמתים נוצרים, אבל הקישורים שלהם ל-Inter-Chip Interconnect (ICI) עדיין לא פעילים. לכן, אי אפשר להריץ עומסי עבודה במאגרי הצמתים האלה באופן ישיר.
כדי להפעיל את כל הקישורים הדרושים של ICI כדי ליצור את הפרוסה ולאפשר תזמון של עומסי עבודה, צריך ליצור פרוסה דינמית באחת מהשיטות הבאות:
- יוצרים משאב מותאם אישית של Slice. במקום Pods, משתמשים במשאב מותאם אישית מסוג Slice כדי להגדיר את הטופולוגיה שצוינה, והבקר של ה-Slice מפעיל אותה.
- תזמון עומסי עבודה ב-GKE באמצעות Kueue ו-TAS. Kueue מטפל אוטומטית ביצירה ובמחיקה של משאבים מותאמים אישית מסוג Slice. מומלץ להימנע משינוי ידני של משאבים מותאמים אישית של Slice שנוצרו על ידי Kueue.
יצירת פלח דינמי באמצעות Kueue ו-TAS
בקטע הזה נסביר איך לתזמן עומסי עבודה של GKE באמצעות Kueue ו-TAS.
התקנה של בקר פרוסות Kueue
כדי להתקין את בקר הפרוסות של Kueue, שומרים את המניפסט הבא בתור
slice-controller.yaml:החלת המניפסט
slice-controller.yaml:kubectl apply -f slice-controller.yamlכדי להגדיר את Kueue לחלוקה דינמית, שומרים את המניפסט הבא כמו
dynamic-slice-topology.yaml:החלת המניפסט
dynamic-slice-topology.yaml:kubectl apply -f dynamic-slice-topology.yamlבמניפסט הזה, מגדירים את Kueue לחלוקה דינמית על ידי הגדרת המשאבים הבאים:
- טופולוגיית פרוסות דינמיות של Ironwood (TPU7x) (
superslice-topology): הטופולוגיה מגדירה את הרמות ש-Kueue לוקח בחשבון כשהוא מתזמן עומסי עבודה של פרוסות דינמיות. הרמות האלה הן:-
cloud.google.com/gce-topology-blocklabel: הרמה הזו נדרשת כדי להבין אילו בלוקים משנה שייכים לאילו בלוקים, כי רק בלוקי משנה מאותו בלוק יכולים ליצור פרוסה. - תווית
cloud.google.com/gke-tpu-partition-4x4x4-id: הרמה הזו מייצגת תת-בלוקים נפרדים של Ironwood (TPU7x) (4x4x4טופולוגיה). - תווית
kubernetes.io/hostname: הרמה הזו נדרשת כדי להקצות Pods למכונות וירטואליות ספציפיות וכדי לראות את התוויות וה-taints שלהן.
-
- Ironwood (TPU7x) SuperSlice ResourceFlavor (
superslice-rf): סוג המשאב של בלוקי המשנה של Ironwood (TPU7x) כולל את התוויתcloud.google.com/gke-tpu-accelerator: tpu7xכדי להתאים לצמתים עם מכונות Ironwood (TPU7x). - SuperSlice AdmissionCheck (
superslice-ac): בדיקת הקבלה הזו מודיעה ל-Kueue לא לתזמן עומס עבודה עד שבקר הפרוסה של GKE יאשר שהפרוסה הפכה לפעילה. קודם מגדירים את בדיקת ההרשאה ואז מוסיפים אותה ל-ClusterQueueשמטפל בעומסי עבודה של חלוקה דינמית. - ClusterQueue (
cq) ו-LocalQueue (lq): השדות האלה מנהלים משאביgoogle.com/tpu. התורcqClusterQueue כולל אתsuperslice-acבדיקת ההרשאה. אפשר להגדיר את השדהnominalQuotaעבורgoogle.com/tpuבשתי דרכים:- מכסת נפח אחסון ספציפית: מגדירים את השדה
nominalQuotaכך שיתאים לקיבולת הקיימת כדי לנהל את מכסת נפח האחסון ולשתף את הקיבולת באופן הוגן. - מכסה ללא הגבלה: מגדירים את השדה
nominalQuotaלערך גבוה מאוד כמו"999999", כדי לדמות מכסה ללא הגבלה. כדי להתמקד ב-TAS ובחלוקה דינמית, ההגדרה הזו עוקפת את הפונקציונליות של ניהול המכסות ב-Kueue.
- מכסת נפח אחסון ספציפית: מגדירים את השדה
- טופולוגיית פרוסות דינמיות של Ironwood (TPU7x) (
הגדרת הבחירה של תקינות המחיצה
בנוסף לבדיקות הרגילות של תקינות ומוכנות הצומת, GKE חושף את המצב הספציפי של כל צורה של מחיצה באמצעות התווית cloud.google.com/gke-tpu-partition-[shape]-state (כאשר [shape] תואם לצורה של מזהה המחיצה, כמו 2x2x1, 2x2x2, 2x2x4, 2x4x4 או 4x4x4). התווית הזו מאפשרת ל-GKE להתחשב בגורמים שמשפיעים על יצירת פרוסות, כמו המצב של קישורי TPU. הגדרה של חלוקת משנה דינמית (טופולוגיות קטנות מ-4x4x4) דורשת GKE בגרסה 1.36.0-gke.3712000 ואילך.
אפשר להגדיר את הערך של תווית מצב המחיצה באופן הבא:
-
HEALTHY: המחיצה תקינה ופועלת באופן מלא. -
DEGRADED: התשתית של המחיצה במצב ירוד, למשל, בגלל ירידה באיכות הקישור של OCS. המחיצה עדיין יכולה ליצור פלח, אבל יכול להיות שהביצועים הכוללים יהיו נמוכים יותר בהשוואה למחיצות תקינות. הסטטוס הזה רלוונטי רק לטופולוגיה4x4x4ברמה העליונה. בטופולוגיות קטנות יותר אין מצב של ירידה ברמת השירות. -
UNHEALTHY: המחיצה לא תקינה ואי אפשר ליצור ממנה פרוסה. -
UNSET: המצב לא מוגדר בגלל אתחול לא מוצלח של בקר הפרוסות של GKE. -
INCOMPLETE: לא כל הצמתים במחיצה הוקצו.
ה-webhook של Kueue Slice Controller מאמת אם עומס עבודה כולל דרישה ספציפית לבדיקת תקינות של מחיצה. אם לא מצוינת העדפה, ה-webhook מוסיף זיקה של צומת ברירת מחדל.
ההתנהגות היא כזו:
- אם יש
nodeSelectorאוnodeAffinityשמטרגטים את התוויתcloud.google.com/gke-tpu-partition-[shape]-state, הם לא ישתנו. אם לא קיימת הגדרת תווית כזו, ה-webhook מוסיף את הקרבה הבאה של צומת ברירת המחדל כדי להבטיח שייעשה שימוש רק במחיצות זמינות:
nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-tpu-partition-4x4x4-state operator: In values: - "HEALTHY" - "DEGRADED"
בקטע הבא יש דוגמאות להגדרת התווית cloud.google.com/gke-tpu-partition-4x4x4-state כדי לציין את ההגדרות השונות של תקינות תת-הבלוקים.
הפעלת עומסי עבודה לבדיקה בפילוח דינמי באמצעות Kueue
בקטע הזה מוסבר איך פורסים עומסי עבודה בפילוח דינמי באמצעות Kueue ו-TAS. הוא כולל דוגמאות שמראות איך ליצור עומס עבודה של פלח דינמי ועומס עבודה שמורכב מכמה פלחים. עומסי העבודה נשלחים כ-JobSets.
דוגמה 1: עומס עבודה יחיד משתמש בפרוסת נפח דינמית אחת
בדוגמה הבאה מתואר איך ליצור עומס עבודה באמצעות פרוסה עם טופולוגיה של 4x12x16, שמורכבת מ-12 בלוקים משניים. מספר ה-Pods חושב כך: (4 * 12 * 16) / 4 שבבים לכל צומת = 192 Pods.
שומרים את קובץ המניפסט הבא בשם
big-super-slice.yaml:במניפסט הזה, ההערות הבאות מציינות ל-Kueue את המאפיינים והטופולוגיה של הפרוסה כדי להגדיר את הדברים הבאים:
-
cloud.google.com/gke-tpu-slice-topology: מציין את"4x12x16"כטופולוגיית הפרוסות הדינמיות. הדרישות לטופולוגיית המאיץtpu7xכוללות את הכללים הבאים:- לפילוח דינמי של רשתות משנה: אפשר לציין טופולוגיות קטנות יותר מ-
4x4x4, כמו2x2x1, 2x2x2, 2x2x4או2x4x4. כדי להשתמש בטופולוגיות הקטנות האלה, צריך GKE בגרסה 1.36.0-gke.3712000 ואילך. - לפילוח דינמי מתקדם: אפשר לציין טופולוגיות ששווות ל-
4x4x4או גדולות ממנו. כדי להגדיר חיתוך-על דינמי, כל מאפיין בטופולוגיה המבוקשת צריך להיות כפולה של ארבע, לדוגמה4A x 4B x 4C. - הטופולוגיה צריכה להיות מחרוזת תלת-ממדית בפורמט
AxBxC, למשל4x8x8. - המידות צריכות להיות ממוינות בסדר לא יורד: A <= B <= C. לדוגמה, הערך
4x8x4לא תקין, והוא צריך להיות4x4x8. - מכפלת המידות (אורךרוחבגובה) לא יכולה להיות גדולה מ-9,216.
- טופולוגיות הפרוסות הגדולות ביותר שנתמכות יכולות לכלול עד 32 תת-בלוקים. לדוגמה,
8x16x16עם 32 תת-בלוקים,8x12x20עם 30 תת-בלוקים או12x12x12עם 27 תת-בלוקים הם במסגרת המגבלות המותרות.
- לפילוח דינמי של רשתות משנה: אפשר לציין טופולוגיות קטנות יותר מ-
-
cloud.google.com/gke-tpu-accelerator: tpu7x: מתזמן את ה-Pods במכונות וירטואליות שמריצות Ironwood (TPU7x). -
kueue.x-k8s.io/queue-name: מקצה את JobSet ל-LocalQueue של Kueue. - ה-webhook מוסיף את זיקת הצומת שמוגדרת כברירת מחדל כדי לוודא שנעשה שימוש בצמתים
HEALTHYו-DEGRADED.
-
החלת המניפסט
big-super-slice.yaml:kubectl apply -f big-super-slice.yamlאחרי שמחילים את המניפסט, Kueue יוצר
JobSetבשםbig-super-slice. לאחר מכן, Kueue מנסה ליצור פרוסת משאבים דינמית אחת עם טופולוגיה של4x12x16. אחרי שהפרוסה פעילה, Kueue מאשר את עומס העבודה, ו-192 הפודים מתוזמנים בצמתים כדי ליצור את הפרוסה הדינמית שמריצה את עומסי העבודה.
דוגמה 2: עומס עבודה עם יותר משכפול אחד
בדוגמה הבאה אנחנו יוצרים עומס עבודה שמשתמש בשני פלחים דינמיים, שכל אחד מהם מורכב מארבעה בלוקים משניים שמטרגטים רק צמתים מסוג HEALTHY.
שומרים את קובץ המניפסט הבא בשם
two-super-slices.yaml:החלת המניפסט
two-super-slices.yaml:kubectl apply -f two-super-slices.yaml
במניפסט הזה, מגדירים את השדה replicas לערך 2 בקטע replicatedJobs.
אחרי שמחילים את המניפסט, Kueue מנסה ליצור שני פלחים נפרדים עם טופולוגיה של 4x8x8. Kueue יוצר פרוסה דינמית לכל רפליקה שמוגדרת ב-jobset.spec.replicatedJobs[].replicas.
אם מציינים n רפליקות, Kueue יוצר n פרוסות דינמיות לעומס העבודה וממתין עד שכל הפרוסות יהפכו לפעילות לפני שהוא מאשר את עומס העבודה.
מעקב אחרי הפלח
אפשר לראות את הסטטוס של הפלח ולעקוב אחרי מדדי הפלח באמצעות מדדי המערכת של GKE.
מעקב אחרי הסטטוס של הפרוסה
כדי לבדוק את הסטטוס של הפלחים הדינמיים, מריצים את הפקודה הבאה:
kubectl describe slice SLICE_NAME
מחליפים את SLICE_NAME בשם של הפרוסה. שם הפלח נגזר בדרך כלל משם ה-JobSet ומאינדקס הרפליקה. בדוגמה 1, פרוסת נתונים שנוצרה על ידי Kueue תקבל שם שדומה ל-default-jobset-big-super-slice-yyyyy-job-jax-0.
הפלט אמור להיראות כך:
Name: test-slice
Namespace:
Labels: <none>
Annotations: <none>
API Version: accelerator.gke.io/v1beta1
Kind: Slice
Metadata:
Creation Timestamp: 2026-02-12T23:44:28Z
Finalizers:
accelerator.gke.io/slice-finalizer
Generation: 1
Resource Version: 1770939905695871008
UID: 6dbbfe14-4486-4462-864d-e078d0ca8b5b
Spec:
Partition Ids:
5eae6a4f59d59cf30a9bf49de618eb2b
Topology: 4x4x4
Type: tpu7x
Status:
Conditions:
Last Transition Time: 2026-02-12T23:45:05Z
Message:
Reason: ACTIVE
Status: True
Type: Ready
Last Transition Time: 2026-02-12T23:45:05Z
Message: NodeLabelingCompleted
Reason: NodeLabelIsAdded
Status: True
Type: NodeLabeled
Events: <none>
שם הפלח עומד בכללים הבאים כדי להבטיח תאימות למוסכמות למתן שמות למשאבים ב-Compute Engine:
- תבנית:
{namespace}-jobset-{jobset.metadata.name}-kueueHash[5-character]-{jobset.spec.replicatedJobs[].name}-sliceIndex. - אורך: השם מכיל 49 תווים או פחות. הבקר מוסיף מקף וגיבוב של האשכול באורך 8 תווים כדי ליצור שמות של משאבי Compute Engine, שיש להם מגבלה של 63 תווים.
- פורמט: השם תואם לביטוי הרגולרי
^[a-z]([-a-z0-9]*[a-z0-9])?$. השם כולל את המאפיינים הבאים:- מתחיל באות קטנה.
- הוא מכיל רק אותיות קטנות, מספרים ומקפים (-).
- הוא מסתיים באות קטנה או במספר (הוא לא יכול להסתיים במקף).
מעקב אחרי המדדים של הפלח
אפשר לעקוב אחרי מדדי המערכת הבאים של GKE שחושפים את מצב הפלח:
kubernetes.io/accelerator/slice/statekubernetes.io/accelerator/partition/statekubernetes.io/accelerator/slice/deformation_durationskubernetes.io/accelerator/slice/formation_durations
מידע נוסף על המדדים זמין במאמר מדדי מערכת של GKE.
הסרת המשאבים
כדי להימנע מחיובים לא צפויים, מוחקים את הפרוסות לפני שמוחקים את מאגרי הצמתים.
מוחקים את JobSet. הפעולה הזו גורמת ל-Kueue למחוק את משאבי ה-Slice המותאמים אישית שמשויכים אליה.
kubectl delete jobset JOBSET_NAMEמחליפים את
JOBSET_NAMEבשם של JobSet, לדוגמה,big-super-slice.מוחקים את מאגר הצמתים של ה-TPU:
gcloud container node-pools delete NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION
(אופציונלי) שימוש בחלוקה דינמית עם כלי לתזמון משלכם
במאמר הזה אנחנו מתמקדים בשימוש ב-Kueue וב-TAS. עם זאת, אפשר גם לנהל חלוקה דינמית באמצעות מתזמן מותאם אישית משלכם. אם אתם בוחרים להשתמש בכלי תזמון אחר, אתם יכולים להיעזר במידע על משאב מותאם אישית מסוג Slice.