Använda Windows GPU:er för beräkningsintensiva arbetsbelastningar i Azure Kubernetes Service (AKS) (förhandsversion)
Grafiska bearbetningsenheter (GPU:er) används ofta för beräkningsintensiva arbetsbelastningar, till exempel grafik- och visualiseringsarbetsbelastningar. AKS stöder GPU-aktiverade Windows- och Linux-nodpooler för att köra beräkningsintensiva Kubernetes-arbetsbelastningar.
Den här artikeln hjälper dig att etablera Windows-noder med schemaläggningsbara GPU:er på nya och befintliga AKS-kluster (förhandsversion).
Information om hur du visar GPU-aktiverade virtuella datorer som stöds finns i GPU-optimerade VM-storlekar i Azure. För AKS-nodpooler rekommenderar vi en minsta storlek på Standard_NC6s_v3. NVv4-serien (baserad på AMD-GPU:er) stöds inte på AKS.
Anteckning
GPU-aktiverade virtuella datorer innehåller specialiserad maskinvara med högre pris- och regionstillgänglighet. Mer information finns i prisverktyget och regionens tillgänglighet.
- Det går inte att uppdatera en befintlig Windows-nodpool för att lägga till GPU.
- Stöds inte i Kubernetes version 1.28 och senare.
- Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du inte har ett kluster skapar du ett med hjälp av Azure CLI, Azure PowerShell eller Azure Portal.
- Du behöver Azure CLI version 1.0.0b2 eller senare installerad och konfigurerad för att använda fältet
--skip-gpu-driver-install
medaz aks nodepool add
kommandot . Köraz --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. - Du behöver Azure CLI version 9.0.0b5 eller senare installerad och konfigurerad för att använda fältet
--driver-type
medaz aks nodepool add
kommandot . Köraz --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
Hämta autentiseringsuppgifterna för AKS-klustret med hjälp av
az aks get-credentials
kommandot . Följande exempelkommando hämtar autentiseringsuppgifterna för myAKSCluster i resursgruppen myResourceGroup :az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Användning av NVIDIA GPU:er omfattar installation av olika NVIDIA-programvarukomponenter, till exempel DirectX-enhets-plugin-programmet för Kubernetes, GPU-drivrutinsinstallation med mera. När du skapar en Windows-nodpool med en GPU-aktiverad virtuell dator som stöds installeras dessa komponenter och lämpliga NVIDIA CUDA- eller GRID-drivrutiner. För VM-storlekar i NC- och ND-serien installeras CUDA-drivrutinen. För VM-storlekar i NV-serien installeras GRID-drivrutinen.
Viktigt
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Registrera eller uppdatera aks-preview-tillägget med hjälp av
az extension add
kommandot elleraz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registrera funktionsflaggan
WindowsGPUPreview
az feature register
med kommandot .az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
Det tar några minuter för statusen att visa Registrerad.
Kontrollera registreringsstatusen
az feature show
med kommandot .az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
När statusen visar Registrerad uppdaterar du registreringen av resursprovidern Microsoft.ContainerService med hjälp av
az provider register
kommandot .az provider register --namespace Microsoft.ContainerService
Om du vill skapa en Windows GPU-aktiverad nodpool måste du använda en GPU-aktiverad vm-storlek som stöds och ange os-type
som Windows
. Standardalternativen för Windows os-sku
är Windows2022
, men alla Windows-alternativ os-sku
stöds.
Skapa en Windows GPU-aktiverad nodpool med kommandot
az aks nodepool add
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type Windows \ --kubernetes-version 1.29.0 \ --node-vm-size Standard_NC6s_v3
Kontrollera att dina GPU:er kan schemaläggas.
När du har bekräftat att dina GPU:er kan schemaläggas kan du köra GPU-arbetsbelastningen.
Som standard anger AKS en GPU-standarddrivrutinstyp för varje GPU-aktiverad virtuell dator som stöds. Eftersom arbetsbelastnings- och drivrutinskompatibilitet är viktiga för fungerande GPU-arbetsbelastningar kan du ange drivrutinstypen för din Windows GPU-nod. Den här funktionen stöds inte för Linux GPU-nodpooler.
När du skapar en Windows-agentpool med GPU-stöd kan du ange typen av GPU-drivrutin med --driver-type
hjälp av flaggan.
De tillgängliga alternativen är:
- GRID: För program som kräver virtualiseringsstöd.
- CUDA: Optimerad för beräkningsuppgifter inom vetenskaplig databehandling och dataintensiva program.
Anteckning
När du anger --driver-type
flaggan tar du ansvar för att se till att den valda drivrutinstypen är kompatibel med den specifika VM-storleken och konfigurationen för nodpoolen. Även om AKS försöker verifiera kompatibiliteten finns det scenarier där skapandet av nodpoolen kan misslyckas på grund av inkompatibiliteter mellan den angivna drivrutinstypen och den underliggande virtuella datorn eller maskinvaran.
Om du vill skapa en Windows GPU-aktiverad nodpool med en specifik GPU-drivrutinstyp använder du az aks nodepool add
kommandot .
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunp \
--node-count 1 \
--os-type Windows \
--kubernetes-version 1.29.0 \
--node-vm-size Standard_NC6s_v3 \
--driver-type GRID
Kommandot ovan skapar till exempel en GPU-aktiverad nodpool med hjälp av GRID
GPU-drivrutinstypen. Om du väljer den här drivrutinstypen åsidosätts standardvärdet CUDA
för drivrutinstypen för VM-sku:er i NC-serien.
När du skapar en Windows-nodpool med VM-storlekar i N-serien (NVIDIA GPU) i AKS installeras GPU-drivrutinen och Kubernetes DirectX-enhets plugin-programmet automatiskt. Använd följande steg för att kringgå den här automatiska installationen:
- Hoppa över GPU-drivrutinsinstallationen (förhandsversion) med .
--skip-gpu-driver-install
- Manuell installation av Kubernetes DirectX-enhets plugin-programmet.
AKS har automatisk GPU-drivrutinsinstallation aktiverad som standard. I vissa fall, till exempel genom att installera egna drivrutiner, kanske du vill hoppa över GPU-drivrutinsinstallationen.
Viktigt
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Registrera eller uppdatera aks-preview-tillägget med hjälp av
az extension add
kommandot elleraz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Skapa en nodpool med
az aks nodepool add
kommandot med--skip-gpu-driver-install
flaggan för att hoppa över automatisk GPU-drivrutinsinstallation.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022 \ --skip-gpu-driver-install
Anteckning
Om det --node-vm-size
du använder ännu inte har registrerats i AKS kan du inte använda GPU:er och --skip-gpu-driver-install
fungerar inte.
Du kan distribuera en DaemonSet för Kubernetes DirectX-enhets plugin-programmet, som kör en podd på varje nod för att tillhandahålla nödvändiga drivrutiner för GPU:erna.
Lägg till en nodpool i klustret med kommandot
az aks nodepool add
.az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name gpunp \ --node-count 1 \ --os-type windows \ --os-sku windows2022
Skapa ett namnområde med kommandot
kubectl create namespace
.kubectl create namespace gpu-resources
Skapa en fil med namnet k8s-directx-device-plugin.yaml och klistra in följande YAML-manifest som tillhandahålls som en del av NVIDIA-enhetens plugin-program för Kubernetes-projektet:
apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset namespace: gpu-resources spec: selector: matchLabels: name: nvidia-device-plugin-ds updateStrategy: type: RollingUpdate template: metadata: # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler # reserves resources for critical add-on pods so that they can be rescheduled after # a failure. This annotation works in tandem with the toleration below. annotations: scheduler.alpha.kubernetes.io/critical-pod: "" labels: name: nvidia-device-plugin-ds spec: tolerations: # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. # This, along with the annotation above marks this pod as a critical add-on. - key: CriticalAddonsOnly operator: Exists - key: nvidia.com/gpu operator: Exists effect: NoSchedule - key: "sku" operator: "Equal" value: "gpu" effect: "NoSchedule" containers: - image: mcr.microsoft.com/oss/nvidia/k8s-device-plugin:v0.14.1 name: nvidia-device-plugin-ctr securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] volumeMounts: - name: device-plugin mountPath: /var/lib/kubelet/device-plugins volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins
Skapa DaemonSet och bekräfta att plugin-programmet för NVIDIA-enheten har skapats med kommandot
kubectl apply
.kubectl apply -f nvidia-device-plugin-ds.yaml
Nu när du har installerat plugin-programmet för NVIDIA-enheten kan du kontrollera att dina GPU:er kan schemaläggas.
När du har skapat klustret bekräftar du att GPU:er kan schemaläggas i Kubernetes.
Visa en lista över noderna i klustret med hjälp av
kubectl get nodes
kommandot .kubectl get nodes
Dina utdata bör se ut ungefär som följande exempelutdata:
NAME STATUS ROLES AGE VERSION aks-gpunp-28993262-0 Ready agent 13m v1.20.7
Bekräfta att GPU:erna kan schemaläggas med kommandot
kubectl describe node
.kubectl describe node aks-gpunp-28993262-0
Under avsnittet Kapacitet bör GPU:n lista som
microsoft.com/directx: 1
. Dina utdata bör se ut ungefär som följande komprimerade exempelutdata:Capacity: [...] microsoft.com.directx/gpu: 1 [...]
Container Insights med AKS övervakar följande GPU-användningsstatistik:
Måttnamn | Måttdimension (taggar) | beskrivning |
---|---|---|
containerGpuDutyCycle | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , , , gpuModel gpuVendor |
Procentandel av tiden under den senaste exempelperioden (60 sekunder) under vilken GPU:n var upptagen/bearbetade aktivt för en container. Arbetscykeln är ett tal mellan 1 och 100. |
containerGpuLimits | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Varje container kan ange gränser som en eller flera GPU:er. Det går inte att begära eller begränsa en bråkdel av en GPU. |
containerGpuRequests | container.azm.ms/clusterId , , container.azm.ms/clusterName containerName |
Varje container kan begära en eller flera GPU:er. Det går inte att begära eller begränsa en bråkdel av en GPU. |
containerGpumemoryTotalBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , , , gpuModel gpuVendor |
Mängden GPU-minne i byte som är tillgängligt för användning för en specifik container. |
containerGpumemoryUsedBytes | container.azm.ms/clusterId , container.azm.ms/clusterName , containerName , gpuId , , , gpuModel gpuVendor |
Mängden GPU-minne i byte som används av en specifik container. |
nodeGpuAllocatable | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
Antal GPU:er i en nod som Kubernetes kan använda. |
nodeGpuCapacity | container.azm.ms/clusterId , , container.azm.ms/clusterName gpuVendor |
Totalt antal GPU:er i en nod. |
Ta bort de associerade Kubernetes-objekten som du skapade i den här artikeln med hjälp av
kubectl delete job
kommandot .kubectl delete jobs windows-gpu-workload
- Information om hur du kör Apache Spark-jobb finns i Köra Apache Spark-jobb på AKS.
- Mer information om funktioner i Kubernetes-schemaläggaren finns i Metodtips för avancerade scheduler-funktioner i AKS.
- Mer information om Azure Kubernetes Service och Azure Machine Learning finns i:
Feedback om Azure Kubernetes Service
Azure Kubernetes Service är ett öppen källkod projekt. Välj en länk för att ge feedback: