Esta página descreve o início flexível no Google Kubernetes Engine (GKE). O início flexível, com tecnologia do Dynamic Workload Scheduler, oferece uma técnica flexível e econômica para consumir recursos de computação especializados, como GPUs ou TPUs, quando você precisa executar cargas de trabalho de IA/ML.
O início flexível permite provisionar dinamicamente VMs de início flexível para GPUs, TPUs e séries de máquinas H4D conforme necessário, por até sete dias, sem restrições de horário de início específico e sem o gerenciamento de reservas de longo prazo. Portanto, o início flexível funciona bem para cargas de trabalho pequenas a médias com requisitos de demanda flutuantes ou durações curtas. Por exemplo, pré-treinamento de modelos pequenos, ajuste fino de modelos ou modelos de veiculação escalonáveis.
As informações nesta página podem ajudar você a fazer o seguinte:
- Entender como o início flexível funciona no GKE.
- Decidir se o início flexível é adequado para sua carga de trabalho.
- Decidir qual configuração de início flexível é adequada para sua carga de trabalho.
- Gerenciar interrupções ao usar VMs de início flexível.
- Entender as limitações das VMs de início flexível no GKE.
Esta página é destinada a administradores e operadores de plataforma e engenheiros de machine learning (ML) que querem otimizar a infraestrutura de aceleradores para cargas de trabalho.
Quando usar o início flexível
Recomendamos que você use o início flexível se as cargas de trabalho atenderem a todas as condições a seguir:
- As cargas de trabalho exigem recursos de GPU.
- As cargas de trabalho exigem recursos de TPU que são executados em pools de nós de fração de TPU de host único.
- As cargas de trabalho exigem outros hardwares especializados, como a série de máquinas H4D otimizada para HPC.
- Sua capacidade de GPU ou TPU é limitada ou não reservada, e você precisa de um acesso mais confiável a esses aceleradores.
- Sua carga de trabalho é flexível por tempo e seu caso de uso pode esperar para ter toda a capacidade solicitada, por exemplo, quando o GKE aloca os recursos da GPU fora dos horários de maior movimento.
Preços do início flexível
O início flexível é recomendado se a carga de trabalho exigir recursos provisionados dinamicamente conforme necessário, por até sete dias com reservas de curto prazo, sem gerenciamento complexo de cotas e acesso econômico. O início flexível é desenvolvido pelo Dynamic Workload Scheduler e é faturado usando os preços do Dynamic Workload Scheduler:
- Desconto (até 53%) para vCPUs, GPUs e TPUs.
- Você paga conforme a utilização.
Requisitos
Para usar o início flexível no GKE, o cluster precisa atender aos seguintes requisitos:
- Para executar GPUs, use o GKE versão 1.32.2-gke.1652000 ou mais recente.
Para executar TPUs, consulte os requisitos de versão do GKE em Planejar TPUs no GKE. O início flexível oferece suporte à seguinte versão e zonas:
- Ironwood (TPU7x) em
us-central1-c. - TPU Trillium (v6e) em
asia-northeast1-b,us-east5-aeus-east5-b. - TPU v5e em
us-west4-a. - TPU v5p em
us-east5-a.
As TPUs v3 e v4 não são compatíveis.
- Ironwood (TPU7x) em
Como funciona o modo de provisionamento de início flexível
Com o início flexível, você especifica a capacidade de computação necessária (como GPUs ou TPUs) nas cargas de trabalho. Além disso, com clusters Standard, você configura o início flexível em pools de nós específicos. O GKE provisiona automaticamente VMs de início flexível concluindo o processo a seguir quando a capacidade fica disponível:
- A carga de trabalho solicita capacidade que não está disponível imediatamente. Essa solicitação pode ser feita diretamente pela especificação da carga de trabalho ou por ferramentas de orquestração, como classes de computação personalizadas ou Kueue.
- O GKE identifica que o início flexível está ativado no nó e que a carga de trabalho pode aguardar um período indeterminado.
- O escalonador automático de clusters aceita sua solicitação e calcula o número de nós necessários, tratando-os como uma única unidade.
- O escalonador automático de clusters provisiona os nós necessários quando eles estão disponíveis. Esses nós são executados por um máximo de sete dias ou por um período mais curto se você especificar um valor no parâmetro
maxRunDurationSeconds. Se você não especificar um valor para o parâmetromaxRunDurationSeconds, o padrão será de sete dias. - Depois que o tempo de execução definido no parâmetro
maxRunDurationSecondsterminar, os nós e os pods serão preemptivos. - Se os pods forem concluídos antes e os nós não forem mais utilizados, o cluster escalonador automático os removerá de acordo com o perfil de escalonamento automático.
O GKE conta a duração de cada solicitação de início flexível no nível do nó. O tempo disponível para executar os pods pode ser um pouco menor devido a atrasos durante a inicialização. As novas tentativas do pod compartilham essa duração, o que significa que há menos tempo disponível para os pods após a nova tentativa. O GKE conta a duração de cada solicitação de início flexível separadamente.
Configurações de início flexível
O GKE oferece suporte às seguintes configurações de início flexível:
- Início flexível, em que o GKE aloca recursos
nó por nó. Essa configuração exige apenas que você defina a flag
--flex-startdurante a criação do nó. Início flexível com provisionamento enfileirado, em que o GKE aloca todos os recursos solicitados ao mesmo tempo. Para usar essa configuração, adicione as flags
--flex-starteenable-queued-provisioningao criar o pool de nós. O GKE segue o processo em Como o modo de provisionamento de início flexível funciona neste documento, mas também aplica as seguintes condições:- O programador aguarda até que todos os recursos solicitados estejam disponíveis em uma única zona.
- Todos os pods da carga de trabalho podem ser executados juntos em nós recém-provisionados.
- Os nós provisionados não são reutilizados entre as execuções de carga de trabalho.
A tabela a seguir compara as configurações de início flexível:
| Início flexível | Início flexível com provisionamento enfileirado | |
|---|---|---|
| Disponibilidade | Visualizar | Disponibilidade geral (GA) flex-start e enable-queued-provisioning na pré-visualização.
|
| Aceleradores compatíveis | ||
| Tamanho de carga de trabalho recomendado | Pequeno a médio, o que significa que a carga de trabalho pode ser executada em um único nó. Por exemplo, essa configuração funciona bem se você estiver executando jobs de treinamento pequenos, inferência off-line ou jobs em lote. | Médio a grande, o que significa que a carga de trabalho pode ser executada em vários nós. A carga de trabalho requer vários recursos e não pode começar a ser executada até que todos os nós sejam provisionados e estejam prontos ao mesmo tempo. Por exemplo, essa configuração funciona bem se você estiver executando cargas de trabalho de treinamento distribuído de machine learning. |
| Tipo de provisionamento | O GKE provisiona um nó por vez quando os recursos estão disponíveis. Para TPUs, o GKE cria um nó por vez em pools de nós de fração de TPU de host único e a fração completa por vez em pools de nós de fração de TPU de vários hosts. | O GKE aloca todos os recursos solicitados simultaneamente. |
| Complexidade da instalação | Menos complexo. Essa configuração é semelhante às VMs spot e on demand. | Mais complexo. Recomendamos o uso de uma ferramenta de gerenciamento de cotas, como o Kueue. |
| Suporte a classes de computação personalizadas | Sim | Não |
| Reciclagem de nós | Sim | Não |
| Preço | SKU de início flexível | SKU de início flexível |
| Quota |
|
|
| Estratégia de upgrade de nós | Upgrades de curta duração | Upgrades de curta duração |
gcloud container node pool create flag |
--flex-start |
|
| Primeiros passos | GPUs: TPUs: | Executar uma carga de trabalho em grande escala com início flexível com provisionamento enfileirado |
Otimizar a configuração de início flexível
Para criar uma infraestrutura de IA/ML robusta e otimizada para custos, combine configurações de início flexível com os recursos disponíveis do GKE. Recomendamos o uso de classes de computação para definir uma lista priorizada de configurações de nós com base nos requisitos da carga de trabalho. O GKE vai selecionar a configuração mais adequada com base na disponibilidade e na prioridade definida.
Gerenciar interrupções em cargas de trabalho que usam o Dynamic Workload Scheduler
As cargas de trabalho que exigem a disponibilidade de todos os nós, ou da maioria dos nós, em um pool de nós são sensíveis a remoções. Além disso, os nós provisionados usando solicitações do Dynamic Workload Scheduler não oferecem suporte ao reparo automático. O reparo automático remove todas as cargas de trabalho de um nó e, portanto, impede que elas sejam executadas.
Todos os nós que usam VMs de início flexível, provisionamento enfileirado ou ambos usam upgrades de curta duração quando o plano de controle do cluster executa a versão mínima para início flexível, 1.32.2-gke.1652000 ou mais recente.
Os upgrades de curta duração atualizam um pool de nós padrão ou um grupo de nós em um cluster do Autopilot sem interromper os nós em execução. Novos nós são criados com a nova configuração, substituindo gradualmente os nós atuais com a configuração antiga ao longo do tempo. As versões anteriores do GKE, que não oferecem suporte a upgrades de início flexível ou de curta duração, exigem práticas recomendadas diferentes.
Práticas recomendadas para minimizar interrupções de carga de trabalho para nós que usam upgrades de curta duração
Os nós que usam VMs de início flexível e os nós que usam provisionamento enfileirado são configurados automaticamente para usar upgrades de curta duração quando o cluster executa a versão 1.32.2-gke.1652000 ou mais recente.
Para minimizar as interrupções nas cargas de trabalho em execução em nós que usam upgrades de curta duração, realize as seguintes tarefas:
- Configure janelas de manutenção e exclusões para definir quando o GKE deve e não deve realizar operações de atualização, como upgrades de nós, garantindo que o GKE ainda tenha tempo para fazer a manutenção automática.
- Desative o reparo automático de nós.
Para nós em clusters que executam versões anteriores à 1.32.2-gke.1652000 e, portanto, não usam upgrades de curta duração, consulte as orientações específicas para esses nós.
Práticas recomendadas para minimizar a interrupção da carga de trabalho para nós de provisionamento enfileirado sem upgrades de curta duração
Os nós que usam provisionamento enfileirado em um cluster que executa uma versão do GKE anterior à 1.32.2-gke.1652000 não usam upgrades de curta duração. Os clusters atualizados para 1.32.2-gke.1652000 ou mais recente com nós de provisionamento enfileirado atuais são atualizados automaticamente para usar upgrades de curta duração.
Para nós que executam essas versões anteriores, consulte as orientações a seguir:
- Dependendo do registro de canal de lançamento do cluster
,
use as seguintes práticas recomendadas para evitar que os upgrades automáticos de nós interrompam as cargas de trabalho:
- Se o cluster estiver inscrito em um canal de lançamento, use janelas e exclusões de manutenção para evitar que o GKE faça upgrade dos nós automaticamente enquanto a carga de trabalho estiver em execução.
- Se o cluster não estiver inscrito em um canal de lançamento, desative os upgrades automáticos do nó. No entanto, recomendamos o uso de canais de lançamento, em que é possível usar exclusões de manutenção com escopos mais granulares.
Considerações sobre quando o cluster migra para upgrades de curta duração
O GKE atualiza os nós atuais usando o provisionamento enfileirado para usar upgrades de curta duração quando o cluster é atualizado para a versão 1.32.2-gke.1652000 ou mais recente. O GKE não atualiza outras configurações, como a ativação de upgrades automáticos de nós, se você os desativou para um pool de nós específico.
Recomendamos que você implemente as seguintes práticas recomendadas agora que os pools de nós usam upgrades de curta duração:
- Se você desativou os upgrades automáticos de nós usando a flag
--no-enable-autoupgrade, essa migração não vai reativar os upgrades automáticos de nós para o pool de nós. Recomendamos que você ative os upgrades automáticos de nós, porque os upgrades de curta duração não são prejudiciais aos nós atuais e às cargas de trabalho executadas neles. Para mais informações, consulte Upgrades de curta duração. - Também recomendamos que, se o cluster ainda não estiver inscrito em um canal de lançamento, você o inscreva para poder usar escopos de exclusão de manutenção mais granulares.
Reciclagem de nós no início flexível
Para garantir uma transição tranquila de nós e evitar inatividade para os jobs em execução, o início flexível oferece suporte à reciclagem de nós. Quando um nó atinge o final da duração, o GKE o substitui automaticamente por um novo para preservar as cargas de trabalho em execução.
Para usar a reciclagem de nós, crie um
perfil de classe de computação personalizado e
inclua o campo nodeRecycling na especificação flexStart com o
leadTimeSeconds parâmetro.
O parâmetro leadTimeSeconds permite equilibrar a disponibilidade de recursos e a eficiência de custos. Esse parâmetro especifica com que antecedência (em segundos) antes que um nó atinja o final da duração de sete dias para que um novo processo de provisionamento de nó comece a substituí-lo. Um tempo de espera maior aumenta a probabilidade de que o novo nó esteja pronto antes que o antigo seja removido, mas pode gerar custos adicionais.
O processo de reciclagem de nós consiste nas etapas a seguir:
Fase de reciclagem:o GKE valida se um nó provisionado de início flexível tem o campo
nodeRecyclingcom o parâmetroleadTimeSecondsdefinido. Se for o caso, o GKE inicia a fase de reciclagem de nós quando a data atual for maior ou igual à diferença entre os valores dos seguintes campos:creationTimestampmaismaxRunDurationSecondsleadTimeSeconds
A flag
creationTimeStampinclui a hora em que o nó foi criado. O campomaxRunDurationSecondspode ser especificado na classe de computação personalizada e tem como padrão sete dias.Criação de nós:o processo de criação do novo nó começa, passando pelas fases de enfileiramento e provisionamento. A duração da fase de enfileiramento pode variar dinamicamente dependendo da zona e da capacidade específica do acelerador.
Restringir o nó que está atingindo o final da duração de sete dias: depois que o novo nó estiver em execução, o nó antigo será restringido. Essa ação impede que novos pods sejam programados nele. Os pods atuais nesse nó continuam em execução.
Desprovisionamento de nós:o nó que está atingindo o final da duração de sete dias é desprovisionado após um período adequado, o que ajuda a garantir que as cargas de trabalho em execução tenham migrado para o novo nó.
O exemplo a seguir de uma configuração de classe de computação inclui campos leadTimeSeconds e maxRunDuration:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: dws-model-inference-class
spec:
priorities:
- machineType: g2-standard-24
spot: true
- machineType: g2-standard-24
maxRunDurationSeconds: 72000
flexStart:
enabled: true
nodeRecycling:
leadTimeSeconds: 3600
nodePoolAutoCreation:
enabled: true
Para mais informações sobre como usar a reciclagem de nós, consulte o tutorial Veicular LLMs no GKE com uma estratégia de provisionamento de GPU otimizada para custos e alta disponibilidade.
Limitações
- A antiafinidade entre pods não tem suporte. O escalonador automático de clusters não considera regras de antiafinidade entre pods durante o provisionamento de nós, o que pode levar a cargas de trabalho não programáveis. Essa situação pode acontecer quando os nós de dois ou mais objetos do Dynamic Workload Scheduler foram provisionados no mesmo pool de nós.
- Não há suporte para reservas com o Programador de carga de trabalho dinâmico. É necessário especificar a flag
--reservation-affinity=noneao criar o pool de nós. O Dynamic Workload Scheduler requer e oferece suporte apenas àANYpolítica de local para o escalonamento automático de clusters. - Uma única solicitação do Dynamic Workload Scheduler pode criar até 1.000 máquinas virtuais (VMs), que é o número máximo de nós por zona para um único pool de nós.
- O GKE usa a cota
ACTIVE_RESIZE_REQUESTSdo Compute Engine para controlar o número de solicitações do Dynamic Workload Scheduler que estão pendentes em uma fila. Por padrão, essa cota tem um limite de 100 solicitações por Google Cloud projeto. Se você tentar criar uma solicitação do Dynamic Workload Scheduler maior que essa cota, a nova solicitação vai falhar. - Os pools de nós que usam o Dynamic Workload Scheduler são sensíveis a interrupções, já que os nós são provisionados juntos. Para saber mais, consulte Gerenciar interrupções em cargas de trabalho que usam o Dynamic Workload Scheduler.
- Talvez você veja outras VMs de curta duração listadas no Google Cloud console. Esse comportamento ocorre porque o Compute Engine pode criar e remover VMs imediatamente até que a capacidade de provisionar todas as máquinas necessárias esteja disponível.
- As VMs spot não são compatíveis.
- O Dynamic Workload Scheduler não oferece suporte a volumes efêmeros. É necessário usar volumes permanentes para armazenamento. Para selecionar o melhor tipo de armazenamento que usa volumes permanentes, consulte Visão geral do armazenamento para clusters do GKE.
- Se a carga de trabalho usar a reciclagem de nós e for implantada por um job, configure o job com modo de conclusão definido como
Indexed. - Um único objeto
ProvisioningRequestoferece suporte a apenas uma entrada na listapodSets. As solicitações com várias entradaspodSetfalham.