Delen via


GPU's gebruiken voor rekenintensieve workloads

Van toepassing op: AKS in Azure Local 22H2, AKS op Windows Server

Grafische verwerkingseenheden (GPU) worden gebruikt voor rekenintensieve workloads, zoals machine learning, deep learning en meer. In dit artikel wordt beschreven hoe u GPU's gebruikt voor rekenintensieve workloads in AKS die zijn ingeschakeld door Azure Arc.

Voordat u begint

Als u AKS bijwerkt vanaf een preview-versie die ouder is dan oktober 2022 waarop GPU-knooppuntgroepen worden uitgevoerd, moet u ervoor zorgen dat u alle workloadclusters met GPU's verwijdert voordat u begint. Volg de stappen in deze sectie.

Stap 1: Verwijder het Nvidia-hoststuurprogramma

Navigeer op elke hostcomputer naar Configuratiescherm > Programma's toevoegen of verwijderen, verwijder het NVIDIA-hoststuurprogramma en start de computer opnieuw op. Nadat de computer opnieuw is opgestart, controleert u of het stuurprogramma is verwijderd. Open een PowerShell-terminal met verhoogde bevoegdheid en voer de volgende opdracht uit:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video" 

U ziet dat de GPU-apparaten in een foutstatus worden weergegeven, zoals wordt weergegeven in deze voorbeelduitvoer:

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 

Stap 2: Verwijder het host-stuurprogramma van de host

Wanneer u het hoststuurprogramma verwijdert, krijgt de fysieke GPU een foutstatus. U moet alle GPU-apparaten van de host ontkoppelen.

Voer voor elk GPU-apparaat (3D Video Controller) de volgende opdrachten uit in PowerShell. Kopieer de exemplaar-id; Bijvoorbeeld PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 uit de vorige opdrachtuitvoer:

$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

Voer de volgende opdracht uit om te bevestigen dat de GPU's correct zijn ontkoppeld van de host. U moet GPU's in een Unknown status plaatsen:

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 

Stap 3: het NVIDIA-beperkingsstuurprogramma downloaden en installeren

De software kan onderdelen bevatten die zijn ontwikkeld en eigendom zijn van NVIDIA Corporation of haar licentiegevers. Het gebruik van deze onderdelen valt onder de NVIDIA-gebruiksrechtovereenkomst.

Zie de documentatie van het NVIDIA-datacenter om het NVIDIA-beperkingsstuurprogramma te downloaden. Nadat u het stuurprogramma hebt gedownload, vouwt u het archief uit en installeert u het beperkingsstuurprogramma op elke hostcomputer.

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\

Als u het mitigatiestuurprogramma wilt installeren, gaat u naar de map met de uitgepakte bestanden, klikt u met de rechtermuisknop op het bestand nvidia_azure_stack_T4_base.inf en selecteert u Installeren. Controleer of u het juiste stuurprogramma hebt; AKS ondersteunt momenteel alleen de NVIDIA Tesla T4 GPU.

U kunt ook installeren met behulp van de opdrachtregel door naar de map te navigeren en de volgende opdrachten uit te voeren om het beperkingsstuurprogramma te installeren:

pnputil /add-driver nvidia_azure_stack_T4_base.inf /install 
pnputil /scan-devices 

Nadat u het mitigatie-stuurprogramma hebt geïnstalleerd, worden de GPU's vermeld in de status OK onder Nvidia T4_base - Dismounted:

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

Stap 4: Herhaal stap 1 tot en met 3

Herhaal stap 1 tot en met 3 voor elk knooppunt in uw failovercluster.

Belangrijk

Virtuele machines met GPU worden niet toegevoegd aan failoverclustering in Windows Server 2019, Windows Server 2022 of Azure Local.

AKS installeren of bijwerken

Zie de AKS-quickstart met PowerShell- of Windows-beheercentrum om AKS te installeren of bij te werken waarvoor Arc is ingeschakeld.

