Unisciti alla comunità SIG TFX-Addons e contribuisci a rendere TFX ancora migliore!

Apache Beam e TFX

Apache Beam fornisce un framework per l'esecuzione di processi di elaborazione dati in batch e in streaming eseguiti su una varietà di motori di esecuzione. Molte delle librerie TFX utilizzano Beam per l'esecuzione di attività, che consente un elevato grado di scalabilità tra i cluster di elaborazione. Beam include il supporto per una varietà di motori di esecuzione o "runner", incluso un runner diretto che viene eseguito su un singolo nodo di calcolo ed è molto utile per lo sviluppo, il test o le 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 Beam Python, quindi è limitato ai runner supportati dall'API Python.

Distribuzione e scalabilità

Con l'aumentare dei requisiti del carico di lavoro, Beam può scalare a distribuzioni molto grandi su cluster di elaborazione di grandi dimensioni. Questo è limitato solo dalla scalabilità del corridore sottostante. I runner nelle distribuzioni di grandi dimensioni verranno in genere distribuiti a un sistema di orchestrazione di container come Kubernetes o Apache Mesos per automatizzare la distribuzione, la scalabilità e la gestione delle applicazioni.

Vedere la documentazione di Apache Beam per ulteriori informazioni su Apache Beam.

Per gli utenti di Google Cloud, Dataflow è il runner consigliato, che fornisce una piattaforma serverless ed economica attraverso la scalabilità automatica delle risorse, il ribilanciamento dinamico del lavoro, la profonda integrazione con altri servizi Google Cloud, sicurezza integrata e 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 sottoclassati da un componente TFX

TFX si basa sul supporto di Beam per la gestione delle dipendenze della pipeline Python per gestire le dipendenze di Python. Attualmente ci sono due modi per gestirlo:

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

Questi sono discussi di seguito.

Fornire codice e dipendenze Python come pacchetto sorgente

Questo è consigliato per gli utenti che:

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

Segui uno dei percorsi in Gestione delle dipendenze della pipeline Python per fornirlo utilizzando uno dei seguenti beam_pipeline_args:

  • --setup_file
  • --extra_package
  • --requirements_file

Avviso: in uno qualsiasi dei casi precedenti, assicurati che la stessa versione di tfx sia elencata come dipendenza.

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

TFX 0.26.0 e versioni successive hanno un supporto sperimentale per l'utilizzo di un'immagine del contenitore personalizzata per i worker Dataflow.

Per poterlo utilizzare, devi:

  • Crea un'immagine Docker che abbia sia tfx che il codice personalizzato e le dipendenze degli utenti preinstallati.
    • Per gli utenti che (1) usano tfx>=0.26 e (2) usano python 3.7 per sviluppare le loro pipeline, il modo più semplice per farlo è estendere la versione corrispondente tensorflow/tfx ufficiale tensorflow/tfx :
# 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
  • Esegui il push dell'immagine creata in un registro di immagini del contenitore accessibile dal progetto utilizzato da Dataflow.
    • Gli utenti di Google Cloud possono prendere in considerazione l'utilizzo di Cloud Build che automatizza perfettamente i passaggi precedenti.
  • Fornisci i 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 è l'impostazione predefinita per Dataflow.

TODO (b / 179738639): creare la documentazione su come testare localmente il contenitore personalizzato dopo https://issues.apache.org/jira/browse/BEAM-5440

Argomenti della pipeline di travi

Diversi componenti TFX si affidano a Beam per l'elaborazione distribuita dei dati. Sono configurati con beam_pipeline_args , specificato durante la creazione della pipeline:

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

TFX 0.30 e versioni successive aggiunge un'interfaccia, with_beam_pipeline_args , per estendere gli argomenti trave a livello di pipeline per componente:

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