Delen via


AMD GPU's gebruiken voor rekenintensieve workloads in Azure Kubernetes Service (AKS)

AMD GPU Virtual Machine (VM) groottes in Azure kunnen flexibiliteit bieden in prestaties en kosten, waardoor hoge rekenvermogen wordt geboden, terwijl u de juiste configuratie kunt kiezen voor uw workload vereisten. AKS ondersteunt linux-knooppuntgroepen met AMD GPU om rekenintensieve Kubernetes-workloads uit te voeren.

Dit artikel helpt u bij het inrichten van knooppunten met schedulable AMD GPU's op nieuwe en bestaande AKS-clusters.

Beperkingen

  • AKS biedt momenteel ondersteuning voor de Standard_ND96isr_MI300X_v5 Azure VM-grootte, mogelijk gemaakt door de MI300-serie AMD GPU.
  • Het bijwerken van een bestaande knooppuntgroep om een AMD GPU VM-grootte toe te voegen, wordt niet ondersteund in AKS.
  • Het bijwerken van een niet-AMD GPU-knooppuntgroep met een AMD GPU-VM-grootte wordt niet ondersteund.
  • AzureLinux, WindowsAzureLinuxOSGuard en flatcar worden niet ondersteund met AMD GPU.

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 2.72.2 of hoger hebben geïnstalleerd om het --gpu-driver veld in te stellen. Voer az --version uit om de versie te vinden. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren.
  • Als u de aks-preview Azure CLI-extensie hebt geïnstalleerd, werkt u de versie bij naar 18.0.0b2 of hoger.

Opmerking

GPU-ingeschakelde virtuele machines bevatten gespecialiseerde hardware die onderhevig is aan hogere prijsstelling en beschikbaarheid per regio. Raadpleeg voor meer informatie het prijsgereedschap en de beschikbaarheid per regio.

Verkrijg de inloggegevens voor uw cluster

Verkrijg de inloggegevens voor je AKS-cluster door de az aks get-credentials-opdracht te gebruiken. De volgende voorbeeldcommandoregel haalt de referenties voor het cluster myAKSCluster in de myResourceGroup resourcegroep op.

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

Opties voor het gebruik van AMD GPU's

Het gebruik van AMD GPU's omvat de installatie van verschillende AMD GPU-softwareonderdelen, zoals de AMD-apparaatinvoegtoepassing voor Kubernetes, GPU-stuurprogramma's en meer.

Opmerking

Op dit moment beheert AKS de installatie van GPU-stuurprogramma's of de invoegtoepassing AMD GPU-apparaten op knooppuntgroepen met AMD GPU niet en automatiseert deze niet.

De functie AKSInfinibandSupport registreren

  1. Als uw AMD GPU-VM-grootte RDMA is ingeschakeld met de r namenconventie (bijvoorbeeld Standard_ND96isr_MI300X_v5), moet u ervoor zorgen dat de machines in de node pool op hetzelfde fysieke Infiniband-netwerk komen. Als u dit wilt bereiken, registreert u de AKSInfinibandSupport functievlag met behulp van de az feature register opdracht:

    az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
    
  2. Controleer de registratiestatus met behulp van de az feature show opdracht:

    az feature show \
    --namespace "Microsoft.ContainerService" \
    --name AKSInfinibandSupport
    
  3. Maak een knooppuntgroep met AMD GPU met behulp van de opdracht en sla de az aks nodepool add standaardinstallatie van stuurprogramma's over door het API-veld --gpu-driver in te stellen op de waarde none:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_ND96isr_MI300X_v5 \
        --gpu-driver none
    

    Opmerking

    AKS dwingt momenteel het gebruik van het gpu-driver veld af om de automatische installatie van stuurprogramma's over te slaan tijdens het maken van een AMD GPU-knooppuntgroep.

De AMD GPU-operator implementeren in AKS

De AMD GPU-operator automatiseert het beheer en de implementatie van alle AMD-softwareonderdelen die nodig zijn om GPU in te richten, inclusief installatie van stuurprogramma's, de AMD-apparaatinvoegtoepassing voor Kubernetes, de AMD-containerruntime en meer. Omdat de AMD GPU-operator deze onderdelen afhandelt, hoeft u de AMD-apparaatinvoegtoepassing niet afzonderlijk te installeren op uw AKS-cluster. Dit betekent ook dat de automatische installatie van het GPU-stuurprogramma moet worden overgeslagen om de AMD GPU-operator op AKS te kunnen gebruiken.

  1. Volg de AMD-documentatie om de GPU-operator te installeren.

  2. Controleer de status van de AMD-GPU's in uw knooppuntgroep met behulp van de kubectl get nodes opdracht:

    kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'
    

    Uw output zou eruit moeten zien zoals de volgende voorbeeldoutput.

    NAME                    STATUS   ROLES   AGE    VERSION
    aks-gpunp-00000000      Ready    agent   2m4s   v1.31.7
    

Controleer of de AMD GPU's schedulable zijn

Nadat u de knooppuntgroep hebt gemaakt, controleert u of GPU's beschikbaar zijn in uw AKS-cluster.

  1. Noteer de nodes in je cluster met behulp van de kubectl get nodes opdracht.

    kubectl get nodes
    
  2. Bevestig dat de GPU's te plannen zijn met behulp van de kubectl describe node opdracht.

    kubectl describe node aks-gpunp-00000000
    

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

    Name:               aks-gpunp-00000000
    Roles:              agent
    Labels:             accelerator=amd
    
    [...]
    
    Capacity:
    [...]
     amd.com/gpu:                 1
    [...]
    

Een workload met AMD GPU uitvoeren

Als u de AMD GPU in actie wilt zien, kunt u een GPU-ondersteunde workload plannen met de juiste resourceaanvraag. In dit voorbeeld zullen we een Tensorflow-taak uitvoeren op de MNIST dataset.

  1. Maak een bestand met de naam samples-tf-mnist-demo.yaml en plak het volgende YAML-manifest, waarin een resourcelimiet van amd.com/gpu: 1 is opgenomen:

    apiVersion: batch/v1
    kind: Job
    metadata:
      labels:
        app: samples-tf-mnist-demo
      name: samples-tf-mnist-demo
    spec:
      template:
        metadata:
          labels:
            app: samples-tf-mnist-demo
        spec:
          containers:
          - name: samples-tf-mnist-demo
            image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
            args: ["--max_steps", "500"]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
               amd.com/gpu: 1
          restartPolicy: OnFailure
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
    
  2. Voer de taak uit met behulp van de kubectl apply opdracht, die het manifestbestand verwerkt en de gedefinieerde Kubernetes-objecten creëert.

    kubectl apply -f samples-tf-mnist-demo.yaml
    

Bekijk de status van de workload met GPU-ondersteuning

  1. Houd de voortgang van de taak bij met behulp van de kubectl get jobs opdracht met de --watch vlag. Het kan enkele minuten duren om eerst de afbeelding op te halen en de gegevensset te verwerken.

    kubectl get jobs samples-tf-mnist-demo --watch
    

    Wanneer de COMPLETIONS-kolom 1/1 aangeeft, is de taak succesvol voltooid, zoals te zien is in het volgende voorbeeldoutput:

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. Beëindig het kubectl --watch-proces met Ctrl-C.

  3. Verkrijg de naam van de pod met behulp van de kubectl get pods opdracht.

    kubectl get pods --selector app=samples-tf-mnist-demo
    

De hulpbronnen opschonen

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

kubectl delete jobs samples-tf-mnist-demo

Volgende stappen