Een nieuw workloadcluster maken met een knooppuntgroep met GPU

Momenteel is het gebruik van knooppuntgroepen met GPU alleen beschikbaar voor Linux-knooppuntgroepen.

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

Nadat u het workloadcluster hebt geïnstalleerd, voert u de volgende opdracht uit om uw Kubeconfig op te halen:

Get-AksHciCredential -Name gpucluster

Bevestig dat u GPU's kunt plannen

Wanneer uw GPU-knooppuntgroep is gemaakt, controleert u of u GPU's kunt plannen in Kubernetes. Vermeld eerst de knooppunten in uw cluster met behulp van de kubectl get nodes opdracht.

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

Gebruik nu het kubectl describe node commando om te bevestigen dat de GPU's kunnen worden ingepland. In de sectie Capaciteit moet de GPU worden weergegeven als nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

De uitvoer moet de GPU('s) van het werkknooppunt weergeven en er ongeveer als volgt uitzien:

         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

Een workload met GPU uitvoeren

Nadat u de vorige stappen hebt voltooid, maakt u een nieuw YAML-bestand voor testen; bijvoorbeeld gpupod.yaml. Kopieer en plak de volgende YAML in het nieuwe bestand met de naam gpupod.yamlen sla het op:

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

Voer de volgende opdracht uit om de voorbeeldtoepassing te implementeren:

kubectl apply -f gpupod.yaml

Controleer of de pod is gestart, is voltooid en of de GPU is toegewezen.

kubectl describe pod cuda-vector-add | findstr 'gpu'

In de vorige opdracht moet één GPU worden weergegeven die is toegewezen:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Controleer het logboekbestand van de pod om te zien of de test is geslaagd:

kubectl logs cuda-vector-add

Hier volgt een voorbeeld van de uitvoer van de vorige opdracht:

[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

Als er een fout optreedt bij het aanroepen van stuurprogramma's, zoals 'CUDA-stuurprogrammaversie is onvoldoende voor CUDA-runtimeversie', raadpleegt u de compatibiliteitsgrafiek van NVIDIA-stuurprogrammamatrix.

FAQ

Wat gebeurt er tijdens de upgrade van een gpu-knooppuntgroep?

Het upgraden van GPU-knooppuntgroepen volgt hetzelfde stapsgewijze upgradepatroon dat wordt gebruikt voor normale knooppuntgroepen. Voor knooppuntgroepen met GPU-functionaliteit in een nieuwe VM die op de fysieke hostmachine moet worden gemaakt, moeten een of meer fysieke GPU's beschikbaar zijn voor een geslaagde apparaattoewijzing. Deze beschikbaarheid zorgt ervoor dat uw toepassingen kunnen blijven worden uitgevoerd wanneer Kubernetes pods plant op dit bijgewerkte knooppunt.

Voordat u een upgrade uitvoert:

  1. Plan een onderbreking tijdens de upgrade.
  2. Eén extra GPU per fysieke host als u de Standard_NK6 draait of 2 extra GPU's als u de Standard_NK12draait. Als u met volledige capaciteit werkt en geen extra GPU hebt, raden we u aan om de knooppuntgroep vóór de upgrade omlaag te schalen naar één knooppunt en vervolgens omhoog schalen nadat de upgrade is voltooid.

Wat gebeurt er als ik tijdens een upgrade geen extra fysieke GPU's op mijn fysieke computer heb?

Als een upgrade wordt geactiveerd op een cluster zonder extra GPU-resources om de rolling upgrade te vergemakkelijken, loopt het upgradeproces vast totdat een GPU beschikbaar is. Als u een volledige capaciteit hebt en geen extra GPU hebt, raden we u aan om de knooppuntgroep vóór de upgrade omlaag te schalen naar één knooppunt en vervolgens omhoog te schalen nadat de upgrade is voltooid.

Volgende stappen