Dela via


Skapa en GPU-nodpool med flera instanser i Azure Kubernetes Service (AKS)

NVIDIA:s A100 GPU kan delas upp till sju oberoende instanser. Varje instans har en egen Stream Multiprocessor (SM), som ansvarar för att köra instruktioner parallellt och GPU-minne. Mer information om NVIDIA A100 finns i NVIDIA A100 GPU.

Den här artikeln beskriver hur du skapar en GPU-nodpool med flera instanser med hjälp av en MIG-kompatibel VM-storlek i ett AKS-kluster (Azure Kubernetes Service).

Förutsättningar och begränsningar

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har ett konto kan du skapa ett konto kostnadsfritt.
  • Azure CLI version 2.2.0 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Kubernetes kommandoradsklient, kubectl, installerad och konfigurerad. Om du använder Azure Cloud Shell är kubectl redan installerat. Om du vill installera det lokalt kan du använda az aks install-cli kommandot .
  • Helm v3 installerat och konfigurerat. Mer information finns i Installera Helm.
  • GPU-nodpooler med flera instanser stöds för närvarande inte i Azure Linux.
  • Du kan inte använda Autoskalning av kluster med GPU-nodpooler med flera instanser.

GPU-instansprofiler

GPU-instansprofiler definierar hur GPU:er partitioneras. Följande tabell visar den tillgängliga GPU-instansprofilen Standard_ND96asr_v4för :

Profile name Del av SM Del av minnet Antal instanser som skapats
MIG 1g.5gb 1/7 1/8 7
MIG 2g.10gb 2/7 2/8 3
MIG 3g.20gb 3/7 4/8 2
MIG 4g.20gb 4/7 4/8 1
MIG 7g.40gb 7/7 8/8 1

Till exempel anger GPU-instansprofilen MIG 1g.5gb för att varje GPU-instans har 1 g SM (strömmande multiprocessorer) och 5 GB minne. I det här fallet partitioneras GPU:n i sju instanser.

Tillgängliga GPU-instansprofiler som är tillgängliga för den här VM-storleken är MIG1g, MIG2g, MIG3g, MIG4goch MIG7g.

Viktigt!

Du kan inte ändra den tillämpade GPU-instansprofilen när nodpoolen har skapats.

Skapa ett AKS-kluster

  1. Skapa en Azure-resursgrupp med kommandot az group create .

    az group create --name myResourceGroup --location southcentralus
    
  2. Skapa ett AKS-kluster med kommandot az aks create .

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. Konfigurera kubectl för att ansluta till ditt AKS-kluster med hjälp av az aks get-credentials kommandot .

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

Skapa en GPU-nodpool med flera instanser

Du kan använda antingen Azure CLI eller en HTTP-begäran till ARM-API:et för att skapa nodpoolen.

  • Skapa en GPU-nodpool med flera instanser med kommandot az aks nodepool add och ange GPU-instansprofilen. Exemplet nedan skapar en nodpool med den Standard_ND96asr_v4 MIG-kompatibla GPU VM-storleken.

    az aks nodepool add \
        --name aks-mignode \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --node-vm-size Standard_ND96asr_v4 \
        --node-count 1 \
        --gpu-instance-profile MIG1g
    

Fastställa strategi för GPU för flera instanser (MIG)

Innan du installerar NVIDIA-plugin-programmet måste du ange vilken GPU-strategi med flera instanser (MIG) som ska användas för GPU-partitionering: Enkel strategi eller blandad strategi. De två strategierna påverkar inte hur du kör CPU-arbetsbelastningar, utan hur GPU-resurser visas.

  • Enskild strategi: Den enskilda strategin behandlar varje GPU-instans som en GPU. Om du använder den här strategin visas GPU-resurserna som nvidia.com/gpu: 1.
  • Blandad strategi: Den blandade strategin exponerar GPU-instanserna och GPU-instansprofilen. Om du använder den här strategin visas GPU-resursen som nvidia.com/mig1g.5gb: 1.

Installera nvidia-enhetens plugin- och GPU-funktionsidentifieringskomponenter (GFD)

  1. Ange mig-strategin som en miljövariabel. Du kan använda antingen enkel eller blandad strategi.

    # Single strategy
    export MIG_STRATEGY=single
    
    # Mixed strategy
    export MIG_STRATEGY=mixed
    
  2. Lägg till helm-lagringsplatsen för NVIDIA-enhetstillägget helm repo add med hjälp av kommandona och helm repo update .

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. Installera plugin-programmet för NVIDIA-enheten med hjälp av helm install kommandot .

    helm install nvdp nvdp/nvidia-device-plugin \
    --version=0.15.0 \
    --generate-name \
    --set migStrategy=${MIG_STRATEGY} \
    --set gfd.enabled=true \
    --namespace nvidia-device-plugin \
    --create-namespace
    

