Aracılığıyla paylaş


Yoğun işlem gerektiren iş yükleri için GPU'ları kullanma

Şunlar için geçerlidir: Azure Stack HCI 22H2 üzerinde AKS, Windows Server'da AKS

Grafik İşleme Birimleri (GPU), makine öğrenmesi, derin öğrenme ve daha fazlası gibi yoğun işlem gücü kullanan iş yükleri için kullanılır. Bu makalede Azure Arc tarafından etkinleştirilen AKS'de yoğun işlem gerektiren iş yükleri için GPU'ların nasıl kullanılacağı açıklanmaktadır.

Başlamadan önce

AKS'yi Gpu özellikli düğüm havuzları çalıştıran Ekim 2022'den eski bir önizleme sürümünden güncelleştiriyorsanız başlamadan önce GPU'ları çalıştıran tüm iş yükü kümelerini kaldırdığınızdan emin olun. Bu bölümdeki adımları izleyin.

1. Adım: Nvidia ana bilgisayar sürücüsünü kaldırma

Her konak makinesinde, Denetim Masası > Program Ekle veya Kaldır'a gidin, NVIDIA ana bilgisayar sürücüsünü kaldırın ve ardından makineyi yeniden başlatın. Makine yeniden başlatıldıktan sonra sürücünün başarıyla kaldırıldığını onaylayın. Yükseltilmiş bir PowerShell terminali açın ve aşağıdaki komutu çalıştırın:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video" 

GPU cihazlarının bu örnek çıktıda gösterildiği gibi bir hata durumunda göründüğünü görmeniz gerekir:

Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

2. Adım: Konak sürücüsünü konaktan çıkarma

Konak sürücüsünü kaldırdığınızda fiziksel GPU bir hata durumuna geçer. Tüm GPU cihazlarını konaktan çıkarmanız gerekir.

Her GPU (3B Video Denetleyicisi) cihazı için PowerShell'de aşağıdaki komutları çalıştırın. Örnek kimliğini kopyalayın; örneğin, PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 önceki komut çıkışından:

$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force

GPU'ların konaktan doğru şekilde çıkarıldığını onaylamak için aşağıdaki komutu çalıştırın. GPU'ları şu Unknown duruma getirmelisiniz:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

3. Adım: NVIDIA risk azaltma sürücüsünü indirme ve yükleme

Yazılım, NVIDIA Corporation veya lisans verenler tarafından geliştirilen ve sahip olunan bileşenleri içerebilir. Bu bileşenlerin kullanımı NVIDIA son kullanıcı lisans sözleşmesine tabidir.

NVIDIA azaltma sürücüsünü indirmek için NVIDIA veri merkezi belgelerine bakın. Sürücüyü indirdikten sonra arşivi genişletin ve her konak makinesine risk azaltma sürücüsünü yükleyin.

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

Risk azaltma sürücüsünü yüklemek için ayıklanan dosyaların bulunduğu klasöre gidin, nvidia_azure_stack_T4_base.inf dosyasına sağ tıklayın ve Yükle'yi seçin. Doğru sürücüye sahip olup olmadığınızı denetleyin; AKS şu anda yalnızca NVIDIA Tesla T4 GPU'larını desteklemektedir.

Ayrıca, klasöre gidip aşağıdaki komutları çalıştırarak da komut satırını kullanarak yükleyerek risk azaltma sürücüsünü yükleyebilirsiniz:

pnputil /add-driver nvidia_azure_stack_T4_base.inf /install 
pnputil /scan-devices 

Risk azaltma sürücüsünü yükledikten sonra GPU'lar Nvidia T4_base - Çıkarıldı altında Tamam durumunda listelenir:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

4. Adım: 1 ile 3 arasındaki adımları yineleyin

Yük devretme kümenizdeki her düğüm için 1 ile 3 arasındaki adımları yineleyin.

Önemli

GPU özellikli sanal makineler Windows Server 2019, Windows Server 2022 veya Azure Stack HCI'de yük devretme kümelemesi için eklenmez.

AKS'yi yükleme veya güncelleştirme

Arc tarafından etkinleştirilen AKS'yi yüklemek veya güncelleştirmek için PowerShell kullanarak veya Windows Admin Center kullanarak AKS hızlı başlangıcına bakın.

GPU özellikli düğüm havuzuyla yeni bir iş yükü kümesi İçerik Oluşturucu

Şu anda GPU etkin düğüm havuzlarını kullanmak yalnızca Linux düğüm havuzları için kullanılabilir.

New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6 

