ניהול עומסי עבודה של קונטיינרים ב-GPU

אתם יכולים להפעיל ולנהל משאבי יחידת עיבוד גרפי (GPU) במאגרי התמונות שלכם. לדוגמה, יכול להיות שתעדיפו להריץ מחברות (notebooks) של בינה מלאכותית (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 האלה בקונטיינר, צריך לבצע את השלבים הבאים:

  1. מוודאים שלקלאסטר 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) זמינה במאמר סוגי מכונות של צומתי אשכול.

  2. מוסיפים את השדות .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.
    
  3. כדי שהקונטיינרים יוכלו לגשת ל-GPU, צריך להעניק להם הרשאות נוספות. לכל קונטיינר שמבקש GPU, מוסיפים את ההרשאות הבאות למפרט הקונטיינר:

    # Several lines of code are omitted here.
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    # Several lines of code are omitted here.
    
  4. החלת קובץ המניפסט של מאגר התגים:

    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.

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