הגדרה ושימוש ב-GPU של NVIDIA

היבט הוספת צומת משלכם של Google Distributed Cloud (תוכנה בלבד) בשרת פיזי מאפשר לכם לנצל את החומרה המתקדמת שלכם, כולל מכונות עם מעבדי GPU, כדי להשיג את הביצועים והגמישות הטובים ביותר עבור האשכולות שלכם.

במאמר הזה מוסבר איך להתקין את NVIDIA GPU Operator ולהשתמש בו כדי להגדיר אשכולות Bare Metal שנוצרו באמצעות Google Distributed Cloud לשימוש עם GPU של NVIDIA.

ה-NVIDIA GPU Operator משתמש ב-Operator Framework כדי לנהל את רכיבי התוכנה של NVIDIA שנדרשים להקצאה ולניהול של מכשירי GPU. מומלץ להשתמש באופרטור NVIDIA GPU כדי ליהנות מהגמישות ומהיתרונות הבאים:

  • בחירה של סוג ה-GPU: התוכנה בלבד של Google Distributed Cloud תואמת למגוון רחב של סוגי GPU שנתמכים על ידי הגרסה העדכנית של NVIDIA GPU Operator.

  • בחירה של מערכת הפעלה נתמכת: צמתי עובדים באשכול יכולים להשתמש בכל מערכת הפעלה נתמכת עם מעבדי GPU של NVIDIA, ויש לכם אפשרות להשתמש במנהלי התקנים (דרייברים) של GPU שהותקנו מראש או בהתקנה דינמית של דרייברים באמצעות NVIDIA GPU Operator.

  • בחירה בין מודלים של פריסה: אתם יכולים להשתמש ב-GPU של NVIDIA בכל סוג של אשכול עם צמתי עבודה: אשכולות משתמשים, אשכולות עצמאיים או אשכולות היברידיים.

הדף הזה מיועד לאדמינים ולמפעילים בתחום ה-IT שמנהלים את מחזור החיים של תשתית טכנולוגית בסיסית. מידע נוסף על תפקידים נפוצים ודוגמאות למשימות שאנחנו מתייחסים אליהן בתוכן זמין במאמר תפקידי משתמשים ומשימות נפוצים ב-GKE. Google Cloud

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

לפני שמבצעים את השלבים שמפורטים בקטעים הבאים, צריך לוודא שהדרישות הבאות מוכנות:

  • קלאסטר תפעולי: צריך לוודא שיש לכם קלאסטר פיזי שנוצר באמצעות Google Distributed Cloud.

  • NVIDIA GPUs: מוודאים שיחידות ה-GPU של NVIDIA מותקנות בצמתי העובדים של האשכול. בקטע הבא בנושא התקנת NVIDIA GPU Operator מפורטים שלבים לאימות התקנת ה-GPU וזיהויו על ידי מערכת ההפעלה.

  • גרסת דרייבר תואמת של NVIDIA: גרסת הדרייבר של NVIDIA שבה אתם משתמשים צריכה להיות תואמת ל-GPU, למערכת ההפעלה ולגרסת CUDA שבה האפליקציות שלכם משתמשות. יש לכם את האפשרויות הבאות להתקנת דרייבר של NVIDIA:

    • כדי להתקין את הגרסה המתאימה של מנהל ההתקן (דרייבר) של NVIDIA GPU, צריך להשתמש ב-NVIDIA GPU Operator, כמו שמתואר בקטעים הבאים.

    • משתמשים בדרייבר של NVIDIA שהותקן מראש בקובץ אימג' של המערכת.

    • כדי להתקין את הדרייבר של NVIDIA באופן ידני, פועלים לפי ההוראות שבמדריך למתחילים להתקנת דרייבר של NVIDIA.

  • Helm מגרסה 3.0.0 ואילך: מתקינים את ממשק שורת הפקודה של Helm לניהול חבילות בתחנת העבודה של האדמין. משתמשים ב-Helm כדי להתקין את NVIDIA GPU Operator. אפשר להריץ את הפקודות הבאות כדי להוריד ולהתקין את כלי שורת הפקודה של Helm:

    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
      && chmod 700 get_helm.sh \
      && ./get_helm.sh
    

התקנה ואימות של NVIDIA GPU Operator

השלבים הבאים מנחים אתכם בתהליך ההתקנה של NVIDIA GPU Operator באשכול Bare Metal, ועוזרים לכם לוודא שהוא פועל עם ה-GPU שלכם:

  1. כדי לקבל רשימה של אפיקי PCI במערכת עם השם NVIDIA, מריצים את הפקודה הבאה במכשירי GPU שמחוברים דרך PCIe (‏Peripheral Component Interconnect Express):

    sudo lspci | grep NVIDIA
    

    הפלט אמור להיראות כך:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. אתם יכולים להשתמש בכלי שורת הפקודה של NVIDIA System Management Interface ‏ (nvidia-smi) בצומת נתון כדי לקבל מידע מפורט יותר על מכשירי ה-GPU:

    nvidia-smi
    

    הפלט אמור להיראות כך:

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    
  3. מוסיפים את מאגר NVIDIA Helm בתחנת העבודה של האדמין:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  4. מתקינים את NVIDIA GPU Operator.

    כשמתקינים את NVIDIA GPU Operator, יש שלוש וריאציות בסיסיות של פקודות:

    • מתקינים את NVIDIA GPU Operator עם הגדרות ברירת המחדל:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true
      
    • משתמשים בדגל --set כדי להעביר קבוצה של צמדי מפתח/ערך שמופרדים בפסיקים, כדי לציין אפשרויות הגדרה:

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true \
          --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE
      

      רשימה מפורטת של אפשרויות ההגדרה מופיעה במאמר Common Chart Customization Options במסמכי התיעוד של NVIDIA. מידע על הלוגיסטיקה של השימוש בדגל --set מופיע במאמר הפורמט והמגבלות של --set במסמכי התיעוד של Helm.

    • אם כבר התקנתם את הדרייבר של NVIDIA GPU בצמתים, צריך להשבית את התקנת הדרייבר:

      כברירת מחדל, NVIDIA GPU Operator פורס את מנהל ההתקן העדכני או שצוין של ה-GPU בכל צמתי העובדים של ה-GPU באשכול. כדי להשתמש בקונטיינר של מנהל ההתקן (דרייבר) של NVIDIA GPU, כל צמתי העובדים עם GPU צריכים להריץ את אותה גרסת מערכת הפעלה. כדי לעקוף את הבעיה, אפשר להתקין ידנית דרייברים של GPU בצמתים ולהריץ את הפקודה helm install עם --set driver.enabled=false כדי למנוע את הפריסה של דרייברים על ידי NVIDIA GPU Operator.

      helm install --wait --generate-name \
          -n gpu-operator --create-namespace \
          nvidia/gpu-operator \
          --set cdi.enabled=true \
          --set cdi.default=true \
          --set driver.enabled=false
      

    תרחישי פריסה נפוצים ופקודות לדוגמה מופיעים במאמר תרחישי פריסה נפוצים במסמכי העזרה של NVIDIA.

  5. אימות ייצוא משאבי ה-GPU:

    אחרי שמפעילים את NVIDIA GPU Operator עם מנהל התקנים (דרייבר) של GPU ותוסף למכשיר, צריך לוודא שמספר ה-GPU מוגדר בצורה נכונה בשדה Allocatable של משאב הצומת.

    kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
    

    מחליפים את GPU_NODE_NAME בשם של מכונת הצומת עם ה-GPU שאתם בודקים.

    הפלט אמור להיראות כך:

    Allocatable:
      cpu:                127130m
      ephemeral-storage:  858356868519
      hugepages-1Gi:      0
      hugepages-2Mi:      0
      memory:             509648288Ki
      nvidia.com/gpu:     1
      pods:               250
    
  6. כדי לוודא שה-GPU פועל, מריצים את עבודת ה-GPU לדוגמה הבאה, שמריצה את הפקודה nvidia-smi:

    export NODE_NAME=GPU_NODE_NAME
    
    cat <<EOF | kubectl create --kubeconfig=CLUSTER_KUBECONFIG -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test-job-gpu
    spec:
      template:
        spec:
          runtimeClassName: nvidia
          containers:
          - name: nvidia-test
            image: nvidia/cuda:12.0.0-base-ubuntu22.04
            command: ["nvidia-smi"]
            resources:
              limits:
                nvidia.com/gpu: 1
          nodeSelector:
            kubernetes.io/hostname: ${NODE_NAME}
          restartPolicy: Never
    EOF
    

    מחליפים את CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של האשכול.

  7. בודקים את היומנים של פלט עבודת הדגימה:

    kubectl logs job/test-job-gpu --kubeconfig=CLUSTER_KUBECONFIG
    

    הפלט אמור להיראות כך:

    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.183.01             Driver Version: 535.183.1    CUDA Veersion 12.2     |
    |-----------------------------------------+----------------------+----------------------|
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  NVIDIA A100 80GB PCIe          Off | 00000000:25:00.0 Off |                    0 |
    | N/A   30C    P0              44W / 300W |      0MiB / 81920MiB |      0%      Default |
    |                                         |                      |             Disabled |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+
    

