Dela via


Använda GPU:er för beräkningsintensiva arbetsbelastningar

Gäller för: AKS på Azure Local 22H2, AKS på Windows Server

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.

Innan du börjar

Om du uppdaterar AKS från en förhandsversion som är äldre än oktober 2022 och kör GPU-aktiverade nodpooler ska du ta bort alla arbetsbelastningskluster som kör GPU:er innan du börjar. Följ stegen i det här avsnittet.

Steg 1: Avinstallera Nvidia-värddrivrutinen

På varje värddator går du till Kontrollpanelen > Lägg till eller ta bort program, avinstallera NVIDIA-värddrivrutinen och starta 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 | findstr /i /c:"3d video" 

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 2: 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 är 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 | 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 

Steg 3: 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-licensavtalet för slutanvändare.

Se dokumentationen om NVIDIA-datacenter 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.

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, högerklickar på filen nvidia_azure_stack_T4_base.inf och väljer Installera. Kontrollera att du har rätt drivrutin. AKS stöder för närvarande endast NVIDIA Tesla T4 GPU.

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_T4_base.inf /install 
pnputil /scan-devices 

När du har installerat begränsningsdrivrutinen visas GPU:erna i tillståndet OK under Nvidia T4_base – Demonterad:

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

Steg 4: Upprepa steg 1 till 3

Upprepa steg 1 till 3 för varje nod i redundansklustret.

Viktig

GPU-aktiverade virtuella datorer läggs inte till i redundanskluster i Windows Server 2019, Windows Server 2022 eller Azure Local.

Installera eller uppdatera AKS

Se AKS-snabbstarten med PowerShell eller använd Windows Admin Center för att installera eller uppdatera AKS aktiverat av Arc.

Skapa ett nytt arbetsbelastningskluster med en GPU-aktiverad nodpool

För närvarande är GPU-aktiverade nodpooler endast tillgängliga för Linux-nodpooler.

New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6 

När du har installerat arbetsbelastningsklustret kör du följande kommando för att hämta Kubeconfig:

Get-AksHciCredential -Name gpucluster

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 lista noderna i klustret med hjälp av 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:erna kan schemaläggas. Under avsnittet Capacity ska GPU:n 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:

         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

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.yamloch 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 NVIDIA-drivrutinsmatriskompatibilitetsdiagrammet.

FAQ

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:

  1. Planera för stilleståndstid under uppgraderingen.
  2. 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.

Nästa steg