La funzionalità di right-fitting utilizza i suggerimenti per le risorse Apache Beam per personalizzare le risorse dei worker per una pipeline. La possibilità di scegliere come target più risorse diverse per passaggi specifici della pipeline offre maggiore flessibilità e capacità della pipeline, oltre a potenziali risparmi sui costi. Puoi applicare risorse più costose ai passaggi della pipeline che le richiedono e risorse meno costose ad altri passaggi della pipeline. Utilizza l'ottimizzazione per specificare i requisiti delle risorse per un'intera pipeline o per passaggi specifici della pipeline.
Supporto e limitazioni
- I suggerimenti per le risorse sono supportati con gli SDK Apache Beam Java e Python, versioni 2.31.0 e successive.
- L'adattabilità è supportata con le pipeline batch.
L'aggiustamento è supportato con le pipeline di streaming con la scalabilità automatica orizzontale abilitata.
- Puoi attivarla impostando l'opzione della pipeline
--experiments=enable_streaming_rightfitting.
- Puoi attivarla impostando l'opzione della pipeline
Quando utilizzi l'ottimizzazione, mantieni abilitata la scalabilità automatica orizzontale. Se disattivi la scalabilità automatica orizzontale, il job potrebbe essere eseguito con un parallelismo inferiore al previsto. Per limitare il numero di worker utilizzati dal job, imposta l'opzione della pipeline
maxNumWorkersomax_num_workers.L'adattabilità supporta Dataflow Prime.
Il fitting Right non supporta FlexRS.
Quando utilizzi l'ottimizzazione, non utilizzare l'
worker_acceleratoropzione di servizio.Quando utilizzi la scalabilità automatica verticale, la selezione automatica delle VM non è supportata.
Abilita l'adattabilità
Per attivare l'adattamento, utilizza uno o più dei suggerimenti sulle risorse disponibili nella pipeline. Quando utilizzi un suggerimento per le risorse nella pipeline, l'ottimizzazione viene attivata automaticamente. Per saperne di più, consulta la sezione Utilizza i suggerimenti per le risorse di questo documento.
Suggerimenti per le risorse disponibili
Sono disponibili i seguenti suggerimenti per le risorse.
| Suggerimento per le risorse | Descrizione |
|---|---|
min_ram |
La quantità minima di RAM in gigabyte da allocare ai worker. Dataflow utilizza questo valore come limite inferiore quando alloca memoria ai nuovi worker (scalabilità orizzontale) o ai worker esistenti (scalabilità verticale). Ad esempio: min_ram=RAM_VALUEGB
|
cpu_count |
Il numero di vCPU da allocare per worker. Quando utilizzi questo suggerimento per le risorse, Dataflow seleziona i tipi di macchine che hanno il numero specificato di vCPU e soddisfano i requisiti di memoria. Ad esempio: cpu_count=CPU_VALUE
|
accelerator |
Un'allocazione di GPU fornita dall'utente che ti consente di controllare l'utilizzo e il costo delle GPU nella pipeline e nei relativi passaggi. Specifica il tipo e il numero di GPU da collegare ai worker Dataflow come parametri del flag. Ad esempio: accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
Per saperne di più sull'utilizzo delle GPU, consulta GPU con Dataflow. |
Selezione automatica delle VM per i tipi di macchine worker
Quando utilizzi i suggerimenti per le risorse min_ram o cpu_count per i passaggi della pipeline che non richiedono acceleratori, la selezione automatica delle VM viene attivata automaticamente.
Con la selezione automatica delle VM, viene eseguito il provisioning dei worker da una selezione di tipi di macchine compatibili che soddisfano i requisiti della pipeline, massimizzando l'affidabilità e la disponibilità della capacità.
Per informazioni dettagliate sul funzionamento della selezione automatica delle VM, sulle sue limitazioni e sui suggerimenti relativi ai tipi di archiviazione, consulta Selezione automatica delle VM.
Nidificazione dei suggerimenti per le risorse
I suggerimenti per le risorse vengono applicati alla gerarchia di trasformazione della pipeline come segue:
min_ram: il valore di una trasformazione viene valutato come il valore del suggerimentomin_rampiù grande tra i valori impostati sulla trasformazione stessa e su tutti i relativi elementi principali nella gerarchia della trasformazione.- Esempio: se un suggerimento di trasformazione interno imposta
min_ramsu 16 GB e il suggerimento di trasformazione esterno nella gerarchia impostamin_ramsu 32 GB, viene utilizzato un suggerimento di 32 GB per tutti i passaggi dell'intera trasformazione. - Esempio: se un suggerimento di trasformazione interno imposta
min_ramsu 16 GB e il suggerimento di trasformazione esterno nella gerarchia impostamin_ramsu 8 GB, viene utilizzato un suggerimento di 8 GB per tutti i passaggi della trasformazione esterna che non si trovano nella trasformazione interna, mentre viene utilizzato un suggerimento di 16 GB per tutti i passaggi della trasformazione interna.
- Esempio: se un suggerimento di trasformazione interno imposta
accelerator: il valore più interno nella gerarchia della trasformazione ha la precedenza.- Esempio: se un suggerimento
acceleratordi una trasformazione interna è diverso da un suggerimentoacceleratordi una trasformazione esterna in una gerarchia, il suggerimentoacceleratordella trasformazione interna viene utilizzato per la trasformazione interna.
- Esempio: se un suggerimento
I suggerimenti impostati per l'intera pipeline vengono trattati come se fossero impostati su una trasformazione esterna separata.
Utilizza i suggerimenti per le risorse
Puoi impostare i suggerimenti sulle risorse sull'intera pipeline o sui passaggi della pipeline.
Suggerimenti per le risorse della pipeline
Puoi impostare i suggerimenti sulle risorse per l'intera pipeline quando la esegui dalla riga di comando.
gcloud
Per impostare i suggerimenti sulle risorse durante l'esecuzione di una pipeline con un template flessibile, utilizza il flag --additional-pipeline-options con il comando gcloud dataflow flex-template run.
Il nome dell'opzione della pipeline dipende dal linguaggio dell'SDK. Ad esempio, per i suggerimenti sulle risorse:
- Per le pipeline Java, utilizza
resourceHints. - Per le pipeline Python, utilizza
resource_hints.
L'esempio seguente mostra come impostare i suggerimenti per le risorse durante l'esecuzione di una pipeline di template flessibile Java:
gcloud dataflow flex-template run JOB_NAME \
--template-file-gcs-location="gs://TEMPLATE_LOCATION" \
--region="REGION" \
--additional-pipeline-options=resourceHints=min_ram=RAM_VALUEGB \
--additional-pipeline-options=resourceHints=cpu_count=CPU_VALUE \
--parameters ...
L'esempio seguente mostra come impostare i suggerimenti sulle risorse durante l'esecuzione di una pipeline di template flessibile Python:
gcloud dataflow flex-template run JOB_NAME \
--template-file-gcs-location="gs://TEMPLATE_LOCATION" \
--region="REGION" \
--additional-pipeline-options=resource_hints=min_ram=RAM_VALUEGB \
--additional-pipeline-options=resource_hints=cpu_count=CPU_VALUE \
--parameters ...
Java
Per configurare l'ambiente Java, consulta Crea una pipeline Dataflow con Java.
L'esempio seguente mostra come impostare i suggerimenti per le risorse durante l'esecuzione di una pipeline Java:
mvn -Pdataflow-runner compile exec:java \
-Dexec.mainClass=com.example.MyPipeline \
-Dexec.args="--runner=DataflowRunner \
--resourceHints=min_ram=RAM_VALUEGB \
--resourceHints=cpu_count=CPU_VALUE \
..."
Python
Per configurare l'ambiente Python, consulta il tutorial su Python.
L'esempio seguente mostra come impostare i suggerimenti per le risorse durante l'esecuzione di una pipeline Python:
python my_pipeline.py \
--runner=DataflowRunner \
--resource_hints=min_ram=RAM_VALUEGB \
--resource_hints=cpu_count=CPU_VALUE \
...
Suggerimenti per le risorse dei passaggi della pipeline
Puoi impostare i suggerimenti sulle risorse nei passaggi della pipeline (trasformazioni) in modo programmatico.
Java
Per installare l'SDK Apache Beam per Java, consulta Installa l'SDK Apache Beam.
Puoi impostare i suggerimenti sulle risorse in modo programmatico sulle trasformazioni della pipeline utilizzando la
classe ResourceHints.
L'esempio seguente mostra come impostare i suggerimenti sulle risorse in modo programmatico sulle trasformazioni della pipeline.
pcoll.apply(MyCompositeTransform.of(...)
.setResourceHints(
ResourceHints.create()
.withMinRam("15GB")
.withCpuCount(8)
.withAccelerator(
"type:nvidia-l4;count:1;install-nvidia-driver")))
pcoll.apply(ParDo.of(new BigMemFn())
.setResourceHints(
ResourceHints.create()
.withMinRam("30GB")
.withCpuCount(16)))
Per impostare in modo programmatico i suggerimenti sulle risorse nell'intera pipeline, utilizza l'interfaccia ResourceHintsOptions.
Python
Per installare l'SDK Apache Beam per Python, consulta Installa l'SDK Apache Beam.
Puoi impostare i suggerimenti sulle risorse in modo programmatico sulle trasformazioni della pipeline utilizzando la
classe PTransforms.with_resource_hints.
Per saperne di più, consulta la classe ResourceHint.
L'esempio seguente mostra come impostare i suggerimenti sulle risorse in modo programmatico sulle trasformazioni della pipeline.
pcoll | MyPTransform().with_resource_hints(
min_ram="4GB",
cpu_count=8,
accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")
pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
min_ram="30GB",
cpu_count=16)
Per impostare i suggerimenti sulle risorse per l'intera pipeline, utilizza l'opzione della pipeline --resource_hints quando esegui la pipeline. Per un esempio, consulta Suggerimenti per le risorse della pipeline.
Vai
I suggerimenti per le risorse non sono supportati in Go.
Supporto di più acceleratori
All'interno di una pipeline, trasformazioni diverse possono avere configurazioni di acceleratori diverse. Sono incluse le configurazioni che richiedono tipi di macchine diversi. Queste configurazioni dell'acceleratore a livello di trasformazione hanno la precedenza sulla configurazione a livello di pipeline, se ne è stata fornita una.
Adattabilità e fusione
In alcuni casi, le trasformazioni impostate con suggerimenti per le risorse diversi possono essere eseguite sui worker nello stesso pool di worker, nell'ambito del processo di ottimizzazione della fusione. Quando le trasformazioni vengono fuse, Dataflow le esegue in un ambiente che soddisfa l'unione dei suggerimenti sulle risorse impostati sulle trasformazioni. In alcuni casi, questo include l'intera pipeline.
Quando i suggerimenti per le risorse non possono essere uniti, la fusione non avviene. Ad esempio, i suggerimenti sulle risorse per GPU diverse non sono unibili, quindi queste trasformazioni non vengono fuse.
Puoi anche impedire la fusione aggiungendo alla pipeline un'operazione che forza Dataflow a materializzare un PCollection intermedio. Ciò è particolarmente utile quando si tenta di isolare risorse costose come GPU o macchine con memoria elevata da passaggi lenti o computazionalmente costosi che non richiedono queste risorse speciali. In questi casi, può essere utile forzare un'interruzione della fusione tra i passaggi lenti legati alla CPU e quelli che richiedono GPU costose o macchine con memoria elevata e pagare il costo della materializzazione associato all'interruzione della fusione. Per scoprire di più, consulta Impedisci la fusione.
Streaming right fitting
Per i job di flussi di dati, puoi attivare l'ottimizzazione impostando l'opzione della pipeline --experiments=enable_streaming_rightfitting.
Il dimensionamento ottimale può migliorare le prestazioni della pipeline se questa prevede fasi con requisiti di risorse diversi.
Esempio: pipeline con fase ad alta intensità di CPU e fase che richiede GPU
Un esempio di pipeline che potrebbe trarre vantaggio dall'adattamento corretto è una che esegue una fase ad alta intensità di CPU, seguita da una fase che richiede una GPU. Senza l'ottimizzazione, sarà necessario configurare un singolo pool di worker GPU per eseguire tutte le fasi della pipeline, inclusa quella che richiede un uso intensivo della CPU. Ciò potrebbe portare a un sottoutilizzo delle risorse GPU quando il pool di worker esegue la fase ad alta intensità di CPU.
Se l'ottimizzazione è abilitata e viene applicato un suggerimento per le risorse al passaggio che richiede la GPU, la pipeline creerà due pool separati, in modo che la fase ad alta intensità di CPU venga eseguita dal pool di worker CPU e la fase che richiede la GPU venga eseguita dal pool di worker GPU.
Per questa pipeline di esempio, la tabella di scalabilità automatica mostra che il pool di worker che esegue la fase ad alta intensità di CPU, Pool 0, viene inizialmente sottoposto ad upscaling a 99 worker e successivamente a downscaling a 87 worker. Il pool di worker che esegue la fase che richiede la GPU, Pool 1, viene scalato fino a 13 worker:
Il grafico Utilizzo CPU mostra che i worker in entrambi i pool di worker mostrano un utilizzo complessivo elevato della CPU:
Risolvi i problemi di adattabilità
Questa sezione fornisce istruzioni per la risoluzione dei problemi comuni relativi alla giusta dimensione.
Configurazione non valida
Quando provi a utilizzare il dimensionamento ottimale, si verifica il seguente errore:
Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'CPU_VALUE vCpus with RAM_VALUE MiB memory is
an invalid configuration for GPU_COUNT count of 'GPU_TYPE' in family 'MACHINE_TYPE'.'.
Questo errore si verifica quando il tipo di GPU selezionato non è compatibile con il tipo di macchina selezionato. Per risolvere questo errore, seleziona un tipo di GPU e un tipo di macchina compatibili. Per i dettagli sulla compatibilità, consulta Piattaforme GPU.
Verifica la vestibilità corretta
Puoi verificare che l'adattamento sia abilitato visualizzando le metriche di scalabilità automatica e verificando che la colonna Worker pool sia visibile ed elenchi pool diversi:
Prestazioni di adattabilità dello streaming
Le pipeline di streaming con l'ottimizzazione automatica abilitata potrebbero non avere sempre un rendimento migliore rispetto alle pipeline senza l'ottimizzazione automatica abilitata. Ad esempio:
- La pipeline utilizza più worker
- La latenza del sistema è più elevata o il throughput è inferiore
- Le dimensioni del pool di worker cambiano più di frequente o non si stabilizzano
Se osservi questo comportamento per la tua pipeline, puoi disattivare l'adattamento automatico rimuovendo l'opzione della pipeline --experiments=enable_streaming_rightfitting. Inoltre, le pipeline di streaming con l'adattamento corretto abilitato che utilizzano i suggerimenti sulle risorse dell'acceleratore potrebbero utilizzare più acceleratori di quanto desiderato. Se osservi questo comportamento per la tua pipeline, puoi configurare un numero massimo di acceleratori utilizzati dalla pipeline impostando l'opzione della pipeline --experiments=max_num_accelerators=MAX_NUM_ACCELERATORS.