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

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

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

نصيحة

لتجربة إدارة كاملة حيث يقوم AKS بتثبيت وصيانة تعريف NVIDIA، وإضافة الجهاز، ومصدر مقاييس DCGM لك، راجع مجموعات عقد GPU المدارة بواسطة AKS (معاينة).

هام

ابتداء من 30 نوفمبر 2025، لم تعد خدمة خدمة Azure Kubernetes ‏(AKS) تدعم أو توفر تحديثات الأمان ل Azure Linux 2.0. صورة عقدة Azure Linux 2.0 مجمدة عند إصدار 202512.06.0. ابتداء من 31 مارس 2026، سيتم إزالة صور العقد، ولن تتمكن من توسيع مجموعات العقد الخاصة بك. انتقل إلى نسخة Azure Linux المدعومة عن طريق ترقية مجموعات العقد إلى نسخة Kubernetes مدعومة أو الانتقال إلى osSku AzureLinux3. لمزيد من المعلومات، راجع مشكلة GitHub للتقاعدوإعلان تقاعد Azure Updates. للبقاء على اطلاع بالإعلانات والتحديثات، تابع ملاحظات إصدار AKS.

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

لعرض الأجهزة الظاهرية المتوفرة التي تدعم GPU، راجع أحجام الأجهزة الظاهرية المحسنة لوحدة معالجة الرسومات في Azure. إذا لم يكن حجم وحدة معالجة الرسومات الافتراضي ضمن قائمتنا لأحجام الأجهزة الافتراضية المدعومة، فإن AKS لا تقوم بتثبيت مكونات برمجيات GPU اللازمة أو توفر الدعم. يسمح AKS باستخدام أحجام أجهزة GPU الظاهرية غير المدعومة بعد تخطي التثبيت التلقائي لبرنامج تشغيل GPU.

تحقق من أحجام الأجهزة الظاهرية المتوفرة والمدعومة باستخدام الأمر az vm list-skus .

az vm list-skus --location <your-location> --output table

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

إشعار

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

القيود

  • إذا كنت تستخدم تجمع عقدة يدعم Azure Linux GPU، فلا يتم تطبيق تصحيحات الأمان التلقائية. راجع إصدار AKS API الحالي للسلوك الافتراضي لقناة ترقية نظام التشغيل العقدة.
  • Flatcar Container Linux for AKS غير مدعوم مع وحدة معالجة الرسومات NVIDIA على AKS.
  • Azure Linux مع OS Guard for AKS غير مدعوم مع NVIDIA GPU على AKS.

إشعار

بالنسبة إلى AKS API الإصدار 2023-06-01 أو أحدث، القناة الافتراضية لترقية نظام تشغيل العقدة هي NodeImage. بالنسبة للإصدارات السابقة، تكون القناة الافتراضية بلا. لمعرفة المزيد، راجع الترقية التلقائية.

  • تحديث تجمع عقدة موجود لإضافة حجم GPU VM غير مدعوم على AKS.

قبل البدء

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

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

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

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

خيارات لاستخدام وحدات معالجة الرسومات NVIDIA

يتضمن استخدام NVIDIA GPUs تثبيت مكونات برامج NVIDIA المختلفة مثل المكون الإضافي لجهاز NVIDIA ل Kubernetes وتثبيت برنامج تشغيل GPU والمزيد.

إشعار

بشكل افتراضي، تحتفظ Microsoft تلقائيا بإصدار برامج تشغيل NVIDIA كجزء من نشر صورة العقدة، وتدعمها AKS وتديرها . بينما يتم تثبيت برامج تشغيل NVIDIA بشكل افتراضي على العقد القادرة على GPU، تحتاج إلى تثبيت المكون الإضافي للجهاز.

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

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

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

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

لاستخدام نظام التشغيل SKU الافتراضي، يمكنك إنشاء تجمع العقدة دون تحديد نظام تشغيل SKU. يتم تكوين تجمع العقدة لنظام التشغيل الافتراضي استنادا إلى إصدار Kubernetes من نظام المجموعة.

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

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --node-vm-size Standard_NC6s_v3 \
    --node-taints sku=gpu:NoSchedule \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3

