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

Azure'daki AMD GPU Sanal Makinesi (VM) boyutları performans ve maliyet esnekliği sağlayarak yüksek işlem kapasitesi sunarken iş yükü gereksinimleriniz için doğru yapılandırmayı seçmenizi sağlar. AKS, işlem yoğunluklu Kubernetes iş yüklerini çalıştırmak için AMD GPU özellikli Linux düğüm havuzlarını destekler.

Bu makale, yeni ve mevcut AKS kümelerinde zamanlanabilir AMD GPU'ları ile düğümler sağlamanıza yardımcı olur.

Sınırlamalar

  • AKS şu anda Standard_ND96isr_MI300X_v5 tarafından desteklenen Azure VM boyutunu desteklemektedir.
  • Mevcut bir düğüm havuzunu AMD GPU VM tipi eklemek için güncellemek AKS'de desteklenmez.
  • AMD GPU desteklemeyen bir düğüm havuzunun AMD GPU VM boyutuyla güncellenmesi desteklenmez.
  • AzureLinux, WindowsAzureLinuxOSGuard ve flatcar AMD GPU ile desteklenmez.

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.

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.

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, kaynak grubundaki myAKSCluster kümenin myResourceGroup kimlik bilgilerini alır:

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

AMD GPU'larını kullanma seçenekleri

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

Uyarı

ŞU anda AKS, AMD GPU özellikli düğüm havuzlarına GPU sürücülerinin veya AMD GPU cihaz eklentisinin yüklenmesini yönetmez veya otomatikleştirmez.

AKSInfinibandSupport özelliğini kaydetme

  1. AMD GPU VM boyutunuz r adlandırma kuralına göre (ör. Standard_ND96isr_MI300X_v5) RDMA özellikliyse, düğüm havuzundaki makinelerin aynı fiziksel Infiniband ağına yerleştirildiğinden emin olmanız gerekir. Bunu başarmak için, AKSInfinibandSupport komutunu kullanarak az feature register özellik bayrağını kaydedin.

    az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
    
  2. komutunu kullanarak az feature show kayıt durumunu doğrulayın:

    az feature show \
    --namespace "Microsoft.ContainerService" \
    --name AKSInfinibandSupport
    
  3. komutunu kullanarak az aks nodepool add AMD GPU özellikli bir düğüm havuzu oluşturun ve API alanını --gpu-driver değerine noneayarlayarak varsayılan sürücü yüklemesini atlayın:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_ND96isr_MI300X_v5 \
        --gpu-driver none
    

    Uyarı

    AKS şu anda, AMD GPU düğümü havuzu oluşturma sırasında otomatik sürücü yüklemesini atlamak için gpu-driver alanının kullanılmasını zorunlu kılar.

AKS'de AMD GPU Operatörünü dağıtmak

AMD GPU Operatörü, sürücü yüklemesi, Kubernetes için AMD cihaz eklentisi, AMD kapsayıcı çalışma zamanı ve daha fazlası dahil olmak üzere GPU sağlamak için gereken tüm AMD yazılım bileşenlerinin yönetimini ve dağıtımını otomatikleştirir. AMD GPU Operatörü bu bileşenleri işlediğinden, AMD cihaz eklentisini AKS kümenize ayrı olarak yüklemeniz gerekmez. Bu, AKS üzerinde AMD GPU İşleci'ni kullanmak için otomatik GPU sürücüsü yüklemesinin atlanması gerektiği anlamına da gelir.

  1. GPU operatörünü yüklemek için AMD belgelerini izleyin.

  2. Komutunu kullanarak düğüm havuzunuzdaKI AMD GPU'larının kubectl get nodes durumunu denetleyin:

    kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'
    

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

    NAME                    STATUS   ROLES   AGE    VERSION
    aks-gpunp-00000000      Ready    agent   2m4s   v1.31.7
    

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

Düğüm havuzunuzu oluşturduktan sonra, GPU'ların AKS kümenizde görev zamanlamasına uygun olduğunu doğrulayın.

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

    kubectl get nodes
    
  2. GPU'ların programlanabilir olduğunu kubectl describe node komutunu kullanarak doğrulayın.

    kubectl describe node aks-gpunp-00000000
    

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

    Name:               aks-gpunp-00000000
    Roles:              agent
    Labels:             accelerator=amd
    
    [...]
    
    Capacity:
    [...]
     amd.com/gpu:                 1
    [...]
    

AMD GPU özellikli iş yükü çalıştırma

AMD GPU'sunu iş başında görmek için uygun kaynak isteğiyle GPU özellikli 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, amd.com/gpu: 1 kaynak sınırı içermektedir.

    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:
               amd.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. Önce görüntüyü çekmek ve veri kümesini işlemek 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
    

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