Sdílet prostřednictvím


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:

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

Další kroky