Projetar para flexibilidade e eficiência de capacidade no GKE com o Gemini

Neste documento, explicamos como projetar clusters resilientes do Google Kubernetes Engine (GKE) e estratégias de programação de carga de trabalho que ajudam a obter recursos, como GPUs, TPUs e CPUs de alta performance. Ao usar o Gemini no Google Cloud e o Compute Advisor (pré-lançamento), é possível evitar pods pendentes e melhorar a confiabilidade da programação para cargas de trabalho de IA.

Este documento é destinado a arquitetos de nuvem e administradores e operadores de plataforma que gerenciam a infraestrutura do GKE e querem otimizar o planejamento e o agendamento de capacidade.

Visão geral da flexibilidade, eficiência e disponibilidade da capacidade de computação no GKE

O agendamento do Kubernetes depende de solicitações de recursos declaradas. Ao programar aceleradores em grande escala, como GPUs ou TPUs, solicitações de recursos estritas podem fazer com que os clusters não sejam escalonar verticalmente se um hardware específico não estiver disponível. É possível otimizar a disponibilidade de capacidade no GKE usando os seguintes recursos:

  • Criação automática de pools de nós:criação dinâmica de pool de nós de várias famílias.
  • Failovers no nível da carga de trabalho:tolerâncias e seletores de nós configurados para aceitar hardware alternativo.
  • Programação geográfica e regional:recursos multizonais e multirregionais do GKE.
  • Gerenciamento de reservas:consumir a capacidade pré-comprada antes de solicitar recursos sob demanda.

Práticas recomendadas para flexibilidade, eficiência e disponibilidade da capacidade de computação no GKE

Esta seção oferece recomendações para aumentar a disponibilidade de capacidade ao programar cargas de trabalho no GKE. Essas práticas recomendadas abrangem estratégias como o design de requisitos de hardware flexíveis, a configuração da criação automática de pools de nós e o uso da distribuição geográfica para se adaptar às restrições de recursos. A criação automática de pools de nós gerencia automaticamente os pools de nós com base nas especificações do pod. Em vez de predefinir pools de nós, especifique os requisitos de recursos nos manifestos de pod e deixe que o GKE crie nós dinamicamente.

Também é possível descobrir e implementar as práticas recomendadas a seguir usando o Compute Advisor. Para mais informações, consulte Usar o Compute Advisor.

Opções para aumentar a disponibilidade da capacidade de computação

Para otimizar a disponibilidade de capacidade, instrua o GKE a evitar vincular cargas de trabalho a uma única família de máquinas estáticas ou tipo de acelerador. Confira a seguir exemplos de como configurar pools de nós flexíveis e regras de afinidade de pod para diferentes classes de carga de trabalho. As alternativas específicas que você escolhe dependem das demandas de recursos do aplicativo:

  • Pools de nós de CPU de uso geral:

    • Exemplo principal:N2 (uso geral baseado em Intel).
    • Exemplos de alternativas:N2D (AMD EPYC), C2 ou C2D (otimizado para computação) ou E2 (otimizado para custo).
    • Padrão de implementação:configure especificações de pod com afinidade de nó ou tolerâncias que permitam o agendamento em vários rótulos de família de máquinas, por exemplo, cloud.google.com/machine-family em ["n2", "n2d", "c2d"]. Essa configuração permite que o GKE provisione qualquer pool que tenha capacidade disponível.
  • Pools de nós de GPU:

    • Exemplo principal:série A2 (GPUs NVIDIA A100).
    • Alternativas de exemplo:L4 (IA/ML universal) ou T4 (inferência).
    • Padrão de implementação:configure pools de nós ou ComputeClasses separados para diferentes níveis de GPU. Para cargas de trabalho que podem ser executadas sem recursos específicos do A100, permita que os pods voltem para pools L4 ou T4 se o provisionamento do A2 estiver restrito.
  • Pools de nós da TPU:

    • Exemplo principal:TPU Ironwood (TPU7x).
    • Exemplos de alternativas:TPU v6 (Trillium) ou TPU v5 (v5e ou v5p).
    • Padrão de implementação:o provisionamento de fração de TPU pode ser altamente restrito. Projete cargas de trabalho de treinamento com flexibilidade no nível do framework (por exemplo, configurações do JAX ou do PyTorch que oferecem suporte a topologias de fração variáveis) para implantação em frações v6 ou v5 quando a capacidade da TPU Ironwood (TPU7x) não estiver disponível.