يضيف هذا الأمر تجمع عقدة يسمى gpunp إلى myAKSCluster في myResourceGroup ويستخدم المعلمات لتكوين إعدادات تجمع العقدة التالية:

  • --node-vm-size: تعيين حجم الجهاز الظاهري للعقدة في تجمع العقدة إلى Standard_NC6s_v3.
  • --node-taints: يحدد sku=gpu:NoSchedule taint على تجمع العقدة.
  • --enable-cluster-autoscaler: تمكين أداة التحجيم التلقائي لنظام المجموعة.
  • --min-count: تكوين مقياس المجموعة التلقائي للحفاظ على عقدة واحدة على الأقل في تجمع العقدة.
  • --max-count: تكوين مقياس المجموعة التلقائي للحفاظ على ثلاث عقد كحد أقصى في تجمع العقدة.

إشعار

يمكن تعيين العيوب وأحجام الأجهزة الظاهرية فقط لتجمعات العقد أثناء إنشاء تجمع العقدة، ولكن يمكنك تحديث إعدادات التحجيم التلقائي في أي وقت.

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

    kubectl create namespace gpu-resources
    
  2. أنشئ ملفا باسم nvidia-device-plugin-ds.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:
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          # 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.
          # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
          priorityClassName: "system-node-critical"
          containers:
          - image: nvcr.io/nvidia/k8s-device-plugin:v0.18.0
            name: nvidia-device-plugin-ctr
            env:
              - name: FAIL_ON_INIT_ERROR
                value: "false"
            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 بنجاح، يمكنك التحقق من أن وحدات معالجة الرسومات قابلة للمخططاتوتشغيل حمل عمل GPU.

تخطي تثبيت برنامج تشغيل GPU

إذا كنت تريد التحكم في تثبيت برامج تشغيل NVIDIA أو استخدام عامل تشغيل NVIDIA GPU، يمكنك تخطي تثبيت برنامج تشغيل GPU الافتراضي. لا تدعم Microsoft صيانة برامج تشغيل NVIDIA وتوافقها أو تديرها كجزء من نشر صورة العقدة.

هام

ابتداء من 14 أغسطس 2025، لم تعد خدمة خدمة Azure Kubernetes ‏(AKS) تدعم وسم --skip-gpu-driver-install تجمع العقد. بعد هذا التاريخ، لن تتمكن من توفير مجموعات عقد مفعلة باستخدام هذه العلامة لتجاوز التثبيت التلقائي لتعريف بطاقة الرسوميات. يمكنك تحقيق نفس السلوك بضبط --gpu-driver الحقل على none. لمزيد من المعلومات حول هذا التقاعد، راجع مشكلة GitHub للتقاعدوإعلان تقاعد تحديثات Azure. للبقاء على اطلاع بالإعلانات والتحديثات، تابع ملاحظات إصدار AKS.

  1. إنشاء تجمع عقدة az aks nodepool add باستخدام الأمر وتعيين --gpu-driver الحقل لتخطي none تثبيت برنامج تشغيل GPU الافتراضي.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --gpu-driver none \
        --node-vm-size Standard_NC6s_v3 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3
    

    --gpu-driver يؤدي تعيين حقل API إلى أثناء إنشاء تجمع العقدة إلى none تخطي تثبيت برنامج تشغيل GPU التلقائي. لا يتم تغيير أي عقد موجودة. يمكنك توسيع نطاق تجمع العقدة إلى الصفر ثم إجراء نسخ احتياطي لجعل التغيير نافذ المفعول.

    إذا تلقيت الخطأ unrecognized arguments: --gpu-driver none ، فقم بتحديث إصدار Azure CLI. لمزيد من المعلومات، راجع قبل البدء.

  2. يمكنك تثبيت عامل تشغيل NVIDIA GPU اختياريا باتباع هذه الخطوات.

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

بعد إنشاء نظام المجموعة، تأكد من أن وحدات معالجة الرسومات قابلة للمخططات في 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
    

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

    Name:               aks-gpunp-28993262-0
    Roles:              agent
    Labels:             accelerator=nvidia
    
    [...]
    
    Capacity:
    [...]
     nvidia.com/gpu:                 1
    [...]
    

تشغيل حمل عمل يدعم وحدة معالجة الرسومات

