אתם יכולים להפעיל ולנהל משאבים של מעבד גרפי (GPU) במאגרי התמונות שלכם. לדוגמה, יכול להיות שתעדיפו להריץ מחברות של בינה מלאכותית (AI) ולמידת מכונה (ML) בסביבת GPU. תמיכה ב-GPU מופעלת כברירת מחדל במכשיר Google Distributed Cloud (GDC) air-gapped.
לפני שמתחילים
כדי להשלים את המשימות שמתוארות במאמר הזה, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.
שליחת בקשה לתפקידי IAM
כדי ליצור, למחוק, לערוך או להציג את המשאבים באשכול Kubernetes, צריך לבקש מאדמין ה-IAM בארגון להקצות לכם את התפקיד אדמין של מרחב שמות (namespace-admin) במרחב השמות של הפרויקט. התפקיד הזה מאפשר לפרוס עומסי עבודה של GPU במרחב השמות של הפרויקט.
הכנת הסביבה
נכנסים לחשבון ויוצרים את קובץ ה-kubeconfig לאשכול Kubernetes בשרת פיזי.
משתמשים בנתיב kubeconfig של אשכול Kubernetes כדי להחליף את הערך
CLUSTER_KUBECONFIGבהוראות האלה.
הגדרת קונטיינר לשימוש במשאבי GPU
כדי להשתמש ב-GPU בקונטיינר, צריך לבצע את השלבים הבאים:
מוודאים שהצמתים באשכול Kubernetes תומכים בהקצאת משאבי ה-GPU:
kubectl describe nodes NODE_NAMEמחליפים את
NODE_NAMEבצומת שמנהל את המעבדים הגרפיים שרוצים לבדוק.הפלט הרלוונטי אמור להיראות כך:
Capacity: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 Allocatable: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1מוסיפים את השדות
.containers.resources.requestsו-.containers.resources.limitsלמפרט של הקונטיינר. מכיוון שקלאסטר Kubernetes מוגדר מראש עם מכונות GPU, ההגדרה זהה לכל עומסי העבודה:... containers: - name: CONTAINER_NAME image: CONTAINER_IMAGE resources: requests: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 limits: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 ...מחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_NAME: השם של הקונטיינר. -
CONTAINER_IMAGE: קובץ האימג' של הקונטיינר שאליו רוצים לגשת למכונות ה-GPU. חובה לכלול את הנתיב של מאגר התמונות ואת הגרסה של התמונה, כמוREGISTRY_PATH/hello-app:1.0.
-
כדי לגשת ל-GPU, צריך גם לתת הרשאות נוספות לקונטיינרים. לכל קונטיינר שמבקש GPU, מוסיפים את ההרשאות הבאות למפרט הקונטיינר:
... securityContext: seLinuxOptions: type: unconfined_t ...מחילים את קובץ המניפסט של מאגר התגים:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_MANIFEST_FILE: קובץ ה-YAML של המשאב המותאם אישית של עומס העבודה של הקונטיינר. -
NAMESPACE: מרחב השמות של הפרויקט שבו רוצים לפרוס את עומסי העבודה של הקונטיינרים. -
CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של אשכול Kubernetes במתכת חשופה שבו אתם פורסים עומסי עבודה של קונטיינרים.
-
מוודאים שה-Pods פועלים ומשתמשים ביחידות ה-GPU:
kubectl get pods -A | grep CONTAINER_NAME \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIGהפלט הרלוונטי אמור להיראות כך:
Port: 80/TCP Host Port: 0/TCP State: Running Ready: True Restart Count: 0 Limits: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 Requests: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1