Partilhar via


Crie um node pool de GPU de várias instâncias no Azure Kubernetes Service (AKS)

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 --version para 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, kubectl já está instalado. Se você quiser instalá-lo localmente, você pode usar o az aks install-cli comando.
  • 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_v5 e 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

  1. Crie um grupo de recursos Azure usando o comando az group create.

    az group create --name myResourceGroup --location southcentralus
    
  2. Crie um cluster AKS usando o az aks create comando.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --generate-ssh-keys
    
  3. Configurar kubectl para se conectar ao seu cluster AKS com o comando az 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 add comando 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)

  1. 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=mixed
    
  2. Adicione o repositório de leme do plug-in do dispositivo NVIDIA usando os helm repo add comandos and helm repo update .

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
    helm repo update
    
  3. Instale o plug-in de dispositivo NVIDIA usando o helm install comando.

    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

  1. Verifique a kubectl conexão com o cluster usando o kubectl get comando para retornar uma lista de nós do cluster.

    kubectl get nodes -o wide
    
  2. 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 aksMigNode, que usa MIG1g como o perfil de instância da GPU.

    kubectl describe node aksMigNode
    

    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

  1. 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
    
  2. Implante o aplicativo usando o kubectl apply comando e especifique o nome do seu manifesto YAML.

    kubectl apply -f single-strategy-example.yaml
    
  3. 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

  1. 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
    
  2. Implante o aplicativo usando o kubectl apply comando e especifique o nome do seu manifesto YAML.

    kubectl apply -f mixed-strategy-example.yaml
    
  3. 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 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: