Create a multi-instance GPU node pool in خدمة Azure Kubernetes ‏(AKS)

يمكن تقسيم وحدات معالجة الرسومات NVIDIA معينة في ما يصل إلى سبعة مثيلات مستقلة. يحتوي كل مثيل على Stream Multiprocessor (SM) الخاص به، وهو المسؤول عن تنفيذ الإرشادات بالتوازي، وذاكرة GPU. لمزيد من المعلومات حول تقسيم GPU، راجع NVIDIA MIG.

تشرح لك هذه المقالة كيفية إنشاء تجمع عقد GPU متعدد المثيلات باستخدام حجم جهاز افتراضي متوافق مع MIG في عنقود خدمة Azure Kubernetes ‏(AKS).

المتطلبات الأساسية والقيود

  • حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب، يمكنك إنشاء حساب مجانًا.
  • تم تثبيت وتكوين Azure CLI الإصدار 2.2.0 أو بعده. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى تثبيت أو ترقية، راجع تثبيت Azure CLI.
  • عميل سطر أوامر Kubernetes، kubectl، مثبت ومكون. إذا كنت تستخدم Azure Cloud Shell، فkubectl مثبت بالفعل. إذا كنت تريد تثبيته محليا، يمكنك استخدام az aks install-cli الأمر .
  • تم تثبيت Helm v3 وتكوينه. لمزيد من المعلومات، راجع تثبيت Helm.
  • يدعم معالج الرسوميات متعدد المثيلات حاليا على Standard_NC40ads_H100_v5أحجام الوحدات الافتراضية وA100 Standard_ND96isr_H100_v5على AKS.

ملفات تعريف مثيل GPU

تحدد ملفات تعريف مثيل وحدة معالجة الرسومات كيفية تقسيم وحدات معالجة الرسومات. يعرض الجدول التالي ملف تعريف مثيل GPU المتوفر ل Standard_ND96asr_v4:

اسم ملف التعريف جزء من SM جزء من الذاكرة عدد المثيلات التي تم إنشاؤها
ميج 1 جيجابايت 1/7 1/8 7
MIG 2g.10GB 2/7 2/8 3
MIG 3G.20GB 3/7 4/8 2
MIG 4G.20GB 4/7 4/8 1
MIG 7g.40GB 7/7 8/8 1

على سبيل المثال، يشير ملف تعريف مثيل GPU إلى MIG 1g.5gb أن كل مثيل GPU يحتوي على 1g SM (دفق المعالجات المتعددة) وذاكرة 5 غيغابايت. في هذه الحالة، يتم تقسيم وحدة معالجة الرسومات إلى سبعة مثيلات.

تتضمن MIG1gملفات تعريف مثيل GPU المتوفرة لحجم الجهاز الظاهري هذا و MIG2gMIG3gMIG4gو.MIG7g

هام

لا يمكنك تغيير ملف تعريف مثيل GPU المطبق بعد إنشاء تجمع العقدة.

إنشاء نظام مجموعة AKS

  1. أنشئ مجموعة موارد Azure باستخدام أمر az group create.

    az group create --name myResourceGroup --location southcentralus
    
  2. إنشاء نظام مجموعة AKS باستخدام az aks create الأمر .

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. قم بتكوين kubectl للاتصال بمجموعة AKS الخاصة بك باستخدام az aks get-credentials الأمر .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

إنشاء مجموعة عُقد GPU متعددة المثيلات

يمكنك استخدام Azure CLI أو طلب HTTP إلى واجهة برمجة تطبيقات ARM لإنشاء تجمع العقد.

  • إنشاء تجمع عقدة GPU متعدد المثيلات az aks nodepool add باستخدام الأمر وتحديد ملف تعريف مثيل GPU. ينشئ المثال أدناه تجمع عقدة Standard_ND96asr_v4 بحجم GPU VM المتوافق مع MIG.

    az aks nodepool add \
        --name aksMigNode \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --node-vm-size Standard_ND96asr_v4 \
        --node-count 1 \
        --gpu-instance-profile MIG1g
    

تحديد استراتيجية GPU متعددة المثيلات (MIG)

قبل تثبيت المكونات الإضافية NVIDIA، تحتاج إلى تحديد استراتيجية GPU متعددة المثيلات (MIG) لاستخدامها لتقسيم GPU: استراتيجية واحدة أو استراتيجية مختلطة. لا تؤثر الاستراتيجيتان على كيفية تنفيذ أحمال عمل وحدة المعالجة المركزية، ولكن كيفية عرض موارد وحدة معالجة الرسومات.

  • استراتيجية واحدة: تتعامل الاستراتيجية الواحدة مع كل مثيل GPU على أنه GPU. إذا كنت تستخدم هذه الاستراتيجية، يتم عرض موارد GPU ك nvidia.com/gpu: 1.
  • استراتيجية مختلطة: تعرض الاستراتيجية المختلطة مثيلات وحدة معالجة الرسومات وملف تعريف مثيل GPU. إذا كنت تستخدم هذه الاستراتيجية، يتم عرض مورد GPU ك nvidia.com/mig1g.5gb: 1.

تثبيت المكون الإضافي لجهاز NVIDIA ومكونات اكتشاف ميزة GPU (GFD)

  1. تعيين استراتيجية MIG كمتغير بيئة. يمكنك استخدام استراتيجية واحدة أو مختلطة.

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. أضف مستودع helm المكون الإضافي لجهاز NVIDIA باستخدام helm repo add الأمرين و helm repo update .

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. قم بتثبيت المكون الإضافي لجهاز NVIDIA باستخدام helm install الأمر .

    helm install nvdp nvdp/nvidia-device-plugin \
    --version=0.17.0 \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

إشعار

يدمج تثبيت Helm المكون الإضافي لجهاز NVIDIA المكون الإضافي لجهاز Kubernetes ومستودعات GFD. لا ينصح بتثبيت helm منفصل لمكون برنامج GFD عند استخدام وحدة معالجة الرسومات متعددة المثيلات التي تديرها AKS.

إشعار

إذا قمت بنشر إضافة جهاز NVIDIA على Azure Linux عبر بيان DaemonSet مخصص بدلا من Helm، يجب عليك تضمين متغير البيئة NVIDIA_MIG_MONITOR_DEVICES=all في حاوية الإضافة الخاصة بالجهاز.

تأكيد قدرة GPU متعدد المثيلات

  1. kubectl تحقق من الاتصال بالمجموعة باستخدام kubectl get الأمر لإرجاع قائمة عقد نظام المجموعة.

    kubectl get nodes -o wide
    
  2. تأكد من أن العقدة لديها قدرة GPU متعددة المثيلات kubectl describe node باستخدام الأمر . يصف الأمر المثال التالي العقدة المسماة aksMigNode، والتي تستخدم MIG1g كملف تعريف مثيل GPU.

    kubectl describe node aksMigNode
    

    يجب أن يشبه الإخراج الخاص بك إخراج المثال التالي:

    # Single strategy output
    Allocatable:
        nvidia.com/gpu: 56
    
    # Mixed strategy output
    Allocatable:
        nvidia.com/mig-1g.5gb: 56
    

جدولة العمل

تستند الأمثلة التالية إلى إصدار الصورة الأساسية CUDA 12.1.1 ل Ubuntu 22.04، الموسومة باسم 12.1.1-base-ubuntu22.04.

استراتيجية واحدة

  1. قم بإنشاء ملف باسم single-strategy-example.yaml وانسخه في البيان التالي.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-single
    spec:
      containers:
      - name: nvidia-single
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 1000"]
        resources:
          limits:
            "nvidia.com/gpu": 1
    
  2. انشر التطبيق باستخدام kubectl apply الأمر وحدد اسم بيان YAML.

    kubectl apply -f single-strategy-example.yaml
    
  3. تحقق من أجهزة GPU المخصصة باستخدام kubectl exec الأمر . يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.

    kubectl exec nvidia-single -- nvidia-smi -L
    

    يشبه المثال التالي الإخراج الذي يظهر عمليات النشر والخدمات التي تم إنشاؤها بنجاح:

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    MIG 1g.5gb     Device  1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc)
    MIG 1g.5gb     Device  2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f)
    MIG 1g.5gb     Device  3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2)
    MIG 1g.5gb     Device  4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e)
    MIG 1g.5gb     Device  5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85)
    MIG 1g.5gb     Device  6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
    

استراتيجية مختلطة

  1. قم بإنشاء ملف باسم mixed-strategy-example.yaml وانسخه في البيان التالي.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-mixed
    spec:
      containers:
      - name: nvidia-mixed
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 100"]
        resources:
          limits:
            "nvidia.com/mig-1g.5gb": 1
    
  2. انشر التطبيق باستخدام kubectl apply الأمر وحدد اسم بيان YAML.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. تحقق من أجهزة GPU المخصصة باستخدام kubectl exec الأمر . يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.

    kubectl exec nvidia-mixed -- nvidia-smi -L
    

    يشبه المثال التالي الإخراج الذي يظهر عمليات النشر والخدمات التي تم إنشاؤها بنجاح:

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    

هام

تم إلغاء وسم latest لصور CUDA على Docker Hub. يرجى الرجوع إلى مستودع NVIDIA للحصول على أحدث الصور والعلامات المقابلة.

استكشاف الأخطاء وإصلاحها

إذا كنت لا ترى قدرة GPU متعددة المثيلات بعد إنشاء تجمع العقدة، فتأكد من أن إصدار واجهة برمجة التطبيقات ليس أقدم من 2021-08-01.

الخطوات التالية

لمعرفة المزيد عن وحدات معالجة الرسومات على Azure Kubernetes Service، انظر: