Sdílet prostřednictvím


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:

  1. Naplánujte výpadek během upgradu.
  2. 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.

Další kroky