La scalabilità automatica verticale è una funzionalità che consente a Dataflow Prime di fare 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 hanno memoria sufficiente o ne hanno troppa e poi li sostituisce con nuovi worker con più o meno memoria.
Importante:poiché lo scalabilità automatica verticale sostituisce i worker esistenti con nuovi worker, consigliamo vivamente di utilizzare container personalizzati per migliorare la latenza che potrebbe verificarsi a causa del ridimensionamento dei worker.
Streaming
La scalabilità automatica verticale è abilitata per impostazione predefinita per tutti i nuovi job di 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 di Dataflow Prime per lo streaming supportano lo scalabilità automatica verticale. Puoi utilizzare le pipeline Java di streaming Dataflow Prime senza Streaming Engine. Tuttavia, per un'esperienza ottimale con lo scalabilità automatica verticale, è consigliabile attivare Streaming Engine.
Batch
Per i job batch Dataflow Prime, la scalabilità automatica verticale viene eseguita solo dopo che si sono verificati quattro errori di memoria insufficiente.
- La scalabilità automatica verticale esegue lo scale up per evitare errori del job e non lo scale down.
- L'intero pool viene scalato per il resto del job.
- Se vengono utilizzati suggerimenti sulle 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 abilitare la scalabilità automatica verticale per i job batch, imposta le seguenti opzioni della pipeline:
--experiments=enable_batch_vmr
--experiments=enable_vertical_memory_autoscaling
Per disabilitare la scalabilità automatica verticale per i job batch, esegui una delle seguenti operazioni:
- Non impostare l'opzione pipeline
--experiments=enable_batch_vmr
. - Imposta l'opzione pipeline
--experiments=disable_vertical_memory_autoscaling
.
Limitazioni
- Solo la memoria dei worker viene scalata verticalmente.
- Per impostazione predefinita, il ridimensionamento della memoria ha un limite superiore di 16 GiB e un limite inferiore di 6 GiB. Quando utilizzi le GPU, lo scaling della memoria ha un limite superiore di 26 GiB e un limite inferiore di 12 GiB. Puoi modificare sia il limite superiore che quello inferiore fornendo un suggerimento per le risorse.
- La scalabilità automatica verticale non è supportata per i pool che utilizzano GPU A100.
- Per i job batch, i bundle che includono un elemento non riuscito potrebbero essere riprovati più di 4 volte prima che la pipeline non riesca completamente.
- La scalabilità automatica verticale non è supportata con Controlli di servizio VPC. Se abiliti 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 l'adattamento giusto con la scalabilità automatica verticale, sono supportate solo le pipeline batch.
Monitora la scalabilità automatica verticale
Le operazioni di scalabilità automatica verticale vengono pubblicate nei log di job e worker. Per visualizzare questi log, consulta Metriche dei job Dataflow.
Effetto sulla scalabilità automatica orizzontale
In Dataflow Prime, la scalabilità automatica verticale funziona insieme alla scalabilità automatica orizzontale. Questa combinazione consente a Dataflow Prime di scalare facilmente i worker in base alle esigenze della pipeline e massimizzare l'utilizzo della capacità di calcolo.
Per progettazione, la scalabilità automatica verticale (che regola la memoria worker) si verifica 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 10 minuti esiste un backlog significativo di dati di input, è probabile che si verifichi lo scalabilità automatica orizzontale per eliminare il backlog. Per scoprire di più sullo scalabilità automatica orizzontale per le pipeline di streaming, consulta la sezione Scalabilità automatica dello 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 sia impostato il flag
enable_vertical_memory_autoscaling
. Per le pipeline batch, verifica che siano impostati i flagenable_vertical_memory_autoscaling
eenable_batch_vmr
.Verifica di aver abilitato l'API Cloud Autoscaling per il tuo progetto Google Cloud . Abilita l'API
Verifica che il job esegua Dataflow Prime. Per ulteriori informazioni, consulta Attivazione di Dataflow Prime.
Il job osserva un backlog elevato e un watermark elevato
Queste istruzioni si applicano solo ai job di streaming. Se il rimodellamento verticale dei worker richiede più di qualche minuto, il job potrebbe mostrare un backlog elevato dei dati di input e un watermark elevato. Per risolvere questo problema nelle pipeline Python, ti consigliamo vivamente di utilizzare container personalizzati, perché possono migliorare la latenza che potrebbe derivare dal rimodellamento dei worker. Per risolvere questo problema nelle pipeline Java, ti consigliamo vivamente di attivare Streaming Engine e Runner v2. Se il problema persiste dopo l'attivazione di 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 scala la memoria oltre 16 GiB per worker (26 GiB quando si utilizzano GPU) o meno di 6 GiB per worker (12 GiB quando si utilizzano GPU). Quando questi limiti vengono raggiunti, in Cloud Logging viene generato uno dei seguenti messaggi di log.
Job di 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.
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 visualizzare errori di esaurimento della memoria, puoi utilizzare right
fitting (suggerimenti per le 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
worker in grado di 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 rispetto a prima a causa del maggiore parallelismo disponibile. In questi casi, potrebbe essere necessario ottimizzare la trasformazione per
ridurre l'utilizzo di 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 abiliti la scalabilità automatica verticale.
La scalabilità automatica verticale è abilitata. 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 funziona sul pool di worker.
Se la scalabilità automatica verticale non è attiva, consulta La scalabilità automatica verticale non sembra funzionare. Cosa devo controllare? per istruzioni per la 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.