استخدام وحدات معالجة الرسومات ل Windows لأحمال العمل كثيفة الحوسبة على خدمة Azure Kubernetes (AKS) (معاينة)

غالبا ما تستخدم وحدات المعالجة الرسومية (GPUs) لأحمال العمل كثيفة الحوسبة، مثل أحمال عمل الرسومات والتصور. يدعم AKS تجمعات عقد Windows وLinux الممكنة بواسطة وحدة معالجة الرسومات لتشغيل أحمال عمل Kubernetes كثيفة الحوسبة.

تساعدك هذه المقالة على توفير عقد Windows مع وحدات معالجة الرسومات القابلة للمخططات على مجموعات AKS الجديدة والحالية (معاينة).

الأجهزة الظاهرية المدعومة التي تدعم وحدة معالجة الرسومات (VMs)

لعرض الأجهزة الظاهرية المدعومة التي تدعم وحدة معالجة الرسومات، راجع أحجام الأجهزة الظاهرية المحسنة لوحدة معالجة الرسومات في Azure. بالنسبة لتجمعات عقد AKS، نوصي بالحد الأدنى لحجم Standard_NC6s_v3. سلسلة NVv4 (استنادا إلى وحدات معالجة الرسومات AMD) غير مدعومة على AKS.

إشعار

تحتوي الأجهزة الظاهرية التي تدعم وحدة معالجة الرسومات على أجهزة متخصصة تخضع لتسعير أعلى وتوافر المنطقة. للحصول على مزيدٍ من المعلومات، راجع أداة التسعير والتوفر في المنطقة.

القيود

  • تحديث تجمع عقدة Windows موجود لإضافة وحدة معالجة الرسومات غير مدعوم.
  • غير مدعوم على الإصدار 1.28 من Kubernetes والإصدارات الأحدث.

قبل البدء

  • تفترض هذه المقالة أن لديك مجموعة AKS موجودة. إذا لم يكن لديك مجموعة، فبادر بإنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Microsoft Azure.
  • تحتاج إلى تثبيت الإصدار 1.0.0b2 من Azure CLI أو إصدار أحدث وتكوينه لاستخدام --skip-gpu-driver-install الحقل مع az aks nodepool add الأمر . قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

الحصول على بيانات اعتماد لمجموعتك

  • احصل على بيانات الاعتماد لنظام مجموعة AKS باستخدام az aks get-credentials الأمر . يحصل الأمر المثال التالي على بيانات الاعتماد الخاصة ب myAKSCluster في مجموعة موارد myResourceGroup :

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

استخدام وحدة معالجة الرسومات في Windows مع تثبيت برنامج التشغيل التلقائي

يتضمن استخدام وحدات معالجة الرسومات NVIDIA تثبيت مكونات برامج NVIDIA المختلفة مثل المكون الإضافي لجهاز DirectX ل Kubernetes وتثبيت برنامج تشغيل GPU والمزيد. عند إنشاء تجمع عقدة Windows مع جهاز ظاهري يدعم GPU، يتم تثبيت هذه المكونات وبرامج تشغيل NVIDIA CUDA أو GRID المناسبة. بالنسبة لأحجام الجهاز الظاهري من السلسلة NC وND، يتم تثبيت برنامج تشغيل CUDA. بالنسبة لأحجام الأجهزة الظاهرية لسلسلة NV، يتم تثبيت برنامج تشغيل GRID.

هام

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

تثبيت aks-preview امتداد Azure CLI

  • تسجيل أو تحديث ملحق aks-preview باستخدام az extension add الأمر أو az extension update .

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

تسجيل WindowsGPUPreview العلامات المميزة

  1. تسجيل علامة الميزة WindowsGPUPreview باستخدام az feature register الأمر .

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.

  2. تحقق من حالة التسجيل باستخدام az feature show الأمر .

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام az provider register الأمر .

    az provider register --namespace Microsoft.ContainerService
    

إنشاء تجمع عقدة Windows GPU ممكن (معاينة)

لإنشاء تجمع عقدة ممكن بواسطة وحدة معالجة الرسومات ل Windows، تحتاج إلى استخدام حجم VM مدعوم ممكن لوحدة معالجة الرسومات وتحديد os-type ك Windows. Windows os-sku الافتراضي هو Windows2022، ولكن جميع خيارات Windows os-sku مدعومة.

  1. إنشاء تجمع عقدة ممكن ل Windows GPU باستخدام az aks nodepool add الأمر .

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type Windows \
        --kubernetes-version 1.29.0 \
        --node-vm-size Standard_NC6s_v3
    
  2. تحقق من أن وحدات معالجة الرسومات قابلة للمخططات.

  3. بمجرد التأكد من أن وحدات معالجة الرسومات قابلة للمخططات، يمكنك تشغيل حمل عمل وحدة معالجة الرسومات.

استخدام وحدة معالجة الرسومات في Windows مع تثبيت برنامج التشغيل اليدوي

عند إنشاء تجمع عقدة Windows مع أحجام الأجهزة الظاهرية لسلسلة N (NVIDIA GPU) في AKS، يتم تثبيت برنامج تشغيل GPU والمكون الإضافي لجهاز Kubernetes DirectX تلقائيا. لتجاوز هذا التثبيت التلقائي، استخدم الخطوات التالية:

  1. تخطي تثبيت برنامج تشغيل GPU (معاينة) باستخدام --skip-gpu-driver-install.
  2. التثبيت اليدوي للمكون الإضافي لجهاز Kubernetes DirectX.

تخطي تثبيت برنامج تشغيل GPU (معاينة)

تم تمكين تثبيت برنامج تشغيل GPU تلقائيا في AKS بشكل افتراضي. في بعض الحالات، مثل تثبيت برامج التشغيل الخاصة بك، قد تحتاج إلى تخطي تثبيت برنامج تشغيل GPU.

