Använda GPU:er för beräkningsintensiva arbetsbelastningar (AKS på Azure Local, version 23H2)
Gäller för: Azure Local, version 23H2
Kommentar
Information om GPU:er i AKS på Azure Local 22H2 finns i Använda GPU:er (Azure Local 22H2).
Grafiska bearbetningsenheter (GPU) används för beräkningsintensiva arbetsbelastningar som maskininlärning, djupinlärning med mera. Den här artikeln beskriver hur du använder GPU:er för beräkningsintensiva arbetsbelastningar i AKS som aktiveras av Azure Arc.
GPU-modeller som stöds
Följande GPU-modeller stöds av AKS på Azure Local version 23H2:
Tillverkare | GPU-modell | Version som stöds |
---|---|---|
NVidia | A2 | 2311.2 |
NVidia | A16 | 2402.0 |
NVidia | T4 | 2408.0 |
VM-storlekar som stöds
Följande VM-storlekar för varje GPU-modeller stöds av AKS på Azure Local version 23H2.
Nvidia T4 stöds av NK T4 SKU:er
Storlek på virtuell dator | GPU: er | GPU-minne: GiB | vCPU | Minne: GiB |
---|---|---|---|---|
Standard_NK6 | 1 | 8 | 6 | 12 |
Standard_NK12 | 2 | 16 | 12 | 24 |
Nvidia A2 stöds av NC2 A2 SKU:er
Storlek på virtuell dator | GPU: er | GPU-minne: GiB | vCPU | Minne: GiB |
---|---|---|---|---|
Standard_NC4_A2 | 1 | 16 | 4 | 8 |
Standard_NC8_A2 | 1 | 16 | 8 | 16 |
Standard_NC16_A2 | 2 | 48 | 16 | 64 |
Standard_NC32_A2 | 2 | 48 | 32 | 28 |
Nvidia A16 stöds av NC2 A16 SKU:er
Storlek på virtuell dator | GPU: er | GPU-minne: GiB | vCPU | Minne: GiB |
---|---|---|---|---|
Standard_NC4_A16 | 1 | 16 | 4 | 8 |
Standard_NC8_A16 | 1 | 16 | 8 | 16 |
Standard_NC16_A16 | 2 | 48 | 16 | 64 |
Standard_NC32_A16 | 2 | 48 | 32 | 28 |
Innan du börjar
Om du vill använda GPU:er i AKS Arc kontrollerar du att du har installerat nödvändiga GPU-drivrutiner innan du påbörjar distributionen av klustret. Följ stegen i det här avsnittet.
Steg 1: Installera operativsystemet
Installera operativsystemet Azure Local version 23H2 lokalt på varje server i ditt lokala Azure-kluster.
Steg 2: avinstallera NVIDIA-värddrivrutinen
På varje värddator navigerar du till Kontrollpanelen > Lägg till eller ta bort program, avinstallerar NVIDIA-värddrivrutinen och startar sedan om datorn. När datorn har startats om bekräftar du att drivrutinen har avinstallerats. Öppna en upphöjd PowerShell-terminal och kör följande kommando:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Du bör se att GPU-enheterna visas i ett feltillstånd som visas i det här exemplets utdata:
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
Steg 3: Demontera värddrivrutinen från värden
När du avinstallerar värddrivrutinen hamnar den fysiska GPU:n i ett feltillstånd. Du måste demontera alla GPU-enheter från värden.
Kör följande kommandon i PowerShell för varje GPU-enhet (3D Video Controller). Kopiera instans-ID:t. till exempel PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
från föregående kommandoutdata:
$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
Kontrollera att GPU:erna var korrekt demonterade från värden genom att köra följande kommando. Du bör placera GPU:er i ett Unknown
tillstånd:
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
Steg 4: Ladda ned och installera NVIDIA-begränsningsdrivrutinen
Programvaran kan innehålla komponenter som utvecklats och ägs av NVIDIA Corporation eller dess licensgivare. Användningen av dessa komponenter styrs av NVIDIA-slutanvändarlicensavtalet.
Se dokumentationen för NVIDIA-datacentret för att ladda ned NVIDIA-begränsningsdrivrutinen. När du har laddat ned drivrutinen expanderar du arkivet och installerar åtgärdsdrivrutinen på varje värddator. Du kan följa det här PowerShell-skriptet för att ladda ned begränsningsdrivrutinen och extrahera den:
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\
Om du vill installera åtgärdsdrivrutinen går du till mappen som innehåller de extraherade filerna och väljer GPU-drivrutinsfilen baserat på den faktiska GPU-typen som är installerad på dina lokala Azure-värdar. Om typen till exempel är A2 GPU högerklickar du på filen nvidia_azure_stack_A2_base.inf och väljer Installera.
Du kan också installera med hjälp av kommandoraden genom att navigera till mappen och köra följande kommandon för att installera åtgärdsdrivrutinen:
pnputil /add-driver nvidia_azure_stack_A2_base.inf /install
pnputil /scan-devices
När du har installerat åtgärdsdrivrutinen visas GPU:erna i OK-tillståndet under Nvidia A2_base – Demonterad:
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
Steg 5: Upprepa steg 1 till 4
Upprepa steg 1 till 4 för varje server i ditt Lokala Azure-kluster.
Steg 6: Fortsätt distributionen av det lokala Azure-klustret
Fortsätt distributionen av Azure Local-klustret genom att följa stegen i distributionen av Azure Local version 23H2.
Hämta en lista över tillgängliga GPU-aktiverade VM-SKU:er
När distributionen av det lokala Azure-klustret är klar kan du köra följande CLI-kommando för att visa tillgängliga VM-SKU:er i distributionen. Om dina GPU-drivrutiner är korrekt installerade visas motsvarande GPU VM-SKU:er:
az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>
Skapa ett nytt arbetsbelastningskluster med en GPU-aktiverad nodpool
För närvarande är GPU-aktiverade nodpooler endast tillgängliga för Linux-nodpooler. Så här skapar du ett nytt Kubernetes-kluster:
az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>
I följande exempel läggs en nodpool med 2 GPU-aktiverade noder (NVDIA A2) med en Standard_NC4_A2 VM-SKU:
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
Bekräfta att du kan schemalägga GPU:er
När du har skapat GPU-nodpoolen bekräftar du att du kan schemalägga GPU:er i Kubernetes. Börja med att ange noderna i klustret med kommandot 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
Använd nu kommandot kubectl describe node för att bekräfta att GPU:er kan schemaläggas. I avsnittet Kapacitet ska GPU visas som nvidia.com/gpu: 1.
kubectl describe <node> | findstr "gpu"
Utdata bör visa GPU:erna från arbetsnoden och se ut ungefär så här:
Capacity:
cpu: 4
ephemeral-storage: 103110508Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7865020Ki
nvidia.com/gpu: 1
pods: 110
Köra en GPU-aktiverad arbetsbelastning
När du har slutfört föregående steg skapar du en ny YAML-fil för testning. till exempel gpupod.yaml. Kopiera och klistra in följande YAML i den nya filen med namnet gpupod.yaml och spara den sedan:
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
Kör följande kommando för att distribuera exempelprogrammet:
kubectl apply -f gpupod.yaml
Kontrollera att podden startade, slutförde körningen och att GPU:n har tilldelats:
kubectl describe pod cuda-vector-add | findstr 'gpu'
Föregående kommando ska visa en tilldelad GPU:
nvidia.com/gpu: 1
nvidia.com/gpu: 1
Kontrollera loggfilen för podden för att se om testet har klarats:
kubectl logs cuda-vector-add
Följande är exempelutdata från föregående kommando:
[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
Om du får ett versionsmatchningsfel när du anropar drivrutiner, till exempel "CUDA-drivrutinsversionen är otillräcklig för CUDA-körningsversionen", läser du kompatibilitetsdiagrammet för NVIDIA-drivrutinsmatrisen.
Vanliga frågor
Vad händer under uppgraderingen av en GPU-aktiverad nodpool?
Uppgradering av GPU-aktiverade nodpooler följer samma löpande uppgraderingsmönster som används för vanliga nodpooler. För att GPU-aktiverade nodpooler i en ny virtuell dator ska kunna skapas på den fysiska värddatorn måste en eller flera fysiska GPU:er vara tillgängliga för att enhetstilldelningen ska lyckas. Den här tillgängligheten säkerställer att dina program kan fortsätta köras när Kubernetes schemalägger poddar på den uppgraderade noden.
Innan du uppgraderar:
- Planera för stilleståndstid under uppgraderingen.
- Ha en extra GPU per fysisk värd om du kör Standard_NK6 eller 2 extra GPU:er om du kör Standard_NK12. Om du kör med full kapacitet och inte har någon extra GPU rekommenderar vi att du skalar ned nodpoolen till en enskild nod före uppgraderingen och sedan skalar upp när uppgraderingen har slutförts.
Vad händer om jag inte har extra fysiska GPU:er på min fysiska dator under en uppgradering?
Om en uppgradering utlöses på ett kluster utan extra GPU-resurser för att underlätta den löpande uppgraderingen låser sig uppgraderingsprocessen tills en GPU är tillgänglig. Om du kör med full kapacitet och inte har någon extra GPU rekommenderar vi att du skalar ned nodpoolen till en enskild nod före uppgraderingen och sedan skalar upp när uppgraderingen har slutförts.