Este artigo descreve como executar eficientemente cargas de trabalho que usam nós de GPU em um cluster do Serviço Kubernetes do Azure (AKS). Saiba como escolher a SKU certa, usar nós de GPU para treinar modelos de aprendizado de máquina e usar nós de GPU para executar inferências no AKS.
Cenários
As cargas de trabalho da GPU podem ser caras de executar. Para evitar custos desnecessários, saiba quando implantar nós baseados em GPU em seus clusters AKS.
As GPUs são criadas especificamente para gráficos, IA e aprendizado de máquina e tarefas especializadas, o que as torna ideais para cargas de trabalho de computação intensiva. As CPUs gerenciam efetivamente lógicas e ramificações complexas. As GPUs são otimizadas para taxa de transferência. Eles podem lidar eficientemente com operações aritméticas e vetoriais diretas.
Para determinar quando usar GPUs para cargas de trabalho AKS, você deve entender a otimização da GPU e a intensidade de computação, mas também deve considerar outros fatores. Para obter uma melhor visão sobre o uso da GPU para cargas de trabalho AKS, considere os seguintes exemplos de carga de trabalho que se beneficiam dos nós da GPU em um cluster AKS.
Ciência e análise de dados
Você pode usar GPUs para acelerar o pré-processamento de dados, a engenharia de recursos e o treinamento de modelos em fluxos de trabalho de ciência de dados. Para usar GPUs de forma eficiente, estruturas como RAPIDS e Dask GPU estendem bibliotecas populares de processamento de dados, como pandas e scikit-learn.
Os mecanismos de consulta SQL acelerados por software de código aberto (OSS) e bancos de dados colunares como BlazingSQL e HeavyDB usam GPUs para executar rapidamente consultas e análises em grandes conjuntos de dados.
Machine learning e aprendizagem profunda
Estruturas populares de aprendizado de máquina e aprendizado profundo como TensorFlow e PyTorch se beneficiam das GPUs porque podem acelerar tarefas de treinamento e inferência.
Os modelos de aprendizagem profunda têm redes neurais complexas. O processamento paralelo em GPUs acelera os cálculos do modelo. As GPUs fornecem multiplicação e convoluções de matriz altamente eficientes, que são operações centrais no deep learning.
Você também pode usar GPUs para acelerar tarefas como classificação de imagem, deteção de objetos, processamento de linguagem natural e reconhecimento de fala.
Visão computacional e processamento de imagens
As tarefas de visão computacional interpretam dados visuais para extrair informações significativas. Essas tarefas são cada vez mais comuns em aplicações alimentadas por IA, veículos autônomos, imagens médicas, sistemas de vigilância e realidade aumentada. As GPUs usam processamento paralelo, para que possam lidar com eficiência com dados de imagem em grande escala e cálculos complexos para tarefas como deteção de objetos, classificação de imagens e extração de recursos.
Processamento e streaming de vídeo
Os vídeos são cada vez mais prevalentes nos negócios, então as organizações precisam de hardware alimentado por GPU em vez de CPUs. As cargas de trabalho de processamento de vídeo, incluindo transcodificação, codificação e streaming, exigem muita computação, especialmente se tiverem conteúdo de alta definição ou conteúdo 4K. As GPUs fornecem uma plataforma eficiente que oferece experiências de vídeo de alto desempenho e baixa latência em diversos aplicativos, como streaming de eventos esportivos ou vídeos corporativos.
Os nós de agente habilitados para GPU fornecem uma experiência rica ao cliente em ambientes de área de trabalho virtual porque descarregam tarefas com uso intensivo de gráficos para a GPU. Os recursos de codificação e decodificação de vídeo acelerados por GPU ajudam a melhorar o streaming de vídeo em tempo real, a transcodificação de vídeo e a análise de vídeo.
Para acelerar tarefas de visão computacional, como deteção de objetos, rastreamento de objetos e processamento de imagem ou vídeo, você pode usar estruturas como OpenCV, OpenCL, NVIDIA CUDA e NVIDIA cuDNN.
As plataformas de jogos e os serviços de jogos na nuvem dependem de GPUs para oferecer gráficos de alta qualidade e experiências de jogo suaves.
Computação de alto desempenho
As aplicações de computação de alto desempenho (HPC) requerem frequentemente simulações complexas, análises numéricas e cálculos científicos. Para executar rapidamente essas tarefas, você pode usar GPUs para paralelizar a carga de trabalho em vários núcleos. Exemplos de aplicações de HPC que necessitam de enorme poder de processamento paralelo incluem simulações científicas, previsão meteorológica, dinâmica de fluidos computacional e modelação molecular. As GPUs são ideais para cálculos paralelos e aceleram significativamente as cargas de trabalho HPC. Empreendimentos científicos e orientados à pesquisa se beneficiam das GPUs.
Para acelerar aplicativos HPC, estruturas como NVIDIA CUDA, OpenCL e OpenACC fornecem APIs e bibliotecas habilitadas para GPU.
Análise genómica e bioinformática
As cargas de trabalho no domínio da saúde e das ciências da vida, como a análise genómica e as aplicações bioinformáticas, são cada vez mais comuns. Essas cargas de trabalho envolvem o processamento de dados genéticos, como sequências de DNA e estruturas de proteínas, e exigem algoritmos complexos para alinhamento de sequências, chamada de variantes e mineração de dados genômicos. As GPUs agilizam os fluxos de trabalho de análise genômica para que os pesquisadores possam processar dados e descobrir insights mais rapidamente.
Considere as implicações de custo antes de implantar nós de GPU em clusters AKS. Compreenda a otimização de GPU para tarefas de computação intensiva, como visão computacional, processamento de vídeo, HPC e tarefas de análise genômica. Considere esses fatores ao comparar recursos de GPU versus recursos de CPU em clusters AKS.
Modelos de IA generativa
Grandes modelos de linguagem (LLMs), como OpenAI GPT, Meta Llama, Falcon ou Mistral, podem tirar proveito dos recursos de processamento paralelo da GPU. Use GPUs com esses modelos para melhorar o desempenho.
As GPUs podem acelerar tarefas de treinamento e inferência, que envolvem cálculos complexos e grandes quantidades de dados. As GPUs têm recursos de processamento paralelo que dividem as grandes tarefas computacionais de um determinado modelo em subtarefas menores que são executadas simultaneamente. Este processo proporciona resultados rápidos e melhora o desempenho.
Os modelos de linguagem geralmente têm redes neurais complexas com várias camadas e parâmetros, o que pode aumentar a demanda computacional. As GPUs aceleram operações-chave no processamento de linguagem, como multiplicação de matrizes e convoluções, o que acelera os tempos de treinamento e inferência.
As GPUs fornecem capacidade de memória, largura de banda e poder de processamento suficientes para lidar com aplicativos baseados em LLM que têm interfaces de conversação e geração de texto. Por exemplo, os aprimoramentos da GPU fornecem tempos de resposta rápidos para usuários que interagem com chatbots e assistentes de IA.
Nem todas as cargas de trabalho se beneficiam dos nós de agente habilitados para GPU e, em alguns casos, as CPUs são suficientes. Por exemplo, cargas de trabalho que são principalmente vinculadas a entrada e saída ou que não exigem computação pesada podem não melhorar com GPUs.
Histórias de clientes
Muitos clientes da Microsoft aproveitam as cargas de trabalho da GPU para inovar para seus clientes. Considere os seguintes exemplos:
Os jogadores da NBA melhoram o desempenho com IA na infraestrutura de IA do Azure.
O OriGen acelera as simulações de reservatório de energia em 1.000 vezes usando a infraestrutura de IA do Azure.
A Sensyne Health ajuda o Serviço Nacional de Saúde na luta contra a COVID-19 usando tecnologias de HPC e IA da Microsoft.
Práticas recomendadas de implantação de carga de trabalho de GPU
O AKS oferece várias opções para implantar pools de nós e cargas de trabalho Linux e Windows habilitados para GPU. Para garantir o bom funcionamento da carga de trabalho da GPU, siga estas práticas recomendadas.
Implantação de carga de trabalho Linux
Crie um pool de nós com uma máquina virtual (VM) habilitada para GPU suportada e instale manualmente o plug-in de dispositivo NVIDIA para implantar pools de nós Linux habilitados para GPU. Esse método não oferece suporte à atualização de um pool de nós existente para adicionar GPUs.
Exiba as VMs habilitadas para GPU com suporte no Azure. Recomendamos que você use um tamanho mínimo de Standard_NC6s_v3 para pools de nós AKS. O AKS não suporta a série NVv4 baseada em GPUs AMD.
Entenda as limitações quando você usa um pool de nós habilitado para GPU Linux do Azure. Os patches de segurança automáticos não são aplicados e o comportamento padrão do cluster não é gerenciado.
Use seletores de nó do Kubernetes, afinidade de nó, manchas e tolerâncias ao agendar cargas de trabalho em seus pools de nós habilitados para GPU.
Implantação da carga de trabalho do Windows
Crie um pool de nós com uma VM habilitada para GPU suportada para implantar pools de nós do Windows habilitados para GPU. O AKS instala automaticamente os drivers e os componentes NVIDIA necessários. Esse método não oferece suporte à atualização de um pool de nós existente para adicionar GPUs.
Quando você seleciona uma VM habilitada para GPU suportada, o AKS instala automaticamente o driver NVIDIA CUDA ou GRID apropriado. Algumas cargas de trabalho dependem de um driver específico, o que pode afetar sua implantação. Para tamanhos de VM das séries NC e ND, o AKS instala o driver CUDA. Para tamanhos de VM da série NV, o AKS instala o driver GRID.
Exiba as VMs habilitadas para GPU com suporte no Azure. Recomendamos que você use um tamanho mínimo de Standard_NC6s_v3 para pools de nós AKS. O AKS não suporta a série NVv4 baseada em GPUs AMD.
Entenda as limitações ao usar um pool de nós do Windows. As versões 1.28 e inferiores do Kubernetes não suportam GPUs do Windows.
Use seletores de nó do Kubernetes, afinidade de nó, manchas e tolerâncias ao agendar cargas de trabalho em seus pools de nós habilitados para GPU.
Nota
A GPU do Windows é um recurso de visualização. Você precisa registrar o sinalizador de WindowsGPUPreview
recurso.
Operador de GPU NVIDIA
O NVIDIA GPU Operator é uma ferramenta que você pode usar para implantar e gerenciar recursos de GPU de forma eficiente em clusters Kubernetes. Você pode usar o operador para automatizar a instalação, configuração e manutenção de componentes de software. Essa abordagem garante o uso ideal de GPUs NVIDIA para cargas de trabalho exigentes, como cargas de trabalho de IA e aprendizado de máquina.
O Operador de GPU NVIDIA gerencia automaticamente todos os componentes de software NVIDIA necessários para implantar GPUs, como o plug-in de dispositivo NVIDIA para Kubernetes e o tempo de execução do contêiner NVIDIA. O operador instala automaticamente o driver. Para obter mais informações, consulte Visão geral da NVIDIA.
Se você quiser maior controle e flexibilidade para cargas de trabalho avançadas de GPU, você pode usar o operador de GPU NVIDIA com seus nós habilitados para GPU no AKS. O operador de GPU NVIDIA não suporta GPUs do Windows.
Considere as seguintes práticas recomendadas:
Use o NVIDIA GPU Operator para fazer configurações avançadas de GPU, como seleção de versão do driver e fatiamento de tempo.
Ignore a instalação automática do driver antes de usar o operador da GPU.
Defina a contagem mínima como 1 quando usar o operador GPU com o autoscaler de cluster.
Nota
A Microsoft não oferece suporte nem gerencia a manutenção e a compatibilidade dos drivers NVIDIA como parte da implantação da imagem do nó quando você usa o operador da GPU.
Implantação de carga de trabalho de GPU para LLMs
O operador de cadeia de ferramentas de IA do Kubernetes (KAITO) é um operador do Kubernetes que simplifica como você executa LLMs de código aberto, como Falcon e Llama2, em seu cluster Kubernetes. Você pode implantar o KAITO em seu cluster AKS como um complemento gerenciado para o AKS. O KAITO usa o Karpenter para provisionar e implantar automaticamente nós de GPU com base em uma especificação na definição de recursos personalizados do espaço de trabalho do modelo escolhido. O KAITO cria o servidor de inferência como um ponto de extremidade para seu LLM e reduz o tempo geral de integração para que você possa fazer operações de aprendizado de máquina em vez de configuração e manutenção de infraestrutura.
Para melhorar as operações de aprendizado de máquina, o KAITO fornece os seguintes recursos:
Gerenciamento de imagens de contêiner: use imagens de contêiner para gerenciar LLMs. O KAITO fornece um servidor HTTP para que você possa usar uma biblioteca de modelos suportada para executar chamadas de inferência.
Configuração de hardware da GPU: O KAITO fornece configurações predefinidas que são aplicadas automaticamente com base nos requisitos do modelo. Não é necessário ajustar manualmente os parâmetros de implantação para ajustar o hardware da GPU.
Provisionamento automático de nós de GPU: o KAITO provisiona automaticamente nós de GPU com base nos requisitos do modelo e recomenda tamanhos de VM de GPU de baixo custo para configurar a inferência distribuída.
Integração com o Microsoft Artifact Registry: Se sua licença LLM permitir, o KAITO poderá hospedar imagens de modelo no Registro de Artefato público. Esse método simplifica o acesso e a implantação de modelos suportados. Para modelos de código aberto com licenças MIT ou Apache2 que o repositório KAITO não suporta, você pode enviar uma solicitação para integração de novos modelos.
Para obter mais informações sobre o KAITO, consulte os seguintes recursos:
- Explore o projeto de código aberto KAITO
- Implante um modelo de IA no AKS com KAITO
- Ajuste seus modelos de linguagem com KAITO de código aberto
- Implante o KAITO no AKS usando o Terraform
Carga de trabalho e dimensionamento de cluster
Para cenários de IA e aprendizado de máquina, você deve diferenciar entre cargas de trabalho de treinamento e inferência com modelos pré-treinados. Para criar e treinar seu modelo de aprendizado de máquina, considere o uso de computação de GPU projetada para aprendizado profundo e paralelização de cálculos de IA. O treinamento geralmente requer dimensionamento gradual e a distribuição de grandes quantidades de dados entre GPUs para alcançar alta precisão com paralelismo de dados.
A fragmentação de modelo é uma técnica avançada comum que você pode usar para dividir estágios de treinamento de modelo. Você pode atribuir GPUs a tarefas distintas e maximizar seu uso. As GPUs podem escalar e expandir cargas de trabalho HPC, como VMs da série NV ou da série ND no Azure. Esse recurso ajuda a manter o alto uso de recursos e reduzir a intervenção do usuário para processos de treinamento de aprendizado de máquina que são longos e caros.
Como alternativa, você pode usar modelos de IA e aprendizado de máquina pré-treinados e de código aberto apenas para inferência. Comece com modelos populares como Llama, Falcon ou Mistral como uma opção mais rápida e econômica em comparação com a construção e treinamento de um LLM a partir do zero. Para obter mais informações, consulte Modelos de linguagem no AKS.
Ao usar modelos pré-treinados para inferência, você pode experimentar o uso dinâmico e flutuante de recursos, dependendo do volume de dados que você processa. Quando você executa dados em tempo real através do modelo escolhido, às vezes ocorrem picos de tráfego dependendo do tamanho e dos requisitos do modelo. Você deve manter um nível baixo e aceitável de latência durante todo o processo de inferência. Para usar efetivamente suas GPUs para alto desempenho e baixa latência, você pode realizar inferência distribuída com os modelos suportados pelo KAITO. Essa abordagem expande suas opções de computação para incluir SKUs com menor contagem de GPUs com uma ou duas GPUs cada, fornece alta disponibilidade em regiões do Azure e reduz os custos de manutenção.
Gerenciamento de custos de carga de trabalho de GPU
As GPUs podem aumentar o custo. Monitore adequadamente as cargas de trabalho para ajudar a entender o que impulsiona os custos da GPU e identificar oportunidades de otimização. Para aumentar a visibilidade dos custos, você pode usar o complemento de análise de custos AKS.
Os cenários a seguir se beneficiam da visibilidade de custos.
Custo do tamanho da VM habilitada para GPU
Selecione o tamanho correto da VM habilitada para GPU para otimizar o custo de execução de GPUs. Os custos diários podem variar dependendo do tamanho da VM que você escolher. As GPUs A100 são caras. Você deve evitá-los, a menos que sua carga de trabalho tenha requisitos específicos. A análise de custos do AKS mostra o custo diário de cada uma das suas VMs e decompõe os custos associados de cada carga de trabalho executada na VM habilitada para GPU. Use esses dados para avaliar se você tem um tamanho de VM adequado ou se precisa de uma opção mais econômica.
Custo ocioso
Depois de criar um pool de nós habilitado para GPU, você incorre em custos no recurso do Azure, mesmo que não execute uma carga de trabalho de GPU. Os custos ociosos representam o custo da capacidade de recursos disponíveis que as cargas de trabalho não usam. Esse custo aumenta rapidamente se você tiver vários nós não utilizados. Para evitar altos custos ociosos, crie pools de nós apenas quando executar sua carga de trabalho e use métodos como o recurso de parada de cluster quando não executar sua carga de trabalho. A análise de custos do AKS mostra os custos ociosos para cada um dos seus nós.
Excesso de provisionamento e subutilização
O provisionamento excessivo ocorre quando você aloca mais recursos do que o necessário para um pod. O excesso de provisionamento conduz ao desperdício de recursos e à subutilização. Os recursos excedentes permanecem reservados para o nó, mesmo que você não os use. Para reduzir o excesso de provisionamento, use o autoscaler de pod vertical para definir solicitações e limites precisos com base em padrões de uso anteriores.
A subutilização pode ocorrer quando suas cargas de trabalho não usam GPUs totalmente. Considere técnicas avançadas de compartilhamento e particionamento de GPU. Em vez de usar vários nós, você pode usar um único nó com particionamento para maximizar o uso da GPU. Essas técnicas podem ajudá-lo a alocar a quantidade apropriada de aceleração de GPU para cada carga de trabalho, o que pode melhorar o uso e reduzir os custos operacionais de implantação.
As implantações de carga de trabalho de GPU Linux no AKS suportam GPUs de várias instâncias. Use esse recurso para particionar uma GPU NVIDIA A100 em até sete instâncias independentes. Cada instância tem sua própria memória e multiprocessador de fluxo.
A NVIDIA suporta outras técnicas de particionamento, como o fatiamento de tempo e a implementação de serviço de vários processos. Para aplicar manualmente essas configurações, use o operador de GPU NVIDIA.
Para cenários avançados, você pode melhorar o empacotamento do compartimento de recursos em seus nós. Você pode definir configurações do agendador e executar um segundo agendador. Configure e mantenha um agendador secundário para usar estratégias de posicionamento de carga de trabalho diferentes do agendador AKS padrão. Para obter mais informações, consulte Configurar vários agendadores no Kubernetes.
Contribuidores
Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.
Autor principal:
- Ayobami Ayodeji - Brasil | Gerente de Programa Sênior
Outros contribuidores:
- Steve Buchanan - Brasil | Gerente de Programa Principal
- Sachi Desai - Brasil | Gerente de Produto
- Aliado Ford | Gerente de Produto 2
- Paolo Salvatori - Brasil | Engenheiro de Serviços Principal
- Erin Schaffer - Brasil | Desenvolvedor de Conteúdo 2
Para ver perfis não públicos do LinkedIn, inicie sessão no LinkedIn.
Próximos passos
- Traga seus próprios modelos de IA para aplicativos inteligentes no AKS com KAITO
- Implante um modelo de IA no AKS com KAITO
- Implantar um aplicativo que usa OpenAI no AKS
- Implante o KAITO no AKS usando o Terraform
- Implantar a extensão do Azure Machine Learning em clusters Kubernetes habilitados para AKS ou Azure Arc
- Saiba mais sobre o catálogo de modelos e as coleções no Azure
- Usar GPUs para pools de nós do Windows no AKS
- Usar GPUs no AKS