Azure Kubernetes Hizmeti (AKS) üzerinde hesaplama yoğun iş yükleri için GPU'lar kullanın.

Grafik işleme birimleri (GPU' lar) genellikle grafikler ve görselleştirme iş yükleri gibi yoğun işlem gücü kullanan iş yükleri için kullanılır. AKS, hesaplama yoğun Kubernetes iş yüklerini çalıştırmak için GPU destekli Linux düğüm havuzlarını destekler.

Bu makale, yeni ve mevcut AKS kümelerinde zamanlanabilir GPU'larla düğüm sağlanmasına yardımcı olur.

Tip

AKS'nin NVIDIA sürücüsünü, cihaz eklentisini ve DCGM ölçümlerini sizin için yükleyip koruduğu tam olarak yönetilen bir deneyim için bkz. AKS tarafından yönetilen GPU düğümü havuzları (önizleme).

Önemli

Azure Kubernetes Service (AKS), 30 Kasım 2025'den itibaren Azure Linux 2.0 için güvenlik güncelleştirmelerini desteklemez veya sağlamaz. Azure Linux 2.0 düğüm görüntüsü 202512.06.0 sürümünde dondurulur. 31 Mart 2026'dan itibaren düğüm görüntüleri kaldırılacak ve düğüm havuzlarınızı ölçeklendiremeyeceksiniz. Düğüm havuzlarınızı desteklenen bir Kubernetes sürümüne yükselterek veya osSku AzureLinux3'e geçerek desteklenen bir Azure Linux sürümüne geçin. Daha fazla bilgi için Bkz. Kullanımdan Kaldırma GitHub sorunu ve Azure Güncelleştirmeleri kullanımdan kaldırma duyurusu. Duyurular ve güncelleştirmeler hakkında bilgi sahibi olmak için AKS sürüm notlarını izleyin.

Desteklenen GPU destekli VM'ler

Kullanılabilir GPU özellikli VM'leri görüntülemek için bkz. Azure'da GPU için iyileştirilmiş VM boyutları. Gpu VM boyutu desteklenen VM boyutları listemizde yoksa AKS gerekli GPU yazılım bileşenlerini yüklemez veya destek sağlamaz. AKS, otomatik GPU sürücüsü yüklemesini atladıktan sonra desteklenmeyen GPU VM boyutlarının kullanılmasına izin verir.

komutunu kullanarak az vm list-skus kullanılabilir ve desteklenen VM boyutlarını denetleyin.

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

AKS düğüm havuzları için, minimum Standard_NC6s_v3 boyutunu öneriyoruz. NVv4 serisi (AMD GPU'larına dayalı), AKS üzerinde desteklenmemektedir.

Uyarı

GPU özellikli VM'ler, daha yüksek fiyatlandırma ve bölge kullanılabilirliğine tabi özel donanımlar içerir. Daha fazla bilgi için fiyatlandırma aracı ve bölge kullanılabilirliği konularına bakın.

Sınırlamalar

  • Azure üzerinde Linux GPU destekli bir node havuzu kullanıyorsanız, otomatik güvenlik yamaları uygulanmaz. Mevcut AKS API sürümünüze, düğüm işletim sistemi yükseltme kanalının varsayılan davranışını öğrenmek için bakın.
  • AKS için Flatcar Container Linux, AKS üzerinde NVIDIA GPU ile desteklenmez.
  • AKS için OS Guard ile Azure Linux, AKS üzerinde NVIDIA GPU ile desteklenmez.

Uyarı

AKS API sürüm 2023-06-01 veya üzeri için düğüm işletim sistemi yükseltmesi için varsayılan kanal NodeImage'dır. Önceki sürümler için varsayılan kanal Yok'dur. Daha fazla bilgi edinmek için bkz. otomatik yükseltme.

  • Mevcut bir düğüm havuzunu, GPU VM boyutunu eklemek için güncellemek AKS üzerinde desteklenmemektedir.

Başlamadan önce

  • Bu makale, mevcut bir AKS kümeniz olduğunu varsayar. Kümeniz yoksa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturun.
  • Alanı ayarlamak için Azure CLI sürüm 2.72.2 veya üstünün yüklü olması gereklidir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI'yı yükleme.
  • aks-preview Azure CLI uzantısı yüklüyse lütfen sürümü 18.0.0b2 veya sonraki bir sürüme güncelleştirin.

Kümeniz için kimlik bilgilerini alın

AKS kümeniz için kimlik bilgilerini az aks get-credentials komutunu kullanarak alın. Aşağıdaki örnek komut, myResourceGroup kaynak grubundaki myAKSCluster için kimlik bilgilerini alır:

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

NVIDIA GPU'ları kullanma seçenekleri

NVIDIA GPU'larının kullanılması Kubernetes için NVIDIA cihaz eklentisi, GPU sürücü yüklemesi ve daha fazlası gibi çeşitli NVIDIA yazılım bileşenlerinin yüklenmesini içerir.

Uyarı

Varsayılan olarak, Microsoft düğüm görüntüsü dağıtımının bir parçası olarak NVIDIA sürücülerinin sürümünü otomatik olarak korur ve AKS bunu destekler ve yönetir . NVIDIA sürücüleri varsayılan olarak GPU özellikli düğümlere yüklenirken cihaz eklentisini yüklemeniz gerekir.

NVIDIA cihaz eklentisi kurulumu

AKS üzerinde GPU'lar kullanılırken NVIDIA aygıt eklentisinin kurulması gereklidir. Bazı durumlarda, kurulum, NVIDIA GPU Operator kullanıldığında olduğu gibi otomatik olarak gerçekleştirilir. Alternatif olarak, NVIDIA cihaz eklentisini manuel olarak yükleyebilirsiniz.

NVIDIA aygıt eklentisini elle yükleyin

NVIDIA cihaz eklentisi için bir DaemonSet dağıtabilirsiniz; bu, her düğümde çalışarak GPU'lar için gerekli olan sürücüleri sağlayan bir pod çalıştırır. Bu, Azure Linux için GPU etkinleştirilmiş düğüm havuzları kullanıldığında önerilen yaklaşımdır.

Varsayılan OS SKU'sunu kullanmak için, bir OS SKU belirtmeden düğüm havuzunu oluşturun. Düğüm havuzu, kümenin Kubernetes sürümü temel alınarak varsayılan işletim sistemi için yapılandırılmıştır.

Kümenize bir düğüm havuzu eklemek için az aks nodepool add komutunu kullanın.

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

Bu komut, gpunp adında bir düğüm kümesini myAKSCluster içinde myResourceGroup grubuna ekler ve aşağıdaki düğüm kümesi ayarlarını yapılandırmak için parametreler kullanır.

  • --node-vm-size: Düğüm havuzundaki düğümün VM boyutunu Standard_NC6s_v3 olarak ayarlar.
  • --node-taints: Düğüm havuzunda bir sku=gpu:NoSchedule lekesi belirtir.
  • --enable-cluster-autoscaler: Küme otomatik ölçekleyiciyi etkinleştirir.
  • --min-count: Küme otomatik ölçekleyicisini, düğüm havuzunda en az bir düğüm olacak şekilde yapılandırır.
  • --max-count: Küme otomatik ölçekleyicisini, düğüm havuzunda en fazla üç düğüm olacak şekilde yapılandırır.

Uyarı

Yalnızca düğüm havuzları oluşturulurken, taints ve VM boyutları ayarlanabilir, ancak otomatik ölçekleyici ayarlarını istediğiniz zaman güncelleyebilirsiniz.

  1. komutunu kullanarak kubectl create namespace bir ad alanı oluşturun.

    kubectl create namespace gpu-resources
    
  2. nvidia-device-plugin-ds.yaml adlı bir dosya oluşturun ve Kubernetes için NVIDIA cihaz eklentisi projesi kapsamında sağlanan aşağıdaki YAML bildirimini yapıştırın:

    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'i oluşturun ve kubectl apply komutunu kullanarak NVIDIA aygıt eklentisinin başarıyla oluşturulduğunu doğrulayın.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. NVIDIA cihaz eklentisini başarıyla yüklediğinize göre, GPU'larınızın zamanlanabilir olup olmadığını denetleyebilirsiniz ve bir GPU iş yükü çalıştırabilirsiniz.

GPU sürücüsü yüklemesini atlama

NVIDIA sürücülerinin yüklemesini denetlemek veya NVIDIA GPU Operatörünü kullanmak istiyorsanız, varsayılan GPU sürücüsü yüklemesini atlayabilirsiniz. Microsoft, düğüm görüntüsü dağıtımı kapsamında NVIDIA sürücülerinin bakım ve uyumluluğunu desteklemez veya yönetmez .

Önemli

Azure Kubernetes Service (AKS), 14 Ağustos 2025 tarihinden itibaren düğüm havuzu etiketini desteklememektedir --skip-gpu-driver-install . Bu tarihten sonra, otomatik GPU sürücüsü yüklemesini atlamak için bu etiketi kullanarak GPU özellikli düğüm havuzları sağlayamazsınız. --gpu-driver alanını none olarak ayarlayarak aynı davranışı elde edebilirsiniz. Bu kullanımdan kaldırma hakkında daha fazla bilgi için GitHub Kullanımdan Kaldırma Sorunu ve Azure Güncelleştirmeleri kullanımdan kaldırma duyurusu başlıklarına bakın. Duyurular ve güncelleştirmeler hakkında bilgi sahibi olmak için AKS sürüm notlarını izleyin.

  1. az aks nodepool add komutunu kullanarak bir düğüm havuzu oluşturun ve varsayılan GPU sürücüsü yüklemesini atlamak için --gpu-driver alanını none olarak ayarlayın.

    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
    

    Düğüm havuzu oluşturulurken --gpu-driver API alanının none olarak ayarlanması, otomatik GPU sürücüsü yüklemesini geçer. Mevcut düğümler değiştirilmez. Düğüm havuzunu önce sıfıra, sonra yeniden yükselterek değişikliğin etkili olmasını sağlayabilirsiniz.

    Hatayı unrecognized arguments: --gpu-driver none alırsanız Azure CLI sürümünü güncelleştirin. Daha fazla bilgi için Başlamadan önce bölümüne bakın.

  2. bu adımları izleyerek isteğe bağlı olarak NVIDIA GPU operatörünü yükleyebilirsiniz.

GPU'ların zamanlanabilir olduğunu doğrulayın.

Kümenizi oluşturduktan sonra GPU'ların Kubernetes'te zamanlanabilir olduğunu onaylayın.

  1. Kümenizdeki düğümleri kubectl get nodes komutunu kullanarak listeleyin.

    kubectl get nodes
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. GPU'ların programlanabilir olduğunu kubectl describe node komutunu kullanarak doğrulayın.

    kubectl describe node aks-gpunp-28993262-0
    

    Kapasite bölümünün altında GPU olarak nvidia.com/gpu: 1listelenmelidir. Çıkışınız aşağıdaki daraltılmış örnek çıkışa benzer olmalıdır:

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

GPU destekli bir iş yükü çalıştırın

GPU'yu çalışırken görmek için, uygun kaynak isteği ile GPU etkinleştirilmiş bir iş yükü zamanlayabilirsiniz. Bu örnekte, MNIST veri seti üzerinde bir Tensorflow işi çalıştıracağız.

  1. Bir dosya oluşturun ve şu YAML bildirimini yapıştırın: samples-tf-mnist-demo.yaml. Bu bildirim, nvidia.com/gpu: 1 kaynak sınırı içermektedir.

    Uyarı

    Sürücülere çağrı yaparken "CUDA sürücü sürümü CUDA çalışma zamanı sürümü için yetersiz" gibi bir sürüm uyuşmazlığı hatası alırsanız NVIDIA sürücü matrisi uyumluluk grafiğini gözden geçirin.

    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 komutunu kullanarak işi çalıştırın; bu komut manifest dosyasını ayrıştırır ve tanımlanan Kubernetes nesnelerini oluşturur.

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

GPU etkin iş yükünün durumunu görüntüle

  1. İşin ilerleyişini, kubectl get jobs komutunu --watch bayrağı ile kullanarak izleyin. Görüntüyü çekmek ve veri setini işlemek için birkaç dakika sürebilir.

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

    TAMAMLANMALAR sütununda 1/1 gösterildiğinde, aşağıdaki örnek çıktıda gösterildiği gibi iş başarıyla tamamlanmıştır:

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. kubectl --watch işlemini sonlandırmak için Ctrl-C tuşlarına basın.

  3. Pod'un adını kubectl get pods komutunu kullanarak alın.

    kubectl get pods --selector app=samples-tf-mnist-demo
    
  4. GPU özellikli iş yükünün çıktısını kubectl logs komutunu kullanarak görüntüleyin.

    kubectl logs samples-tf-mnist-demo-smnr6
    

    Aşağıdaki yapılandırılmış örnek pod günlüğü çıktısı, uygun GPU cihazı Tesla K80'nin keşfedildiğini doğrular.

    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
    

Düğüm havuzunu yükseltme

Düğüm havuzlarınızı güncellemek veya yükseltme işlemi yapmak istediğinizde, her iki işlem için de --gpu-driver parametre olmadığını fark edebilirsiniz. parametresini geçirmeye çalışırsanız gibi unrecognized arguments: --gpu-driver none bir hatayla karşılaşabilirsiniz. Değer bu tür işlemlerden etkilenmediğinden parametresinde çağrı yapmanıza gerek yoktur.

Düğüm havuzunuzu ilk oluşturduğunuzda, hangi --gpu-driver parametresini bildirirseniz bildirin, bunlar yükseltme/güncelleştirme işlemlerinden etkilenmez. Düğüm havuzunuzu oluştururken --gpu-driver None seçip sürücülerin yüklenmesini istemiyorsanız, sürücüler daha sonraki güncellemelerde/yükseltmelerde yüklenmez.

Kaynakları temizle

Bu makalede oluşturduğunuz ilişkili Kubernetes nesnelerini kubectl delete job komutunu kullanarak kaldırın.

kubectl delete jobs samples-tf-mnist-demo

Sonraki Adımlar