Partilhar via


Criar um pool de nós de GPU de várias instâncias no Serviço Kubernetes do Azure (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 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 o az aks install-cli comando.
  • Helm v3 instalado e configurado. Para obter mais informações, consulte Instalação do Helm.
  • Atualmente, não há suporte para pools de nós de GPU de várias instâncias no Azure Linux.
  • 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 do Azure usando o az group create comando.

    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

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 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.

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 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 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 Serviço Kubernetes do Azure, consulte: