Adattabilità

La funzionalità Adattabilità utilizza suggerimenti sulle risorse di 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à alla 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 il dimensionamento corretto per specificare i requisiti delle risorse per un'intera pipeline o per passaggi specifici della pipeline.

Supporto e limitazioni

Attivare l'adattabilità

Per attivare l'adattamento giusto, utilizza uno o più suggerimenti per le risorse disponibili nella pipeline. Quando utilizzi un suggerimento per le risorse nella pipeline, il dimensionamento corretto viene attivato automaticamente. Per maggiori informazioni, consulta la sezione Utilizzare i suggerimenti per le risorse di questo documento.

Suggerimenti sulle risorse disponibili

Sono disponibili i seguenti suggerimenti per le risorse.

Suggerimento per la risorsa Descrizione
min_ram

La quantità minima di RAM in gigabyte da allocare ai worker. Dataflow utilizza questo valore come limite inferiore quando alloca la memoria ai nuovi worker (scalabilità orizzontale) o ai worker esistenti (scalabilità verticale).

Ad esempio:

min_ram=NUMBERGB
  • Sostituisci NUMBER con il valore minimo della memoria worker richiesta dalla pipeline o dal passaggio della pipeline.
  • min_ram è una specifica aggregata per lavoratore. Non è una specifica per vCPU. Ad esempio, se imposti min_ram=15GB, Dataflow imposta la memoria aggregata disponibile in tutte le vCPU del worker su almeno 15 GB.
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"
  • Sostituisci GPU_TYPE con il tipo di GPU da utilizzare. Per un elenco dei tipi di GPU supportati con Dataflow, consulta Supporto di Dataflow per le GPU.
  • Sostituisci GPU_COUNT con il numero di GPU da utilizzare.
  • (Facoltativo) Sostituisci MACHINE_TYPE con il tipo di macchina da utilizzare con le GPU.
    • Il tipo di macchina deve essere compatibile con il tipo di GPU selezionato. Per informazioni dettagliate sui tipi di GPU e sui tipi di macchine compatibili, consulta Piattaforme GPU.
    • Se specifichi un tipo di macchina sia nel suggerimento per la risorsa accelerator sia nell'opzione pipeline tipo di macchina worker, l'opzione pipeline viene ignorata durante l'adeguamento delle dimensioni.
  • Per utilizzare le GPU NVIDIA con Dataflow, imposta l'install-nvidia-driver opzione di configurazione.

Per ulteriori informazioni sull'utilizzo delle GPU, consulta GPU con Dataflow.

Nidificazione dei suggerimenti per le risorse

I suggerimenti per le risorse vengono applicati alla gerarchia di trasformazione della pipeline nel seguente modo:

  • min_ram: il valore di una trasformazione viene valutato come il valore di suggerimento min_ram più grande tra i valori impostati nella trasformazione stessa e in tutti i relativi elementi principali nella gerarchia della trasformazione.
    • Esempio: se un suggerimento di trasformazione interno imposta min_ram a 16 GB e il suggerimento di trasformazione esterno nella gerarchia imposta min_ram a 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_ram su 16 GB e il suggerimento di trasformazione esterno nella gerarchia imposta min_ram su 8 GB, viene utilizzato un suggerimento di 8 GB per tutti i passaggi della trasformazione esterna che non si trovano nella trasformazione interna e viene utilizzato un suggerimento di 16 GB per tutti i passaggi della trasformazione interna.
  • accelerator: il valore più interno nella gerarchia della trasformazione ha la precedenza.
    • Esempio: se un suggerimento per la trasformazione interna accelerator è diverso da un suggerimento per la trasformazione esterna accelerator in una gerarchia, viene utilizzato il suggerimento per la trasformazione interna accelerator per la trasformazione interna.

I suggerimenti impostati per l'intera pipeline vengono trattati come se fossero impostati su una trasformazione esterna separata.

Utilizzare i suggerimenti per le risorse

Puoi impostare suggerimenti per le risorse sull'intera pipeline o sui passaggi della pipeline.

Suggerimenti per le risorse della pipeline

Puoi impostare suggerimenti sulle risorse per l'intera pipeline quando la esegui dalla riga di comando.

Per configurare l'ambiente Python, consulta il tutorial Python.

Esempio:

    python my_pipeline.py \
        --runner=DataflowRunner \
        --resource_hints=min_ram=numberGB \
        --resource_hints=accelerator="type:type;count:number;install-nvidia-driver" \
        ...

Suggerimenti per le risorse del passaggio della pipeline

Puoi impostare suggerimenti sulle risorse nei passaggi della pipeline (trasformazioni) in modo programmatico.

Java

Per installare l'SDK Apache Beam per Java, consulta Installare l'SDK Apache Beam.

Puoi impostare suggerimenti per le risorse a livello di programmazione nelle trasformazioni della pipeline utilizzando la classe ResourceHints.

L'esempio seguente mostra come impostare gli hint per le risorse in modo programmatico nelle trasformazioni della pipeline.

pcoll.apply(MyCompositeTransform.of(...)
    .setResourceHints(
        ResourceHints.create()
            .withMinRam("15GB")
            .withAccelerator(
    "type:nvidia-l4;count:1;install-nvidia-driver")))

pcoll.apply(ParDo.of(new BigMemFn())
    .setResourceHints(
        ResourceHints.create().withMinRam("30GB")))

Per impostare in modo programmatico i suggerimenti per le risorse sull'intera pipeline, utilizza l'interfaccia ResourceHintsOptions.

Python

Per installare l'SDK Apache Beam per Python, consulta Installa l'SDK Apache Beam.

Puoi impostare suggerimenti per le risorse a livello di programmazione nelle trasformazioni della pipeline utilizzando la classe PTransforms.with_resource_hints. Per ulteriori informazioni, consulta la classe ResourceHint.

L'esempio seguente mostra come impostare gli hint per le risorse in modo programmatico nelle trasformazioni della pipeline.

pcoll | MyPTransform().with_resource_hints(
    min_ram="4GB",
    accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")

pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
    min_ram="30GB")

Per impostare i suggerimenti sulle risorse sull'intera pipeline, utilizza l'opzione --resource_hints della pipeline 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 dell'acceleratore diverse. Queste includono 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 sulle risorse diversi possono essere eseguite sui worker dello stesso pool di worker, nell'ambito del processo di ottimizzazione della fusione. Quando le trasformazioni vengono unite, Dataflow le esegue in un ambiente che soddisfa l'unione dei suggerimenti sulle risorse impostati nelle trasformazioni. In alcuni casi, ciò include l'intera pipeline.

Quando i suggerimenti per le risorse non possono essere uniti, la fusione non viene eseguita. Ad esempio, i suggerimenti per le risorse per GPU diverse non sono unibili, quindi queste trasformazioni non vengono unite.

Puoi anche impedire la fusione aggiungendo alla pipeline un'operazione che impone a Dataflow di materializzare un PCollection intermedio. Ciò è particolarmente utile quando si tenta di isolare risorse costose come GPU o macchine con molta memoria da passaggi lenti o computazionalmente costosi che non richiedono queste risorse speciali. In questi casi, potrebbe essere utile forzare un'interruzione della fusione tra i passaggi lenti vincolati alla CPU e i passaggi che richiedono GPU costose o macchine con memoria elevata e pagare il costo della materializzazione associata all'interruzione della fusione. Per scoprire di più, vedi Evitare la fusione.

Adattabilità dello streaming

Per i job di streaming, puoi attivare l'adattamento alla destra impostando l'opzione pipeline --experiments=enable_streaming_rightfitting.

Il dimensionamento corretto può migliorare il rendimento della pipeline se include fasi con requisiti di risorse diversi.

Esempio: pipeline con fase che richiede un uso intensivo della CPU e fase che richiede la GPU

Un esempio di pipeline che può trarre vantaggio dal dimensionamento corretto è una pipeline che esegue una fase che richiede un uso intensivo della CPU, seguita da una fase che richiede una GPU. Senza il dimensionamento corretto, un singolo pool di worker GPU dovrà essere configurato per eseguire tutte le fasi della pipeline, inclusa la fase che richiede un uso intensivo della CPU. Ciò potrebbe comportare un sottoutilizzo delle risorse GPU quando il pool di worker esegue la fase che richiede un utilizzo elevato della CPU.

Se l'adattamento giusto è abilitato e un suggerimento per le risorse viene applicato al passaggio che richiede la GPU, la pipeline creerà due pool separati, in modo che la fase che richiede la 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 a uso intensivo di CPU, Pool 0, viene inizialmente aumentato a 99 worker e successivamente ridotto a 87 worker. Il worker pool che esegue la fase che richiede la GPU, Pool 1, viene scalato a 13 worker:

Tabella che mostra la scalabilità automatica di due pool.

Il grafico Utilizzo CPU mostra che i worker in entrambi i worker pool mostrano un utilizzo complessivo elevato della CPU:

Grafico che mostra l'utilizzo della CPU dei worker di due pool diversi.

Risolvere i problemi di adattabilità

Questa sezione fornisce istruzioni per la risoluzione dei problemi comuni relativi alla corretta vestibilità.

Configurazione non valida

Quando provi a utilizzare la taglia giusta, si verifica il seguente errore:

Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'NUMBER vCpus with NUMBER MiB memory is
an invalid configuration for NUMBER 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 informazioni dettagliate sulla compatibilità, vedi Piattaforme GPU.

Verifica l'adattabilità

Puoi verificare che il dimensionamento corretto sia abilitato visualizzando le metriche di scalabilità automatica e verificando che la colonna Worker pool sia visibile e elenchi diversi pool:

Tabella che mostra la cronologia dei worker di una pipeline con più pool quando è abilitata la selezione della taglia giusta.

Streaming con prestazioni di adattamento corrette

Le pipeline di streaming con l'adattamento corretto attivato potrebbero non sempre avere un rendimento migliore rispetto alle pipeline senza l'adattamento corretto attivato. Ad esempio:

  1. La pipeline utilizza più worker
  2. La latenza del sistema è più elevata o la velocità effettiva è inferiore
  3. Le dimensioni del pool di worker cambiano più spesso o non si stabilizzano

Se noti questo problema per la tua pipeline, puoi disattivare l'adattamento a destra rimuovendo l'opzione della pipeline --experiments=enable_streaming_rightfitting. Inoltre, le pipeline di streaming con l'adattamento corretto abilitato utilizzando i suggerimenti sulle risorse dell'acceleratore potrebbero utilizzare più acceleratori del necessario. 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=NUM.