Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Unit pemrosesan grafis (GPU) sering digunakan untuk beban kerja intensif komputasi, seperti beban kerja grafis dan visualisasi. AKS mendukung pool node Linux yang mendukung GPU untuk menjalankan beban kerja Kubernetes yang membutuhkan komputasi intensif.
Artikel ini membantu Anda memprovisikan simpul dengan GPU yang dapat dijadwalkan pada kluster AKS baru maupun yang sudah ada.
VM yang didukung GPU
Untuk melihat VM yang didukung GPU, lihat Ukuran VM yang dioptimalkan GPU di Azure. Untuk kumpulan simpul AKS, kami merekomendasikan minimal ukuran Standard_NC6s_v3. Seri NVv4 (berdasarkan GPU AMD) tidak didukung di AKS.
Nota
VM dengan dukungan GPU berisi perangkat keras khusus yang tunduk pada harga dan ketersediaan wilayah yang lebih tinggi. Untuk informasi selengkapnya, lihat alat penentuan harga dan ketersediaan wilayah.
Keterbatasan
- Jika Anda menggunakan kumpulan simpul dengan dukungan GPU Azure Linux, patch keamanan otomatis tidak diterapkan. Lihat versi API AKS Anda saat ini untuk perilaku default saluran peningkatan OS simpul.
Nota
Untuk API AKS versi 2023-06-01 atau yang lebih baru, saluran default untuk peningkatan OS simpul adalah NodeImage. Untuk versi sebelumnya, saluran defaultnya adalah Tidak Ada. Untuk mempelajari selengkapnya, lihat peningkatan otomatis.
- Memperbarui kumpulan simpul yang ada untuk menambahkan ukuran VM GPU tidak didukung pada AKS.
Nota
Gambar GPU AKS (pratinjau) akan dihentikan mulai 10 Januari 2025. Header kustom tidak lagi tersedia, yang berarti Anda tidak dapat membuat pool node baru dengan dukungan GPU menggunakan gambar GPU AKS. Sebaiknya migrasikan ke atau gunakan konfigurasi GPU default daripada gambar GPU, karena gambar GPU tidak lagi didukung. Untuk informasi selengkapnya, lihat Catatan rilis AKS, atau lihat pengumuman penghentian ini di peta jalan publik AKS kami.
Sebelum Anda mulai
- Artikel ini mengasumsikan Anda memiliki kluster AKS yang sudah ada. Jika Anda tidak memiliki kluster, buat kluster menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
- Anda memerlukan Azure CLI versi 2.72.2 atau yang lebih baru yang diinstal untuk mengatur
--gpu-driver
bidang. Jalankanaz --version
untuk menemukan versinya. Jika Anda perlu menginstal atau memperbarui, lihat Install Azure CLI. - Jika Anda memiliki
aks-preview
ekstensi Azure CLI yang terinstal, perbarui versi ke 18.0.0b2 atau yang lebih baru.
Dapatkan kredensial untuk kluster Anda
Dapatkan kredensial untuk kluster AKS Anda menggunakan az aks get-credentials
perintah . Contoh perintah berikut mendapatkan kredensial untuk myAKSCluster di grup sumber daya myResourceGroup :
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Opsi untuk menggunakan GPU NVIDIA
Menggunakan GPU NVIDIA melibatkan penginstalan berbagai komponen perangkat lunak NVIDIA seperti plugin perangkat NVIDIA untuk Kubernetes, penginstalan driver GPU, dan banyak lagi.
Nota
Secara default, Microsoft secara otomatis mempertahankan versi driver NVIDIA sebagai bagian dari penyebaran gambar simpul, dan AKS mendukung dan mengelolanya . Meskipun driver NVIDIA diinstal secara default pada simpul berkemampukan GPU, Anda perlu menginstal plugin perangkat.
Penginstalan plugin perangkat NVIDIA
Penginstalan plugin perangkat NVIDIA diperlukan saat menggunakan GPU di AKS. Dalam beberapa kasus, penginstalan ditangani secara otomatis, seperti saat menggunakan Operator GPU NVIDIA. Atau, Anda dapat menginstal plugin perangkat NVIDIA secara manual.
Pasang plugin perangkat NVIDIA secara manual
Anda dapat menyebarkan DaemonSet untuk plugin perangkat NVIDIA, yang menjalankan pod pada setiap simpul untuk menyediakan driver yang diperlukan untuk GPU. Ini adalah pendekatan yang disarankan saat menggunakan kumpulan simpul berkemampuan GPU untuk Azure Linux.
Untuk menggunakan SKU OS default, Anda membuat kumpulan simpul tanpa menentukan SKU OS. Pool node dikonfigurasi untuk sistem operasi default sesuai dengan versi Kubernetes dari kluster.
Tambahkan kumpulan simpul ke kluster Anda menggunakan
az aks nodepool add
perintah .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
Perintah ini menambahkan kumpulan simpul bernama gpunp ke myAKSCluster di myResourceGroup dan menggunakan parameter untuk mengonfigurasi pengaturan kumpulan simpul berikut:
-
--node-vm-size
: Mengatur ukuran VM untuk simpul di kumpulan simpul ke Standard_NC6s_v3. -
--node-taints
: Menentukan sku=gpu:NoSchedule taint pada simpul kumpulan. -
--enable-cluster-autoscaler
: Mengaktifkan pengubah skala otomatis untuk kluster. -
--min-count
: Mengonfigurasi autoscaler kluster untuk mempertahankan minimal satu simpul di kumpulan simpul. -
--max-count
: Mengonfigurasi autoscaler kluster untuk mempertahankan maksimum tiga simpul di kumpulan simpul.
Nota
Taint dan ukuran VM hanya dapat ditetapkan untuk kumpulan simpul saat pembuatan kumpulan simpul, namun Anda dapat memperbarui pengaturan autoscaler kapan saja.
-
Buat namespace menggunakan perintah
kubectl create namespace
.kubectl create namespace gpu-resources
Buat file bernama nvidia-device-plugin-ds.yaml dan tempelkan manifes YAML berikut yang disediakan sebagai bagian dari plugin perangkat NVIDIA untuk proyek 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.17.2 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
Buat DaemonSet dan konfirmasikan plugin perangkat NVIDIA berhasil dibuat menggunakan
kubectl apply
perintah .kubectl apply -f nvidia-device-plugin-ds.yaml
Sekarang, setelah Anda berhasil menginstal plugin perangkat NVIDIA, Anda dapat memeriksa bahwa GPU Anda dapat dijadwalkan dan menjalankan beban kerja GPU.
Lewati penginstalan driver GPU
Jika Anda ingin mengontrol penginstalan driver NVIDIA atau menggunakan Operator GPU NVIDIA, Anda dapat melewati penginstalan driver GPU default. Microsoft tidak mendukung atau mengelola pemeliharaan dan kompatibilitas driver NVIDIA dalam penyebaran citra node.
Nota
Bidang gpu-driver
API merupakan alternatif yang disarankan bagi pelanggan yang sebelumnya menggunakan tag pool node --skip-gpu-driver-install
.
- Tag
--skip-gpu-driver-install
kumpulan simpul pada AKS akan dihentikan pada 14 Agustus 2025. Untuk mempertahankan perilaku yang ada untuk melewati penginstalan driver GPU otomatis, tingkatkan kumpulan simpul Anda ke versi gambar simpul terbaru dan atur--gpu-driver
bidang kenone
. Setelah 14 Agustus 2025, Anda tidak akan dapat menyediakan node pool AKS yang mendukung GPU dengan--skip-gpu-driver-install
tag kumpulan simpul untuk menghindari perilaku default ini. Untuk informasi selengkapnya, lihat mengenaiskip-gpu-driver
penghentian tag.
Buat pool node menggunakan perintah
az aks nodepool add
dan atur parameter--gpu-driver
kenone
untuk melewati penginstalan driver GPU default.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
Mengatur bidang API kenone
selama pembuatan kumpulan simpul melewati penginstalan driver GPU otomatis. Simpul yang sudah ada tidak akan diubah. Anda dapat menskalakan kumpulan node ke nol lalu meningkatkannya kembali agar perubahan diterapkan.Jika Anda mendapatkan kesalahan
unrecognized arguments: --gpu-driver none
, perbarui versi Azure CLI. Untuk informasi selengkapnya, lihat Sebelum Memulai.Anda dapat menginstal Operator GPU NVIDIA secara opsional dengan mengikuti langkah-langkah ini.
Konfirmasi bahwa GPU dapat dijadwalkan
Setelah membuat kluster, pastikan bahwa GPU dapat dijadwalkan di Kubernetes.
Cantumkan simpul di kluster Anda menggunakan
kubectl get nodes
perintah .kubectl get nodes
Output Anda akan terlihat mirip dengan contoh output berikut:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Pastikan bahwa GPU dapat dijadwalkan menggunakan perintah
kubectl describe node
.kubectl describe node aks-gpunp-28993262-0
Di bawah bagian Kapasitas, GPU harus dicantumkan sebagai
nvidia.com/gpu: 1
. Output Anda akan terlihat mirip dengan contoh output ringkas berikut:Name: aks-gpunp-28993262-0 Roles: agent Labels: accelerator=nvidia [...] Capacity: [...] nvidia.com/gpu: 1 [...]
Jalankan beban kerja yang mendukung GPU
Untuk melihat GPU beraksi, Anda dapat menjadwalkan beban kerja berkemampuan GPU dengan permintaan sumber daya yang sesuai. Dalam contoh ini, kita akan menjalankan pekerjaan Tensorflow terhadap himpunan data MNIST.
Buat file bernama samples-tf-mnist-demo.yaml dan tempelkan manifes YAML berikut, yang mencakup batas sumber daya :
nvidia.com/gpu: 1
Nota
Jika Anda menerima kesalahan versi tidak cocok saat memanggil driver, seperti "versi driver CUDA tidak mencukupi untuk versi runtime CUDA", tinjau tabel matriks kompatibilitas driver 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"
Jalankan pekerjaan menggunakan
kubectl apply
perintah , yang mengurai file manifes dan membuat objek Kubernetes yang ditentukan.kubectl apply -f samples-tf-mnist-demo.yaml
Menampilkan status beban kerja berkemampuan GPU
Pantau kemajuan tugas menggunakan
kubectl get jobs
perintah dengan--watch
flag. Mungkin perlu beberapa menit untuk terlebih dahulu menarik gambar dan memproses dataset.kubectl get jobs samples-tf-mnist-demo --watch
Ketika kolom COMPLETIONS menunjukkan 1/1, pekerjaan telah berhasil diselesaikan, seperti yang ditunjukkan dalam contoh output berikut:
NAME COMPLETIONS DURATION AGE samples-tf-mnist-demo 0/1 3m29s 3m29s samples-tf-mnist-demo 1/1 3m10s 3m36s
Keluar dari proses
kubectl --watch
dengan Ctrl-C.Dapatkan nama pod menggunakan perintah
kubectl get pods
.kubectl get pods --selector app=samples-tf-mnist-demo
Lihat output pemrosesan yang mendukung GPU menggunakan perintah
kubectl logs
.kubectl logs samples-tf-mnist-demo-smnr6
Contoh output ringkas berikut dari log pod mengonfirmasi bahwa perangkat GPU yang sesuai,
Tesla K80
, telah ditemukan: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
Membersihkan sumber daya
Hapus objek Kubernetes terkait yang Anda buat di artikel ini menggunakan kubectl delete job
perintah .
kubectl delete jobs samples-tf-mnist-demo
Langkah selanjutnya
- Untuk menjalankan pekerjaan Apache Spark, lihat Menjalankan pekerjaan Apache Spark di AKS.
- Untuk informasi selengkapnya tentang fitur penjadwal Kubernetes, lihat Praktik terbaik untuk fitur penjadwal tingkat lanjut di AKS.
- Untuk informasi selengkapnya tentang Azure Kubernetes Service dan Azure Pembelajaran Mesin, lihat:
Azure Kubernetes Service