ניהול עומסי עבודה ב-GPU

בדף הזה מוסבר איך להפעיל ולנהל עומסי עבודה של מעבדים גרפיים (GPU) ב-Google Distributed Cloud במודל מחובר. כדי להשתמש בפונקציונליות הזו, צריך להגדיר חומרה מחוברת של Distributed Cloud שכוללת יחידות GPU. התמיכה ב-GPU מושבתת כברירת מחדל. צריך להפעיל באופן מפורש תמיכה ב-GPU באשכול שלכם ב-Distributed Cloud במודל מחובר. חשוב לזכור ששרתי Distributed Cloud לא תומכים בעומסי עבודה של GPU.

כדי לתכנן ולהזמין תצורה כזו, בוחרים בתצורה 2 במסמכים הבאים:

אם המתלה המחובר של Distributed Cloud כולל מעבדי GPU, אתם יכולים להגדיר את עומסי העבודה המחוברים של Distributed Cloud כך שישתמשו במשאבי GPU.

עומסי עבודה מחוברים של Distributed Cloud יכולים לפעול בקונטיינרים ובמכונות וירטואליות:

  • עומסי עבודה של GPU שפועלים בקונטיינרים. כשמפעילים תמיכה ב-GPU, כל משאבי ה-GPU באשכול המחובר של Distributed Cloud מוקצים בהתחלה לעומסי עבודה שפועלים במאגרי מידע. מנהל ההתקן של ה-GPU להרצת עומסי עבודה בקונטיינרים שמבוססים על GPU כלול ב-Distributed Cloud Connected. בכל מאגר, ספריות GPU מותקנות בנתיב /opt/nvidia.

  • עומסי עבודה של GPU שפועלים במכונות וירטואליות. כדי להריץ עומס עבודה מבוסס-GPU במכונה וירטואלית, צריך להקצות משאבי GPU במכונות וירטואליות בצומת המחובר של Distributed Cloud, כמו שמתואר בהמשך הדף הזה. הפעולה הזו מדלגת על מנהל ההתקן (דרייבר) המובנה של ה-GPU ומעבירה את ה-GPU ישירות למכונות וירטואליות. צריך להתקין באופן ידני מנהל התקן תואם של GPU במערכת ההפעלה האורחת של כל מכונה וירטואלית. בנוסף, אתם צריכים לוודא שיש לכם את כל הרישיונות שנדרשים להפעלת מנהלי התקנים מיוחדים של GPU במכונות הווירטואליות.

כדי לוודא שיש יחידות GPU בצומת שמחובר ל-Distributed Cloud, צריך לוודא שיש לצומת את התווית vm.cluster.gke.io.gpu=true. אם התווית לא מופיעה בצומת, המשמעות היא שלא מותקנים כרטיסי GPU במכונה הפיזית המחוברת ל-Distributed Cloud.

הפעלת תמיכה ב-GPU

כדי להפעיל תמיכה ב-GPU בעומסי העבודה, צריך ליצור או לשנות את המשאב המותאם אישית VMRuntime שמכיל את הפרמטר enableGPU עם הערך true, ואז להחיל אותו על האשכול המחובר של Distributed Cloud. לדוגמה:

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Enable GPU support
  enableGPU: true

בהתאם לסוג האשכול שבו רוצים להפעיל את VM Runtime במערכת המשנה של המכונה הווירטואלית ב-GDC, מבצעים אחת מהפעולות הבאות:

  • במקרים של אשכולות במישור הבקרה של Cloud שבהם עדיין לא הפעלתם את VM Runtime במערכת המשנה של המכונה הווירטואלית ב-GDC, אתם צריכים ליצור את המשאב VMRuntime באופן ידני.
  • במקרה של אשכולות של מישור הבקרה ב-Cloud שבהם כבר הפעלתם את VM Runtime במערכת המשנה של המכונה הווירטואלית ב-GDC, אתם צריכים לערוך את משאב VMRuntime הקיים.
  • במקרים של אשכולות של מישור בקרה מקומי, צריך לערוך את משאב VMRuntime הקיים.

אותו משאב VMRuntime גם מגדיר את VM Runtime בתמיכה של GDC באשכול שלכם באמצעות הפרמטר enable. חשוב להגדיר את שני הפרמטרים בהתאם לצורכי עומס העבודה שלכם. לא צריך להפעיל את VM Runtime בתמיכה של GDC כדי להפעיל תמיכה ב-GPU באשכול שמחובר ל-Distributed Cloud.

בטבלה הבאה מפורטות ההגדרות האפשריות.

ערך של enable ערך של enableGPU ההגדרה שמתקבלת
false false עומסי העבודה פועלים רק במאגרי מידע, ואי אפשר להשתמש במשאבי GPU.
false true עומסי עבודה פועלים רק בקונטיינרים ויכולים להשתמש במשאבי GPU.
true true

עומסי עבודה יכולים לפעול במכונות וירטואליות ובקונטיינרים.

שני סוגי העומסים יכולים להשתמש במשאבי GPU.

true false

עומסי עבודה יכולים לפעול במכונות וירטואליות ובקונטיינרים.

