Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Algumas GPUs NVIDIA podem ser divididas 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 particionamento de GPU, consulte NVIDIA MIG.
Este artigo explica-te como criar um pool de nós de GPU multi-instância usando um tamanho de VM compatível com MIG num cluster Azure Kubernetes Service (AKS).
Pré-requisitos e limitações
- Uma conta no Azure com uma subscrição ativa. Se não tiver uma, pode criar uma conta gratuitamente.
- CLI do Azure versão 2.2.0 ou posterior instalada e configurada. Executar
az --versionpara localizar a versão. Se precisares de instalar ou atualizar, vê Install CLI do Azure. - O cliente de linha de comando Kubernetes, kubectl, instalado e configurado. Se usares Azure Cloud Shell,
kubectljá está instalado. Se você quiser instalá-lo localmente, você pode usar oaz aks install-clicomando. - Helm v3 instalado e configurado. Para obter mais informações, consulte Instalação do Helm.
- Atualmente, o Multi-instance GPU é suportado nos
Standard_NC40ads_H100_v5, tamanhos de VM de GPU,Standard_ND96isr_H100_v5e A100 no AKS.
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 1 g. 5 gb | 1/7 | 1/8 | 7 |
| MIG 2G.10GB | 2/7 | 2/8 | 3 |
| MIG 3G.20GB | 3/7 | 4 de agosto | 2 |
| MIG 4G.20GB | 4/7 | 4 de agosto | 1 |
| MIG 7G. 40GB | 07/07 | 8/8 | 1 |
Como exemplo, o perfil da instância da GPU MIG 1g.5gb indica que cada instância da GPU tem 1g SM (multiprocessadores de fluxo) e 5gb de 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, MIG4ge 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 Azure usando o comando
az group create.az group create --name myResourceGroup --location southcentralusCrie um cluster AKS usando o
az aks createcomando.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --generate-ssh-keysConfigurar
kubectlpara se conectar ao seu cluster AKS com o comandoaz aks get-credentials.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Criar um pool de nós de GPU de várias instâncias
Pode usar tanto a CLI do Azure como um pedido HTTP à 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 addcomando e especifique o perfil da instância da GPU. O exemplo abaixo cria um pool de nós com tamanho de máquina virtual (VM) de GPU compatível com MIG:Standard_ND96asr_v4.az aks nodepool add \ --name aksMigNode \ --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 multi-instância (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 a 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=mixedAdicione o repositório de leme do plug-in do dispositivo NVIDIA usando os
helm repo addcomandos andhelm repo update.helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo updateInstale o plug-in de dispositivo NVIDIA usando o
helm installcomando.helm install nvdp nvdp/nvidia-device-plugin \ --version=0.17.0 \ --set migStrategy=${MIG_STRATEGY} \ --set gfd.enabled=true \ --namespace nvidia-device-plugin \ --create-namespace
Nota
A instalação do plug-in de dispositivo NVIDIA consolida o plug-in de dispositivo Kubernetes e os repositórios GFD. A instalação de leme separado do componente de software GFD não é recomendada ao usar GPU multiinstância gerenciada pelo AKS.
Nota
Se implementares o plugin de dispositivo NVIDIA em Azure Linux através de um manifesto personalizado DaemonSet em vez de Helm, tens de incluir a variável de ambiente NVIDIA_MIG_MONITOR_DEVICES=all no contentor do plugin do dispositivo.
Confirme a capacidade da GPU de várias instâncias
Verifique a
kubectlconexão com o cluster usando okubectl getcomando para retornar uma lista de nós do cluster.kubectl get nodes -o wideConfirme se o nó tem capacidade de GPU de várias instâncias usando o
kubectl describe nodecomando. O comando de exemplo a seguir descreve o nó chamado aksMigNode, que usa MIG1g como o perfil de instância da GPU.kubectl describe node aksMigNodeSua 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.yamle 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": 1Implante o aplicativo usando o
kubectl applycomando e especifique o nome do seu manifesto YAML.kubectl apply -f single-strategy-example.yamlVerifique os dispositivos GPU alocados usando o
kubectl execcomando. Este comando retorna uma lista dos nós do cluster.kubectl exec nvidia-single -- nvidia-smi -LO 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.yamle 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": 1Implante o aplicativo usando o
kubectl applycomando e especifique o nome do seu manifesto YAML.kubectl apply -f mixed-strategy-example.yamlVerifique os dispositivos GPU alocados usando o
kubectl execcomando. Este comando retorna uma lista dos nós do cluster.kubectl exec nvidia-mixed -- nvidia-smi -LO 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 etiqueta latest para imagens CUDA foi descontinuada no Docker Hub. Consulte o repositório da NVIDIA para obter as imagens mais recentes e as tags correspondentes.
Resolução de Problemas
Se não vires o recurso de GPU de várias instâncias depois de criar o pool de nós, confirma que a versão da API não é mais antiga do que 2021-08-01.
Próximos passos
Para saber mais sobre GPUs no Azure Kubernetes Service, veja: