Estratégias de particionamento de nós com GPU no AKS (Serviço de Kubernetes do Azure)

AKS (Serviço de Kubernetes do Azure) dá suporte a pools de nós habilitados para GPU NVIDIA para executar cargas de trabalho com uso intensivo de computação, incluindo treinamento de IA/ML, inferência em tempo real e análise de dados em larga escala. Tradicionalmente, as GPUs são alocadas em um modelo de um para um, no qual um único pod do Kubernetes consome uma GPU inteira em uma máquina virtual (VM) do Azure. Embora esse modelo forneça simplicidade e isolamento forte, ele pode levar à subutilização em cenários em que as cargas de trabalho não consomem totalmente os recursos de GPU disponíveis no cluster.

Para melhorar a utilização e dar suporte a cargas de trabalho simultâneas, os clientes podem integrar diferentes estratégias de particionamento de GPU em seus pools de nós. Essas abordagens permitem que várias cargas de trabalho compartilhem uma única GPU física dividindo-a em unidades lógicas menores ou expandindo o acesso no nível do driver de software ou GPU.

Neste artigo, você aprenderá sobre as três principais estratégias de particionamento de nós para GPUs NVIDIA no AKS: GPU de várias instâncias (MIG), fatiamento de tempo e Multi-Process Service (MPS).

Visão geral das estratégias de particionamento de nós de GPU no AKS

As três principais estratégias disponíveis em ambientes do AKS são MIG (GPU de várias instâncias), divisão de tempo e MPS (Serviço de Vários Processos). Cada abordagem difere quanto ao gerenciamento da plataforma AKS, ao tipo de isolamento e aos casos de uso para implantação.

Strategy Gerenciado ou permitido no AKS Tipo de compartilhamento de GPU Recomendado para
GPU de várias instâncias (MIG) Gerenciado (ou gerenciado pelo usuário por meio do Operador de GPU) Particionamento de hardware Cargas de trabalho de produção
Divisão de tempo (por meio do operador de GPU NVIDIA) Gerenciado pelo usuário, AKS permitido Agendamento de software Experimentação com cargas de GPU variável
Serviço de vários processos (MPS, operador de GPU NVIDIA) Gerenciado pelo usuário, AKS permitido Multiplexação de processo no nível do CUDA Cargas de trabalho de baixa latência e alta taxa de transferência

GPU gerenciada de múltiplas instâncias (MIG) no AKS

A GPU (MIG) de várias instâncias é uma funcionalidade de particionamento baseada em hardware disponível em arquiteturas de GPU NVIDIA selecionadas, como as séries A100, H100 e H200. O MIG permite que uma única GPU física seja dividida em várias instâncias isoladas, cada uma com núcleos de computação dedicados, memória e cache. Isso garante um isolamento de carga de trabalho forte e características previsíveis de desempenho, tornando o MIG adequado para ambientes de produção.

No AKS, o MIG é uma funcionalidade gerenciada. Quando um pool de nós habilitado para MIG é provisionado, o Azure configura o hardware da GPU, instala e mantém a pilha de drivers necessária e integra as instâncias de MIG ao Kubernetes por meio do plug-in de dispositivo da NVIDIA. Cada fatia MIG é exposta ao agendador do Kubernetes como um recurso alocável discreto, permitindo que os pods solicitem a capacidade de GPU de maneira granular e determinística.

Essa abordagem oferece várias vantagens para implantações empresariais. Ele fornece isolamento de nível de produção por meio do particionamento em nível de hardware e reduz a sobrecarga operacional delegando o gerenciamento do ciclo de vida, incluindo atualizações de driver e configuração, para o AKS. Além disso, as instâncias de MIG se comportam como dispositivos de GPU independentes da perspectiva do agendador, permitindo o posicionamento previsível e a alocação de recursos.

No entanto, o MIG também apresenta certas restrições: as configurações de particionamento são estáticas no nível do pool de nós, o que significa que as alterações exigem o reprovisionamento dos nós. A flexibilidade é limitada a perfis de MIG predefinidos compatíveis com o hardware de GPU subjacente.

Divisão de tempo com operador de GPU NVIDIA (gerenciado pelo usuário)

A segmentação de tempo é um mecanismo de compartilhamento de GPU baseado em software que permite que vários pods do Kubernetes compartilhem uma única GPU por meio da intercalação da execução ao longo do tempo. Essa abordagem é implementada por meio do Operador de GPU NVIDIA, que gerencia drivers de GPU, o plug-in do dispositivo Kubernetes e a configuração de runtime do contêiner.

