إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
غالبا ما تستخدم وحدات المعالجة الرسومية (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: تكوين مقياس المجموعة التلقائي للحفاظ على ثلاث عقد كحد أقصى في تجمع العقدة.
إشعار
يمكن تعيين العيوب وأحجام الأجهزة الظاهرية فقط لتجمعات العقد أثناء إنشاء تجمع العقدة، ولكن يمكنك تحديث إعدادات التحجيم التلقائي في أي وقت.
إنشاء مساحة اسم باستخدام
kubectl create namespaceالأمر .kubectl create namespace gpu-resourcesأنشئ ملفا باسم 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أنشئ DaemonSet وتأكد من إنشاء المكون الإضافي لجهاز NVIDIA بنجاح باستخدام
kubectl applyالأمر .kubectl apply -f nvidia-device-plugin-ds.yamlالآن بعد أن قمت بتثبيت المكون الإضافي لجهاز NVIDIA بنجاح، يمكنك التحقق من أن وحدات معالجة الرسومات قابلة للمخططاتوتشغيل حمل عمل GPU.
تخطي تثبيت برنامج تشغيل GPU
إذا كنت تريد التحكم في تثبيت برامج تشغيل NVIDIA أو استخدام عامل تشغيل NVIDIA GPU، يمكنك تخطي تثبيت برنامج تشغيل GPU الافتراضي. لا تدعم Microsoft صيانة برامج تشغيل NVIDIA وتوافقها أو تديرها كجزء من نشر صورة العقدة.
هام
ابتداء من 14 أغسطس 2025، لم تعد خدمة خدمة Azure Kubernetes (AKS) تدعم وسم --skip-gpu-driver-install تجمع العقد. بعد هذا التاريخ، لن تتمكن من توفير مجموعات عقد مفعلة باستخدام هذه العلامة لتجاوز التثبيت التلقائي لتعريف بطاقة الرسوميات. يمكنك تحقيق نفس السلوك بضبط --gpu-driver الحقل على none. لمزيد من المعلومات حول هذا التقاعد، راجع مشكلة GitHub للتقاعدوإعلان تقاعد تحديثات Azure. للبقاء على اطلاع بالإعلانات والتحديثات، تابع ملاحظات إصدار AKS.
إنشاء تجمع عقدة
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. لمزيد من المعلومات، راجع قبل البدء.يمكنك تثبيت عامل تشغيل NVIDIA GPU اختياريا باتباع هذه الخطوات.
تأكد من أن وحدات معالجة الرسومات قابلة للجدولة
بعد إنشاء نظام المجموعة، تأكد من أن وحدات معالجة الرسومات قابلة للمخططات في Kubernetes.
سرد العقد في نظام المجموعة باستخدام
kubectl get nodesالأمر .kubectl get nodesيجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7تأكد من أن وحدات معالجة الرسومات قابلة للمخططات باستخدام
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.
أنشئ ملفا باسم 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"قم بتشغيل المهمة باستخدام
kubectl applyالأمر الذي يوزع ملف البيان وينشئ كائنات Kubernetes المعرفة.kubectl apply -f samples-tf-mnist-demo.yaml
عرض حالة حمل العمل الممكن لوحدة معالجة الرسومات
مراقبة تقدم المهمة باستخدام
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قم بإنهاء
kubectl --watchالعملية باستخدام Ctrl-C.احصل على اسم الجراب باستخدام
kubectl get podsالأمر .kubectl get pods --selector app=samples-tf-mnist-demoعرض إخراج حمل العمل الممكن لوحدة معالجة الرسومات باستخدام
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
الخطوات التالية
- جرب تجمعات عقد GPU المدارة من AKS (معاينة) للسماح ل AKS بتثبيت وصيانة تعريف NVIDIA، وإضافة الجهاز، ومصدر مقاييس DCGM.
- لتشغيل مهام Apache Spark، راجع تشغيل مهام Apache Spark على AKS.
- لمزيد من المعلومات حول ميزات مجدول Kubernetes، راجع أفضل الممارسات لميزات المجدول المتقدمة في AKS.
- لمزيد من المعلومات حول Azure Kubernetes Service وAzure التعلم الآلي، راجع: