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 |
NVidia | T4 | 2408.0 |
Ondersteunde VM-grootten
De volgende VM-grootten voor elke GPU-modellen worden ondersteund door AKS in Azure Stack HCI 23H2.
Nvidia T4 wordt ondersteund door NK T4-SKU's
VM-grootte | GPU's | GPU-geheugen: GiB | vCPU | Geheugen: GiB |
---|---|---|---|---|
Standard_NK6 | 1 | 8 | 6 | 12 |
Standard_NK12 | 2 | 16 | 12 | 24 |
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 |
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 | where {$_.friendlyname -eq "3D Video Controller"}
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 | 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 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 | 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 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:
- Plan downtime tijdens de upgrade.
- 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.