Delen via


Windows-GPU's gebruiken voor rekenintensieve workloads in Azure Kubernetes Service (AKS) (preview)

Grafische verwerkingseenheden (GPU's) worden vaak gebruikt voor rekenintensieve workloads, zoals afbeeldingen en visualisatieworkloads. AKS biedt ondersteuning voor Windows- en Linux-knooppuntgroepen met GPU om rekenintensieve Kubernetes-workloads uit te voeren.

Dit artikel helpt u bij het inrichten van Windows-knooppunten met gefaseerde GPU's op nieuwe en bestaande AKS-clusters (preview).

Ondersteunde virtuele machines met GPU (VM's)

Zie voor GPU geoptimaliseerde VM-grootten in Azure om ondersteunde VM-vm's met GPU weer te geven. Voor AKS-knooppuntgroepen raden we een minimale grootte van Standard_NC6s_v3 aan. De NVv4-serie (gebaseerd op AMD GPU's) wordt niet ondersteund op AKS.

Notitie

VM's met GPU-functionaliteit bevatten speciale hardware waarvoor hogere prijzen en beschikbaarheid van regio's gelden. Zie het prijshulpprogramma en de beschikbaarheid van regio's voor meer informatie.

Beperkingen

  • Het bijwerken van een bestaande Windows-knooppuntgroep om GPU toe te voegen, wordt niet ondersteund.
  • Niet ondersteund in Kubernetes versie 1.28 en lager.

Voordat u begint

  • In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u geen cluster hebt, maakt u er een met behulp van de Azure CLI, Azure PowerShell of Azure Portal.
  • U moet Azure CLI versie 1.0.0b2 of hoger hebben geïnstalleerd en geconfigureerd voor het gebruik van het --skip-gpu-driver-install veld met de az aks nodepool add opdracht. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
  • U moet Azure CLI versie 9.0.0b5 of hoger hebben geïnstalleerd en geconfigureerd voor het gebruik van het --driver-type veld met de az aks nodepool add opdracht. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

De referenties voor uw cluster ophalen

  • Haal de referenties voor uw AKS-cluster op met behulp van de az aks get-credentials opdracht. Met de volgende voorbeeldopdracht worden de referenties voor het myAKSCluster in de resourcegroep myResourceGroup ophaalt:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Windows GPU gebruiken met automatische installatie van stuurprogramma's

Het gebruik van NVIDIA GPU's omvat de installatie van verschillende NVIDIA-softwareonderdelen, zoals de DirectX-apparaatinvoegtoepassing voor Kubernetes, installatie van GPU-stuurprogramma's en meer. Wanneer u een Windows-knooppuntgroep maakt met een ondersteunde VM met GPU, worden deze onderdelen en de juiste NVIDIA CUDA- of GRID-stuurprogramma's geïnstalleerd. Voor VM-grootten uit de NC- en ND-serie wordt het CUDA-stuurprogramma geïnstalleerd. Voor VM-grootten uit de NV-serie wordt het GRID-stuurprogramma geïnstalleerd.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

aks-preview De Azure CLI-extensie installeren

  • Registreer of werk de aks-preview-extensie bij met behulp van de az extension add of az extension update opdracht.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

WindowsGPUPreview De functievlag registreren

  1. Registreer de WindowsGPUPreview functievlag met behulp van de az feature register opdracht.

    az feature register --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    

    Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.

  2. Controleer de registratiestatus met behulp van de az feature show opdracht.

    az feature show --namespace "Microsoft.ContainerService" --name "WindowsGPUPreview"
    
  3. Wanneer de status Geregistreerd weergeeft, vernieuwt u de registratie van de Microsoft.ContainerService-resourceprovider met behulp van de az provider register opdracht.

    az provider register --namespace Microsoft.ContainerService
    

Een knooppuntgroep met Windows GPU maken (preview)

Als u een Windows GPU-knooppuntgroep wilt maken, moet u een ondersteunde VM-grootte met GPU gebruiken en de os-type als Windows. De standaardversie van Windows os-sku is Windows2022, maar alle Windows-opties os-sku worden ondersteund.

  1. Maak een windows GPU-knooppuntgroep met behulp van de az aks nodepool add opdracht.

    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. Controleer of uw GPU's kunnen worden geschacht.

  3. Zodra u hebt bevestigd dat uw GPU's beschikbaar zijn, kunt u uw GPU-workload uitvoeren.

Type GPU-stuurprogramma opgeven (preview)

Standaard geeft AKS een standaard gpu-stuurprogrammatype op voor elke ondersteunde VM met GPU. Omdat workload- en stuurprogrammacompatibiliteit belangrijk zijn voor werkende GPU-workloads, kunt u het stuurprogrammatype opgeven voor uw Windows GPU-knooppunt. Deze functie wordt niet ondersteund voor Linux GPU-knooppuntgroepen.

Wanneer u een Windows-agentgroep maakt met GPU-ondersteuning, kunt u het type GPU-stuurprogramma opgeven met behulp van de --driver-type vlag.

De beschikbare opties zijn:

  • GRID: Voor toepassingen waarvoor ondersteuning voor virtualisatie is vereist.
  • CUDA: Geoptimaliseerd voor rekentaken in wetenschappelijke computing en gegevensintensieve toepassingen.

Notitie

Wanneer u de --driver-type vlag instelt, neemt u de verantwoordelijkheid om ervoor te zorgen dat het geselecteerde stuurprogrammatype compatibel is met de specifieke VM-grootte en -configuratie van uw knooppuntgroep. Hoewel AKS compatibiliteit probeert te valideren, zijn er scenario's waarin het maken van de knooppuntgroep kan mislukken vanwege incompatibiliteit tussen het opgegeven stuurprogrammatype en de onderliggende VM of hardware.

Gebruik de az aks nodepool add opdracht om een windows GPU-knooppuntgroep te maken met een specifiek TYPE GPU-stuurprogramma.

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

Met de bovenstaande opdracht maakt u bijvoorbeeld een gpu-knooppuntgroep met behulp van het GRID type GPU-stuurprogramma. Als u dit stuurprogrammatype selecteert, wordt het standaardstuurprogrammatype voor VM-SKU's uit CUDA de NC-serie overschreven.

Windows GPU gebruiken met handmatige installatie van stuurprogramma's

Bij het maken van een Windows-knooppuntgroep met N-serie VM-grootten (NVIDIA GPU) in AKS, worden het GPU-stuurprogramma en de invoegtoepassing voor Kubernetes DirectX-apparaten automatisch geïnstalleerd. Gebruik de volgende stappen om deze automatische installatie te omzeilen:

  1. Sla de installatie van GPU-stuurprogramma's (preview) over met behulp van --skip-gpu-driver-install.
  2. Handmatige installatie van de Kubernetes DirectX-apparaatinvoegtoepassing.

Installatie van GPU-stuurprogramma overslaan (preview)

AKS heeft standaard automatische installatie van GPU-stuurprogramma's ingeschakeld. In sommige gevallen, zoals het installeren van uw eigen stuurprogramma's, wilt u de installatie van GPU-stuurprogramma's overslaan.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

  1. Registreer of werk de aks-preview-extensie bij met behulp van de az extension add of az extension update opdracht.

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    
  2. Maak een knooppuntgroep met behulp van de az aks nodepool add opdracht met de vlag om de --skip-gpu-driver-install automatische installatie van GPU-stuurprogramma's over te slaan.

    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
    

Notitie

Als de --node-vm-size functie die u gebruikt, nog niet is uitgevoerd op AKS, kunt u GEEN GPU's gebruiken en --skip-gpu-driver-install werkt dit niet.

De Kubernetes DirectX-apparaatinvoegtoepassing handmatig installeren

U kunt een DaemonSet implementeren voor de Kubernetes DirectX-apparaatinvoegtoepassing, die een pod op elk knooppunt uitvoert om de vereiste stuurprogramma's voor de GPU's te bieden.

  • Voeg een knooppuntgroep toe aan uw cluster met behulp van de az aks nodepool add opdracht.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --os-type windows \
        --os-sku windows2022
    

Een naamruimte maken en de Kubernetes DirectX-apparaatinvoegtoepassing implementeren

  1. Maak een naamruimte met behulp van de kubectl create namespace opdracht.

    kubectl create namespace gpu-resources
    
  2. Maak een bestand met de naam k8s-directx-device-plugin.yaml en plak het volgende YAML-manifest dat is opgegeven als onderdeel van de NVIDIA-apparaatinvoegtoepassing voor het Kubernetes-project:

    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. Maak de DaemonSet en controleer of de NVIDIA-apparaatinvoegtoepassing is gemaakt met behulp van de kubectl apply opdracht.

    kubectl apply -f nvidia-device-plugin-ds.yaml
    
  4. Nu u de NVIDIA-apparaatinvoegtoepassing hebt geïnstalleerd, kunt u controleren of uw GPU's kunnen worden geschuleerbaar.

Controleer of GPU's kunnen worden gescheerd

Nadat u het cluster hebt gemaakt, controleert u of GPU's beschikbaar zijn in Kubernetes.

  1. Vermeld de knooppunten in uw cluster met behulp van de kubectl get nodes opdracht.

    kubectl get nodes
    

    De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:

    NAME                   STATUS   ROLES   AGE   VERSION
    aks-gpunp-28993262-0   Ready    agent   13m   v1.20.7
    
  2. Controleer of de GPU's beschikbaar zijn met behulp van de kubectl describe node opdracht.

    kubectl describe node aks-gpunp-28993262-0
    

    Onder de sectie Capaciteit moet de GPU worden weergegeven als microsoft.com/directx: 1. De uitvoer moet er ongeveer uitzien als in de volgende verkorte voorbeelduitvoer:

    Capacity:
    [...]
     microsoft.com.directx/gpu:                 1
    [...]
    

Container Insights gebruiken om GPU-gebruik te bewaken

Container Insights met AKS bewaakt de volgende metrische gegevens over GPU-gebruik:

Naam van meetwaarde Metrische dimensie (tags) Beschrijving
containerGpuDutyCycle container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName, gpuId, , , gpuModelgpuVendor Percentage van de tijd gedurende de afgelopen voorbeeldperiode (60 seconden) waarin GPU bezig was/actief werd verwerkt voor een container. De dienstcyclus is een getal tussen 1 en 100.
containerGpuLimits container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName Elke container kan limieten opgeven als een of meer GPU's. Het is niet mogelijk om een fractie van een GPU aan te vragen of te beperken.
containerGpuRequests container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName Elke container kan een of meer GPU's aanvragen. Het is niet mogelijk om een fractie van een GPU aan te vragen of te beperken.
containerGpumemoryTotalBytes container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName, gpuId, , , gpuModelgpuVendor Hoeveelheid GPU-geheugen in bytes die beschikbaar zijn voor gebruik voor een specifieke container.
containerGpumemoryUsedBytes container.azm.ms/clusterId, , container.azm.ms/clusterNamecontainerName, gpuId, , , gpuModelgpuVendor Hoeveelheid GPU-geheugen in bytes die worden gebruikt door een specifieke container.
nodeGpuAllocatable container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Het aantal GPU's in een knooppunt dat Kubernetes kan gebruiken.
nodeGpuCapacity container.azm.ms/clusterId, , container.azm.ms/clusterNamegpuVendor Totaal aantal GPU's in een knooppunt.

Resources opschonen

  • Verwijder de bijbehorende Kubernetes-objecten die u in dit artikel hebt gemaakt met behulp van de kubectl delete job opdracht.

    kubectl delete jobs windows-gpu-workload
    

Volgende stappen