Azure Kubernetes Service'te (AKS) yoğun işlem yoğunluklu iş yükleri için Windows GPU'larını kullanma (önizleme)

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, yoğun işlem gücü kullanan Kubernetes iş yüklerini çalıştırmak için GPU özellikli Windows ve Linux düğüm havuzlarını destekler.

Bu makale, Windows düğümlerini yeni ve mevcut AKS kümelerinde zamanlanabilir GPU'larla (önizleme) hazırlamanıza yardımcı olur.

Desteklenen GPU özellikli sanal makineler (VM'ler)

Desteklenen GPU özellikli VM'leri görüntülemek için bkz . Azure'da GPU için iyileştirilmiş VM boyutları. AKS düğüm havuzları için en düşük Standard_NC6s_v3 boyutu önerilir. NVv4 serisi (AMD GPU'ları temel alınarak) AKS'de desteklenmez.

Not

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 bkz . fiyatlandırma aracı ve bölge kullanılabilirliği.

Sınırlamalar

  • GPU eklemek için mevcut bir Windows düğüm havuzunu güncelleştirme desteklenmez.
  • Kubernetes sürüm 1.28 ve altında desteklenmez.

Başlamadan önce

  • Bu makalede, mevcut bir AKS kümeniz olduğu varsayılır. Kümeniz yoksa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturun.
  • Azure CLI sürüm 1.0.0b2 veya sonraki bir sürümün yüklenmiş ve bu alanı komutuyla az aks nodepool add kullanacak --skip-gpu-driver-install şekilde yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
  • Azure CLI sürüm 9.0.0b5 veya sonraki bir sürümün yüklü olması ve alanı komutuyla kullanmak --driver-type üzere yapılandırılması az aks nodepool add gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Kümenizin kimlik bilgilerini alma

  • komutunu kullanarak az aks get-credentials AKS kümenizin kimlik bilgilerini 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
    

Otomatik sürücü yüklemesiyle Windows GPU kullanma

NVIDIA GPU'larının kullanılması Kubernetes için DirectX cihaz eklentisi, GPU sürücü yüklemesi ve daha fazlası gibi çeşitli NVIDIA yazılım bileşenlerinin yüklenmesini içerir. Desteklenen GPU özellikli vm ile bir Windows düğüm havuzu oluşturduğunuzda, bu bileşenler ve uygun NVIDIA CUDA veya GRID sürücüleri yüklenir. NC ve ND serisi VM boyutları için CUDA sürücüsü yüklenir. NV serisi VM boyutları için GRID sürücüsü yüklenir.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Azure CLI uzantısını aks-preview yükleme

  • veya komutunu kullanarak aks-preview uzantısını kaydedin veya az extension update güncelleştirinaz extension add.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

Özellik bayrağını WindowsGPUPreview kaydetme

  1. WindowsGPUPreview komutunu kullanarak özellik bayrağını az feature register kaydedin.

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.

  2. komutunu kullanarak az feature show kayıt durumunu doğrulayın.

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. Durum Kayıtlı olarak yansıtıldığında, komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyinaz provider register.

    az provider register --namespace Microsoft.ContainerService
    

Windows GPU özellikli düğüm havuzu oluşturma (önizleme)

Windows GPU özellikli bir düğüm havuzu oluşturmak için desteklenen bir GPU özellikli VM boyutu kullanmanız ve olarak Windowsbelirtmeniz os-type gerekir. Varsayılan Windows os-sku şeklindedir Windows2022, ancak tüm Windows os-sku seçenekleri desteklenir.

  1. komutunu kullanarak az aks nodepool add Windows GPU özellikli bir düğüm havuzu oluşturun.

    az aks nodepool add \
       --resource-group myResourceGroup \
       --cluster-name myAKSCluster \
       --name gpunp \
       --node-count 1 \
       --os-type Windows \
       --kubernetes-version 1.29.0 \
       --node-vm-size Standard_NC6s_v3
    
  2. GPU'larınızın zamanlanabilir olup olmadığını denetleyin.

  3. GPU'larınızın zamanlanabilir olduğunu onayladıktan sonra GPU iş yükünüzü çalıştırabilirsiniz.

GPU Sürücü Türünü Belirtme (önizleme)

Varsayılan olarak AKS, desteklenen gpu özellikli her VM için varsayılan bir GPU sürücü türü belirtir. İş yükü ve sürücü uyumluluğu GPU iş yüklerinin çalışması için önemli olduğundan, Windows GPU düğümünüzün sürücü türünü belirtebilirsiniz. Bu özellik Linux GPU düğüm havuzları için desteklenmez.

GPU desteğine sahip bir Windows aracı havuzu oluştururken, bayrağını kullanarak --driver-type GPU sürücüsünün türünü belirtme seçeneğiniz vardır.

Sunduğumuz seçenekler şunlardır:

  • GRID: Sanallaştırma desteği gerektiren uygulamalar için.
  • CUDA: Bilimsel bilgi işlem ve yoğun veri kullanımı gerektiren uygulamalarda hesaplama görevleri için iyileştirilmiştir.

Not

Bayrağı ayarladığınızda --driver-type , seçilen sürücü türünün düğüm havuzunuzun belirli VM boyutu ve yapılandırmasıyla uyumlu olduğundan emin olunmasının sorumluluğunu üstlenirsiniz. AKS uyumluluğu doğrulamaya çalışırken, düğüm havuzu oluşturma işleminin belirtilen sürücü türüyle temel alınan VM veya donanım arasındaki uyumsuzluklar nedeniyle başarısız olabileceği senaryolar vardır.

Belirli bir GPU Sürücüsü türüyle Windows GPU özellikli bir düğüm havuzu oluşturmak için komutunu kullanın az aks nodepool add .

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --os-type Windows \
    --kubernetes-version 1.29.0 \
    --node-vm-size Standard_NC6s_v3 \
    --driver-type GRID

Örneğin, yukarıdaki komut GPU sürücü türünü kullanarak GRID GPU özellikli bir düğüm havuzu oluşturur. Bu sürücü türünün seçilmesi, NC serisi VM sku'ları için varsayılan CUDA sürücü türünü geçersiz kılar.

Windows GPU'larını el ile sürücü yükleme ile kullanma

AKS'de N serisi (NVIDIA GPU) VM boyutlarına sahip bir Windows düğüm havuzu oluştururken, GPU sürücüsü ve Kubernetes DirectX cihaz eklentisi otomatik olarak yüklenir. Bu otomatik yüklemeyi atlamak için aşağıdaki adımları kullanın:

  1. kullanarak --skip-gpu-driver-installGPU sürücüsü yüklemesini (önizleme) atlayın.
  2. Kubernetes DirectX cihaz eklentisinin el ile yüklenmesi.

GPU sürücüsü yüklemesini atlama (önizleme)

AKS'de varsayılan olarak otomatik GPU sürücüsü yüklemesi etkindir. Kendi sürücülerinizi yükleme gibi bazı durumlarda GPU sürücüsü yüklemesini atlamak isteyebilirsiniz.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

  1. veya komutunu kullanarak aks-preview uzantısını kaydedin veya az extension update güncelleştirinaz extension add.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. Otomatik GPU sürücüsü yüklemesini az aks nodepool add atlamak için bayrağıyla --skip-gpu-driver-install komutunu kullanarak bir düğüm havuzu oluşturun.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022 \
        --skip-gpu-driver-install
    

Not

--node-vm-size Kullandığınız değer HENÜZ AKS'ye eklenmemişse GPU'ları kullanamazsınız ve --skip-gpu-driver-install çalışmaz.

Kubernetes DirectX cihaz eklentisini el ile yükleme

GPU'lar için gerekli sürücüleri sağlamak üzere her düğümde bir pod çalıştıran Kubernetes DirectX cihaz eklentisi için bir DaemonSet dağıtabilirsiniz.

  • komutunu kullanarak az aks nodepool add kümenize bir düğüm havuzu ekleyin.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

Ad alanı oluşturma ve Kubernetes DirectX cihaz eklentisini dağıtma

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

    kubectl create namespace gpu-resources
    
  2. k8s-directx-device-plugin.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:
          # 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.  This annotation works in tandem with the toleration below.
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: nvidia-device-plugin-ds
        spec:
          tolerations:
          # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
          # This, along with the annotation above marks this pod as a critical add-on.
          - key: CriticalAddonsOnly
            operator: Exists
          - key: nvidia.com/gpu
            operator: Exists
            effect: NoSchedule
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
          containers:
          - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1
            name: nvidia-device-plugin-ctr
            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 komutunu kullanarak NVIDIA cihaz eklentisinin başarıyla oluşturulduğunu kubectl apply onaylayın.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. Artık NVIDIA cihaz eklentisini başarıyla yüklediğinize göre GPU'larınızın zamanlanabilir olup olmadığını kontrol edebilirsiniz.

GPU'ların zamanlanabilir olduğunu onaylayın

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

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

    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. komutunu kullanarak kubectl describe node GPU'ların zamanlanabilir olduğunu onaylayın.

    kubectl describe node aks-gpunp-28993262-0
    

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

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

GPU kullanımını izlemek için Container Insights'ı kullanma

AKS ile Container Insights aşağıdaki GPU kullanım ölçümlerini izler:

Ölçüm adı Ölçüm boyutu (etiketler) Açıklama
containerGpuDutyCycle container.azm.ms/clusterId, container.azm.ms/clusterName, containerName, , gpuId, gpuModel, gpuVendor GPU'nun bir kapsayıcı için meşgul/etkin olarak işlendiği geçmiş örnek dönemi (60 saniye) içindeki zaman yüzdesi. Görev döngüsü 1 ile 100 arasında bir sayıdır.
containerGpuLimits container.azm.ms/clusterId, container.azm.ms/clusterName, containerName Her kapsayıcı sınırları bir veya daha fazla GPU olarak belirtebilir. GPU'nun bir bölümünü istemek veya sınırlamak mümkün değildir.
containerGpuRequests container.azm.ms/clusterId, container.azm.ms/clusterName, containerName Her kapsayıcı bir veya daha fazla GPU isteyebilir. GPU'nun bir bölümünü istemek veya sınırlamak mümkün değildir.
containerGpumemoryTotalBytes container.azm.ms/clusterId, container.azm.ms/clusterName, containerName, , gpuId, gpuModel, gpuVendor Belirli bir kapsayıcı için kullanılabilen bayt cinsinden GPU Belleği miktarı.
containerGpumemoryUsedBytes container.azm.ms/clusterId, container.azm.ms/clusterName, containerName, , gpuId, gpuModel, gpuVendor Belirli bir kapsayıcı tarafından kullanılan bayt cinsinden GPU Belleği miktarı.
nodeGpuAllocatable container.azm.ms/clusterId, container.azm.ms/clusterName, gpuVendor Kubernetes'in kullanabileceği düğümdeki GPU sayısı.
nodeGpuCapacity container.azm.ms/clusterId, container.azm.ms/clusterName, gpuVendor Bir düğümdeki TOPLAM GPU sayısı.

Kaynakları temizleme

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

    kubectl delete jobs windows-gpu-workload
    

Sonraki adımlar