Estratégias de particionamento de nodes GPU in Azure Kubernetes Service (AKS)

O Azure Kubernetes Service (AKS) suporta pools de nós com GPU NVIDIA para executar cargas de trabalho intensivas em computação, incluindo treino de IA/ML, inferência em tempo real e análise de dados em grande escala. Tradicionalmente, as GPUs são alocadas num modelo um-para-um, onde um único pod Kubernetes consome um dispositivo GPU inteiro dentro de uma máquina virtual (VM) Azure. Embora este modelo proporcione simplicidade e forte isolamento, pode levar à subutilização em cenários onde as cargas de trabalho não consomem totalmente os recursos disponíveis da GPU no cluster.

Para melhorar a utilização e suportar cargas de trabalho concorrentes, os clientes podem integrar diferentes estratégias de particionamento da GPU no seu(s) pool(is) de nós. Estas abordagens permitem que múltiplas cargas de trabalho partilhem uma única GPU física, dividindo-a em unidades lógicas menores ou expandindo o acesso ao nível do driver de software ou GPU.

Neste artigo, ficará a conhecer as três principais estratégias de particionamento de nós para GPUs NVIDIA no AKS: GPU multi-instância (MIG), partilha temporal e Serviço de Múltiplos Processos (MPS).

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

As três principais estratégias disponíveis em ambientes AKS são GPU multi-instância (MIG), partilha temporal e serviço multiprocesso (MPS). Cada abordagem difere em termos de gestão da plataforma AKS, tipo de isolamento e casos de utilização de implementação.

Strategy Gerido ou permitido no AKS Tipo de partilha de GPU Recomendado para
GPU Multi-Instância (MIG) Gerido (ou gerido pelo utilizador via GPU Operator) Particionamento de hardware Cargas de trabalho de produção
Fatiamento temporal (via NVIDIA GPU Operator) Gerido pelo utilizador, AKS permitido Agendamento por software Experimentação com cargas variáveis de GPU
Serviço Multi-Processo (MPS, Operador de GPU Nvidia) Gerido pelo utilizador, AKS permitido Multiplexação de processos ao nível CUDA Cargas de trabalho de baixa latência e alto débito

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

A GPU Multi-Instância (MIG) é uma funcionalidade de particionamento baseada em hardware disponível em determinadas arquiteturas de GPU NVIDIA, como as séries A100, H100 e H200. O MIG permite dividir uma única GPU física em múltiplas instâncias isoladas, cada uma com núcleos de computação dedicados, memória e cache. Isto assegura um forte isolamento da carga de trabalho e características de desempenho previsíveis, tornando o MIG adequado para ambientes de produção.

No AKS, o MIG é uma funcionalidade gerida. Quando um pool de nós com MIG ativado é aprovisionado, o Azure configura o hardware da GPU, instala e mantém o conjunto de controladores necessário e integra instâncias MIG no Kubernetes através do plug-in de dispositivo da NVIDIA. Cada fatia MIG é apresentada ao escalonador do Kubernetes como um recurso alocável distinto, permitindo que os pods solicitem capacidade de GPU de modo granular e determinístico.

Esta abordagem oferece várias vantagens para implementações empresariais. Proporciona isolamento de nível de produção através da partição ao nível de hardware e reduz a sobrecarga operacional ao delegar a gestão do ciclo de vida, incluindo atualizações de drivers e configuração, ao AKS. Além disso, as instâncias MIG comportam-se como dispositivos GPU independentes do ponto de vista do agendador, permitindo uma colocação e alocação de recursos previsíveis.

No entanto, o MIG também introduz certas restrições: as configurações de partição são estáticas ao nível do pool de nós, o que significa que as alterações requerem reprovisionamento dos nós. A flexibilidade está limitada a perfis MIG pré-definidos suportados pelo hardware da GPU subjacente.

Partilha temporal com NVIDIA GPU Operator (gerido pelo utilizador)

A partilha temporal é um mecanismo de partilha da GPU baseado em software que permite que múltiplos pods do Kubernetes partilhem uma única GPU através da intercalação da execução ao longo do tempo. Esta abordagem é implementada por meio do NVIDIA GPU Operator, que gere os drivers da GPU, o plug-in de dispositivos do Kubernetes e a configuração do runtime de contentores.

