Apache Beam e TFX

Apache fascio fornisce un quadro per l'esecuzione batch e lo streaming di trattamento dei dati di posti di lavoro che vengono eseguiti su una varietà di motori di esecuzione. Molte delle librerie TFX utilizzano Beam per l'esecuzione delle attività, il che consente un alto grado di scalabilità tra i cluster di calcolo. Beam include il supporto per una varietà di motori di esecuzione o "runner", incluso un direct runner che viene eseguito su un singolo nodo di calcolo ed è molto utile per lo sviluppo, il test o piccole distribuzioni. Beam fornisce un livello di astrazione che consente a TFX di funzionare su qualsiasi runner supportato senza modifiche al codice. TFX utilizza l'API Python di Beam, quindi è limitato ai corridori supportati dall'API Python.

Distribuzione e scalabilità

Man mano che i requisiti del carico di lavoro aumentano, Beam può scalare fino a distribuzioni molto grandi su cluster di elaborazione di grandi dimensioni. Questo è limitato solo dalla scalabilità del corridore sottostante. I runner in implementazioni di grandi dimensioni verranno in genere implementati in un sistema di orchestrazione di container come Kubernetes o Apache Mesos per automatizzare l'implementazione, il ridimensionamento e la gestione delle applicazioni.

Vedere l' Apache fascio documentazione per ulteriori informazioni su Apache Beam.

Per gli utenti di Google Cloud, flusso di dati è il ripiano consigliato, che fornisce una piattaforma senza server ed economica attraverso autoscaling delle risorse, il riequilibrio di lavoro dinamico, una profonda integrazione con altri servizi Google Cloud, built-in di sicurezza, e il monitoraggio.

Codice Python personalizzato e dipendenze

Una notevole complessità dell'utilizzo di Beam in una pipeline TFX è la gestione del codice personalizzato e/o delle dipendenze necessarie da moduli Python aggiuntivi. Ecco alcuni esempi di quando questo potrebbe essere un problema:

  • preprocessing_fn deve fare riferimento al modulo Python dell'utente
  • un estrattore personalizzato per il componente Evaluator
  • moduli personalizzati che sono sottoclassi da un componente TFX

TFX si basa sul sostegno di Beam per Gestione Python Pipeline dipendenze per gestire le dipendenze Python. Attualmente ci sono due modi per gestirlo:

  1. Fornire codice Python e dipendenze come pacchetto sorgente
  2. [Solo flusso di dati] Utilizzo di un'immagine contenitore come lavoratore

Questi sono discussi di seguito.

Fornire codice Python e dipendenze come pacchetto sorgente

Consigliato per gli utenti che:

  1. Hanno familiarità con il packaging Python e
  2. Usa solo il codice sorgente Python (cioè, nessun modulo C o librerie condivise).

Si prega di seguire uno dei percorsi in Gestione Python Pipeline dipendenze di fornire questo utilizzando uno dei seguenti beam_pipeline_args:

  • --setup_file
  • --pacchetto_extra
  • --file_requisiti

Avviso: in nessuno dei casi di cui sopra, si prega di fare in modo che la stessa versione di tfx è elencato come una dipendenza.

[Solo flusso di dati] Utilizzo di un'immagine contenitore per un lavoratore

TFX 0.26.0 e soprattutto ha il supporto sperimentale per l'utilizzo di immagine contenitore personalizzato per i lavoratori Dataflow.

Per utilizzare questo, devi:

  • Costruire un'immagine Docker che ha sia tfx e il codice e le dipendenze personalizzato degli utenti pre-installato.
    • Per gli utenti che (1) l'uso tfx>=0.26 e (2) utilizza python 3.7 per sviluppare le loro condotte, il modo più semplice per farlo è estendere la versione corrispondente del funzionario tensorflow/tfx immagine:
# You can use a build-arg to dynamically pass in the
# version of TFX being used to your Dockerfile.

ARG TFX_VERSION
FROM tensorflow/tfx:${TFX_VERSION}
# COPY your code and dependencies in
  • Invia l'immagine creata a un registro di immagini contenitore accessibile dal progetto utilizzato da Dataflow.
    • Gli utenti di Google cloud può considerare l'utilizzo di cloud Corporatura che ben automatizza i passaggi precedenti.
  • Fornire seguenti beam_pipeline_args :
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

TODO(b/171733562): rimuovere use_runner_v2 una volta che è predefinito per Dataflow.

TODO (b / 179.738.639): Creazione di documentazione per sapere come contenitore personalizzato di prova a livello locale dopo https://issues.apache.org/jira/browse/BEAM-5440

Argomenti della conduttura del fascio

Diversi componenti TFX si affidano a Beam per l'elaborazione distribuita dei dati. Essi sono configurati con beam_pipeline_args , che è specificato nel corso durante la creazione gasdotto:

my_pipeline = Pipeline(
    ...,
    beam_pipeline_args=[...])

TFX 0.30 e sopra aggiunge un'interfaccia, with_beam_pipeline_args , per estendere args fascio livello conduttura per componente:

example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])