Scalabilità automatica verticale

La scalabilità automatica verticale è una funzionalità che consente a Dataflow Prime di eseguire dinamicamente lo scale up o fare lo scale down della memoria disponibile per i worker in modo da soddisfare i requisiti del job. La funzionalità è progettata per rendere i job resilienti agli errori di esaurimento della memoria (OOM) e per massimizzare l'efficienza della pipeline. Dataflow Prime monitora la pipeline, rileva le situazioni in cui i worker non dispongono o superano la memoria disponibile e poi li sostituisce con nuovi worker con più o meno memoria.

Importante:poiché l'autoscaling verticale sostituisce i worker esistenti con nuovi worker, ti consigliamo vivamente di utilizzare contenitori personalizzati per migliorare la latenza che potrebbe derivare dal ridimensionamento dei worker.

Streaming

La scalabilità automatica verticale è abilitata per impostazione predefinita per tutti i nuovi job in streaming che utilizzano Dataflow Prime.

Se avvii un job da un modello tramite l'interfaccia a riga di comando, puoi disattivare la scalabilità automatica verticale passando il flag --additional_experiments=disable_vertical_memory_autoscaling.

Tutte le pipeline Java e Python in streaming di Dataflow Prime supportano l'autoscaling verticale. Puoi utilizzare le pipeline Java in streaming di Dataflow Prime senza Streaming Engine. Tuttavia, per un'esperienza ottimale con la scalabilità automatica verticale, è consigliabile attivare Streaming Engine.

Batch

Per i job batch di Dataflow Prime, la scalabilità automatica verticale consente di eseguire lo scale up solo dopo quattro errori di esaurimento della memoria.

  • La scalabilità automatica verticale esegue lo scale up per evitare i fallimenti dei job e non esegue fare lo scale down.
  • L'intero pool viene scalato per il resto del job.
  • Se vengono utilizzati gli indizi di risorse e vengono creati più pool, ogni pool viene scalato separatamente.

Per i job batch, la scalabilità automatica verticale non è abilitata per impostazione predefinita. Per attivare la scalabilità automatica verticale per i job batch, imposta le seguenti opzioni di pipeline:

  • --experiments=enable_batch_vmr
  • --experiments=enable_vertical_memory_autoscaling

Per disattivare la scalabilità automatica verticale per i job batch, esegui una delle seguenti operazioni:

  • Non impostare l'opzione di pipeline --experiments=enable_batch_vmr.
  • Imposta l'opzione della pipeline --experiments=disable_vertical_memory_autoscaling.

Limitazioni

  • Solo la memoria dei worker viene scalata verticalmente.
  • Per impostazione predefinita, la scalabilità della memoria ha un limite superiore di 16 GB (26 GB se si utilizzano le GPU) e un limite inferiore di 6 GB (12 GB se si utilizzano le GPU). Fornendo un suggerimento per la risorsa, puoi modificare sia i limiti superiori che quelli inferiori.
  • La scalabilità automatica verticale non è supportata per i pool che utilizzano GPU A100.
  • Per i job batch, i pacchetti che includono un elemento con errori potrebbero essere riprovati più di quattro volte prima che la pipeline non riesca completamente.
  • La scalabilità automatica verticale non è supportata con Controlli di servizio VPC. Se attivi Dataflow Prime e avvii un nuovo job all'interno di un perimetro di Controlli di servizio VPC, il job utilizza Dataflow Prime senza scalabilità automatica verticale.
  • Quando utilizzi la giusta adattabilità con la scalabilità automatica verticale, sono supportate solo le pipeline batch.

Monitorare la scalabilità automatica verticale

Le operazioni di scalabilità automatica verticale vengono pubblicate nei log del job e dei worker. Per visualizzare questi log, consulta la sezione Metriche dei job Dataflow.

Effetto sulla scalabilità automatica orizzontale

In Dataflow Prime, la scalabilità automatica verticale è disponibile insieme alla scalabilità automatica orizzontale. Questa combinazione consente a Dataflow Prime di scalare facilmente i worker per adattarsi al meglio alle esigenze della pipeline e massimizzare l'utilizzo della capacità di calcolo.

Per impostazione predefinita, la scalabilità automatica verticale (che regola la memoria dei worker) avviene con una frequenza inferiore rispetto alla scalabilità automatica orizzontale (che regola il numero di worker). La scalabilità automatica orizzontale viene disattivata durante e fino a 10 minuti dopo l'attivazione di un aggiornamento da parte della scalabilità automatica verticale. Se dopo questo periodo di 10 minuti esiste un backlog significativo di dati di input, è probabile che venga eseguito l'autoscaling orizzontale per eliminare il backlog. Per scoprire di più sulla scalabilità automatica orizzontale per le pipeline di streaming, consulta la sezione Scalabilità automatica per lo streaming.

