Scalabilità automatica verticale è una funzionalità che consente a Dataflow Prime di fare lo scale up o fare lo scale down in modo dinamico della memoria disponibile per i worker per soddisfare i requisiti del job. La funzionalità è progettata per rendere i job resilienti agli errori di esaurimento della memoria e per massimizzare l'efficienza della pipeline. Dataflow Prime monitora la pipeline, rileva le situazioni in cui i worker non hanno o superano la memoria disponibile e poi sostituisce questi worker con nuovi worker con una quantità maggiore o minore di memoria.
Importante: poiché la scalabilità automatica verticale sostituisce i worker esistenti con quelli nuovi, consigliamo vivamente di utilizzare container personalizzati per migliorare la latenza che potrebbe derivare dal ridimensionamento dei worker.
Flussi di dati
La scalabilità automatica verticale è abilitata per impostazione predefinita per tutti i nuovi job di inserimento di flussi che utilizzano Dataflow Prime.
Se vuoi avviare 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 modalità flusso Dataflow supportano la scalabilità automatica verticale. Puoi utilizzare le pipeline Java in modalità flusso 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 fa lo scale up solo dopo che si verificano quattro errori di esaurimento della memoria.
- La scalabilità automatica verticale fa lo scale up per evitare errori dei job e non esegue fare lo scale down.
- Viene fatto lo scale up dell'intero pool per il resto del job.
- Se vengono utilizzati gli hint delle risorse e vengono creati più pool, ogni pool fa lo scale up 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 disattivare la scalabilità automatica verticale per i job batch, esegui una delle seguenti operazioni:
- Non impostare l'opzione della 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 GiB (26 GiB quando si utilizzano GPU e un limite inferiore di 6 GiB (12 GiB quando si utilizzano GPU). Fornire un suggerimento sulla risorsa può modificare i limiti superiore e inferiore.
- 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 ritentati più di quattro volte prima che la pipeline si guasti completamente.
- La scalabilità automatica verticale non è supportata con i Controlli di servizio VPC. Se abiliti Dataflow Prime e avvii un nuovo job all'interno di un perimetro dei Controlli di servizio VPC, il job utilizza Dataflow Prime senza scalabilità automatica verticale.
Monitora scalabilità automatica verticale
Le operazioni di scalabilità automatica verticale vengono pubblicate nei log del job e del 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 fare facilmente lo scale up o lo scale down dei worker per soddisfare al meglio le esigenze della tua pipeline e massimizzare l'utilizzo della capacità di calcolo.
In base alla progettazione, la scalabilità automatica verticale (che regola la memoria del worker) avviene a una frequenza inferiore rispetto alla scalabilità automatica orizzontale (che regola il numero di worker). La scalabilità automatica orizzontale viene disattivata durante e per un massimo di 10 minuti dopo l'attivazione di un aggiornamento dalla scalabilità automatica verticale. Se esiste un backlog significativo di dati di input dopo questo contrassegno di 10 minuti, è probabile che si verifichi una scalabilità automatica orizzontale per cancellare il backlog. Per saperne di più sulla scalabilità automatica orizzontale per le pipeline in modalità flusso, consulta Scalabilità automatica dei flussi di dati.
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 Scalabilità automatica verticale non è in esecuzione.
Per le pipeline in modalità flusso, verifica che il flag
enable_vertical_memory_autoscaling
sia impostato. Per le pipeline in modalità batch, verifica che i flagenable_vertical_memory_autoscaling
eenable_batch_vmr
siano impostati.Verifica di aver abilitato l'API Cloud Autoscaling per il tuo progetto Google Cloud. Abilitare l'API
Verifica che il job stia eseguendo Dataflow Prime. Per ulteriori informazioni, consulta Attivazione di Dataflow Prime.
Il job osserva un backlog elevato e un livello elevato di filigrana
Queste istruzioni si applicano solo ai job di flussi di dati. Se la rimodellazione verticale dei worker richiede più di qualche minuto, il tuo job potrebbe presentare un elevato backlog di dati di input e un livello elevato di filigrana. Per risolvere questo problema nelle pipeline Python, ti consigliamo vivamente di utilizzare container personalizzati, perché possono migliorare la latenza che potrebbe derivare dalla ristrutturazione dei worker. Per risolvere questo problema nelle pipeline Java, ti consigliamo vivamente di abilitare Streaming Engine ed 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 scala la memoria oltre i 16 GiB per worker (26 GiB quando si utilizzano GPU) o meno di 6 GiB per worker (12 GiB quando si utilizzano le GPU). Quando vengono raggiunti questi limiti, uno dei seguenti messaggi di log viene generato in Cloud Logging.
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 tua pipeline continua a rilevare errori di esaurimento della memoria, puoi utilizzare gli suggerimenti relativi alle 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 maggiore. Tuttavia, la modifica di questa configurazione iniziale può aumentare il parallelismo latente disponibile per la tua pipeline. Se la trasformazione richiede molta memoria, la pipeline potrebbe utilizzare più memoria rispetto a prima, a causa dell'aumento del parallelismo disponibile. In questi casi, potrebbe essere necessario ottimizzare la trasformazione per ridurre l'ingombro di memoria.
Nota: la scalabilità automatica verticale non impedisce la visualizzazione di errori OOM nei log dei worker. Se si verifica un errore OOM, è visibile nei log del worker, perché la scalabilità automatica verticale trova e monitora gli eventi OOM.
Il limite di memoria del worker non si stabilizza e aumenta o diminuisce nel tempo nonostante l'uso costante della memoria
Queste istruzioni si applicano solo ai job di flussi di dati. Per le pipeline Java, abilita Streaming Engine ed Runner v2. Se il problema persiste o se noti 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 è operativa sul pool di worker.
Se Scalabilità automatica verticale non è attiva, vedi 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.