Läs på engelska

Dela via


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

GPU-aktiverade virtuella datorer som stöds

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.

Begränsningar

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

Innan du börjar

  • 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 med az aks nodepool add kommandot . Kör az --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 med az aks nodepool add kommandot . Kör az --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 klustret

  • 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ända Windows GPU med automatisk drivrutinsinstallation

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:

Installera Azure CLI-tillägget aks-preview

  • Registrera eller uppdatera aks-preview-tillägget med hjälp av az extension add kommandot eller az 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

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

  2. Kontrollera registreringsstatusen az feature show med kommandot .

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. 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
    

Skapa en Windows GPU-aktiverad nodpool (förhandsversion)

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.

  1. 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
    
  2. Kontrollera att dina GPU:er kan schemaläggas.

  3. När du har bekräftat att dina GPU:er kan schemaläggas kan du köra GPU-arbetsbelastningen.

Ange GPU-drivrutinstyp (förhandsversion)

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.

Använda Windows GPU med manuell drivrutinsinstallation

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:

  1. Hoppa över GPU-drivrutinsinstallationen (förhandsversion) med .--skip-gpu-driver-install
  2. Manuell installation av Kubernetes DirectX-enhets plugin-programmet.

Hoppa över installationen av GPU-drivrutinen (förhandsversion)

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:

  1. Registrera eller uppdatera aks-preview-tillägget med hjälp av az extension add kommandot eller az extension update .

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. 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.

Installera Kubernetes DirectX-enhets-plugin-programmet manuellt

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 och distribuera Kubernetes DirectX-enhets-plugin-programmet

  1. Skapa ett namnområde med kommandot kubectl create namespace .

    kubectl create namespace gpu-resources
    
  2. 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
    
  3. 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
    
  4. Nu när du har installerat plugin-programmet för NVIDIA-enheten kan du kontrollera att dina GPU:er kan schemaläggas.

Bekräfta att GPU:er kan schemaläggas

När du har skapat klustret bekräftar du att GPU:er kan schemaläggas i Kubernetes.

  1. 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
    
  2. 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
    [...]
    

Använda Container Insights för att övervaka GPU-användning

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, , , gpuModelgpuVendor 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/clusterNamecontainerName 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/clusterNamecontainerName 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, , , gpuModelgpuVendor 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, , , gpuModelgpuVendor Mängden GPU-minne i byte som används av en specifik container.
nodeGpuAllocatable container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Antal GPU:er i en nod som Kubernetes kan använda.
nodeGpuCapacity container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Totalt antal GPU:er i en nod.

Rensa resurser

  • 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
    

Nästa steg