Risoluzione dei problemi

Questa sezione fornisce istruzioni per la risoluzione dei problemi comuni relativi alla scalabilità automatica verticale.

La scalabilità automatica verticale non sembra funzionare

Se la scalabilità automatica verticale non funziona, controlla i seguenti dettagli del job.

  • Controlla il seguente messaggio del job per verificare che la scalabilità automatica verticale sia attiva: Vertical Autoscaling is enabled. This pipeline is receiving recommendations for resources allocated per worker.

    L'assenza di questo messaggio indica che la scalabilità automatica verticale non è in esecuzione.

  • Per le pipeline di streaming, verifica che il flag enable_vertical_memory_autoscaling sia impostato. Per le pipeline batch, verifica che i flag enable_vertical_memory_autoscaling e enable_batch_vmr siano impostati.

  • Verifica di aver attivato l'API Cloud Autoscaling per il tuo progetto Google Cloud. Abilitare l'API

  • Verifica che il job esegua Dataflow Prime. Per ulteriori informazioni, consulta Abilitazione di Dataflow Prime.

Il job registra un backlog elevato e un watermark elevato

Queste istruzioni si applicano solo ai job di streaming. Se la riorganizzazione verticale dei worker richiede più di qualche minuto, il job potrebbe presentare un backlog elevato dei dati di input e un'alta marcatura temporale. Per risolvere questo problema nelle pipeline Python, ti consigliamo vivamente di utilizzare container personalizzati, in quanto possono migliorare la latenza che potrebbe derivare dalla ridefinizione dei worker. Per risolvere questo problema nelle pipeline Java, ti consigliamo vivamente di attivare Streaming Engine e Runner v2. Se il problema persiste dopo aver attivato queste funzionalità, contatta l'assistenza clienti.

La scalabilità automatica verticale ha raggiunto la capacità di memoria.

Per impostazione predefinita, se non vengono forniti suggerimenti sulle risorse, la scalabilità automatica verticale non consente di scalare la memoria oltre 16 GB per worker (26 GB se si utilizzano GPU) o meno di 6 GB per worker (12 GB se si utilizzano GPU). Quando questi limiti vengono raggiunti, in Cloud Logging viene generato uno dei seguenti messaggi di log.

Job in modalità flusso:

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.

Job batch:

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 la pipeline continua a generare errori di esaurimento della memoria, puoi utilizzare la corrispondenza giusta (suggerimenti sulle risorse) per definire i requisiti di memoria per la trasformazione specificando min_ram="numberXB". Questa impostazione consente a Dataflow di selezionare una configurazione iniziale per i tuoi worker che può supportare una capacità di memoria superiore. Tuttavia, la modifica di questa configurazione iniziale può aumentare il parallelismo latente disponibile per la pipeline. Se hai una trasformazione che richiede molta memoria, la pipeline potrebbe utilizzare più memoria di prima a causa dell'aumento del parallelismo disponibile. In questi casi, potrebbe essere necessario ottimizzare la trasformazione per ridurre il suo impatto sulla memoria.

Il limite di memoria del worker non si stabilizza e aumenta e diminuisce nel tempo nonostante l'utilizzo costante della memoria

Queste istruzioni si applicano solo ai job di streaming. Per le pipeline Java, abilita Streaming Engine e Runner v2. Se il problema persiste o se osservi questo comportamento nelle pipeline Python, contatta l'assistenza clienti.

Messaggi di log comuni

Questa sezione descrive i messaggi di log comuni generati quando attivi la scalabilità automatica verticale.

La scalabilità automatica verticale è attivata. Questa pipeline riceve suggerimenti per le risorse allocate per worker.

Questo messaggio indica che la scalabilità automatica verticale è attiva. L'assenza di questo messaggio indica che la scalabilità automatica verticale non è in funzione nel pool di worker.

Se la scalabilità automatica verticale non è attiva, consulta La scalabilità automatica verticale non sembra funzionare. Cosa devo controllare? per istruzioni sulla risoluzione dei problemi.

Aggiornamento della scalabilità automatica verticale attivato per modificare il limite di memoria per worker per il pool da X GiB a Y GiB.

Questo messaggio indica che la scalabilità automatica verticale ha attivato un ridimensionamento della memoria del pool di worker.