Aracılığıyla paylaş


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.

Desteklenen GPU destekli VM'ler

Desteklenen GPU özellikli VM'leri görüntülemek için Azure'da GPU ile optimize edilen VM boyutlarına bakın. 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.

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.

Uyarı

10 Ocak 2025 tarihinden itibaren AKS GPU imajı (önizleme) kullanımdan kaldırılacaktır. Özel üst bilgi artık mevcut değil, bu da AKS GPU görüntüsünü kullanarak yeni GPU etkinleştirilmiş düğüm havuzları oluşturamayacağınız anlamına geliyor. Varsayılan GPU yapılandırmasına geçmeyi veya varsayılan GPU yapılandırmasını kullanmayı öneriyoruz çünkü GPU görüntüsü artık desteklenmiyor. Daha fazla bilgi için AKS sürüm notlarına bakabilir veya bu kullanım ömrü sonu duyurusunu AKS genel yol haritamızda görüntüleyebilirsiniz.

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.

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

Uyarı

gpu-driver API alanı, daha önce düğüm havuzu etiketini kullanan --skip-gpu-driver-install müşteriler için önerilen bir alternatiftir.

  • AKS'de --skip-gpu-driver-install düğüm havuzu etiketi 14 Ağustos 2025'te kullanımdan kaldırılacaktır. Otomatik GPU sürücüsü yüklemesini atlama davranışını korumak için, düğüm havuzlarınızı en son düğüm görüntüsü sürümüne yükseltin ve --gpu-driver alanını none olarak ayarlayın. 14 Ağustos 2025'den sonra, bu varsayılan davranışı atlamak için AKS GPU özellikli düğüm havuzlarını düğüm havuzu etiketiyle --skip-gpu-driver-install sağlayamazsınız. Daha fazla bilgi için bkz skip-gpu-driver etiketin kullanımdan kaldırılması.
  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 bkz . Başlamadan önce.

  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
    

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