A partilha temporal pode ser configurada em pools de nós do AKS, mas não é gerida pela plataforma. Os operadores do cluster são responsáveis por implementar e configurar o NVIDIA GPU Operator, normalmente via Helm, e por permitir a análise temporal através das definições do plugin do dispositivo. Uma vez configurados, múltiplos pods podem solicitar acesso ao mesmo recurso GPU, e as suas cargas de trabalho são agendadas de forma partilhada no tempo.

O time-sliceing oferece flexibilidade e ampla compatibilidade, pois não depende de características específicas do hardware da GPU e pode ser usado com a maioria das GPUs NVIDIA suportadas pela CUDA. É útil para desenvolvimento, testes ou cargas de trabalho com padrões de utilização da GPU intermitentes ou variáveis.

Apesar da sua flexibilidade, o time-sliceing não proporciona isolamento ao nível do hardware. Todas as cargas de trabalho partilham a mesma memória da GPU e os mesmos recursos de computação, o que pode resultar em contenção e desempenho imprevisível. Como a configuração e a gestão do ciclo de vida são orientadas pelo utilizador, os operadores também têm de tratar de atualizações de drivers, compatibilidade e ajustes. Por isso, o time-slicing geralmente não é recomendado para cargas de trabalho de produção que exigem acordos rigorosos de nível de serviço (SLAs).

Serviço Multi-Processo (MPS) com Operador de GPU NVIDIA (Gerido pelo utilizador)

O Serviço Multi-Processo NVIDIA (MPS) é uma funcionalidade ao nível do driver que permite que múltiplas aplicações CUDA sejam executadas simultaneamente numa única GPU. Ao contrário do fatiamento temporal, que alterna a execução entre cargas de trabalho, o MPS permite que kernels de diferentes processos sejam executados em simultâneo, 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 através da implementação gerida pelo utilizador do NVIDIA GPU Operator. Os operadores devem configurar o ambiente do driver da GPU para ativar o MPS e gerir o ciclo de vida do daemon de controlo do MPS. Cargas de trabalho que se ligam ao mesmo servidor MPS podem partilhar a GPU e beneficiar da execução simultânea do kernel.

O MPS é útil para cenários de alto débito e baixa latência, como trabalhos em lote ou cargas de trabalho paralelas fortemente acopladas. Proporciona um controlo detalhado sobre a partilha da GPU e pode melhorar significativamente a utilização quando as cargas de trabalho são desenhadas para tirar partido da execução concorrente.

No entanto, o MPS introduz uma complexidade operacional adicional. A configuração é manual, e a resolução de problemas pode ser mais complexa em comparação com outras abordagens. Semelhante ao time-slicing, o MPS não proporciona isolamento forte, pois todos os processos partilham memória GPU e recursos de computação. Por isso, o MPS geralmente não é recomendado para cargas de trabalho de produção que exigem acordos de nível de serviço (SLAs) rigorosos.

Como escolher uma estratégia de particionamento de GPU

A escolha da estratégia adequada de partição da GPU no AKS depende dos requisitos de carga de trabalho, preferências operacionais e expectativas de desempenho. O MIG é a abordagem recomendada para ambientes de produção que requerem forte isolamento e desempenho previsível. Como funcionalidade de pool de nós do AKS, o MIG simplifica as operações e reduz a sobrecarga administrativa.

A segmentação temporal é útil para ambientes não de produção ou cargas de trabalho com procura de GPU flutuante, onde maximizar a utilização é mais importante do que a consistência. Fornece uma solução independente do hardware, mas requer uma gestão cuidadosa e não garante isolamento de desempenho.

O MPS é ideal para cargas de trabalho especializadas que beneficiam de execução simultânea da GPU e baixa latência. Oferece a maior eficiência potencial de utilização, mas apresenta maior complexidade e isolamento mínimo, tornando-o mais adequado para utilizadores avançados com aplicações conscientes de CUDA.

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