מגבלות

ההגבלות הבאות חלות כשמשתמשים ב-NVIDIA GPU Operator עם אשכולות שנוצרו באמצעות Google Distributed Cloud:

  • אם מתקינים גרסה עדכנית של NVIDIA GPU Operator, יכול להיות שההגדרות של containerd שהוחלו על ידי האופרטור יימחקו במהלך עדכונים או שדרוגים של אשכולות או של מאגרי צמתים.

  • משתמשים בממשק של מכשיר קונטיינר (CDI) לעומסי עבודה של GPU. בגרסאות קודמות של Google Distributed Cloud שמשתמשות ב-containerd 1.6, יכול להיות שחלק מהיכולות של CDI לא יהיו זמינות.

  • מאגרי צמתים של מאזן עומסים מריצים אוטומטית משימת עדכון כל 7 ימים. הפעולה הזו מחליפה את ההגדרות של containerd, כולל אלה שנוספו על ידי NVIDIA GPU Operator.

שיטות מומלצות

כדי לצמצם את הסיכוי לקונפליקטים ולבעיות בהגדרות של NVIDIA, מומלץ לנקוט באמצעי הזהירות הבאים:

  • לפני שמשדרגים או מעדכנים את האשכול או את מאגרי הצמתים, צריך לגבות את קובץ ההגדרות של containerd‏, /etc/containerd/config.toml. הקובץ הזה מכיל את הגדרות זמן הריצה של nvidia. אחרי שהשדרוג או העדכון מסתיימים בהצלחה, צריך לשחזר את הקובץ config.toml ולהפעיל מחדש את containerd כדי ששינויים בהגדרות ייכנסו לתוקף.

  • כדי למנוע בעיות או התנגשויות אפשריות בהגדרת containerd, אל תשתמשו בצמתי GPU כצמתי מאזן עומסים (loadBalancer.nodePoolSpec).

תמיכה

אם אתם צריכים עזרה נוספת בנוגע לשימוש ב-GPU עם Google Distributed Cloud, אתם יכולים לפנות אל תמיכת הלקוחות של Cloud.

אם יש בעיות בהגדרה או בשימוש בחומרת GPU במערכת ההפעלה, אפשר לפנות ישירות לספק החומרה או לתמיכה של NVIDIA, אם רלוונטי.

דעתך חשובה לנו.