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

בדף הזה מוסבר איך לפרוס עומסי עבודה של קונטיינרים של GPU ב-Google Distributed Cloud (GDC) Sandbox AI Optimized SKU.

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

חבילת ה-SKU של ארגז החול של GDC שעברה אופטימיזציה ל-AI כוללת ארבעה מעבדי GPU מסוג NVIDIA H100 80GB HBM3 באשכול org-infra. אפשר לגשת למעבדי ה-GPU האלה באמצעות שם המשאב nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3. בקטע הזה מוסבר איך לעדכן את הגדרות הקונטיינר כדי להשתמש במעבדי ה-GPU האלה.

יחידות ה-GPU ב-SKU של GDC Sandbox AI Optimized משויכות לפרויקט שהוגדר מראש, sandbox-gpu-project. כדי להשתמש ביחידות ה-GPU, צריך לפרוס את מאגר התגים באמצעות הפרויקט הזה באשכול org-1-infra.

לפני שמתחילים

  • כדי להריץ פקודות מול אשכול התשתית של הארגון, צריך לוודא שיש לכם את קובץ ה-kubeconfig של אשכול org-1-infra, כמו שמתואר במאמר עבודה עם אשכולות:

    • להגדיר ולאמת באמצעות שורת הפקודה gdcloud, וגם
    • יוצרים את קובץ ה-kubeconfig עבור אשכול התשתית של הארגון, ומקצים את הנתיב שלו למשתנה הסביבה KUBECONFIG.
  • כדי להריץ את עומסי העבודה, צריך להקצות לכם את התפקיד sandbox-gpu-admin. כברירת מחדל, התפקיד מוקצה למשתמש platform-admin. כדי להקצות את התפקיד למשתמשים אחרים, צריך להיכנס לחשבון בתור platform-admin ולהריץ את הפקודה הבאה:

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    

הגדרת קונטיינר לשימוש במשאבי GPU

  1. מוסיפים את השדות .containers.resources.requests ו-.containers.resources.limits למפרט של הקונטיינר כדי לבקש מעבדי GPU לעומס העבודה. כל הקונטיינרים בפרויקט sandbox-gpu-project יכולים לבקש עד 4 יחידות GPU בסך הכול בכל הפרויקט. בדוגמה הבאה מוגדרת בקשה לשימוש ביחידת GPU אחת כחלק ממפרט הקונטיינר.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
    
  1. כדי לגשת ל-GPU, צריך גם לתת הרשאות נוספות לקונטיינרים. לכל מאגר תגים שמבקש מעבדי GPU, מוסיפים .containers.securityContext granting securityContext.seLinuxOptions מסוג unconfined_t למאגר התגים.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
            securityContext:
              seLinuxOptions:
                type: unconfined_t
    
  2. מחילים את קובץ המניפסט של מאגר התגים:

    kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \
        -n sandbox-gpu-project \
        --kubeconfig ${KUBECONFIG}