הפעלת חיזוי תקינות הצמתים באשכול GKE

אחרי שיוצרים אשכול Google Kubernetes Engine‏ (GKE) שעבר אופטימיזציה ל-AI, אפשר להפעיל חיזוי של תקינות הצמתים. אם אתם מתכננים לתזמן עומסי עבודה באמצעות Topology Aware Scheduling‏ (TAS) ו-Kueue, הפעלת התכונה 'חיזוי תקינות הצומת' מאפשרת לתזמן של האשכול לבצע את הפעולות הבאות:

  1. לזהות צמתים שסביר שיחול בהם שיפור בחמש השעות הבאות.

  2. מומלץ להימנע מתזמון של עומסי עבודה חדשים בצמתים האלה.

הגישה הזו עוזרת לצמצם את ההפרעות בעומסי עבודה קריטיים ובעומסי עבודה שרגישים להפרעות, כמו עומסי עבודה של אימונים בקנה מידה גדול.

במאמר הזה מוסבר איך להפעיל חיזוי של תקינות הצמתים באשכול GKE שמשתמש בצמתים מסוג A4X Max,‏ A4X,‏ A4 או A3 Ultra. אם אתם רוצים לדעת איך להשתמש במדד של תחזית תקינות הצומת בלוח בקרה של Cloud Monitoring, למשל כדי לפתור בעיות בביצועים של אשכול Slurm, כדאי לעיין במאמר מעקב אחרי מופעי Compute Engine ואשכולי Slurm.

מגבלות

לפני שמפעילים את התכונה 'חיזוי תקינות הצומת' באשכול GKE, כדאי לקרוא את המגבלות הבאות:

  • בצומת צריך להשתמש בסוגי מכונות A4X Max,‏ A4X,‏ A4 או A3 Ultra.

  • הצומת צריך להשתמש במודל הקצאת משאבים שמוגבל להזמנה.

הסבר על חיזוי תקינות הצמתים

כשמפעילים חיזוי של תקינות הצמתים באשכול GKE, ‏ CronJob מחיל את התווית gke.google.com/recommended-to-run-large-training-workload על כל צומת באשכול. ה-CronJob מגדיר את ערכי התוויות לפי הסבירות שהמצב של ה-GPU בצומת יתדרדר, ומעדכן את הערכים האלה כל 10 דקות. אם ערך התווית הוא true, הצומת תקין. אחרת, אם ערך התווית הוא false, סביר שהביצועים של הצומת ירדו במהלך חמש השעות הבאות. ערך התווית יכול להשתנות לאורך זמן בהתאם למצב ה-GPU של הצומת.

אם אתם רואים שסביר להניח שביצועי הצומת ירדו, אתם יכולים לבצע אחת או יותר מהפעולות הבאות:

  • הימנעות מתזמון עומסי עבודה בצומת. אפשר להגדיר את Kueue כך שלא יתזמן עומסי עבודה בצמתים שמוצג בהם הערך false, כמו שמתואר במסמך הזה.

  • דיווח על הצומת כפגום אם יש בעיות בצומת, כמו טמפרטורת GPU גבוהה או ביצועים איטיים, אפשר לדווח על הצומת כפגום. הפעולה הזו מפעילה אירוע תחזוקה של המארח עבור הצומת, כך שהצומת יהיה זמין שוב להרצת עומסי עבודה אחרי שהתחזוקה תסתיים. הוראות מפורטות זמינות במאמר דיווח על מארחים פגומים דרך GKE.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
  • כדי להתחבר לאשכול, מריצים את הפקודה הבאה:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    מחליפים את CLUSTER_NAME בשם האשכול.

הפעלת חיזוי של תקינות הצמתים

אחרי שמתכוננים לתזמן עומסי עבודה באשכול GKE באמצעות TAS, אפשר להפעיל את התכונה 'חיזוי תקינות הצמתים' באופן הבא:

  1. פריסת תיוג אוטומטי של צמתים

  2. עדכון הגדרות העבודה

  3. אימות התיוג של הצמתים

פריסת תיוג אוטומטי של צמתים

כדי לפרוס תיוג אוטומטי של צמתים לחיזוי תקינות הצמתים באשכול GKE, מבצעים את השלבים הבאים:

  1. משכפלים את מאיצי החומרה במאגר GKE git:

    git clone https://github.com/GoogleCloudPlatform/container-engine-accelerators.git
    
  2. עוברים לספרייה topology-scheduler:

    cd container-engine-accelerators/gpudirect-tcpxo/topology-scheduler
    
  3. יוצרים את ה-ConfigMap של Kubernetes שמכיל את סקריפטים של Python‏, schedule-daemon.py ו-label-nodes-daemon.py, שמבצעים שאילתות לגבי ציוני הבריאות:

    kubectl create configmap predictor-scheduler-scripts \
        --namespace=kube-system \
        --from-file=schedule-daemon.py=schedule-daemon.py \
        --from-file=label-nodes-daemon.py=label-nodes-daemon.py
    
  4. מחילים את ההגדרה של חשבון השירות כדי לתת ל-CronJob את ההרשאות הנדרשות (קריאת מדדים של Monitoring ועדכון של אובייקטים של Node):

    kubectl apply -f service-account.yaml
    
  5. פורסים את DaemonSet שמתזמן את משימת התיוג של הצומת:

    kubectl apply -f label-nodes-daemon.yaml
    

עדכון ההגדרה של המשימה

כדי להפעיל חיזוי של תקינות הצומת כשמשתמשים ב-Kueue, צריך לעדכן את הגדרות ה-Job כדי לבדוק את ערכי החיזוי של התקינות, ואם נתמכים, את דרישות הטופולוגיה לפני שמתחילים בעומס עבודה.

כדי לעדכן את הגדרות המשימה ולהפעיל את התכונה 'חיזוי תקינות הצומת', מוסיפים את השדות הבאים לשדה spec:

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: gke.google.com/recommended-to-run-large-training-workload
            operator: NotIn
            values:
            - "False"
...

אימות התיוג של הצמתים

אחרי שה-CronJob פועל בפעם הראשונה, בערך 10 דקות אחרי הפריסה, בודקים אם התווית gke.google.com/recommended-to-run-large-training-workload הוחלה על הצמתים.

כדי לראות רשימה של צמתים שחלה עליהם התווית gke.google.com/recommended-to-run-large-training-workload:

kubectl get nodes -L gke.google.com/recommended-to-run-large-training-workload

ערך התווית יכול להיות אחד מהערכים הבאים:

  • true: הצומת צפוי להיות תקין בחמש השעות הקרובות.

  • false: סביר שהביצועים של הצומת יתדרד במהלך חמש השעות הבאות. אם הגדרתם את הגדרת העבודה כמו שמתואר במסמך הזה, Kueue לא יתזמן עומסי עבודה חדשים בצומת.

המאמרים הבאים