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

Executar cargas de trabalho da GPU NVIDIA no Azure Kubernetes Service (AKS) normalmente exige que instale e mantenha o driver da GPU NVIDIA, o plugin do dispositivo Kubernetes e um exportador de métricas GPU em cada nó da GPU. Estes componentes permitem o agendamento da GPU, acesso a GPU a nível de contentor e telemetria, mas instalá-los manualmente ou através do Operador de GPU NVIDIA acrescenta sobrecarga operacional.

Com nós de GPU totalmente geridos (pré-visualização), o AKS instala e mantém o driver da GPU NVIDIA, o plugin de dispositivos e o exportador de métricas do Data Center GPU Manager (DCGM ) para si. A criação de conjuntos de nós da GPU torna-se uma única etapa, e a capacidade da GPU comporta-se como qualquer outro conjunto de nós do AKS.

Configura um pool de nós de GPU gerido através de dois campos abaixo de gpuProfile.nvidia:

  • managementMode (Managed ou Unmanaged) controla se o AKS instala toda a stack de GPU gerida (driver, plugin de dispositivo e exportador de métricas DCGM) ou apenas o driver. A predefinição é Unmanaged.
  • migStrategy (None, Single, ou Mixed) define a estratégia de GPU Multi-Instância (MIG) para SKUs de GPU suportadas como A100 e H100. A predefinição é None.

Neste artigo, provisiona um pool de nós de GPU gerido, opcionalmente ativa o MIG, valida o stack e executa uma carga de trabalho de GPU de exemplo.

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Antes de começar

Componentes de GPU geridos

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

Componente O que faz O que a AKS gere
Driver de GPU NVIDIA Módulos do kernel e bibliotecas de espaço de utilizador que permitem ao sistema operativo e aos contentores comunicarem com o hardware da GPU. Seleção da versão do driver, instalação durante o provisionamento do nó e reinstalação após as atualizações da imagem do nó.
Plugin de dispositivos NVIDIA Kubernetes DaemonSet-equivalente que anuncia os recursos da GPU (nvidia.com/gpu, nvidia.com/mig-*) para o kubelet para que os pods os possam solicitar. Implementação, configuração (incluindo estratégia MIG) e ciclo de vida em cada nó da GPU.
Exportador de métricas NVIDIA DCGM e DCGM O Data Center GPU Manager recolhe dados de saúde e utilização da GPU e expõe métricas Prometheus (por exemplo, DCGM_FI_DEV_GPU_UTIL, DCGM_FI_DEV_GPU_TEMP) na porta 19400. Instalação, habilitação de serviços e a kubernetes.azure.com/dcgm-exporter=enabled etiqueta do nó usada para extrair métricas.
Sinais de saúde da GPU Sinais NPD que revelam condições específicas de nós da GPU, como UnhealthyNvidiaDevicePlugin e UnhealthyNvidiaDCGMServices. Monitorização de NPD e reporte de condição nos nós da GPU.

Instalar perfis

Dois gpuProfile campos decidem qual desses componentes o AKS instala:

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

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

Perfil de instalação Bandeiras CLI O que o AKS instala e gere
Pilha completamente gerida --enable-managed-gpu=true (ou nenhuma das bandeiras) Os quatro componentes acima: driver, plugin de dispositivo, exportador de métricas DCGM e monitorização de saúde da GPU no NPD.
Apenas motorista (por defeito) --enable-managed-gpu=false Apenas o driver da GPU NVIDIA. Instala e gere o plugin do dispositivo, o exportador de métricas e a monitorização da saúde (por exemplo, com o NVIDIA GPU Operator).
Nenhum (BYO) --enable-managed-gpu=false --gpu-driver None Nada. O AKS não instala nenhum dos quatro componentes. Você é responsável pelo stack completo. Veja : Traga o seu próprio driver GPU.

Predefinições e definições manuais

  • Predefinidos: Se não passar --enable-managed-gpu ou --gpu-driver, o AKS aplica o perfil Apenas controladores no conjunto de nós criado com uma dimensão de VM compatível com GPU NVIDIA.
  • Override: managementMode: Managed requer o driver, por isso --gpu-driver None é ignorado quando --enable-managed-gpu=true e o driver ainda está instalado. Para saltar o driver, defina tanto --enable-managed-gpu=false como --gpu-driver None.
  • Imutabilidade: managementMode, migStrategy, e driver são todas fixas na época da criação. Para alterar o perfil, crie um novo pool de nós.

Instalar a aks-preview extensão CLI

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

    az extension add --name aks-preview
    
  2. Atualize a extensão para garantir que tem a versão mais recente instalada, utilizando o comando az extension update.

    az extension update --name aks-preview
    

Registar o sinalizador de funcionalidade ManagedGPUExperiencePreview

Registar o flag de funcionalidade ManagedGPUExperiencePreview na sua subscrição utilizando o comando az feature register.

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

Limitações

  • Atualmente, esse recurso suporta apenas tamanhos de máquina virtual (VM) habilitada para GPU NVIDIA .
  • A atualização de um pool de nós de uso geral para adicionar um tamanho de VM GPU não é suportada no AKS.
  • Os agrupamentos de nós do Windows não são compatíveis com esta funcionalidade, porque as métricas de GPU não são suportadas. Quando crias pools de nós para GPUs Windows, o AKS instala e gere automaticamente os drivers e o plugin do dispositivo DirectX. Para mais informações, consulte a documentação AKS Windows GPU.
  • Não há suporte para a migração de 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 gerido não são suportadas. Para migrar, limita e drena os teus nós GPU existentes, depois redistribui as cargas de trabalho para um novo pool de nós da 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 sob gpuProfile são imutáveis após a criação do pool de nós. Para alterar estes valores, crie um novo node pool.
  • O autoscaler de cluster não é suportado em conjuntos de nós de GPU geridos durante o período de pré-visualização. Escala estes pools manualmente.

Observação

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

Criar um pool de nós GPU gerido pelo AKS (pré-visualização)

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

Para usar o SKU padrão do sistema operacional Ubuntu (OS), você cria o pool de nós sem especificar um SKU do sistema operacional. O conjunto de nós é configurado para utilizar o sistema operacional padrão com base na versão do Kubernetes do cluster.

  1. Adicione um pool de nós ao cluster usando o comando az aks nodepool add com a flag --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 da 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 gerido para GPU Multi-Instância (MIG) (pré-visualização)

Para SKUs de GPU que suportam GPU Multi-Instance (como A100 e H100), defina uma estratégia MIG ao criar o pool de nós com a flag --gpu-mig-strategy. A estratégia controla como as partições MIG são expostas ao Kubernetes:

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

Após a criação do pool de nós, o migStrategy campo torna-se imutável.

Para informações sobre particionamento MIG, tamanhos de VM suportados e perfis de instância de GPU, consulte Criar um pool de nós de GPU multi-instância em AKS e NVIDIA Multi-Instance GPU.

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 esta configuração, os pods solicitam recursos da GPU usando o nome padrão nvidia.com/gpu do recurso.

Verificar o pool gerido de nós GPU (versão preliminar)

Depois de o pool de nós estar pronto, execute as seguintes verificações para confirmar que a plataforma totalmente gerida está instalada e em bom estado.

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

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

    Em um nó GPU gerido, ambas as seguintes condições devem reportar False:

    Condition Situação Justificação
    UnhealthyNvidiaDevicePlugin False HealthyNvidiaDevicePlugin
    UnhealthyNvidiaDCGMServices False HealthyNvidiaDCGMServices
  2. Verifique se o rótulo da GPU gerida está presente no nó:

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

    Resultados esperados: enabled.

  3. Verifique se os recursos da GPU estão anunciados nos recursos alocáveis do nó:

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

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

  4. Executa uma carga de trabalho de exemplo para confirmar o acesso à GPU a partir de um contentor:

    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 podlogs para ver nvidia-smi a saída que mostra o dispositivo GPU, a versão do driver e a versão CUDA:

    kubectl logs managed-gpu-test
    

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

Escale manualmente um pool de nós de GPU gerido com az aks nodepool scale. Os novos nós instalam toda a stack de GPU gerida.

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

Importante

Durante a prévia, os pools de nós de GPU geridos não suportam o escalador automático do cluster. Escala estes pools manualmente.

Perfis de instalação alternativos

Se o perfil de stack gerido completo não for adequado, o AKS suporta dois perfis alternativos em pools de nós da GPU.

Use este perfil quando quiser que o AKS instale e mantenha o driver da GPU NVIDIA, mas planeia implementar o plugin do dispositivo e o exportador de métricas você próprio (por exemplo, com o NVIDIA GPU Operator). Conjunto --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 gere o driver da GPU NVIDIA (gpuProfile.driver is Install).
  • A AKS não instala um plugin de dispositivo, exportador de métricas DCGM ou regras de saúde da GPU. gpuProfile.nvidia é null.
  • Nenhum nvidia.com/gpu recurso é anunciado até implementares um plugin de dispositivo.

Próximos passos