בדף הזה מוסבר איך להפעיל ולנהל עומסי עבודה של מעבדים גרפיים (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
כדי להקצות משאבי 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מגדירים את הקצאות משאבי ה-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
כדי לבדוק את הקצאת משאבי ה-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