אתם יכולים להפעיל ולנהל משאבים של יחידות עיבוד גרפיות (GPU) בקונטיינרים. לדוגמה, יכול להיות שתעדיפו להריץ Notebooks של בינה מלאכותית (AI) ולמידת מכונה (ML) בסביבת GPU. כדי להריץ עומסי עבודה של קונטיינרים ב-GPU, צריך אשכול Kubernetes שתומך במכשירי GPU. התמיכה ב-GPU מופעלת כברירת מחדל באשכולות Kubernetes שהוקצו להם מכונות GPU.
המסמך הזה מיועד למפתחי אפליקציות בקבוצת מפעילי האפליקציות, שאחראים על יצירת עומסי עבודה של אפליקציות בארגון. מידע נוסף מופיע במאמר קהלים למסמכי תיעוד של GDC עם air gap.
לפני שמתחילים
כדי להשלים את המשימות שבמסמך הזה, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.
בקשת תפקידים ב-IAM
כדי לקבל את ההרשאות שנדרשות לפריסת GPUs בקונטיינרים, צריך תפקידים ספציפיים. התפקידים שאתם צריכים תלויים בסוג האשכול שאתם עובדים איתו: אשכול משותף ברמת הארגון או אשכול רגיל ברמת הפרויקט. מידע נוסף זמין במאמר הגדרות של אשכולות Kubernetes.
תפקידים משותפים באשכול
כדי לאמת מאגרי צמתים שנתמכים על ידי GPU ולפרוס עומסי עבודה של GPU באשכול משותף, צריך לבקש את התפקידים הבאים בהתאם למשימה שרוצים לבצע:
- User Cluster Admin (
user-cluster-admin): יצירה, מחיקה, עריכה או הצגה של המשאבים של אשכול משותף שמתארח בשרת ה-API לניהול. התפקיד הזה מאפשר לבדוק את יחידות ה-GPU באשכול המשותף, והוא לא קשור למרחב השמות של הפרויקט. - אדמין של מרחב שמות (
namespace-admin): יצירה, מחיקה, עריכה או הצגה של המשאבים של אשכול משותף שמתארח בפרויקט. התפקיד הזה מאפשר לפרוס עומסי עבודה של GPU באשכול רגיל, והוא מקושר למרחב השמות של הפרויקט.
תפקידים רגילים באשכול
כדי לאמת מאגרי צמתים שנתמכים על ידי GPU ולפרוס עומסי עבודה של GPU באשכול רגיל, בקשו מהאדמין של הפרויקט ב-IAM להקצות לכם את התפקידים הבאים:
- אדמין של אשכול רגיל (
standard-cluster-admin): יצירה, מחיקה, עריכה או צפייה במשאבים של אשכול רגיל שמתארח בשרת ה-API לניהול. התפקיד הזה מאפשר לכם לבדוק את יחידות ה-GPU באשכול המשותף, והוא מקושר למרחב השמות של הפרויקט. - מפתח אשכולות (
cluster-developer): יצירה, מחיקה, עריכה או הצגה של אשכול רגיל. התפקיד הזה מאפשר לפרוס עומסי עבודה של GPU באשכול רגיל, על ידי מתן גישה לממשקי ה-API של מישור הנתונים שמתארחים באשכול הרגיל. התפקיד הזה קשור למרחב השמות של הפרויקט.
הכנת הסביבה
כדי להגדיר קונטיינר לשימוש במשאבי GPU, צריך לוודא שיש לכם את המשאבים הבאים:
אשכול Kubernetes עם סוג מכונה של GPU. מידע נוסף מופיע בקטע כרטיסי GPU נתמכים.
מאתרים את שם האשכול של Kubernetes, או שואלים חבר בקבוצת האדמינים של הפלטפורמה מה שם האשכול.
נכנסים לחשבון ויוצרים את קובץ kubeconfig לאשכול Kubernetes.
בהוראות הבאות, מחליפים את
KUBERNETES_CLUSTER_KUBECONFIGבנתיב kubeconfig של אשכול Kubernetes.נכנסים לחשבון ויוצרים את קובץ kubeconfig לשרת ה-API לניהול אזורי שמארח את אשכול Kubernetes. השתמשו בנתיב הזה כדי להחליף את
MANAGEMENT_API_SERVERבהוראות האלה.נכנסים לחשבון ויוצרים את קובץ kubeconfig של אשכול התשתית של הארגון באזור שבו רוצים לארח את ה-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: הצומת שמנהל את המעבדים הגרפיים שרוצים לבדוק. -
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.