A segmentação de tempo pode ser configurada em pools de nós do AKS, mas não é gerenciada pela plataforma. Os operadores de cluster são responsáveis por implantar e configurar o Operador de GPU NVIDIA, normalmente usando o Helm, e por habilitar a segmentação de tempo por meio das configurações do plug-in de dispositivo. Uma vez configurados, vários pods podem solicitar acesso ao mesmo recurso de GPU, e suas cargas de trabalho são agendadas em modo de compartilhamento de tempo.

A segmentação de tempo oferece flexibilidade e ampla compatibilidade, pois não depende de recursos específicos de hardware da GPU e pode ser usado com a maioria das GPUs NVIDIA compatíveis com CUDA. É útil para desenvolvimento, testes ou cargas de trabalho com padrões intermitentes ou variáveis de utilização de GPU.

Apesar de sua flexibilidade, a segmentação de tempo não oferece isolamento em nível de hardware. Todas as cargas de trabalho compartilham os mesmos recursos de computação e memória de GPU, o que pode resultar em contenção e desempenho imprevisível. Como a configuração e o gerenciamento do ciclo de vida são controlados pelo usuário, os operadores também devem lidar com atualizações de driver, compatibilidade e ajuste. Portanto, a segmentação de tempo geralmente não é recomendada para cargas de trabalho de produção que exigem SLAs (contratos estritos de nível de serviço).

MPS (Serviço de Vários Processos) com Operador de GPU NVIDIA (gerenciado pelo usuário)

O MPS (Serviço multiprocesso) NVIDIA é uma funcionalidade de nível de driver que permite que vários aplicativos CUDA sejam executados simultaneamente em uma única GPU. Ao contrário da segmentação de tempo, que alterna a execução entre cargas de trabalho, o MPS permite que kernels de diferentes processos sejam executados ao mesmo tempo, melhorando a utilização geral da GPU e reduzindo a latência para cargas de trabalho compatíveis.

No AKS, o MPS pode ser configurado por meio da implantação gerenciada pelo usuário do Operador de GPU NVIDIA. Os operadores devem configurar o ambiente do driver de GPU para habilitar o MPS e gerenciar o ciclo de vida do daemon de controle do MPS. Cargas de trabalho que se conectam ao mesmo servidor MPS podem compartilhar a GPU e se beneficiar da execução simultânea do kernel.

O MPS é útil para cenários de alta taxa de transferência e baixa latência, como trabalhos em lotes ou cargas de trabalho paralelas fortemente acopladas. Ele fornece controle refinado sobre o compartilhamento de GPU e pode melhorar significativamente a utilização quando as cargas de trabalho são projetadas para aproveitar a execução simultânea.

No entanto, o MPS introduz complexidade operacional adicional. A configuração é manual e a solução de problemas pode ser mais envolvida em comparação com outras abordagens. Semelhante à segmentação de tempo, o MPS não fornece isolamento forte, pois todos os processos compartilham recursos de computação e memória de GPU. Portanto, o MPS geralmente não é recomendado para cargas de trabalho de produção que exigem SLAs (contratos estritos de nível de serviço).

Como escolher uma estratégia de particionamento de GPU

Escolher a estratégia de particionamento de GPU apropriada no AKS depende de requisitos de carga de trabalho, preferências operacionais e expectativas de desempenho. O MIG é a abordagem recomendada para ambientes de produção que exigem forte isolamento e desempenho previsível. Como um recurso de pool de nós do AKS, o MIG simplifica as operações e reduz a sobrecarga administrativa.

A segmentação de tempo é útil para ambientes de não produção ou cargas de trabalho com demanda flutuante de GPU, em que maximizar a utilização é mais importante do que a consistência. Ele fornece uma solução independente de hardware, mas requer um gerenciamento cuidadoso e não garante o isolamento de desempenho.

O MPS é ideal para cargas de trabalho especializadas que se beneficiam da execução simultânea da GPU e da baixa latência. Ele oferece a maior eficiência de utilização potencial, mas vem com maior complexidade e isolamento mínimo, tornando-o mais apropriado para usuários avançados com aplicativos com reconhecimento de CUDA.

Na prática, as organizações podem adotar diferentes estratégias em diferentes ambientes, usando o MIG para clusters de produção e recorrendo à segmentação de tempo ou MPS em cenários de desenvolvimento ou experimentais. Uma avaliação cuidadosa das características da carga de trabalho de GPU e das restrições operacionais é essencial para selecionar a abordagem de particionamento de longo prazo mais eficaz.