Použití GPU pro úlohy náročné na výpočetní výkon
Platí pro: AKS v Azure Local 22H2, AKS na Windows Serveru
Grafické procesorové jednotky (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, které podporuje Azure Arc.
Než začnete
Pokud aktualizujete AKS z verze Preview starší než říjen 2022, která běží na uzlových fondech podporujících GPU, ujistěte se, že před zahájením odstraníte všechny clustery úloh, které využívají 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í panel > Přidat nebo odebrat programy, odinstalujte ovladač hostitele NVIDIA a poté restartujte počítač. 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 zobrazit ve stavu chyby, 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 odmontovat 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 potvrďte, že se grafické procesory správně odpojí od hostitele. Gpu byste měli umístit 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 pro zmírnění rizik NVIDIA
Software může zahrnovat komponenty vyvinuté a vlastněné společností NVIDIA Corporation nebo jejími licencemi. Použití těchto komponent se řídí licenční smlouvou NVIDIA pro koncového uživatele.
Chcete-li stáhnout NVIDIA ovladač pro zmírnění, podívejte se na dokumentaci k datovému centru NVIDIA. 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\
Chcete-li nainstalovat ovladač pro zmírnění rizik, přejděte do složky obsahující extrahované soubory, klikněte pravým tlačítkem myši 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 GPU NVIDIA Tesla T4.
Můžete také nainstalovat pomocí příkazového řádku tak, že přejdete do složky a spustíte následující příkazy pro instalaci ovladače 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 GPU uvedené jako OK ve stavu pod Nvidia T4_base – demontované:
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 pro 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í v systémech Windows Server 2019, Windows Server 2022 nebo Azure Local.
Instalace nebo aktualizace AKS
Podívejte se na rychlý start AKS pomocí PowerShell nebo pomocí Windows Admin Center k instalaci nebo aktualizaci AKS povoleného službou Arc.
Vytvoření 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ů Linuxu.
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 plánovat GPU.
Po vytvoření fondu uzlů GPU ověřte, že můžete naplánovat úlohy s GPU v Kubernetes. Nejprve vypište uzly v clusteru pomocí příkazu kubectl get nodes:
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 je možné naplánovat gpu. V části Capacity by se GPU měl zobrazit jako nvidia.com/gpu: 1.
kubectl describe <node> | findstr "gpu"
Výstup by měl zobrazit GPU z pracovního uzlu a vypadat nějak 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.yamla 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, že dokončil běh 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 zkontrolujte, 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 při volání do ovladačů dojde k chybě neshody verzí, například "Verze ovladače CUDA není dostatečná pro verzi modulu runtime CUDA", projděte si graf kompatibility matici ovladačů NVIDIA.
FAQ
Co se stane při upgradu fondu uzlů s podporou GPU?
Upgrade fondů uzlů s podporou GPU se řídí stejným vzorem 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, vyžaduje, aby pro úspěšné přiřazení zařízení bylo k dispozici jedno nebo více fyzických GPU. Tato dostupnost zajišťuje, že vaše aplikace budou moct 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 provozujete Standard_NK6, pořiďte si jednu další GPU na fyzického hostitele, nebo dvě další GPU, pokud provozujete Standard_NK12. 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 v clusteru spustí upgrade bez dalších prostředků GPU pro usnadnění postupného upgradu, proces upgradu přestane reagovat, dokud nebude GPU k dispozici. Pokud běžíte v plné kapacitě 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.