O escalonamento automático vertical é um recurso que permite que o Dataflow Prime aumente ou diminua dinamicamente a memória disponível para os workers de acordo com os requisitos do job. O recurso foi projetado para tornar os jobs resilientes a erros de memória insuficiente (OOM) e para maximizar a eficiência do pipeline. O Dataflow Prime monitora o pipeline, detecta situações em que há falta ou excesso de memória disponível para os workers e os substitui por novos workers com mais ou menos memória.
Importante: como o escalonamento automático vertical substitui os workers existentes por novos, use contêineres personalizados para melhorar a latência decorrente do redimensionamento dos workers.
Streaming
O escalonamento automático vertical é ativado por padrão para todos os novos jobs de streaming que usam o Dataflow Prime.
Se você estiver lançando um job com base em um modelo usando a interface de linha de comando,
pode desativar o escalonamento automático vertical transmitindo a
sinalização --additional_experiments=disable_vertical_memory_autoscaling
.
Todos os pipelines de streaming em Java e Python do Dataflow Prime oferecem suporte ao escalonamento automático vertical. É possível usar pipelines Java de streaming do Dataflow Prime sem o Streaming Engine. No entanto, para ter a melhor experiência com o escalonamento automático vertical, é recomendado ativar o Streaming Engine.
Lote
Para jobs em lote do Dataflow Prime, o escalonamento automático vertical aumenta somente após a ocorrência de quatro erros de memória insuficiente.
- O escalonamento automático vertical é escalonado para evitar falhas de jobs e não pode ser reduzido.
- Todo o pool é escalonado verticalmente para o restante do job.
- Se dicas de recursos forem usadas e vários pools forem criados, cada pool será escalonado separadamente.
Nos jobs em lote, o escalonamento automático vertical não está ativado por padrão. Para ativar o escalonamento automático vertical em jobs em lote, defina as seguintes opções de pipeline:
--experiments=enable_batch_vmr
--experiments=enable_vertical_memory_autoscaling
Para desativar o escalonamento automático vertical em jobs em lote, siga um destes procedimentos:
- Não defina a opção de pipeline
--experiments=enable_batch_vmr
. - Defina a opção de pipeline
--experiments=disable_vertical_memory_autoscaling
.
Limitações
- Somente a memória dos workers é escalonada verticalmente.
- Por padrão, o escalonamento da memória tem um limite superior de 16 GiB (26 GiB ao usar GPUs) e um limite inferior de 6 GiB (12 GiB ao usar GPUs). Fornecer uma dica de recurso pode mudar o limite máximo e o mínimo.
- O escalonamento automático vertical não tem suporte para pools que usam GPUs A100.
- Para jobs em lote, os pacotes que incluem um item com falha podem ser repetidos mais de quatro vezes antes que o pipeline falhe completamente.
- O escalonamento automático vertical não é compatível com o VPC Service Controls. Se você ativar o Dataflow Prime e lançar um novo job em um perímetro do VPC Service Controls, o job usará o Dataflow Prime sem o escalonamento automático vertical.
Monitorar o escalonamento automático vertical
As operações de escalonamento automático vertical são publicadas nos registros de job e worker. Para ver esses registros, consulte Métricas do job do Dataflow.
Efeito do escalonamento automático horizontal
No Dataflow Prime, o escalonamento automático vertical funciona em conjunto com o escalonamento automático horizontal. Essa combinação permite que o Dataflow Prime aumente ou diminua com facilidade o número de workers de acordo com as necessidades do seu pipeline e maximize o uso da capacidade de computação.
Por padrão, o escalonamento automático vertical (que ajusta a memória do worker) ocorre com uma frequência menor que o escalonamento automático horizontal (que ajusta o número de workers). O escalonamento automático horizontal é desativado por até 10 minutos após uma atualização ser acionada pelo escalonamento automático vertical. Se houver um backlog significativo de dados de entrada após essa marca de 10 minutos, o escalonamento automático horizontal provavelmente vai ocorrer para limpar esse backlog. Saiba mais sobre o escalonamento automático horizontal para pipelines de streaming em Escalonamento automático de streaming.
Solução de problemas
Esta seção traz instruções para solucionar problemas comuns de escalonamento automático vertical.
O escalonamento automático vertical não parece funcionar
Se o escalonamento automático vertical não estiver funcionando, verifique os detalhes do job a seguir.
Procure a seguinte mensagem de job para confirmar que o escalonamento automático vertical está ativo:
Vertical Autoscaling is enabled. This pipeline is receiving recommendations for resources allocated per worker.
A ausência dessa mensagem indica que o escalonamento automático vertical não está em execução.
Para pipelines de streaming, verifique se a sinalização
enable_vertical_memory_autoscaling
está definida. Para pipelines em lote, verifique se as flagsenable_vertical_memory_autoscaling
eenable_batch_vmr
estão definidas.Verifique se você ativou a API Cloud Scaling para seu projeto do Google Cloud. Ativar a API
Verifique se o job está executando o Dataflow Prime. Saiba mais em Ativar o Dataflow Prime.
O job observa um backlog alto e uma marca d'água alta
Estas instruções se aplicam somente a jobs de streaming. Se a remodelagem vertical dos workers demorar mais que alguns minutos, o job pode exibir um backlog alto dos dados de entrada e uma marca d'água alta. Para resolver esse problema em pipelines em Python, use contêineres personalizados, porque eles podem melhorar a latência decorrente da remodelagem dos workers. Para resolver esse problema em pipelines em Java, ative o Streaming Engine e o Runner v2. Se o problema persistir após ativar esses recursos, entre em contato com o atendimento ao cliente.
O escalonamento automático vertical atingiu a capacidade de memória.
Por padrão, se nenhuma dica de recurso for fornecida, o escalonamento automático vertical não vai escalonar a memória para além de 16 GiB por worker (26 GiB ao usar GPUs) ou menos de 6 GiB por worker (12 GiB com GPUs). Quando esses limites são atingidos, uma das mensagens de registro a seguir é gerada no Cloud Logging.
Jobs de streaming:
Vertical Autoscaling has a desire to upscale memory, but we have hit the memory
scaling limit of X GiB. This is only a problem if the pipeline continues to see
memory throttling and/or OOMs.
Jobs em lote:
Vertical Autoscaling has a desire to upscale memory, but we have hit the memory
scaling limit of 16.0 GiB. Job will fail because we have upsized to maximum size,
and the pipeline is still OOMing.
Se o pipeline continuar a encontrar erros de memória insuficiente, use as
Dicas de recursos para definir os requisitos de
memória da transformação especificando min_ram="numberXB"
. Isso permite que o
Dataflow selecione uma configuração inicial para os workers
com capacidade de memória maior. No entanto, a alteração dessa configuração
inicial pode aumentar o paralelismo latente disponível para o pipeline. No
caso de uma transformação que precisa de muita memória, isso pode resultar em um uso
maior de memória do pipeline devido ao aumento do paralelismo disponível. Nesses casos,
pode ser necessário otimizar a transformação para reduzir o consumo de
memória.
Observação: o escalonamento automático vertical não impede que erros de OOM apareçam nos registros do worker. Se um OOM ocorrer, ele ficará visível nos registros do worker, pois o escalonamento automático vertical localiza e rastreia os eventos de OOM.
O limite de memória do worker não se estabiliza e aumenta e diminui ao longo do tempo, apesar do uso constante de memória.
Estas instruções se aplicam somente a jobs de streaming. Em pipelines em Java, ative o Streaming Engine e o Runner v2. Se o problema persistir ou se você observar esse comportamento em pipelines em Python, entre em contato com o atendimento ao cliente.
Mensagens de registro comuns
Nesta seção, descrevemos as mensagens de registro comuns geradas quando você ativa o escalonamento automático vertical.
O Escalonamento automático vertical está ativado. Esse pipeline está recebendo recomendações para recursos alocados por worker.
Essa mensagem indica que o escalonamento automático vertical está ativo. A ausência dessa mensagem indica que o escalonamento automático vertical não está operando no pool de workers.
Se o escalonamento automático vertical não estiver ativo, consulte O escalonamento automático vertical não funciona. O que preciso verificar? para ver instruções de solução de problemas.
A atualização do escalonamento automático vertical foi acionada para alterar o limite de memória por worker para o pool de X GiB para Y GiB.
Essa mensagem indica que o escalonamento automático vertical acionou um redimensionamento da memória do pool de workers.