إنشاء تجمع عقدة GPU متعدد المثيلات في خدمة Azure Kubernetes (AKS)

يمكن تقسيم Nvidia's A100 GPU إلى ما يصل إلى سبعة مثيلات مستقلة. كل مثيل له الذاكرة الخاصة به و Stream Multiprocessor (SM). لمزيد من المعلومات حول Nvidia A100، راجع Nvidia A100 GPU.

ترشدك هذه المقالة إلى كيفية إنشاء تجمع عقدة GPU متعدد المثيلات في نظام مجموعة Azure Kubernetes Service (AKS).

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

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

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

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

اسم ملف التعريف جزء من SM جزء من الذاكرة عدد المثيلات التي تم إنشاؤها
MIG 1g.5gb 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 المتوفرة لحجم المثيل هذا و MIG4gMIG2gMIG3gو.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\
        --node-count 1 \
        --generate-ssh-keys
    

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

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

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

    az aks nodepool add \
        --name mignode \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --node-vm-size Standard_ND96asr_v4 \
        --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

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

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

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

    helm install \
    --version=0.14.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    nvdp/nvidia-device-plugin
    
  4. قم بتثبيت اكتشاف ميزة GPU باستخدام helm install الأمر .

    helm install \
    --version=0.2.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    nvgfd/gpu-feature-discovery
    

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

  1. قم بتكوين kubectl للاتصال بمجموعة AKS الخاصة بك باستخدام az aks get-credentials الأمر .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. تحقق من الاتصال بالمجموعة باستخدام kubectl get الأمر لإرجاع قائمة عقد نظام المجموعة.

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

    kubectl describe node mignode
    

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

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

جدولة العمل

تستند الأمثلة التالية إلى إصدار الصورة الأساسية cuda 12.1.1 ل Ubuntu22.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.

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

لمزيد من المعلومات حول تجمعات عقد AKS، راجع إدارة تجمعات العقد لنظام مجموعة في AKS.