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

אחרי שיוצרים אשכול Google Kubernetes Engine‏ (GKE) שעבר אופטימיזציה ל-AI, אפשר להפעיל חיזוי של תקינות הצמתים. אם אתם מתכננים לתזמן עומסי עבודה באמצעות תזמון שמודע לטופולוגיה (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.

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

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

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת 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. משכפלים את מאגר ה-Git של מאיצי החומרה ב-GKE:

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

    cd container-engine-accelerators/gpudirect-tcpxo/topology-scheduler
    
  3. יוצרים את Kubernetes ConfigMap שמכיל את סקריפטים של 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 לא יתזמן עומסי עבודה חדשים בצומת.

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