Este artigo descreve como executar com eficiência cargas de trabalho que usam nós de GPU em um cluster do Serviço de Kubernetes do Azure (AKS). Saiba como escolher o SKU certo, 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 de GPU podem ser caras para executar. Para evitar custos desnecessários, saiba quando implantar nós baseados em GPU em seus clusters do 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 com uso intensivo de computação. As CPUs gerem de forma eficaz a lógica complexa e as ramificações. As GPUs são otimizadas para taxa de transferência. Eles podem lidar de forma eficiente com operações aritméticas e vetoriais diretas.
Para determinar quando usar GPUs para cargas de trabalho do AKS, você deve entender a otimização da GPU e a intensidade da computação, mas também deve considerar outros fatores. Para obter uma melhor percepção sobre o uso da GPU para cargas de trabalho do AKS, considere os exemplos de carga de trabalho a seguir que se beneficiam dos nós de GPU em um cluster do AKS.
Ciência de dados e análise
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 com eficiência, estruturas como RAPIDS e Dask GPU estendem bibliotecas populares de processamento de dados, como pandas e scikit-learn.
Mecanismos de consulta SQL acelerados por software de código aberto (OSS) e bancos de dados de coluna, como BlazingSQL e HeavyDB , usam GPUs para executar rapidamente consultas e análises em grandes conjuntos de dados.
Aprendizado de máquina e aprendizado profundo
Estruturas populares de aprendizado de máquina e aprendizado profundo, como TensorFlow e PyTorch, se beneficiam das GPUs porque podem acelerar as tarefas de treinamento e inferência.
Os modelos de aprendizado profundo têm redes neurais complexas. O processamento paralelo em GPUs aceleram as computações do modelo. As GPUs fornecem multiplicação e convoluções de matrizes altamente eficientes, que são operações essenciais no aprendizado profundo.
Você também pode usar GPUs para acelerar tarefas como classificação de imagens, detecçã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 aplicativos baseados em 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 dados de imagem em grande escala e computações complexas com eficiência para tarefas como detecçã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 predominantes nos negócios, portanto, 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 computação intensiva, 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 avançada 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 detecçã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 em nuvem contam com GPUs para oferecer gráficos de alta qualidade e experiências de jogo suaves.
Computação de alto desempenho
Os aplicativos de computação de alto desempenho (HPC) geralmente exigem simulações complexas, análise numérica e computações científicas. Para executar rapidamente essas tarefas, você pode usar GPUs para paralelizar a carga de trabalho em vários núcleos. Exemplos de aplicativos de HPC que precisam de enorme poder de processamento paralelo incluem simulações científicas, previsão do tempo, dinâmica de fluidos computacional e modelagem molecular. As GPUs são ideais para computações paralelas e aceleram significativamente as cargas de trabalho de HPC. Os empreendimentos científicos e orientados para a pesquisa se beneficiam das GPUs.
Para acelerar aplicativos de 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 de saúde e ciências biológicas, como análise genômica e aplicativos de bioinformática, 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ência, 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 do AKS. Entenda a otimização de GPU para tarefas com uso intensivo de computação, como pesquisa visual 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 do AKS.
Modelos de IA generativa
Grandes modelos de linguagem (LLMs), como OpenAI GPT, Meta Llama, Falcon, or Mistral, podem aproveitar os recursos de processamento paralelo da GPU. Use GPUs com esses modelos para melhorar o desempenho.
As GPUs podem acelerar as tarefas de treinamento e inferência, que envolvem computações complexas 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. Esse processo fornece resultados rápidos e melhora o desempenho.
Os modelos de linguagem geralmente possuem redes neurais complexas com várias camadas e parâmetros, o que pode aumentar a demanda computacional. As GPUs aceleram as principais operações 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, bandwidth e poder de processamento suficientes para lidar com aplicativos baseados em LLM que possuem 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 de 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 associadas a entrada e saída ou que não exigem computação pesada podem não melhorar com GPUs.
Histórias do cliente
Muitos clientes da Microsoft aproveitam as cargas de trabalho de GPU para inovar para seus clientes. Considere os seguintes exemplos:
Práticas recomendadas de implantação de carga de trabalho de GPU
O AKS fornece várias opções para implantar pools de nós e cargas de trabalho do Linux e do Windows habilitados para GPU. Para garantir a operação tranquila da carga de trabalho da GPU, siga estas práticas recomendadas.
Implantação da carga de trabalho do Linux
Crie um pool de nós com uma máquina virtual (VM) habilitada para GPU compatível e instale manualmente o plug-in do dispositivo NVIDIA para implantar pools de nós do Linux habilitados para GPU. Esse método não dá suporte à atualização de um pool de nós existente para adicionar GPUs.
Visualize as VMs habilitadas para GPU com suporte no Azure. Recomendamos que você use um tamanho mínimo Standard_NC6s_v3 para pools de nós AKS. O AKS não é compatível com a série NVv4 baseada em GPUs AMD.
Entenda as limitações quando você usa um pool de nós habilitados 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ó taints, e tolerâncias ao agendar cargas de trabalho em seus pools de nós habilitados para GPU.
Implantação de carga de trabalho do Windows
Crie um pool de nós com um VM habilitada para GPU com suporte 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 dá suporte à atualização de um pool de nós existente para adicionar GPUs.
Quando você seleciona uma VM habilitada para GPU com suporte, 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.
Visualize as VMs habilitadas para GPU com suporte no Azure. Recomendamos que você use um tamanho mínimo Standard_NC6s_v3 para pools de nós AKS. O AKS não é compatível com 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 anteriores do Kubernetes não são compatíveis com GPUs do Windows.
Use seletores de nó do Kubernetes, afinidade de nó taints, e tolerâncias ao agendar cargas de trabalho em seus pools de nós habilitados para GPU.
Observação
A GPU do Windows é uma versão prévia do recurso. Você precisa registrar o WindowsGPUPreview
sinalizador de recurso.
Operador de GPU NVIDIA
O operador de GPU NVIDIA é uma ferramenta que você pode usar para implantar e gerenciar com eficiência os recursos de GPU em clusters do 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 do NVIDIA.
Se você quiser maior controle e flexibilidade para cargas de trabalho avançadas de GPU, poderá usar o operador de GPU NVIDIA com seus nós habilitados para GPU no AKS. O operador de GPU NVIDIA não é compatível com GPUs do Windows.
Considere as melhores práticas a seguir:
Use o operador de GPU NVIDIA para fazer configurações avançadas de GPU, como seleção de versão de driver e divisão de tempo.
Ignore a instalação automática do driver antes de usar o operador de GPU.
Defina a contagem mínima como 1 ao usar o operador de GPU com o dimensionador automático de cluster.
Observação
A Microsoft não dá suporte ou gerencia a manutenção e a compatibilidade dos drivers NVIDIA como parte da implantação da imagem do nó quando você usa o operador de GPU.
Implantação de carga de trabalho de GPU para LLMs
O operador de conjunto de ferramentas de IA do Kubernetes (KAITO) é um operador do Kubernetes que simplifica a execução de LLMs de código aberto, como Falcon e Llama2, em seu cluster do Kubernetes. Você pode implantar o KAITO no cluster do AKS como um complemento gerenciado para o AKS. O KAITO usa o Karpenter provisionar e implantar automaticamente nós de GPU com base em uma especificação na definição de recurso personalizado 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 suportados para executar chamadas de inferência.
Configuração de hardware da GPU: KAITO fornece configurações predefinidas que são aplicadas automaticamente com base nos requisitos do modelo. Você não precisa ajustar manualmente os parâmetros de implantação para se adequar ao hardware da GPU.
Provisionamento automático de nó de GPU: KAITO provisiona automaticamente os nós de GPU com base nos requisitos do modelo e recomenda tamanhos de VM de GPU de custo mais baixo para configurar a inferência distribuída.
Integração com o Registro de Artefato da Microsoft: 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 com suporte. 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, confira os recursos a seguir:
- Explore o projeto de código aberto Kaito
- Implantar um modelo de IA no AKS com o KAITO
- Ajuste seus modelos de linguagem com o KAITO de código aberto
- Implantar o KAITO no AKS usando o Terraform
Escalabilidade da carga de trabalho e do 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 usar a computação de GPU projetada para aprendizado profundo e paralelização de computações de IA. O treinamento geralmente requer dimensionamento gradual e a distribuição de grandes quantidades de dados entre GPUs para obter 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 para tarefas distintas e maximizar seu uso. As GPUs podem escalar verticalmente e escalar horizontalmente cargas de trabalho de HPC, como VMs da série NV ou 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 demorados 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 do zero. Para 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 por meio 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 de contagem de GPU mais baixas que têm uma ou duas GPUs cada, fornece alta disponibilidade entre 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 de GPU e identificar oportunidades de otimização. Para aumentar a visibilidade de custo, você pode usar o complemento de análise complemento de análise de custo do AKS.
Os cenários a seguir se beneficiam da visibilidade de custo.
Custo de 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 evitar, a menos que sua carga de trabalho tenha requisitos específicos. A análise de custo do AKS mostra o custo diário de cada uma de suas VMs e divide 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 ao 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 custo do AKS mostra os custos ociosos para cada um dos nós.
Superprovisionamento e subutilização
O superprovisionamento é quando você aloca mais recursos do que o necessário para um pod. O superprovisionamento leva ao desperdício de recursos e à subutilização. Os recursos em excesso permanecem reservados para o nó, mesmo que você não os use. Para reduzir o superprovisionamento, use o dimensionador dimensionador automático 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 totalmente GPUs. 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 ajudar você a alocar a quantidade apropriada de aceleração de GPU para cada carga de trabalho, o que pode aprimorar o uso e reduzir os custos operacionais de implantação.
As implantações de carga de trabalho de GPU do Linux no AKS dão suporte a 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 oferece suporte a outras técnicas de particionamento, como divisão de tempo e 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 de compartimentos 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 padrão do AKS. Para obter mais informações, consulte Configurar vários agendadores no Kubernetes.
Colaboradores
Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.
Autor principal:
- Ayobami Ayodeji | Gerente Sênior de Programa
Outros colaboradores:
- Steve Buchanan | Gerente Principal de Programas
- Sachi Desai | Gerente de produto
- Ally Ford | Gerente de Produto 2
- Paolo Salvatori | Engenheiro principal de serviço
- Erin Schaffer | Desenvolvedor de conteúdo 2
Para ver perfis não públicos no LinkedIn, entre no LinkedIn.
Próximas etapas
- Traga seus próprios modelos de IA para aplicativos inteligentes no AKS com o KAITO
- Implantar um modelo de IA no AKS com o KAITO
- Implantar um aplicativo que usa o OpenAI no AKS
- Implantar o KAITO no AKS usando o Terraform
- Implante a extensão do Azure Machine Learning em clusters do Kubernetes habilitados para Azure Arc
- Saiba 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