Použití GPU pro úlohy náročné na výpočetní prostředky
Platí pro: AKS ve Službě Azure Stack HCI 22H2, AKS na Windows Serveru
Grafické procesory (GPU) se používají pro úlohy náročné na výpočetní výkon, jako je strojové učení, hluboké učení a další. Tento článek popisuje, jak používat GPU pro úlohy náročné na výpočetní výkon v AKS povolené službou Azure Arc.
Než začnete
Pokud aktualizujete AKS z verze Preview starší než říjen 2022, ve které běží fondy uzlů s podporou GPU, nezapomeňte před zahájením odebrat všechny clustery úloh s gpu. Postupujte podle kroků v této části.
Krok 1: Odinstalace ovladače hostitele Nvidia
Na každém hostitelském počítači přejděte na Ovládací panely > Přidat nebo odebrat programy, odinstalujte ovladač hostitele NVIDIA a pak počítač restartujte. Po restartování počítače ověřte, že se ovladač úspěšně odinstaloval. Otevřete terminál PowerShellu se zvýšenými oprávněními a spusťte následující příkaz:
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
Zařízení GPU by se měla zobrazovat v chybovém stavu, jak je znázorněno v tomto ukázkovém výstupu:
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
Krok 2: Odpojení ovladače hostitele od hostitele
Když odinstalujete ovladač hostitele, fyzický gpu přejde do chybového stavu. Musíte odpojit všechna zařízení GPU od hostitele.
Pro každé zařízení GPU (3D Video Controller) spusťte v PowerShellu následující příkazy. Zkopírujte ID instance; Například PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
z předchozího výstupu příkazu:
$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
Spuštěním následujícího příkazu ověřte, že se gpu správně odpojí od hostitele. Grafické procesory byste měli dát do Unknown
stavu:
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
Krok 3: Stažení a instalace ovladače NVIDIA pro zmírnění rizik
Software může obsahovat komponenty vyvinuté a vlastněné společností NVIDIA Corporation nebo jejími poskytovateli licencí. Používání těchto komponent se řídí licenční smlouvou s koncovým uživatelem společnosti NVIDIA.
Projděte si dokumentaci k datovému centru NVIDIA a stáhněte si ovladač NVIDIA pro zmírnění rizik. Po stažení ovladače rozbalte archiv a nainstalujte ovladač pro zmírnění rizik na každý hostitelský počítač.
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\
Pokud chcete nainstalovat ovladač pro zmírnění rizik, přejděte do složky obsahující extrahované soubory, klikněte pravým tlačítkem na soubor nvidia_azure_stack_T4_base.inf a vyberte Nainstalovat. Zkontrolujte, zda máte správný ovladač; AKS v současné době podporuje pouze NVIDIA Tesla T4 GPU.
Instalaci můžete také nainstalovat pomocí příkazového řádku tak, že přejdete do složky a spuštěním následujících příkazů nainstalujete ovladač pro zmírnění rizik:
pnputil /add-driver nvidia_azure_stack_T4_base.inf /install
pnputil /scan-devices
Po instalaci ovladače pro zmírnění rizik jsou grafické procesory uvedené ve stavu OK v části Nvidia T4_base – Odpojeno:
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
Krok 4: Opakování kroků 1 až 3
Opakujte kroky 1 až 3 pro každý uzel v clusteru s podporou převzetí služeb při selhání.
Důležité
Virtuální počítače s podporou GPU se nepřidávají do clusteringu s podporou převzetí služeb při selhání ve Windows Serveru 2019, Windows Serveru 2022 nebo Azure Stack HCI.
Instalace nebo aktualizace AKS
Projděte si rychlý start pro AKS pomocí PowerShellu nebo použití Windows Admin Center k instalaci nebo aktualizaci AKS povolené službou Arc.
Create nového clusteru úloh s fondem uzlů s podporou GPU
V současné době je použití fondů uzlů s podporou GPU dostupné jenom pro fondy uzlů s Linuxem.
New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6
Po instalaci clusteru úloh spusťte následující příkaz a získejte kubeconfig:
Get-AksHciCredential -Name gpucluster
Potvrďte, že můžete naplánovat GPU.
Po vytvoření fondu uzlů GPU ověřte, že můžete naplánovat gpu v Kubernetes. Nejprve pomocí příkazu kubectl get nodes vypište uzly v clusteru:
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
Teď pomocí příkazu kubectl describe node potvrďte, že se gpu dají naplánovat. V části Kapacita by se gpu mělo zobrazit jako nvidia.com/gpu: 1.
kubectl describe <node> | findstr "gpu"
Výstup by měl zobrazit GPU z pracovního uzlu a vypadat přibližně takto:
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
Spuštění úlohy s podporou GPU
Po dokončení předchozích kroků vytvořte nový soubor YAML pro testování. například gpupod.yaml. Zkopírujte a vložte následující YAML do nového souboru s názvem gpupod.yaml a pak ho uložte:
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
Spuštěním následujícího příkazu nasaďte ukázkovou aplikaci:
kubectl apply -f gpupod.yaml
Ověřte, že se pod spustil, dokončil a že je přiřazený GPU:
kubectl describe pod cuda-vector-add | findstr 'gpu'
Předchozí příkaz by měl zobrazit jeden přiřazený GPU:
nvidia.com/gpu: 1
nvidia.com/gpu: 1
Zkontrolujte soubor protokolu podu a zjistěte, jestli test proběhl úspěšně:
kubectl logs cuda-vector-add
Následuje příklad výstupu z předchozího příkazu:
[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
Pokud se při volání ovladačů zobrazí chyba neshody verzí, například "Verze ovladače CUDA není dostatečná pro verzi modulu runtime CUDA", projděte si tabulku kompatibility ovladačů NVIDIA.
Časté otázky
Co se stane při upgradu fondu uzlů s podporou GPU?
Upgrade fondů uzlů s podporou GPU se řídí stejným způsobem postupného upgradu, který se používá pro běžné fondy uzlů. Aby se fondy uzlů s podporou GPU v novém virtuálním počítači úspěšně vytvořily na fyzickém hostitelském počítači, musí být pro úspěšné přiřazení zařízení k dispozici jeden nebo více fyzických GPU. Tato dostupnost zajišťuje, že vaše aplikace můžou dál běžet, když Kubernetes naplánuje pody na tomto upgradovaném uzlu.
Před upgradem:
- Naplánujte výpadek během upgradu.
- Pokud používáte Standard_NK6 nebo 2 další grafické procesory, pokud používáte Standard_NK12 , budete mít na fyzického hostitele ještě jeden GPU navíc. Pokud používáte plnou kapacitu a nemáte další GPU, doporučujeme před upgradem vertikálně snížit kapacitu fondu uzlů na jeden uzel a po úspěšném upgradu vertikálně navýšit kapacitu.
Co se stane, když během upgradu nemám na fyzickém počítači další fyzické gpu?
Pokud se upgrade aktivuje v clusteru bez dalších prostředků GPU, aby se usnadnil postupný upgrade, proces upgradu přestane reagovat, dokud nebude k dispozici GPU. Pokud běžíte s plnou kapacitou a nemáte další GPU, doporučujeme před upgradem vertikálně snížit kapacitu fondu uzlů na jeden uzel a po úspěšném upgradu vertikálně navýšit kapacitu.