İş yükü kümesini yükledikten sonra Kubeconfig'inizi almak için aşağıdaki komutu çalıştırın:

Get-AksHciCredential -Name gpucluster

GPU'ları zamanlayabileceğinizi onaylayın

GPU düğüm havuzunuz oluşturulduktan sonra Kubernetes'te GPU'ları zamanlayabileceğinizi onaylayın. İlk olarak kubectl get node komutunu kullanarak kümenizdeki düğümleri listeleyin:

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

Şimdi GPU'ların zamanlanabilir olduğunu onaylamak için kubectl describe node komutunu kullanın. Kapasite bölümünün altında GPU nvidia.com/gpu: 1 olarak görünmelidir.

kubectl describe <node> | findstr "gpu" 

Çıktı, çalışan düğümünden GPU'ları görüntülemeli ve şuna benzer olmalıdır:

         nvidia.com/gpu.compute.major=7
         nvidia.com/gpu.compute.minor=5
         nvidia.com/gpu.count=1
         nvidia.com/gpu.family=turing
         nvidia.com/gpu.machine=Virtual-Machine
         nvidia.com/gpu.memory=16384
         nvidia.com/gpu.product=Tesla-T4
Annotations:    cluster.x-k8s.io/cluster-name: gpucluster
                cluster.x-k8s.io/machine: gpunodepool-md-58d9b96dd9-vsdbl
                cluster.x-k8s.io/owner-name: gpunodepool-md-58d9b96dd9
         nvidia.com/gpu:   1
         nvidia.com/gpu:   1
ProviderID:         moc://gpunodepool-97d9f5667-49lt4
kube-system         gpu-feature-discovery-gd62h       0 (0%)    0 (0%)   0 (0%)      0 (0%)     7m1s
         nvidia.com/gpu   0     0

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

Önceki adımları tamamladıktan sonra test için yeni bir YAML dosyası oluşturun; örneğin, gpupod.yaml. Aşağıdaki YAML dosyasını kopyalayıp gpupod.yaml adlı yeni dosyaya yapıştırın ve kaydedin:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

Örnek uygulamayı dağıtmak için aşağıdaki komutu çalıştırın:

kubectl apply -f gpupod.yaml

Pod'un başlatıldığını, çalıştırmanın tamamlandığını ve GPU'ya atandığını doğrulayın:

kubectl describe pod cuda-vector-add | findstr 'gpu'

Önceki komut atanmış bir GPU göstermelidir:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Testin başarılı olup olmadığını görmek için podun günlük dosyasını denetleyin:

kubectl logs cuda-vector-add

Aşağıda, önceki komutun örnek çıkışı verilmiştir:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

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.

SSS

GPU özellikli bir düğüm havuzunun yükseltildiği sırada ne olur?

GPU özellikli düğüm havuzlarını yükseltmek, normal düğüm havuzları için kullanılan sıralı yükseltme desenini izler. Yeni bir VM'deki GPU etkin düğüm havuzlarının fiziksel konak makinesinde başarıyla oluşturulması için, başarılı cihaz ataması için bir veya daha fazla fiziksel GPU'yu kullanılabilir olması gerekir. Bu kullanılabilirlik, Kubernetes bu yükseltilmiş düğümde podları zamanladığında uygulamalarınızın çalışmaya devam etmesini sağlar.

Yükseltmeden önce:

  1. Yükseltme sırasında kapalı kalma süresini planlayın.
  2. Standard_NK6 çalıştırıyorsanız fiziksel konak başına fazladan bir GPU veya Standard_NK12 çalıştırıyorsanız fazladan 2 GPU'ya sahip olun. Tam kapasitede çalışıyorsanız ve fazladan GPU'nuz yoksa, yükseltmeden önce düğüm havuzunuzun ölçeğini tek bir düğüme azaltmanızı ve yükseltme başarılı olduktan sonra ölçeği artırmanızı öneririz.

Yükseltme sırasında fiziksel makinemde fazladan fiziksel GPU'larım yoksa ne olur?

Sıralı yükseltmeyi kolaylaştırmak için ek GPU kaynakları olmayan bir kümede yükseltme tetikleniyorsa, bir GPU kullanılabilir olana kadar yükseltme işlemi kilitleniyor. Tam kapasitede çalışıyorsanız ve fazladan GPU'nuz yoksa, yükseltmeden önce düğüm havuzunuzun ölçeğini tek bir düğüme azaltmanızı ve yükseltme başarılı olduktan sonra ölçeği artırmanızı öneririz.

Sonraki adımlar