لمشاهدة وحدة معالجة الرسومات قيد التنفيذ، يمكنك جدولة حمل عمل ممكن بواسطة وحدة معالجة الرسومات مع طلب المورد المناسب. في هذا المثال، سنقوم بتشغيل مهمة Tensorflow مقابل مجموعة بيانات MNIST.

  1. أنشئ ملفا باسم samples-tf-mnist-demo.yaml والصق بيان YAML التالي، والذي يتضمن حد موارد :nvidia.com/gpu: 1

    إشعار

    إذا تلقيت خطأ عدم تطابق الإصدار عند استدعاء برامج التشغيل، مثل "إصدار برنامج تشغيل CUDA غير كاف لإصدار وقت تشغيل CUDA"، فراجع مخطط توافق مصفوفة برنامج تشغيل NVIDIA.

    apiVersion: batch/v1
    kind: Job
    metadata:
      labels:
        app: samples-tf-mnist-demo
      name: samples-tf-mnist-demo
    spec:
      template:
        metadata:
          labels:
            app: samples-tf-mnist-demo
        spec:
          containers:
          - name: samples-tf-mnist-demo
            image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
            args: ["--max_steps", "500"]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
               nvidia.com/gpu: 1
          restartPolicy: OnFailure
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
    
  2. قم بتشغيل المهمة باستخدام kubectl apply الأمر الذي يوزع ملف البيان وينشئ كائنات Kubernetes المعرفة.

    kubectl apply -f samples-tf-mnist-demo.yaml
    

عرض حالة حمل العمل الممكن لوحدة معالجة الرسومات

  1. مراقبة تقدم المهمة باستخدام kubectl get jobs الأمر مع العلامة --watch . قد يستغرق سحب الصورة أولاً ومعالجة مجموعة البيانات بضع دقائق.

    kubectl get jobs samples-tf-mnist-demo --watch
    

    عندما يظهر عمود COMPLETIONS1/1، تكون المهمة قد انتهت بنجاح، كما هو موضح في إخراج المثال التالي:

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. قم بإنهاء kubectl --watch العملية باستخدام Ctrl-C.

  3. احصل على اسم الجراب باستخدام kubectl get pods الأمر .

    kubectl get pods --selector app=samples-tf-mnist-demo
    
  4. عرض إخراج حمل العمل الممكن لوحدة معالجة الرسومات باستخدام kubectl logs الأمر .

    kubectl logs samples-tf-mnist-demo-smnr6
    

    يؤكد إخراج المثال المكثف التالي لسجلات الجراب أنه تم اكتشاف جهاز GPU المناسب، Tesla K80:

    2019-05-16 16:08:31.258328: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
    2019-05-16 16:08:31.396846: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
    name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
    pciBusID: 2fd7:00:00.0
    totalMemory: 11.17GiB freeMemory: 11.10GiB
    2019-05-16 16:08:31.396886: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: 2fd7:00:00.0, compute capability: 3.7)
    2019-05-16 16:08:36.076962: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libcupti.so.8.0 locally
    Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
    Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz
    Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
    Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz
    Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
    Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz
    Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
    Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz
    Accuracy at step 0: 0.1081
    Accuracy at step 10: 0.7457
    Accuracy at step 20: 0.8233
    Accuracy at step 30: 0.8644
    Accuracy at step 40: 0.8848
    Accuracy at step 50: 0.8889
    Accuracy at step 60: 0.8898
    Accuracy at step 70: 0.8979
    Accuracy at step 80: 0.9087
    Accuracy at step 90: 0.9099
    Adding run metadata for 99
    Accuracy at step 100: 0.9125
    Accuracy at step 110: 0.9184
    Accuracy at step 120: 0.922
    Accuracy at step 130: 0.9161
    Accuracy at step 140: 0.9219
    Accuracy at step 150: 0.9151
    Accuracy at step 160: 0.9199
    Accuracy at step 170: 0.9305
    Accuracy at step 180: 0.9251
    Accuracy at step 190: 0.9258
    Adding run metadata for 199
    [...]
    Adding run metadata for 499
    

ترقية تجمع العقد

سواء أردت تحديث أو ترقية مجموعات العقد الخاصة بك، قد تلاحظ أنه لا --gpu-driver يوجد معلمة لأي من العمليات. قد تواجه خطأ مثل unrecognized arguments: --gpu-driver none محاولة اجتياز المعامل. لا حاجة لاستدعاء المعامل، لأن القيمة لا تتأثر بأي من هذه العمليات.

عندما تنشئ مجموعة العقد لأول مرة، أي معلمة تعلن عنها --gpu-driver لن تتأثر بعمليات الترقية/التحديث. إذا لم ترغب في تثبيت أي تعريفات، وتحديدها --gpu-driver None عند إنشاء مجموعة العقد، فلن يتم تثبيت التعريفات في أي تحديثات أو ترقيات لاحقة.

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

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

kubectl delete jobs samples-tf-mnist-demo

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