Criar um pool de nós de GPU de várias instâncias no Serviço Kubernetes do Azure (AKS)
A GPU A100 da NVIDIA pode ser dividida em até sete instâncias independentes. Cada instância tem seu próprio Stream Multiprocessor (SM), que é responsável pela execução de instruções em paralelo, e memória GPU. Para obter mais informações sobre a NVIDIA A100, consulte GPU NVIDIA A100.
Este artigo orienta você sobre como criar um pool de nós de GPU de várias instâncias usando um tamanho de VM compatível com MIG em um cluster do Serviço Kubernetes do Azure (AKS).
Pré-requisitos e limitações
- Uma conta do Azure com uma subscrição ativa. Se não tiver uma, pode criar uma conta gratuitamente.
- Azure CLI versão 2.2.0 ou posterior instalada e configurada. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI). - O cliente de linha de comando Kubernetes, kubectl, instalado e configurado. Se você usa o Azure Cloud Shell,
kubectl
já está instalado. Se você quiser instalá-lo localmente, você pode usar oaz aks install-cli
comando. - Helm v3 instalado e configurado. Para obter mais informações, consulte Instalando o Helm.
- Atualmente, não há suporte para pools de nós de GPU de várias instâncias no Azure Linux.
- Não é possível usar o Escalonamento Automático de Cluster com pools de nós de GPU de várias instâncias.
Perfis de instância de GPU
Os perfis de instância da GPU definem como as GPUs são particionadas. A tabela a seguir mostra o perfil de instância de GPU disponível para o Standard_ND96asr_v4
:
Nome do perfil | Fração de SM | Fração de memória | Número de instâncias criadas |
---|---|---|---|
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 | 7/4 | 4/8 | 1 |
MIG 7G.40GB | 7/7 | 8/8 | 1 |
Como exemplo, o perfil da instância da GPU indica que cada instância da GPU tem 1g SM (streaming de multiprocessadores) e 5gb de MIG 1g.5gb
memória. Neste caso, a GPU é particionada em sete instâncias.
Os perfis de instância de GPU disponíveis para esse tamanho de VM incluem MIG1g
, MIG2g
, MIG3g
, MIG4g
e MIG7g
.
Importante
Não é possível alterar o perfil de instância da GPU aplicado após a criação do pool de nós.
Criar um cluster do AKS
Crie um grupo de recursos do Azure usando o
az group create
comando.az group create --name myResourceGroup --location southcentralus
Crie um cluster AKS usando o
az aks create
comando.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keys
Configure
kubectl
para se conectar ao seu cluster AKS usando oaz aks get-credentials
comando.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Criar um pool de nós de GPU de várias instâncias
Você pode usar a CLI do Azure ou uma solicitação HTTP para a API ARM para criar o pool de nós.
Crie um pool de nós de GPU de várias instâncias usando o
az aks nodepool add
comando e especifique o perfil da instância da GPU. O exemplo abaixo cria um pool de nós com o tamanho da VM GPU compatível com MIGStandard_ND96asr_v4
.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
Determinar a estratégia de GPU de várias instâncias (MIG)
Antes de instalar os plug-ins NVIDIA, você precisa especificar qual estratégia de GPU multiinstância (MIG) usar para particionamento de GPU: Estratégia única ou Estratégia mista. As duas estratégias não afetam como você executa cargas de trabalho de CPU, mas como os recursos de GPU são exibidos.
- Estratégia única: a estratégia única trata cada instância de GPU como uma GPU. Se você usar essa estratégia, os recursos da GPU serão exibidos como
nvidia.com/gpu: 1
. - Estratégia mista: a estratégia mista expõe as instâncias da GPU e o perfil da instância da GPU. Se você usar essa estratégia, o recurso GPU será exibido como
nvidia.com/mig1g.5gb: 1
.
Instale o plug-in de dispositivo NVIDIA e os componentes GFD (GPU feature discovery)
Defina sua estratégia MIG como uma variável de ambiente. Você pode usar uma estratégia única ou mista.
# Single strategy export MIG_STRATEGY=single # Mixed strategy export MIG_STRATEGY=mixed
Adicione o repositório de leme do plug-in do dispositivo NVIDIA usando os
helm repo add
comandos andhelm repo update
.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update
Instale o plug-in de dispositivo NVIDIA usando o
helm install
comando.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
Nota
A instalação do plug-in de dispositivo NVIDIA versão 0.15.0 e superior consolida o plug-in do dispositivo e os repositórios GFD. A instalação separada do leme do componente de software GFD não é recomendada neste tutorial.
Confirme a capacidade da GPU de várias instâncias
Verifique a
kubectl
conexão com o cluster usando okubectl get
comando para retornar uma lista de nós do cluster.kubectl get nodes -o wide
Confirme se o nó tem capacidade de GPU de várias instâncias usando o
kubectl describe node
comando. O comando de exemplo a seguir descreve o nó chamado aks-mignode, que usa MIG1g como o perfil de instância da GPU.kubectl describe node aks-mignode
Sua saída deve ser semelhante à saída de exemplo a seguir:
# Single strategy output Allocatable: nvidia.com/gpu: 56 # Mixed strategy output Allocatable: nvidia.com/mig-1g.5gb: 56
Agendar trabalho
Os exemplos a seguir são baseados na imagem base CUDA versão 12.1.1 para Ubuntu 22.04, marcada como 12.1.1-base-ubuntu22.04
.
Estratégia única
Crie um arquivo nomeado
single-strategy-example.yaml
e copie no manifesto a seguir.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
Implante o aplicativo usando o
kubectl apply
comando e especifique o nome do seu manifesto YAML.kubectl apply -f single-strategy-example.yaml
Verifique os dispositivos GPU alocados usando o
kubectl exec
comando. Este comando retorna uma lista dos nós do cluster.kubectl exec nvidia-single -- nvidia-smi -L
O exemplo a seguir é semelhante à saída mostrando implantações e serviços criados com êxito:
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)
Estratégia mista
Crie um arquivo nomeado
mixed-strategy-example.yaml
e copie no manifesto a seguir.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
Implante o aplicativo usando o
kubectl apply
comando e especifique o nome do seu manifesto YAML.kubectl apply -f mixed-strategy-example.yaml
Verifique os dispositivos GPU alocados usando o
kubectl exec
comando. Este comando retorna uma lista dos nós do cluster.kubectl exec nvidia-mixed -- nvidia-smi -L
O exemplo a seguir é semelhante à saída mostrando implantações e serviços criados com êxito:
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)
Importante
A latest
tag para imagens CUDA foi preterida no Docker Hub. Consulte o repositório da NVIDIA para obter as imagens mais recentes e as tags correspondentes.
Resolução de Problemas
Se você não vir o recurso de GPU de várias instâncias depois de criar o pool de nós, confirme se a versão da API não é anterior a 2021-08-01.
Próximos passos
Para saber mais sobre GPUs no Serviço Kubernetes do Azure, consulte:
Azure Kubernetes Service