Delen via


GPU's gebruiken voor rekenintensieve workloads (AKS op Azure Stack HCI 23H2)

Van toepassing op: Azure Stack HCI, versie 23H2

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.

Ondersteunde GPU-modellen

De volgende GPU-modellen worden ondersteund door AKS in Azure Stack HCI 23H2:

Fabrikant GPU-model Ondersteunde versie
Nvidia A2 2311.2
Nvidia A16 2402.0

Ondersteunde VM-grootten

De volgende VM-grootten voor elke GPU-modellen worden ondersteund door AKS in Azure Stack HCI 23H2.

De Nvidia A2 wordt ondersteund door NC2 A2 SKU's

VM-grootte GPU's GPU-geheugen: GiB vCPU Geheugen: 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

De Nvidia A16 wordt ondersteund door NC2 A16-SKU's

VM-grootte GPU's GPU-geheugen: GiB vCPU Geheugen: 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

Voordat u begint

Als u GPU's in AKS Arc wilt gebruiken, moet u ervoor zorgen dat u de benodigde GPU-stuurprogramma's hebt geïnstalleerd voordat u begint met de implementatie van het cluster. Volg de stappen in deze sectie.

Stap 1: het besturingssysteem installeren

Installeer het besturingssysteem Azure Stack HCI, versie 23H2, lokaal op elke server in uw Azure Stack HCI-cluster.

Stap 2: 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 3: het hoststuurprogramma ontkoppelen 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 uit PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 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 4: 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 LICENTIEovereenkomst van NVIDIA-eindgebruikers.

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. U kunt dit PowerShell-script volgen om het beperkingsstuurprogramma te downloaden en uit te pakken:

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 beperkingsstuurprogramma wilt installeren, gaat u naar de map met de uitgepakte bestanden en selecteert u het GPU-stuurprogrammabestand op basis van het daadwerkelijke GPU-type dat is geïnstalleerd op uw Azure Stack HCI-hosts. Als het type bijvoorbeeld A2 GPU is, klikt u met de rechtermuisknop op het bestand nvidia_azure_stack_A2_base.inf en selecteert u Installeren.

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

Nadat u het beperkingsstuurprogramma hebt geïnstalleerd, worden de GPU's vermeld in de status OK onder Nvidia A2_base - Ontkoppeld:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"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

Stap 5: herhaal stap 1 tot en met 4

Herhaal stap 1 tot en met 4 voor elke server in uw HCI-cluster.

Stap 6: de implementatie van het Azure Stack HCI-cluster voortzetten

Ga door met de implementatie van het Azure Stack HCI-cluster door de stappen te volgen in de implementatie van Azure Stack HCI, versie 23H2.

Een lijst met beschikbare VM-SKU's met GPU ophalen

Zodra de implementatie van het Azure Stack HCI-cluster is voltooid, kunt u de volgende CLI-opdracht uitvoeren om de beschikbare VM-SKU's voor uw implementatie weer te geven. Als uw GPU-stuurprogramma's correct zijn geïnstalleerd, worden de bijbehorende GPU-VM-SKU's vermeld:

az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>

Een nieuw workloadcluster maken met een knooppuntgroep met GPU

Momenteel is het gebruik van knooppuntgroepen met GPU alleen beschikbaar voor Linux-knooppuntgroepen. Ga als volgt te werk om een nieuw Kubernetes-cluster te maken:

az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>

In het volgende voorbeeld wordt een knooppuntgroep met 2 NVDIA A2-knooppunten (GPU) toegevoegd met een 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

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 opdracht 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

Gebruik nu de opdracht kubectl describe node om te bevestigen dat de GPU's kunnen worden gepland. Onder 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:

Capacity: 
  cpu:                4 
  ephemeral-storage:  103110508Ki 
  hugepages-1Gi:      0 
  hugepages-2Mi:      0 
  memory:             7865020Ki 
  nvidia.com/gpu:     1 
  pods:               110

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.yaml en 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 uitgevoerd 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 het NVIDIA-stuurprogramma.

Veelgestelde vragen

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

Het upgraden van gpu-knooppuntgroepen volgt hetzelfde rolling 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 downtime tijdens de upgrade.
  2. U hebt één extra GPU per fysieke host als u de Standard_NK6 of 2 extra GPU's uitvoert als u Standard_NK12 uitvoert. 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