Gunakan GPU untuk beban kerja intensif komputasi pada Layanan Azure Kubernetes (AKS)

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.

Penting

Mulai 30 November 2025, Azure Kubernetes Service (AKS) tidak lagi mendukung atau menyediakan pembaruan keamanan untuk Azure Linux 2.0. Image node Azure Linux 2.0 dibekukan pada rilis 202512.06.0. Mulai tanggal 31 Oktober 2026, gambar simpul akan dihapus, dan Anda tidak akan dapat menskalakan kumpulan simpul Anda. Migrasikan ke versi Linux Azure yang didukung dengan meningkatkan kumpulan simpul Anda ke versi Kubernetes yang didukung atau bermigrasi ke osSku AzureLinux3. Untuk informasi selengkapnya, lihat masalah Penghentian GitHub dan pengumuman penghentian Pembaruan Azure. Untuk tetap mendapatkan informasi tentang pengumuman dan pembaruan, ikuti catatan rilis AKS.

Pilih pendekatan untuk menjalankan GPU di AKS

AKS menyediakan dua pendekatan untuk menjalankan beban kerja GPU NVIDIA. Pilih pendekatan yang selaras dengan tingkat kontrol yang Anda butuhkan atas tumpukan perangkat lunak GPU dan jumlah manajemen yang Anda inginkan untuk dilakukan AKS atas nama Anda.

Approach Disarankan untuk Komponen yang dikelola AKS Komponen yang Anda kelola
Kumpulan simpul GPU yang dikelola AKS (disarankan ) Sebagian besar skenario yang memerlukan kapasitas GPU beroperasi secara konsisten dengan kumpulan simpul AKS lainnya. Driver GPU NVIDIA, plugin perangkat Kubernetes, pengekspor metrik GPU, dan sinyal kesehatan GPU. Beban kerja GPU Anda.
Penyiapan GPU yang dikelola sendiri Skenario yang memerlukan kontrol terperinci atas driver GPU dan versi plugin perangkat, atau yang menstandarkan pada Operator GPU NVIDIA. Secara bawaan, hanya driver GPU NVIDIA. Plugin perangkat Kubernetes, pengekspor metrik GPU, dan alat kesehatan GPU.

Petunjuk / Saran

Microsoft merekomendasikan kumpulan simpul GPU yang dikelola AKS untuk sebagian besar skenario. AKS menginstal dan memelihara driver NVIDIA, plugin perangkat, dan pengekspor metrik DCGM atas nama Anda, yang mengurangi overhead operasional dan menyederhanakan pembuatan kumpulan simpul GPU ke satu langkah. Gunakan pendekatan yang dikelola sendiri yang dijelaskan dalam artikel ini hanya ketika Anda memerlukan kontrol langsung atas plugin perangkat atau komponen perangkat lunak GPU lainnya.

Sisa artikel ini menjelaskan penyiapan GPU yang dikelola sendiri . Untuk pengalaman terkelola yang direkomendasikan, lihat Membuat kumpulan simpul GPU yang dikelola AKS.

VM yang didukung GPU

Untuk melihat VM yang didukung GPU yang tersedia, lihat Ukuran VM yang dioptimalkan GPU di Azure. Jika ukuran VM GPU tidak ada dalam daftar ukuran VM yang didukung, AKS tidak menginstal komponen perangkat lunak GPU yang diperlukan atau memberikan dukungan. AKS memungkinkan penggunaan ukuran VM GPU yang tidak didukung setelah melewatkan penginstalan driver GPU otomatis.

Periksa ukuran VM yang tersedia dan didukung menggunakan az vm list-skus perintah .

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

Untuk kumpulan node AKS, gunakan ukuran minimum Standard_NC4as_T4_v3. Seri NVv4 (berdasarkan GPU AMD) tidak didukung pada 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.
  • Flatcar Container Linux untuk AKS tidak didukung dengan GPU NVIDIA di AKS.
  • Azure Linux dengan OS Guard untuk AKS tidak didukung dengan GPU NVIDIA di AKS.

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.

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. Jalankan az --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

Penyiapan GPU yang dikelola sendiri

Petunjuk / Saran

Untuk pengalaman terkelola yang direkomendasikan, lihat Membuat kumpulan simpul GPU yang dikelola AKS. AKS menginstal dan mengelola driver, plugin perangkat, dan pengekspor metrik DCGM untuk Anda. Lanjutkan dengan langkah-langkah berikut hanya ketika Anda memerlukan kontrol langsung atas plugin perangkat atau komponen perangkat lunak GPU lainnya.

Penyiapan GPU yang dikelola sendiri mengharuskan Anda menginstal beberapa komponen perangkat lunak NVIDIA, termasuk plugin perangkat NVIDIA untuk Kubernetes dan driver GPU.

Penginstalan plugin perangkat NVIDIA

Anda perlu menginstal plugin perangkat NVIDIA saat menggunakan GPU dalam penyiapan yang dikelola sendiri ini. 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_NC4as_T4_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_NC4as_T4_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.

  1. Buat namespace menggunakan perintah kubectl create namespace.

    kubectl create namespace gpu-resources
    
  2. 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.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. Buat DaemonSet dan konfirmasikan plugin perangkat NVIDIA berhasil dibuat menggunakan kubectl apply perintah .

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. 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.

Penting

Mulai 14 Agustus 2025, Azure Kubernetes Service (AKS) tidak lagi mendukung --skip-gpu-driver-install tag kumpulan simpul. Setelah tanggal ini, Anda tidak akan dapat memprovisikan kumpulan simpul berkemampuan GPU menggunakan tag ini untuk melewati penginstalan driver GPU otomatis. Anda dapat mencapai perilaku yang sama dengan mengatur bidang ke --gpu-drivernone. Untuk informasi selengkapnya tentang penghentian ini, lihat masalah Penghentian GitHub dan pengumuman penghentian Pembaruan Azure. Untuk tetap mendapatkan informasi tentang pengumuman dan pembaruan, ikuti catatan rilis AKS.

  1. Buat pool node menggunakan perintah az aks nodepool add dan atur parameter --gpu-driver ke none 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_NC4as_T4_v3 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3
    

    --gpu-driver Mengatur bidang API ke none 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.

  2. 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.

  1. 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
    
  2. 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.

  1. 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"
    
  2. 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

  1. 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
    
  2. Keluar dari proses kubectl --watch dengan Ctrl-C.

  3. Dapatkan nama pod menggunakan perintah kubectl get pods.

    kubectl get pods --selector app=samples-tf-mnist-demo
    
  4. 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
    

Memutakhirkan kumpulan simpul

Apakah Anda ingin memperbarui atau meningkatkan kumpulan simpul, Anda mungkin menyadari bahwa tidak terdapat --gpu-driver parameter untuk kedua operasi tersebut. Anda mungkin mengalami kesalahan seperti unrecognized arguments: --gpu-driver none jika Anda mencoba meneruskan parameter. Tidak perlu memanggil parameter, karena nilainya tidak terpengaruh oleh operasi tersebut.

Ketika Anda pertama kali membuat kumpulan simpul, parameter apa pun yang Anda nyatakan --gpu-driver tidak akan terpengaruh oleh operasi peningkatan/pembaruan. Jika Anda tidak ingin driver apa pun diinstal, dan dipilih --gpu-driver None saat membuat kumpulan simpul Anda, driver tidak akan diinstal dalam pembaruan/peningkatan berikutnya.

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