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 seu 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, recomendamos usar 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 e um limite inferior de 6 GiB. Ao usar GPUs, o escalonamento da memória tem um limite superior de 26 GiB e um limite inferior de 12 GiB. É possível mudar os limites máximo e mínimo fornecendo uma dica de recurso.
- 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 iniciar um novo job em um perímetro do VPC Service Controls, o job vai usar o Dataflow Prime sem o escalonamento automático vertical.
- Quando você usa o ajuste correto com o escalonamento automático vertical, apenas pipelines em lote são compatíveis.
Monitorar o escalonamento automático vertical
As operações de escalonamento automático vertical são publicadas nos registros de job e worker. Para acessar esses registros, consulte Métricas do job do Dataflow.
Efeito do escalonamento automático horizontal
No Dataflow Prime, o escalonamento automático vertical funciona 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 a utilização 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. Para mais informações, consulte Como 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 ao usar 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 ajuste
correto (dicas de recursos) para definir os requisitos de
memória da transformação especificando min_ram="numberXB"
. Essa configuração
permite que o Dataflow selecione uma configuração inicial para os
workers com capacidade de memória maior. No entanto, mudar essa
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 uso da memória.
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 parece funcionar. 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.