A tabela a seguir resume as principais seleções e alternativas de hardware para diferentes tipos de cargas de trabalho:

Tipo de carga de trabalho Exemplo de seleção principal Exemplo de alternativas Considerações da arquitetura
Cargas de trabalho do sistema ou principais N2 N2D, C2D, E2 Abrange pools de hardware Intel e AMD para a criação automática de pool de nós.
Inferência e processamento de GPU A2 (A100) L4, T4 Segmenta de maneira flexível pools de nós de GPU de menor custo ou maior disponibilidade.
Treinamento de modelo de TPU TPU Ironwood (TPU7x) TPU v6, TPU v5 (v5e ou v5p) Usa topologias flexíveis para programação baseada em frações.

Implementar a criação automática de pool de nós e ComputeClasses

Para otimizar a disponibilidade de capacidade, combine a criação automática de pool de nós com ComputeClasses. Confira algumas práticas recomendadas:

  • Defina ComputeClasses:crie recursos ComputeClass que especifiquem uma lista priorizada de famílias de máquinas, tipos de GPU ou modelos de provisionamento. O GKE tenta provisionar nós usando a configuração de maior prioridade disponível na classe. Uma lista de substituição prioritária ajuda muito a obter os recursos necessários para suas cargas de trabalho. Por exemplo, para evitar que o GKE volte a usar máquinas de uso geral quando um acelerador especializado preferido não estiver disponível, adicione a configuração whenUnsatisfiable: DoNotScaleUp à configuração do ComputeClass. Para mais informações, consulte Controlar atributos de nó com escalonamento automático usando ComputeClasses personalizadas.

  • Referenciar ComputeClasses em especificações de pod:nas especificações de pod da carga de trabalho, use o rótulo cloud.google.com/compute-class para segmentar sua ComputeClass personalizada em vez de uma família de máquinas ou um tipo de GPU específico. Para mais informações, consulte Solicitar uma ComputeClass em uma carga de trabalho.

  • Defina várias tolerâncias:se você não usar ComputeClasses, use regras de afinidade de nó nas especificações de pod que permitam uma variedade de famílias de máquinas (como cloud.google.com/machine-family em ["n2", "n2d"]). Para mais informações, consulte Configurar a criação automática de pool de nós.

Flexibilidade geográfica e multirregional no GKE

Para aumentar a disponibilidade de capacidade, implante clusters do GKE que abrangem várias zonas ou execute arquiteturas de vários clusters:

  • Clusters multizonais:verifique se os pools de nós estão configurados para escalonamento automático em todas as zonas disponíveis em uma região.

  • Federação de clusters multirregionais:para jobs assíncronos grandes (como inferência em lote off-line ou treinamento distribuído), implante um orquestrador de vários clusters (como Kueue ou Cluster Director) para enfileirar cargas de trabalho globalmente e enviá-las a uma região com capacidade disponível.

  • Pods em execução em VMs spot:execute cargas de trabalho interrompíveis em VMs spot adicionando tolerâncias e instruindo o GKE a distribuir o excesso de capacidade em diferentes zonas.

Outras práticas recomendadas para flexibilidade, eficiência e disponibilidade de capacidade de computação no GKE

