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ändaaz 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_v4
fö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
, MIG4g
och MIG7g
.
Viktigt!
Du kan inte ändra den tillämpade GPU-instansprofilen när nodpoolen har skapats.
Skapa ett AKS-kluster
Skapa en Azure-resursgrupp med kommandot
az group create
.az group create --name myResourceGroup --location southcentralus
Skapa ett AKS-kluster med kommandot
az aks create
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keys
Konfigurera
kubectl
för att ansluta till ditt AKS-kluster med hjälp avaz 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 denStandard_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)
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
Lägg till helm-lagringsplatsen för NVIDIA-enhetstillägget
helm repo add
med hjälp av kommandona ochhelm repo update
.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update
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
kubectl
Verifiera anslutningen till klustret med kommandotkubectl get
för att returnera en lista över klusternoder.kubectl get nodes -o wide
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
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
Distribuera programmet med kommandot
kubectl apply
och ange namnet på ditt YAML-manifest.kubectl apply -f single-strategy-example.yaml
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
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
Distribuera programmet med kommandot
kubectl apply
och ange namnet på ditt YAML-manifest.kubectl apply -f mixed-strategy-example.yaml
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:
Azure Kubernetes Service