هام

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

  1. تسجيل أو تحديث ملحق aks-preview باستخدام az extension add الأمر أو az extension update .

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. إنشاء تجمع عقدة az aks nodepool add باستخدام الأمر مع العلامة --skip-gpu-driver-install لتخطي تثبيت برنامج تشغيل GPU التلقائي.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --skip-gpu-driver-install
    

إشعار

--node-vm-size إذا لم يتم إلحاق الذي تستخدمه بعد على AKS، فلا يمكنك استخدام وحدات معالجة الرسومات --skip-gpu-driver-install ولا يعمل.

تثبيت المكون الإضافي لجهاز Kubernetes DirectX يدويا

يمكنك نشر DaemonSet للمكون الإضافي لجهاز Kubernetes DirectX، والذي يقوم بتشغيل جراب على كل عقدة لتوفير برامج التشغيل المطلوبة لوحدات معالجة الرسومات.

  • أضف تجمع عقدة إلى نظام المجموعة باستخدام az aks nodepool add الأمر .

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

إنشاء مساحة اسم ونشر المكون الإضافي لجهاز Kubernetes DirectX

  1. إنشاء مساحة اسم باستخدام kubectl create namespace الأمر .

    kubectl create namespace gpu-resources
    
  2. أنشئ ملفا باسم k8s-directx-device-plugin.yaml والصق بيان YAML التالي المقدم كجزء من المكون الإضافي لجهاز NVIDIA لمشروع Kubernetes:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nvidia-device-plugin-daemonset
      namespace: gpu-resources
    spec:
      selector:
        matchLabels:
          name: nvidia-device-plugin-ds
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
          # reserves resources for critical add-on pods so that they can be rescheduled after
          # a failure.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1
            name: nvidia-device-plugin-ctr
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            volumeMounts:
              - name: device-plugin
                mountPath: /var/lib/kubelet/device-plugins
          volumes:
            - name: device-plugin
              hostPath:
                path: /var/lib/kubelet/device-plugins
    
  3. أنشئ DaemonSet وتأكد من إنشاء المكون الإضافي لجهاز NVIDIA بنجاح باستخدام kubectl apply الأمر .

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. الآن بعد أن قمت بتثبيت المكون الإضافي لجهاز NVIDIA بنجاح، يمكنك التحقق من أن وحدات معالجة الرسومات الخاصة بك قابلة للتخطط.

تأكد من أن وحدات معالجة الرسومات قابلة للجدولة

بعد إنشاء نظام المجموعة، تأكد من أن وحدات معالجة الرسومات قابلة للمخططات في Kubernetes.

  1. سرد العقد في نظام المجموعة باستخدام kubectl get nodes الأمر .

    kubectl get nodes
    

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

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. تأكد من أن وحدات معالجة الرسومات قابلة للمخططات باستخدام kubectl describe node الأمر .

    kubectl describe node aks-gpunp-28993262-0
    

    ضمن قسم السعة، ينبغي أن تُدرج وحدة معالجة الرسومات باسم microsoft.com/directx: 1. يجب أن يبدو الإخراج مشابها لإخراج المثال المكثف التالي:

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

استخدم Container Insights لمراقبة استخدام وحدة معالجة الرسومات

تراقب Container Insights مع AKS مقاييس استخدام GPU التالية:

اسم قياسي البعد المتري (العلامات) ‏‏الوصف
حاوية GPUDutyCycle container.azm.ms/clusterId، container.azm.ms/clusterName، containerName، gpuId، ، gpuModelgpuVendor النسبة المئوية للوقت خلال فترة العينة السابقة (60 ثانية) التي كانت وحدة معالجة الرسومات GPU خلالها مشغولة / تعالج بنشاط لحاوية. دورة التشغيل عبارة عن رقم بين 1 و100.
حاوية GPULimits container.azm.ms/clusterId، ، container.azm.ms/clusterNamecontainerName يمكن لكل حاوية تحديد حدود كوحدة معالجة رسومات واحدة أو أكثر GPUs. لا يمكن طلب جزء صغير من وحدة معالجة الرسومات أو تحديده.
حاوية طلبات GPU container.azm.ms/clusterId، ، container.azm.ms/clusterNamecontainerName يمكن لكل حاوية أن تطلب واحدة أو أكثر من وحدات معالجة الرسومات GPUs. لا يمكن طلب جزء صغير من وحدة معالجة الرسومات أو تحديده.
حاوية GpumemoryTotalBytes container.azm.ms/clusterId، container.azm.ms/clusterName، containerName، gpuId، ، gpuModelgpuVendor مقدار ذاكرة وحدة معالجة الرسومات GPU بالبايت المتاحة للاستخدام في حاوية معينة.
حاوية GpumemoryUsedBytes container.azm.ms/clusterId، container.azm.ms/clusterName، containerName، gpuId، ، gpuModelgpuVendor مقدار ذاكرة وحدة معالجة الرسومات GPU بالبايت المستخدمة بواسطة حاوية معينة.
nodeGpuAllocatable container.azm.ms/clusterId، ، container.azm.ms/clusterNamegpuVendor عدد وحدات معالجة الرسومات في عقدة يمكن ل Kubernetes استخدامها.
nodeGpuCapacity container.azm.ms/clusterId، ، container.azm.ms/clusterNamegpuVendor العدد الإجمالي لوحدات معالجة الرسومات في العقدة.

تنظيف الموارد

  • قم بإزالة كائنات Kubernetes المقترنة التي قمت بإنشائها في هذه المقالة باستخدام kubectl delete job الأمر .

    kubectl delete jobs windows-gpu-workload
    

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