אתם יכולים להפעיל ולנהל משאבים של מעבד גרפי (GPU) במאגרי התמונות שלכם. לדוגמה, יכול להיות שתעדיפו להריץ מחברות של בינה מלאכותית (AI) ולמידת מכונה (ML) בסביבת GPU. כדי להריץ עומסי עבודה של קונטיינרים של GPU, צריך שיהיה לכם אשכול Kubernetes שתומך במכשירי GPU. התמיכה ב-GPU מופעלת כברירת מחדל באשכולות Kubernetes שמוקצות להם מכונות GPU.
המסמך הזה מיועד למפתחי אפליקציות בקבוצת מפעיל האפליקציה, שאחראים ליצירת עומסי עבודה של אפליקציות בארגון שלהם. מידע נוסף מופיע במאמרי העזרה בנושא קהלים ב-GDC עם פער אבטחה.
לפני שמתחילים
כדי להשלים את המשימות שמתוארות במאמר הזה, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.
שליחת בקשה לתפקידי IAM
כדי לקבל את ההרשאות שדרושות לפריסת מעבדי GPU במאגרי התגים, צריך להיות לכם תפקיד ספציפי. התפקידים שאתם צריכים תלויים בסוג האשכול שבו אתם עובדים: אשכול שיתופי בהיקף הארגון או אשכול רגיל בהיקף הפרויקט. מידע נוסף זמין במאמר בנושא הגדרות של אשכול Kubernetes.
תפקידים משותפים באשכול
כדי לאמת מאגרי צמתים עם תמיכה ב-GPU ולפרוס עומסי עבודה של GPU באשכול משותף, צריך לבקש את התפקידים הבאים בהתאם למשימה שרוצים לבצע:
- User Cluster Admin (
user-cluster-admin): יצירה, מחיקה, עריכה או צפייה במשאבים של אשכול משותף שמתארח בשרת של Management API. התפקיד הזה מאפשר לבדוק את יחידות ה-GPU באשכול המשותף, והוא לא קשור למרחב השמות של הפרויקט. - Namespace Admin (
namespace-admin): יצירה, מחיקה, עריכה או הצגה של המשאבים של אשכול משותף שמתארח בפרויקט. התפקיד הזה מאפשר לכם לפרוס עומסי עבודה של GPU באשכול רגיל, והוא קשור למרחב השמות של הפרויקט.
תפקידים רגילים באשכול
כדי לוודא שמאגרי הצמתים תומכים ב-GPU ולפרוס עומסי עבודה של GPU באשכול רגיל, צריך לבקש מהאדמין של IAM בפרויקט להקצות לכם את התפקידים הבאים:
- אדמין רגיל של אשכול (
standard-cluster-admin): יצירה, מחיקה, עריכה או צפייה במשאבים של אשכול רגיל שמארח בשרת של Management API. התפקיד הזה מאפשר לכם לבדוק את יחידות ה-GPU באשכול המשותף, והוא קשור למרחב השמות של הפרויקט. - מפתח אשכול (
cluster-developer): יצירה, מחיקה, עריכה או צפייה באשכול רגיל. התפקיד הזה מאפשר לכם לפרוס עומסי עבודה של GPU באשכול רגיל על ידי מתן גישה לממשקי ה-API של מישור הנתונים שמתארחים באשכול הרגיל. התפקיד הזה משויך למרחב השמות של הפרויקט.
הכנת הסביבה
כדי להגדיר קונטיינר לשימוש במשאבי GPU, צריך לוודא שיש לכם את המשאבים הבאים:
אשכול Kubernetes עם סוג מכונה של GPU. מידע נוסף זמין בקטע בנושא כרטיסי GPU נתמכים.
מאתרים את שם אשכול Kubernetes או שואלים חבר בקבוצת האדמינים של הפלטפורמה מה שם האשכול.
נכנסים לחשבון ויוצרים את קובץ ה-kubeconfig לאשכול Kubernetes.
משתמשים בנתיב kubeconfig של אשכול Kubernetes כדי להחליף את הערך
KUBERNETES_CLUSTER_KUBECONFIGבהוראות האלה.נכנסים לחשבון ויוצרים את קובץ ה-kubeconfig עבור שרת ה-API לניהול אזורי שמארח את אשכול Kubernetes. צריך להשתמש בנתיב הזה כדי להחליף את
MANAGEMENT_API_SERVERבהוראות האלה.נכנסים לחשבון ויוצרים את קובץ ה-kubeconfig עבור אשכול התשתית של הארגון באזור שמיועד לאירוח של יחידות ה-GPU.
הגדרת קונטיינר לשימוש במשאבי GPU
כדי להשתמש במעבדי ה-GPU האלה בקונטיינר, צריך לבצע את השלבים הבאים:
מוודאים שלקלאסטר Kubernetes יש מאגרי צמתים שתומכים ב-GPU:
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVERמחליפים את מה שכתוב בשדות הבאים:
-
KUBERNETES_CLUSTER_NAME: שם האשכול. -
KUBERNETES_CLUSTER_NAMESPACE: מרחב השמות של האשכול. במקרה של אשכולות משותפים, משתמשים במרחב השמותplatform. באשכולות רגילים, משתמשים במרחב השמות של הפרויקט של האשכול. -
MANAGEMENT_API_SERVER: נתיב kubeconfig של שרת ה-API האזורי שבו מתארח אשכול Kubernetes. אם עדיין לא יצרתם קובץ kubeconfig לשרת ה-API באזור היעד, תוכלו לעיין בקטע כניסה.
הפלט הרלוונטי אמור להיראות כך:
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.רשימה מלאה של סוגי מכונות GPU נתמכים ופרופילים של Multi-Instance GPU (MIG) זמינה במאמר סוגי מכונות של צומתי אשכול.
-
מוסיפים את השדות
.containers.resources.requestsו-.containers.resources.limitsלמפרט הקונטיינר. כל שם משאב שונה בהתאם לסוג המכונה. כדי למצוא את שמות משאבי ה-GPU, צריך לבדוק את הקצאת משאבי ה-GPU.לדוגמה, מפרט הקונטיינר הבא מבקש שלוש מחיצות של GPU מצומת
a2-ultragpu-1g-gdc:# Several lines of code are omitted here. containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 # Several lines of code are omitted here.כדי לגשת ל-GPU, צריך גם לתת הרשאות נוספות לקונטיינרים. לכל קונטיינר שמבקש GPU, מוסיפים את ההרשאות הבאות למפרט הקונטיינר:
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.מחילים את קובץ המניפסט של מאגר התגים:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_MANIFEST_FILE: קובץ המניפסט של YAML עבור עומס העבודה של הקונטיינר. -
KUBERNETES_CLUSTER_NAMESPACE: מרחב השמות של האשכול. במקרה של אשכולות משותפים, משתמשים במרחב השמותplatform. באשכולות רגילים, משתמשים במרחב השמות של הפרויקט של האשכול. -
KUBERNETES_CLUSTER_KUBECONFIG: נתיב kubeconfig של האשכול.
-
בדיקת הקצאת משאבי ה-GPU
כדי לבדוק את הקצאת משאבי ה-GPU, משתמשים בפקודה הבאה:
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGמחליפים את מה שכתוב בשדות הבאים:
-
NODE_NAME: הצומת שמנהל את יחידות ה-GPU שרוצים לבדוק. -
KUBERNETES_CLUSTER_KUBECONFIG: נתיב kubeconfig של האשכול.
הפלט הרלוונטי אמור להיראות כך:
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.-
חשוב לשים לב לשמות המשאבים של יחידות ה-GPU. צריך לציין אותם כשמגדירים קונטיינר לשימוש במשאבי GPU.