אף אחד מסוגי עומסי העבודה לא יכול להשתמש במשאבי GPU.

אימות שהתמיכה ב-GPU הופעלה

כדי לוודא שתמיכת ה-GPU הופעלה באשכול, משתמשים בפקודה הבאה:

kubectl get pods --namespace vm-system

הפקודה מחזירה פלט שדומה לדוגמה הבאה:

NAME                                         READY   STATUS     RESTARTS  AGE
...
gpu-controller-controller-manager-vbv4w      2/2     Running    0         31h
kubevirt-gpu-dp-daemonset-gxj7g              1/1     Running    0         31h
nvidia-gpu-dp-daemonset-bq2vj                1/1     Running    0         31h
...

בפלט, אפשר לוודא שרכיבי ה-Pod של בקר ה-GPU נפרסו ופועלים במרחב השמות vm-system.

הקצאת משאבי GPU

כברירת מחדל, כשמפעילים תמיכה ב-GPU באשכול מחובר של Distributed Cloud, כל משאבי ה-GPU בכל צומת באשכול מוקצים לעומסי עבודה מבוססי-קונטיינרים. כדי להתאים אישית את הקצאת משאבי ה-GPU בכל צומת, מבצעים את השלבים שבקטע הזה.

הגדרת הקצאת משאבי GPU

  1. כדי להקצות משאבי GPU בצומת שמחובר ל-Distributed Cloud, משתמשים בפקודה הבאה כדי לערוך את GPUAllocation המשאב בהתאמה אישית בצומת היעד:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    מחליפים את NODE_NAME בשם של צומת היעד ב-Distributed Cloud.

    בדוגמה הבאה, הפלט של הפקודה מציג את הקצאת משאבי ה-GPU שמוגדרת כברירת מחדל במפעל. כברירת מחדל, כל משאבי ה-GPU מוקצים לעומסי עבודה מבוססי-קונטיינרים (pod), ולא מוקצים משאבי GPU לעומסי עבודה של מכונות וירטואליות (vm):

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. מגדירים את הקצאות משאבי ה-GPU באופן הבא:

    • כדי להקצות משאב GPU לעומסי עבודה מבוססי-קונטיינר, מגדילים את הערך בשדה pod ומקטינים את הערך בשדה vm באותה כמות.
    • כדי להקצות משאב GPU לעומסי עבודה של מכונות וירטואליות, מגדילים את הערך של השדה vm ומקטינים את הערך של השדה pod באותו סכום.

    המספר הכולל של משאבי ה-GPU שהוקצו לא יכול להיות גדול ממספר מעבדי ה-GPU שמותקנים במכונה הפיזית המחוברת ל-Distributed Cloud שבה הצומת פועל. אחרת, הצומת דוחה את ההקצאה הלא חוקית.

    בדוגמה הבאה, שני משאבי GPU הוקצו מחדש מעומסי עבודה מבוססי-קונטיינרים (pod) לעומסי עבודה של מכונות וירטואליות (vm):

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    בסיום, מחילים את משאב GPUAllocation ששונה על האשכול ומחכים שהסטטוס שלו ישתנה ל-AllocationFulfilled.

בדיקת הקצאת משאבי ה-GPU

  • כדי לבדוק את הקצאת משאבי ה-GPU, משתמשים בפקודה הבאה:

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    מחליפים את NODE_NAME בשם של הצומת המחובר של Distributed Cloud.

    הפקודה מחזירה פלט שדומה לדוגמה הבאה:

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  Tesla T4
     Events:          <none>
    

הגדרת קונטיינר לשימוש במשאבי GPU

כדי להגדיר קונטיינר שפועל ב-Distributed Cloud ומחובר לשימוש במשאבי GPU, מגדירים את המפרט שלו כמו בדוגמה הבאה, ואז מחילים אותו על האשכול:

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        nvidia.com/gpu-pod-TESLA_T4: 2
        limits:
        nvidia.com/gpu-pod-TESLA_T4: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • CUDA_TOOLKIT_IMAGE: הנתיב המלא והשם של תמונת ערכת הכלים NVIDIA CUDA. הגרסה של ערכת הכלים של CUDA צריכה להיות זהה לגרסה של מנהל ההתקן של NVIDIA שפועלת באשכול המחובר של Distributed Cloud. כדי לראות את גרסת מנהל ההתקן של NVIDIA, אפשר לעיין בהערות לגבי הגרסה של Distributed Cloud. כדי למצוא את הגרסה התואמת של CUDA toolkit, אפשר לעיין בתאימות ל-CUDA.
  • NODE_NAME: השם של צומת היעד של Google Distributed Cloud במודל מחובר.

הגדרת מכונה וירטואלית לשימוש במשאבי GPU

כדי להגדיר מכונה וירטואלית שפועלת ב-Distributed Cloud ומחוברת לשימוש במשאבי GPU, צריך להגדיר את מפרט המשאבים VirtualMachine שלה כמו בדוגמה הבאה, ואז להחיל אותו על האשכול:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: nvidia.com/gpu-vm-TESLA_T4
    quantity: 2

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