Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Executar cargas de trabalho de GPU em um cluster do AKS requer configuração adequada e validação contínua para garantir que os recursos de computação estejam acessíveis, seguros e sendo usados de forma ideal. Este artigo apresenta as práticas recomendadas para gerenciar nós com GPU habilitada, validar configurações e reduzir interrupções de carga de trabalho usando comandos de diagnóstico específicos do fornecedor.
Cargas de trabalho de GPU, como treinamento de modelo de IA, inferência em tempo real, simulações e processamento de vídeo, geralmente dependem das seguintes configurações:
- Compatibilidade correta entre driver de GPU e runtime.
- Agendamento preciso dos recursos de GPU.
- Acesso aos dispositivos de hardware de GPU dentro dos contêineres.
Configurações incorretas podem gerar altos custos, falhas inesperadas de trabalho ou subutilização da GPU.
Impor colocação de carga de trabalho de GPU
Por padrão, o agendador do AKS coloca pods em qualquer nó disponível com CPU e memória suficientes. Sem diretrizes, isso pode causar dois problemas principais:
- As cargas de trabalho de GPU podem ser agendadas em nós sem GPU e falhar ao iniciar, ou
- Cargas de trabalho de uso geral podem ocupar nós de GPU, desperdiçando recursos caros.
Para impor a colocação correta:
- Aplicar taint aos nós de GPU usando uma chave como
[gpu-vendor].com/gpu: NoSchedule(por exemplo, nvidia.com/gpu: NoSchedule). Isso bloqueia o agendamento de cargas de trabalho que não usam GPU nesses nós. - Adicionar uma tolerância correspondente na especificação do pod da carga de trabalho de GPU para que ele possa ser agendado nos nós de GPU com taint.
- Definir solicitações e limites de recurso de GPU no pod, garantindo que o agendador reserve a capacidade da GPU, como:
resources:
limits:
[gpu-vendor].com/gpu: 1
- Usar políticas de validação ou controladores de admissão para impor que as cargas de trabalho de GPU incluam as tolerâncias e os limites de recurso exigidos.
Essa abordagem garante que apenas cargas de trabalho preparadas para GPU sejam executadas em nós de GPU e tenham acesso aos recursos de computação especializados de que precisam.
Antes de implantar cargas de trabalho de GPU em produção, sempre validar se os pools de nós de GPU estão:
- Equipados com drivers de GPU compatíveis.
- Hospedando um DaemonSet de Plugin de Dispositivo do Kubernetes íntegro.
- Expondo
[gpu-vendor].com/gpucomo um recurso agendável.
É possível confirmar a versão atual do driver em execução nos pools de nós de GPU usando a interface de gerenciamento do sistema (SMI) associada ao fornecedor da GPU.
O comando a seguir executa nvidia-smi de dentro do pod de implantação do plugin de dispositivo de GPU para verificar a instalação do driver e a preparação do runtime em um pool de nós com GPU NVIDIA habilitada:
kubectl exec -it $"{GPU_DEVICE_PLUGIN_POD}" -n {GPU_NAMESPACE} -- nvidia-smi
Sua saída deve ser parecida com o seguinte exemplo de saída:
+-----------------------------------------------------------------------------+
|NVIDIA-SMI 570.xx.xx Driver Version: 570.xx.xx CUDA Version: 12.x|
...
...
Repetir a etapa acima para cada pool de nós de GPU para confirmar a versão do driver instalada nos nós.
Nos pools de nós com GPU AMD habilitada, implantar os componentes de GPU AMD e executar o comando amd-smi no pod do plugin de dispositivo ROCm para confirmar a versão do driver instalada.
Manter nós com GPU habilitada atualizados para a imagem mais recente do SO do nó
Para garantir o desempenho, a segurança e a compatibilidade das cargas de trabalho de GPU no AKS, é essencial manter os pools de nós de GPU atualizados com as imagens de SO mais recentes recomendadas. Essas atualizações são críticas porque:
- Incluem os drivers de GPU mais recentes em nível de produção, substituindo versões preteridas ou de fim de suporte (EOL).
- São totalmente testadas para compatibilidade com a versão atual do Kubernetes.
- Corrigem vulnerabilidades conhecidas identificadas pelos fornecedores de GPU.
- Incorporam as melhorias mais recentes do SO e do runtime de contêiner para maior estabilidade e eficiência.
Atualizar o pool (ou pools) de nós de GPU para a imagem mais recente do SO recomendada pelo AKS, definindo o canal de atualização automática ou por meio de atualização manual. É possível monitorar e acompanhar as versões mais recentes de imagens de nó usando o rastreador de versões do AKS.
Separar cargas de trabalho de GPU ao usar clusters compartilhados
Se um único cluster do AKS com pools de nós de GPU estiver executando vários tipos de cargas de trabalho de GPU, como treinamento de modelo, inferência em tempo real ou processamento em lotes, é importante separar essas cargas de trabalho para:
- Evitar interferências acidentais ou contenção de recursos entre diferentes tipos de carga de trabalho.
- Melhorar a segurança e manter os limites de conformidade.
- Simplificar o gerenciamento e o monitoramento do uso de recursos de GPU por categoria de carga de trabalho.
É possível isolar cargas de trabalho de GPU dentro de um único cluster do AKS usando namespaces e políticas de rede. Isso permite uma governança mais clara por meio de cotas, limites e configurações de registro em log específicas por carga de trabalho.
Cenário de exemplo
Considere um cluster do AKS que hospeda dois tipos diferentes de cargas de trabalho de GPU que não precisam se comunicar entre si:
- Cargas de trabalho de treinamento: trabalhos de treinamento de modelo de IA com uso intensivo de recursos.
- Cargas de trabalho de inferência: serviços de inferência em tempo real sensíveis à latência.
É possível usar as etapas a seguir para separar as duas cargas de trabalho:
Criar namespaces dedicados por tipo de carga de trabalho usando o comando
kubectl create namespace.kubectl create namespace gpu-training kubectl create namespace gpu-inferenceRotular os pods de carga de trabalho de GPU por tipo, como mostrado no exemplo a seguir:
metadata: namespace: gpu-training labels: workload: trainingAplicar políticas de rede para isolar o tráfego entre os tipos de carga de trabalho. O manifesto a seguir bloqueia toda a entrada e saída para o namespace
gpu-training(a menos que seja explicitamente permitido):apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-cross-namespace namespace: gpu-training spec: podSelector: {} policyTypes: - Ingress - Egress ingress: [] egress: []
Esta política:
- Aplica-se a todos os pods no namespace
gpu-training. - Nega todo o tráfego de entrada e saída por padrão, oferecendo isolamento robusto.
Este modelo aprimora o esclarecimento, o controle e a segurança em ambientes de GPU compartilhada, especialmente quando os tipos de carga de trabalho têm perfis de runtime, níveis de risco ou requisitos operacionais diferentes.
Otimizar o uso do recurso em nós de GPU usando GPU de instância múltipla (MIG)
As diferentes cargas de trabalho de GPU variam em requisitos de memória, e implantações menores (por exemplo, NVIDIA A100 40GB) podem não precisar de uma GPU inteira. No entanto, uma única carga de trabalho, por padrão, monopoliza o recurso de GPU mesmo quando está subutilizada.
O AKS dá suporte à otimização de recursos em nós de GPU, dividindo-os em partes menores com GPU de instância múltipla (MIG), para que as equipes possam agendar trabalhos menores com mais eficiência. Saiba mais sobre os tamanhos de GPU com suporte e como começar a usar GPUs de instância múltipla no AKS.
Usar discos de dados NVMe efêmeros como cache de alto desempenho
Para cargas de trabalho de IA em execução em VMs de GPU no AKS, o acesso rápido e confiável ao armazenamento temporário é fundamental para maximizar o desempenho de treinamento e inferência. Os discos de dados NVMe efêmeros oferecem armazenamento de alta taxa de transferência e baixa latência, diretamente anexado ao host da VM, tornando-os ideais para cenários como armazenar em cache conjuntos de dados, guardar pontos de verificação e pesos de modelo intermediários ou fornecer espaço temporário para pré-processamento e análise de dados.
Ao implantar pools de nós com GPU para cargas de trabalho de IA, configurar discos de dados NVMe efêmeros para atuar como cache ou espaço temporário de alto desempenho. Essa abordagem ajuda a eliminar gargalos de E/S, acelera operações com uso intensivo de dados e garante que seus recursos de GPU não fiquem ociosos enquanto aguardam dados.
Há suporte para discos de dados NVMe efêmeros em uma ampla gama de famílias de VM de GPU do Azure. Dependendo do tamanho da VM de GPU, ela tem até 8 discos de dados NVMe efêmeros com uma capacidade combinada de até 28 TiB. Para obter configurações detalhadas sobre tamanhos de VM, consulte a documentação da série ND H100 v5 ou a documentação de tamanho da VM para sua família de GPU escolhida.
Para simplificar o provisionamento e o gerenciamento, use o Armazenamento de Contêineres do Azure, que pode detectar e orquestrar automaticamente discos NVMe efêmeros para suas cargas de trabalho do Kubernetes.
Os cenários recomendados incluem:
- Armazenando em cache grandes conjuntos de dados e pontos de verificação de modelo para treinamento e inferência de IA.
- Armazenar em cache pesos de modelo para inferência de IA. Por exemplo, modelo de hosting KAITO como artefatos OCI em NVMe local.
- Fornecer espaço temporário rápido para trabalhos em lote e pipelines de dados.
Importante
Os dados em discos NVMe efêmeros são temporários e serão perdidos se a VM for desalocada ou reimplantada. Use esses discos apenas para dados não críticos e transitórios e armazene informações importantes sobre soluções de armazenamento persistentes do Azure.
Para obter mais diretrizes sobre discos de dados NVMe efêmeros, consulte as práticas recomendadas para discos de dados NVMe efêmeros no AKS.
Próximas etapas
Para saber mais sobre implantação e gerenciamento de cargas de trabalho de GPU no AKS, confira os artigos a seguir:
Criar um pool de nós com GPU no cluster do AKS.
Monitorar cargas de trabalho de GPU usando um exportador NVIDIA DCGM autogerenciado.
Dimensionar automaticamente suas cargas de trabalho de GPU com base em métricas comuns de GPU usando KEDA e exportador DCGM.