Delen via


GPU's gebruiken voor rekenintensieve workloads in AKS in Azure Local

Van toepassing op: AKS in Azure Local

Notitie

Zie GPU's gebruiken in AKS op Windows Server voor meer informatie over GPU's in AKS op Windows Server.

Gpu's (Graphical Processing Units ) zijn handig 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 op Azure Local. Houd er rekening mee dat GPU's alleen worden ondersteund in Linux OS-knooppuntgroepen. GPU's worden niet ondersteund in Windows OS-knooppuntgroepen.

Fabrikant GPU-model Ondersteunde versie
NVidia A2 2311.2
NVidia A16 2402.0
NVidia T4 2408.0
NVidia L4 2512.0
NVidia L40 2512.0
NVidia L40S 2512.0

Ondersteunde GPU-VM-grootten

De volgende VM-grootten voor elk GPU-model worden ondersteund door AKS in Azure Local.

Nvidia T4 wordt ondersteund door NK T4-SKU's

VM-grootte GPU's GPU-geheugen: GiB virtuele CPU Geheugen: GiB
Standard_NK6 1 8 6 12
Standaard_NK12 2 16 12 24

Nvidia A2 wordt ondersteund door NC2 A2-SKU's

VM-grootte GPU's GPU-geheugen: GiB virtuele CPU Geheugen: GiB
Standaard_NC4_A2 1 16 4 8
Standard_NC8_A2 1 16 8 16
Standard_NC16_A2 2 32 16 64
Standard_NC32_A2 2 32 32 128

Nvidia A16 wordt ondersteund door NC2 A16-SKU's

VM-grootte GPU's GPU-geheugen: GiB virtuele CPU Geheugen: GiB
Standard_NC4_A16 1 16 4 8
Standard_NC8_A16 1 16 8 16
Standard_NC16_A16 2 32 16 64
Standard_NC32_A16 2 32 32 128

Nvidia L4 wordt ondersteund door NC2 L4-SKU's (preview)

VM-grootte GPU's GPU-geheugen: GiB virtuele CPU Geheugen: GiB
Standard_NC16_L4_1 1 24 16 64
Standard_NC16_L4_2 2 48 16 64
Standard_NC32_L4_1 1 24 32 128
Standard_NC32_L4_2 2 48 32 128

Nvidia L40 wordt ondersteund met NC2 L40 SKU's (Preview)

VM-grootte GPU's GPU-geheugen: GiB virtuele CPU Geheugen: GiB
Standard_NC16_L40_1 1 48 16 64
Standard_NC16_L40_2 2 96 16 64
Standard_NC32_L40_1 1 48 32 128
Standard_NC32_L40_2 2 96 32 128

Nvidia L40S wordt ondersteund door NC2 L40S-SKU's (Preview)

VM-grootte GPU's GPU-geheugen: GiB virtuele CPU Geheugen: GiB
Standard_NC16_L40S_1 1 48 16 64
Standard_NC16_L40S_2 2 96 16 64
Standard_NC32_L40S_1 1 48 32 128
Standard_NC32_L40S_2 2 96 32 128

Voordat u begint

Als u GPU's in AKS Arc wilt gebruiken, moet u de benodigde GPU-stuurprogramma's installeren voordat u begint met de implementatie van het cluster. Volg de stappen in deze sectie.

Stap 1: het besturingssysteem installeren

Installeer het lokale Azure-besturingssysteem lokaal op elke server in uw Lokale Azure-cluster.

Stap 2: verwijder het NVIDIA-hoststuurprogramma

Ga op elke hostcomputer naar Programma's toevoegen of verwijderen van het Configuratiescherm>, 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 | where {$_.friendlyname -eq "3D Video Controller"}

U zou de GPU-apparaten in een foutstatus moeten zien verschijnen, zoals 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: Ontkoppel het hoststuurprogramma 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 uit de vorige opdrachtuitvoer; bijvoorbeeld PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000.

$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 zou GPU's in een Unknown status moeten zien:

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 

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 lokale Azure-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 het beperkingsstuurprogramma ook installeren door de volgende opdrachten uit te voeren vanaf de opdrachtregel:

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

Stap 5: herhaal stap 1 tot en met 4

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

Stap 6: de implementatie van het lokale Azure-cluster voortzetten

Ga door met de implementatie van het lokale Azure-cluster door de stappen in de lokale Implementatie van Azure uit te voeren.

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

Wanneer de implementatie van het lokale Azure-cluster is voltooid, voert u de volgende CLI-opdracht uit om de beschikbare VM-SKU's voor uw implementatie weer te geven. Als u uw GPU-stuurprogramma's correct installeert, geeft de opdracht de bijbehorende GPU-VM-SKU's weer:

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

Een nieuw workloadcluster maken met een knooppuntgroep met GPU

Op dit moment kunt u alleen GPU-ondersteunde knooppuntgroepen gebruiken 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 (node pool) met twee GPU-ondersteunde (NVIDIA A2) knooppunten 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

Nadat u de GPU-knooppuntgroep hebt 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 u de GPU's kunt plannen. In de sectie Capaciteit wordt de GPU weergegeven als nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

In de uitvoer worden de GPU's van het werkknooppunt weergegeven en ziet er ongeveer als volgt uit:

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, zoals 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, het uitvoeren is voltooid en 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 een geslaagde upgrade moet Kubernetes nieuwe VM's maken op de fysieke hostcomputer met een of meer fysieke GPU's die beschikbaar zijn voor 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 tijd in voor downtime tijdens de upgrade.
  2. U hebt één extra GPU per fysieke host als u de Standard_NK6 of twee extra GPU's uitvoert als u Standard_NK12 uitvoert. Als u met volledige capaciteit werkt en geen extra GPU hebt, schaalt u de knooppuntgroep omlaag naar één knooppunt vóór de upgrade en schaalt u omhoog nadat de upgrade is voltooid.

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

Als u een upgrade activeert 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, schaalt u de knooppuntgroep omlaag naar één knooppunt vóór de upgrade en schaalt u omhoog nadat de upgrade is voltooid.

Volgende stappen