İşlem yoğunluklu iş yükleri için GPU'ları kullanma
Şunlar için geçerlidir: Azure Yerel 22H2'de AKS, Windows Server'da AKS
Grafik İşleme Birimleri (GPU), makine öğrenmesi, derin öğrenme ve daha fazlası gibi yoğun işlem gerektiren iş yükleri için kullanılır. Bu makalede, Azure Arc tarafından etkinleştirilen AKS'de işlem yoğunluklu iş yükleri için GPU'ların nasıl kullanılacağı açıklanmaktadır.
Başlamadan önce
GPU özellikli düğüm havuzları çalıştıran Ekim 2022'den eski bir önizleme sürümünden AKS'yi 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ı'na gidin >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 hata durumuna geçer. Tüm GPU cihazlarını konak makineden sökmeniz 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, önceki komut çıkışından PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
:
$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 ana bilgisayardan doğru şekilde çıkarıldığını onaylamak için aşağıdaki komutu çalıştırın. GPU'ları Unknown
bir 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 verenleri tarafından geliştirilen ve sahip olunan bileşenleri içerebilir. Bu bileşenlerin kullanımı,
NVIDIA azaltma sürücüsünü indirmek için
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 komut satırını kullanarak, mitigation sürücüsünü yükleyebilirsiniz.
pnputil /add-driver nvidia_azure_stack_T4_base.inf /install
pnputil /scan-devices
Hafifletme sürücüsünü yükledikten sonra, GPU'lar Nvidia T4_base - Çıkarılmış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'den 3'e kadar olan adımları tekrarlayın.
Önemli
GPU özellikli sanal makineler Windows Server 2019, Windows Server 2022 veya Azure Local'da 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 veya Windows Yönetim Merkezi kullanarak AKS hızlı başlangıcına bakın.
GPU özellikli düğüm havuzuyla yeni bir iş yükü kümesi oluşturma
Şu anda GPU özellikli 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 zamanlayabileceğinizi onaylayın
GPU düğüm havuzunuz oluşturulduktan sonra Kubernetes'te GPU 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 kubectl describe node komutunu kullanarak GPU'lerin zamanlanabilir olduğunu onaylayın. Kapasite bölümünde GPU nvidia.com/gpu: 1olarak görünmelidir.
kubectl describe <node> | findstr "gpu"
Çıkış, çalışan düğümündeki GPU'ları görüntülemeli ve şu şekilde görünmelidir:
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 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
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ırıldığını ve GPU'ya atandığını doğrulayın:
kubectl describe pod cuda-vector-add | findstr 'gpu'
Önceki komutta atanmış bir GPU gösterilmelidir:
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,
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 özellikli 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ükseltilen düğümde podları zamanladığında uygulamalarınızın çalışmaya devam etmesini sağlar.
Yükseltmeden önce:
- Yükseltme sırasında aksama süresini planlayın.
- Standard_NK6 çalıştırıyorsanız fiziksel konak başına fazladan bir GPU veya Standard_NK12çalıştırıyorsanız 2 ek 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 yanıt vermemeye başlar. 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.