Além da diversificação de hardware, incorpore estas práticas recomendadas do GKE para otimizar o sucesso do escalonamento do cluster:

  • Implementar o superprovisionamento de pods (buffers de capacidade): implante pods de "pausa" de baixa prioridade que reservam a capacidade do nó com antecedência. Quando cargas de trabalho de IA de alta prioridade são enviadas e a capacidade regional está limitada, o Kubernetes remove imediatamente os pods de pausa, permitindo que os contêineres sejam iniciados sem esperar pelo provisionamento de novos nós. Para mais informações, consulte Sobre buffers de capacidade.
  • Use o início flexível com provisionamento em fila:para jobs grandes de treinamento de modelo de IA e em lote, use o início flexível com provisionamento em fila, que se integra ao Kueue e ao Programador dinâmico de cargas de trabalho. Início flexível com provisionamento em fila de alocação de nós atômicos do tipo tudo ou nada, o que evita falhas parciais de escalonamento vertical do cluster. Para mais informações, consulte Executar uma carga de trabalho em grande escala com início flexível e provisionamento em fila.
  • Ative o streaming de imagens e o pré-carregamento de imagens de contêiner:para imagens de contêiner de IA grandes (como imagens do PyTorch ou do TensorFlow que excedem 10 GB), ative o streaming de imagens do GKE ou use discos de inicialização secundários para o pré-carregamento de imagens. Essa configuração reduz o tempo de aquecimento do nó, o que permite que os nós recém-provisionados comecem a executar cargas de trabalho em segundos. Para mais informações, consulte Usar o streaming de imagem para extrair imagens de contêiner e Usar discos de inicialização secundários para pré-carregar dados ou imagens de contêiner.
  • Defina a política de localização do escalonador automático de clusters como ANY:configure pools de nós (especialmente para VMs spot ou início flexível) com a política de localização ANY. Essa configuração instrui o escalonador automático de cluster a pesquisar a capacidade solicitada em todas as zonas especificadas. O escalonador automático de cluster encontra capacidade ao equilibrar a contagem de nós. Para mais informações, consulte Visão geral do escalonador automático de cluster.
  • Otimize a utilização do acelerador com o compartilhamento de GPU:para cargas de trabalho que não exigem uma GPU dedicada, use o compartilhamento de tempo de GPU, GPUs de várias instâncias (MIG) ou NVIDIA MPS para permitir que vários contêineres compartilhem um único acelerador. Essa abordagem otimiza a capacidade efetiva em pools de nós. Para mais informações, consulte Sobre as estratégias de compartilhamento de GPU no GKE.

Usar o Compute Advisor

O Compute Advisor é uma interface com tecnologia de IA no console Google Cloud , com tecnologia do Gemini, que ajuda você a projetar arquiteturas resilientes e econômicas para o GKE.

O Compute Advisor oferece orientação de disponibilidade quase em tempo real para VMs flex-start e VMs spot, além de verificar as políticas e cotas de recursos da sua organização antes da implantação. O Compute Advisor não fornece orientações de disponibilidade para cargas de trabalho que exigem recursos sob demanda.

Para acessar o Gemini no console do Google Cloud , siga estas etapas:

  1. No console do Google Cloud , acesse a página Visão geral.

    Ir para Visão geral

  2. Na seção Projete sua infraestrutura com o Compute Advisor, envie um comando. O Gemini começa a gerar uma resposta.

  3. Para gerar recomendações de arquitetura, execute um dos exemplos de comandos a seguir no Compute Advisor. Quando você clica nos botões Executar comando no Compute Advisor, o console do Google Cloud pode levar mais de 15 segundos para carregar:

  • Estratégia geral de aceleração:

    Caso de uso:use esse comando para analisar indicadores de capacidade regional e receber recomendações sobre tipos de máquinas, zonas e estratégias de programação de fallback ao projetar configurações de cluster.

    Configure a GKE cluster to improve chances of obtaining scarce GPU or TPU capacity.
    

    Executar comando no Compute Advisor

  • Flexibilidade geográfica e substituições:

    Caso de uso:use esse comando ao projetar arquiteturas de vários clusters ou sistemas globais de enfileiramento de jobs (por exemplo, com o Kueue) para transferir a execução da carga de trabalho entre regiões, dependendo da disponibilidade de recursos.

    Configure multi-region fallbacks and geographic scheduling on GKE to increase GPU availability.
    

    Executar comando no Compute Advisor

  • Consumo de reserva prioritária:

    Caso de uso:use esse comando para gerar padrões de configuração YAML para afinidade de pod e regras de escalonamento automático que priorizam a capacidade de reserva.

    Configure GKE autoscaling rules and Pod specs to prioritize consuming active reservations before scaling into on-demand pools.
    

    Executar comando no Compute Advisor

  • ComputeClasses para priorização de substituição:

    Caso de uso:use esse comando para gerar o manifesto YAML de uma CustomResourceDefinition ComputeClass que prioriza GPUs de alta performance, mas inclui substitutos de nível inferior para garantir o agendamento de cargas de trabalho.

    Define a ComputeClass manifest for GKE to prioritize A2 GPU nodes with automatic fallbacks to L4 or T4 GPUs.
    

    Executar comando no Compute Advisor

  • Criação automática de pools de nós para diversificação:

    Caso de uso:use este comando para escrever o manifesto YAML dos limites de recursos do escalonador automático de cluster do GKE e as regras de afinidade de pod que permitem que o NAP provisione automaticamente nós alternativos de GPU ou CPU.

    Configure GKE node pool auto-creation to diversify machine families and prevent pending pods when regional accelerator capacity is constrained.
    

    Executar comando no Compute Advisor

A seguir