Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Plan tijd in voor downtime tijdens de upgrade.
- 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.