Použití GPU pro úlohy náročné na výpočetní výkon (AKS v Azure Local, verze 23H2)
Platí pro: Azure Local, verze 23H2
Poznámka:
Informace o grafických procesorech v AKS v Azure Local 22H2 najdete v tématu Použití GPU (Místní 22H2 Azure).
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.
Podporované modely GPU
Místní azure verze 23H2 podporuje AKS následující modely GPU:
Výrobce | Model GPU | Podporovaná verze |
---|---|---|
NVidia | A2 | 2311.2 |
NVidia | A16 | 2402.0 |
NVidia | T4 | 2408.0 |
Podporované velikosti virtuálních počítačů
AKS v místním Prostředí Azure verze 23H2 podporuje následující velikosti virtuálních počítačů pro jednotlivé modely GPU.
Jednotky SKU NK T4 podporují Nvidia T4.
Velikost virtuálního počítače | Grafické procesory | Paměť GPU: GiB | Virtuální procesory | Paměť: GiB |
---|---|---|---|---|
Standard_NK6 | 1 | 8 | 6 | 12 |
Standard_NK12 | 2 | 16 | 12 | 24 |
Skladové položky NC2 A2 podporuje Nvidia A2.
Velikost virtuálního počítače | Grafické procesory | Paměť GPU: GiB | Virtuální procesory | Paměť: GiB |
---|---|---|---|---|
Standard_NC4_A2 | 0 | 16 | 4 | 8 |
Standard_NC8_A2 | 0 | 16 | 8 | 16 |
Standard_NC16_A2 | 2 | 48 | 16 | 64 |
Standard_NC32_A2 | 2 | 48 | 32 | 28 |
Skladové položky NC2 A16 podporují Nvidia A16.
Velikost virtuálního počítače | Grafické procesory | Paměť GPU: GiB | Virtuální procesory | Paměť: GiB |
---|---|---|---|---|
Standard_NC4_A16 | 0 | 16 | 4 | 8 |
Standard_NC8_A16 | 0 | 16 | 8 | 16 |
Standard_NC16_A16 | 2 | 48 | 16 | 64 |
Standard_NC32_A16 | 2 | 48 | 32 | 28 |
Než začnete
Pokud chcete použít GPU v AKS Arc, před zahájením nasazení clusteru se ujistěte, že jste nainstalovali potřebné ovladače GPU. Postupujte podle kroků v této části.
Krok 1: Instalace operačního systému
Nainstalujte místní operační systém Azure verze 23H2 místně na každý server v místním clusteru Azure.
Krok 2: 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 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 | where {$_.friendlyname -eq "3D Video Controller"}
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 3: 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 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 | where {$_.friendlyname -eq "3D Video Controller"}
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 4: 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 s koncovým uživatelem NVIDIA.
Pokud si chcete stáhnout ovladač pro zmírnění rizik NVIDIA, podívejte se do dokumentace 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č. Pomocí tohoto skriptu PowerShellu můžete stáhnout ovladač pro zmírnění rizik a extrahovat ho:
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, která obsahuje extrahované soubory, a vyberte soubor ovladače GPU na základě skutečného typu GPU nainstalovaného na místních hostitelích Azure. Pokud je například typ A2 GPU, klikněte pravým tlačítkem myši na soubor nvidia_azure_stack_A2_base.inf a vyberte Nainstalovat.
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_A2_base.inf /install
pnputil /scan-devices
Po instalaci ovladače pro zmírnění rizik jsou gpu uvedené ve stavu OK v části Nvidia A2_base - Odpojeno:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -match "Nvidia"}"
OK Nvidia A2_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
OK Nvidia A2_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Krok 5: Opakování kroků 1 až 4
Opakujte kroky 1 až 4 pro každý server v místním clusteru Azure.
Krok 6: Pokračování v nasazení místního clusteru Azure
Pokračujte v nasazení místního clusteru Azure podle kroků v nasazení Azure Local verze 23H2.
Získání seznamu dostupných skladových položek virtuálních počítačů s podporou GPU
Po dokončení nasazení místního clusteru Azure můžete spuštěním následujícího příkazu rozhraní příkazového řádku zobrazit dostupné skladové položky virtuálních počítačů ve vašem nasazení. Pokud jsou ovladače GPU správně nainstalované, zobrazí se odpovídající skladové položky virtuálních počítačů GPU:
az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>
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. Vytvoření nového clusteru Kubernetes:
az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>
Následující příklad přidá fond uzlů s 2 uzly s podporou GPU (NVDIA A2) s SKU virtuálního počítače Standard_NC4_A2 :
az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux
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 ve vašem 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 je možné naplánovat gpu. V části Kapacita 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:
Capacity:
cpu: 4
ephemeral-storage: 103110508Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7865020Ki
nvidia.com/gpu: 1
pods: 110
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 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 matic ovladačů NVIDIA.
Často kladené dotazy
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 používáte Standard_NK6 nebo 2 další GPU, pokud používáte Standard_NK12, požádejte o jeden další GPU na fyzického hostitele. 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 aktivuje 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.