Kommentar

Helm-installationen av PLUGIN-programmet NVIDIA-enheten version 0.15.0 och senare konsoliderar enhets-plugin-programmet och GFD-lagringsplatserna. Separat helm-installation av GFD-programvarukomponenten rekommenderas inte i den här självstudien.

Bekräfta GPU-kapacitet för flera instanser

  1. kubectl Verifiera anslutningen till klustret med kommandot kubectl get för att returnera en lista över klusternoder.

    kubectl get nodes -o wide
    
  2. Bekräfta att noden har GPU-funktioner för flera instanser med hjälp av kubectl describe node kommandot . Följande exempelkommando beskriver noden med namnet aks-mignode, som använder MIG1g som GPU-instansprofil.

    kubectl describe node aks-mignode
    

    Dina utdata bör likna följande exempelutdata:

    # Single strategy output
    Allocatable:
        nvidia.com/gpu: 56
    
    # Mixed strategy output
    Allocatable:
        nvidia.com/mig-1g.5gb: 56
    

Schemalägg arbete

Följande exempel baseras på CUDA-basavbildning version 12.1.1 för Ubuntu 22.04, taggad som 12.1.1-base-ubuntu22.04.

Enskild strategi

  1. Skapa en fil med namnet single-strategy-example.yaml och kopiera i följande manifest.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-single
    spec:
      containers:
      - name: nvidia-single
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 1000"]
        resources:
          limits:
            "nvidia.com/gpu": 1
    
  2. Distribuera programmet med kommandot kubectl apply och ange namnet på ditt YAML-manifest.

    kubectl apply -f single-strategy-example.yaml
    
  3. Kontrollera de allokerade GPU-enheterna med kommandot kubectl exec . Det här kommandot returnerar en lista över klusternoderna.

    kubectl exec nvidia-single -- nvidia-smi -L
    

    Följande exempel liknar utdata som visar distributioner och tjänster som har skapats:

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    MIG 1g.5gb     Device  1: (UUID: MIG-3d4db13e-c42d-5555-98f4-8b50389791bc)
    MIG 1g.5gb     Device  2: (UUID: MIG-de819d17-9382-56a2-b9ca-aec36c88014f)
    MIG 1g.5gb     Device  3: (UUID: MIG-50ab4b32-92db-5567-bf6d-fac646fe29f2)
    MIG 1g.5gb     Device  4: (UUID: MIG-7b6b1b6e-5101-58a4-b5f5-21563789e62e)
    MIG 1g.5gb     Device  5: (UUID: MIG-14549027-dd49-5cc0-bca4-55e67011bd85)
    MIG 1g.5gb     Device  6: (UUID: MIG-37e055e8-8890-567f-a646-ebf9fde3ce7a)
    

Blandad strategi

  1. Skapa en fil med namnet mixed-strategy-example.yaml och kopiera i följande manifest.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nvidia-mixed
    spec:
      containers:
      - name: nvidia-mixed
        image: nvidia/cuda:12.1.1-base-ubuntu22.04
        command: ["/bin/sh"]
        args: ["-c","sleep 100"]
        resources:
          limits:
            "nvidia.com/mig-1g.5gb": 1
    
  2. Distribuera programmet med kommandot kubectl apply och ange namnet på ditt YAML-manifest.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. Kontrollera de allokerade GPU-enheterna med kommandot kubectl exec . Det här kommandot returnerar en lista över klusternoderna.

    kubectl exec nvidia-mixed -- nvidia-smi -L
    

    Följande exempel liknar utdata som visar distributioner och tjänster som har skapats:

    GPU 0: NVIDIA A100 40GB PCIe (UUID: GPU-48aeb943-9458-4282-da24-e5f49e0db44b)
    MIG 1g.5gb     Device  0: (UUID: MIG-fb42055e-9e53-5764-9278-438605a3014c)
    

Viktigt!

Taggen latest för CUDA-avbildningar har föråldrats på Docker Hub. Se NVIDIA:s lagringsplats för de senaste bilderna och motsvarande taggar.

Felsökning

Om du inte ser GPU-funktionen för flera instanser när du har skapat nodpoolen bekräftar du att API-versionen inte är äldre än 2021-08-01.

Nästa steg

Mer information om GPU:er i Azure Kubernetes Service finns i: