Criar um pool de nós de GPU totalmente gerenciado no AKS (Serviço de Kubernetes do Azure) (versão prévia)

A execução de cargas de trabalho de GPU NVIDIA em AKS (Serviço de Kubernetes do Azure) tradicionalmente exige que você instale e mantenha o driver de GPU NVIDIA, o plug-in do dispositivo Kubernetes e um exportador de métricas de GPU em cada nó de GPU. Esses componentes habilitam o agendamento de GPU, o acesso à GPU no nível do contêiner e a telemetria, mas instalá-los manualmente ou por meio do Operador de GPU NVIDIA adiciona sobrecarga operacional.

Com nós de GPU totalmente gerenciados (versão prévia), o AKS instala e mantém o driver de GPU NVIDIA, o plug-in do dispositivo e o exportador de métricas do DCGM ( Data Center GPU Manager) para você. A criação do pool de nós de GPU se torna uma única etapa e a capacidade de GPU se comporta como qualquer outro pool de nós do AKS.

Você configura um pool de nós de GPU gerenciado por meio de dois campos em gpuProfile.nvidia:

  • managementMode (Managed ou Unmanaged) determina se o AKS instala a pilha completa de gerenciamento de GPU (driver, plug-in do dispositivo e exportador de métricas DCGM) ou apenas o driver. O padrão é Unmanaged.
  • migStrategy (None, Singleou Mixed) define a estratégia de MIG (GPU de várias instâncias) para SKUs de GPU com suporte, como A100 e H100. O padrão é None.

Neste artigo, você provisionará um conjunto de nós com GPU gerenciada, ativará o MIG (se desejar), verificará a pilha e executará uma carga de trabalho de GPU de exemplo.

Importante

As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

Antes de começar

Componentes de GPU gerenciados

Um pool de nós de GPU gerenciado pode incluir os seguintes componentes em cada nó:

Componente O que faz O que o AKS gerencia
Driver de GPU NVIDIA Módulos de kernel e bibliotecas de espaço do usuário que permitem que o sistema operacional e os contêineres conversem com o hardware da GPU. Seleção da versão do driver, instalação durante o provisionamento do nó e reinstalação após atualizações de imagem do nó.
Plugin de dispositivo Kubernetes NVIDIA Equivalente a um DaemonSet que disponibiliza recursos de GPU (nvidia.com/gpu, nvidia.com/mig-*) ao kubelet para que os pods possam solicitá-los. Implantação, configuração (incluindo estratégia de MIG) e ciclo de vida em cada nó de GPU.
NVIDIA DCGM e exportador de métricas do DCGM O Gerenciador de GPUs do Data Center coleta dados de integridade e utilização da GPU e expõe as métricas do Prometheus (por exemplo, DCGM_FI_DEV_GPU_UTIL, ) DCGM_FI_DEV_GPU_TEMPna porta 19400. Instalação, ativação do serviço e o rótulo do nó kubernetes.azure.com/dcgm-exporter=enabled usado para coletar métricas.
Sinais de integridade de GPU O NPD indica condições específicas dos nós da GPU de superfície, tais como UnhealthyNvidiaDevicePlugin e UnhealthyNvidiaDCGMServices. Monitoramento de NPD e relatórios de status em nós de GPU.

Instalar perfis

Dois gpuProfile campos decidem quais desses componentes o AKS instala:

  • gpuProfile.driver (Install ou None): se o AKS instala o driver de GPU NVIDIA.
  • gpuProfile.nvidia.managementMode (Managed ou Unmanaged): se o AKS também instala a pilha de GPUs voltada para o Kubernetes sobre o driver.

Juntos, eles produzem três perfis de instalação:

Instalar perfil Sinalizadores da CLI O que o AKS instala e gerencia
Pilha gerenciada completa --enable-managed-gpu=true (ou nenhuma das duas opções) Todos os quatro componentes acima: driver, plug-in do dispositivo, exportador de métricas DCGM e monitoramento do estado da GPU no NPD.
Somente driver (padrão) --enable-managed-gpu=false Apenas driver de GPU NVIDIA. Instale e gerencie o plug-in do dispositivo, o exportador de métricas e o monitoramento de integridade por você mesmo (por exemplo, com o NVIDIA GPU Operator).
None (BYO) --enable-managed-gpu=false --gpu-driver None Nada. O AKS não instala nenhum dos quatro componentes. Você é responsável por toda a pilha. Consulte Forneça Seu Próprio Driver de GPU.

Padrões e substituições

  • Padrões: se você não especificar --enable-managed-gpu ou --gpu-driver, o AKS aplica o perfil Somente driver ao pool de nós criado com um tamanho de VM compatível com GPU NVIDIA.
  • Substituição: managementMode: Managed requer o driver, portanto, --gpu-driver None é ignorado quando --enable-managed-gpu=true e o driver ainda estiver instalado. Para ignorar o driver, defina tanto --enable-managed-gpu=false quanto --gpu-driver None.
  • Imutabilidade: managementMode, migStrategy, e driver são todos fixos no momento da criação. Para alterar o perfil, crie um novo node pool.

Instalar a extensão da CLI aks-preview

  1. Instale a extensão da CLI aks-preview usando o comando az extension add. A versão 19.0.0b29 ou posterior é necessária.

    az extension add --name aks-preview
    
  2. Atualize a extensão para garantir que você tenha a versão mais recente usando o comando az extension update.

    az extension update --name aks-preview
    

Registrar o sinalizador de recurso ManagedGPUExperiencePreview

Registre o sinalizador de recurso ManagedGPUExperiencePreview na assinatura usando o comando az feature register.

az feature register --namespace Microsoft.ContainerService --name ManagedGPUExperiencePreview

Limitações

  • Atualmente, esse recurso dá suporte apenas a tamanhos de VM (máquina virtual) habilitada para GPU da NVIDIA .
  • Não há suporte para atualizar um pool de nós de uso geral para adicionar um tamanho de VM de GPU no AKS.
  • Os pools de nós do Windows não são compatíveis com esse recurso, pois as métricas de GPU não são suportadas. Quando você cria pools de nós de GPU Windows, o AKS instala e gerencia automaticamente os drivers e o plug-in de dispositivo DirectX. Para obter mais informações, consulte a documentação AKS Windows GPU.
  • Não há suporte para migrar os pools de nós de GPU de várias instâncias existentes para usar esse recurso.
  • Atualizações no local de um pool de nós de GPU NVIDIA existente para um pool de nós de GPU gerenciado não são suportadas. Para migrar, isolar e drenar os nós de GPU existentes e reimplantar suas cargas de trabalho para um novo pool de nós de GPU criado com --enable-managed-gpu=true. Para obter mais informações, consulte Redimensionar pools de nós no AKS.
  • Os campos managementMode, migStrategy, e driver em gpuProfile são imutáveis após a criação do pool de nós. Para alterar esses valores, crie um novo pool de nós.
  • O dimensionador automático de cluster não é compatível com pools de nós de GPU gerenciados durante a versão preliminar. Dimensionar esses pools manualmente.

Observação

As VMs habilitadas para GPU contêm um hardware especializado sujeito a preços mais altos e disponibilidade da região. Para obter mais informações, confira a ferramenta preço e a disponibilidade de região.

Criar um pool de nós de GPU gerenciado pelo AKS (versão prévia)

Adicione um pool de nós de GPU gerenciado a um cluster do AKS existente passando --enable-managed-gpu=true para az aks nodepool add. O AKS define gpuProfile.nvidia.managementMode para Managed e instala automaticamente o driver de GPU, o plugin de dispositivo e o exportador de métricas DCGM.

Para usar o SKU padrão do sistema operacional Ubuntu, crie o pool de nós sem especificar um SKU do sistema operacional. O pool de nós está configurado para o sistema operacional padrão com base na versão do Kubernetes do cluster.

  1. Adicione um pool de nós ao seu cluster usando o comando az aks nodepool add com o sinalizador --enable-managed-gpu=true.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_NC6s_v3 \
        --node-taints sku=gpu:NoSchedule \
        --enable-managed-gpu=true
    
  2. Confirme se os componentes de software de GPU NVIDIA gerenciados foram instalados com êxito:

    az aks nodepool show \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp
    

    Sua saída deve incluir os seguintes valores:

    ...
    "gpuProfile": {
        "driver": "Install",
        "driverType": "",
        "nvidia": {
            "managementMode": "Managed",
            "migStrategy": null
        }
    },
    ...
    

Criar um pool de nós MIG (GPU de Várias Instâncias) gerenciado (versão prévia)

Para SKUs de GPU que dão suporte à GPU de múltiplas instâncias (como A100 e H100), configure uma estratégia de MIG ao criar o pool de nós usando o parâmetro --gpu-mig-strategy. A estratégia controla como as partições MIG são expostas ao Kubernetes:

  • Single: todas as instâncias de MIG são agregadas sob o recurso padrão nvidia.com/gpu .
  • Mixed: cada perfil MIG é exposto como um recurso separado, como nvidia.com/mig-1g.10gb.
  • None (padrão): o MIG não está configurado.

O migStrategy campo é imutável depois que o pool de nós é criado.

Para obter informações sobre particionamento MIG, tamanhos de VM compatíveis e perfis de instância de GPU, consulte Criar um pool de nós de GPU de várias instâncias no AKS e NVIDIA GPU de várias instâncias.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mignp \
    --node-count 1 \
    --node-vm-size Standard_NC24ads_A100_v4 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=true \
    --gpu-instance-profile MIG1g \
    --gpu-mig-strategy Single

Com essa configuração, os pods solicitam recursos de GPU usando o nome do recurso padrão nvidia.com/gpu .

Verificar o conjunto de nós de GPU gerenciados (versão preliminar)

Depois que o pool de nós estiver pronto, execute as seguintes verificações para confirmar se toda a pilha gerenciada está instalada e íntegra.

  1. Verifique as condições específicas dos nós da GPU no Detector de Problemas de Nós (NPD):

    GPU_NODE=$(kubectl get nodes -l agentpool=gpunp -o jsonpath='{.items[0].metadata.name}')
    kubectl describe node $GPU_NODE
    

    Em um nó de GPU gerenciado, as duas condições a seguir devem ser relatadas False:

    Condition Status Reason
    UnhealthyNvidiaDevicePlugin False HealthyNvidiaDevicePlugin
    UnhealthyNvidiaDCGMServices False HealthyNvidiaDCGMServices
  2. Verifique se o rótulo de GPU gerenciado está presente no nó:

    kubectl get node $GPU_NODE -o jsonpath='{.metadata.labels.kubernetes\.azure\.com/dcgm-exporter}'
    

    Saída esperada: enabled.

  3. Verifique se os recursos de GPU são anunciados nos recursos alocáveis dos nós.

    kubectl get node $GPU_NODE -o jsonpath='{.status.allocatable}'
    

    Para um pool de nós que não seja MIG, a saída inclui "nvidia.com/gpu": "1" (ou mais, dependendo do SKU). No caso de um pool de nós MIG Mixed, a saída inclui recursos específicos do MIG, tais como "nvidia.com/mig-1g.10gb": "7".

  4. Execute uma carga de trabalho de exemplo para confirmar o acesso de GPU de dentro de um contêiner:

    apiVersion: v1
    kind: Pod
    metadata:
      name: managed-gpu-test
    spec:
      restartPolicy: Never
      tolerations:
        - key: "sku"
          operator: "Equal"
          value: "gpu"
          effect: "NoSchedule"
      containers:
      - name: gpu-test
        image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
        command: ["nvidia-smi"]
        resources:
          limits:
            nvidia.com/gpu: 1
    

    Consulte os logs do pod para ver as informações nvidia-smi que mostram o dispositivo da GPU, a versão do driver e a versão do CUDA:

    kubectl logs managed-gpu-test
    

Dimensionar um pool de nós de GPU gerenciado (versão prévia)

Dimensione manualmente um pool de nós de GPU gerenciado com az aks nodepool scale. Os novos nós instalam a pilha completa de GPUs gerenciadas.

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 2

Importante

Durante a fase de pré-lançamento, os conjuntos de nós de GPU gerenciados não são compatíveis com o dimensionador automático do cluster. Dimensionar esses pools manualmente.

Perfis de instalação alternativos

Se o perfil Pilha Gerenciada Completa não for o mais adequado, o AKS oferece suporte a dois perfis alternativos em pools de nós de GPU.

Use esse perfil quando quiser que o AKS instale e mantenha o driver de GPU NVIDIA, mas você planeja implantar o plug-in do dispositivo e o exportador de métricas por conta própria (por exemplo, com o Operador de GPU NVIDIA). Definir --enable-managed-gpu=false:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunp \
    --node-count 1 \
    --node-vm-size Standard_NC6s_v3 \
    --node-taints sku=gpu:NoSchedule \
    --enable-managed-gpu=false

Com esta configuração:

  • O AKS instala e gerencia o driver de GPU NVIDIA (gpuProfile.driver é Install).
  • O AKS não instala um plug-in de dispositivo, um exportador de métricas dcgm ou regras de integridade de GPU. gpuProfile.nvidia é null.
  • Nenhum nvidia.com/gpu recurso é anunciado até que você implante um plug-in de dispositivo.

Próximas etapas