Treten Sie der SIG TFX-Addons-Community bei und helfen Sie mit, TFX noch besser zu machen! SIG TFX-Addons beitreten

Apache Beam und TFX

Apache Breite bietet einen Rahmen für die Batch - Betrieb und Streaming - Datenverarbeitung Jobs , die auf einer Vielzahl von Ausführungsmaschinen laufen. Mehrere der TFX-Bibliotheken verwenden Beam zum Ausführen von Aufgaben, was ein hohes Maß an Skalierbarkeit über Compute-Cluster hinweg ermöglicht. Beam bietet Unterstützung für eine Vielzahl von Ausführungs-Engines oder "Runnern", einschließlich eines direkten Runners, der auf einem einzelnen Rechenknoten ausgeführt wird und für Entwicklung, Tests oder kleine Bereitstellungen sehr nützlich ist. Beam bietet eine Abstraktionsschicht, mit der TFX auf jedem unterstützten Runner ohne Codeänderungen ausgeführt werden kann. TFX verwendet die Beam Python API, ist also auf die Runner beschränkt, die von der Python API unterstützt werden.

Bereitstellung und Skalierbarkeit

Wenn die Workload-Anforderungen steigen, kann Beam auf sehr große Bereitstellungen in großen Rechenclustern skaliert werden. Dies wird nur durch die Skalierbarkeit des zugrunde liegenden Runners begrenzt. Runner in großen Bereitstellungen werden normalerweise in einem Container-Orchestrierungssystem wie Kubernetes oder Apache Mesos bereitgestellt, um die Anwendungsbereitstellung, Skalierung und Verwaltung zu automatisieren.

Finden Sie in der Apache Beam - Dokumentation für weitere Informationen über Apache Balken.

Für Google Cloud - Nutzer, Datenfluss ist der empfohlene Läufer, die eine serverlose und kostengünstige Plattform , durch die automatische Skalierung von Ressourcen, dynamischer Arbeit Rebalancing, tiefer Integration mit anderem Google - Cloud - Service, integrierten Sicherheits und Überwachung zur Verfügung stellt.

Benutzerdefinierter Python-Code und Abhängigkeiten

Eine bemerkenswerte Komplexität bei der Verwendung von Beam in einer TFX-Pipeline besteht darin, benutzerdefinierten Code und/oder die von zusätzlichen Python-Modulen benötigten Abhängigkeiten zu verarbeiten. Hier sind einige Beispiele dafür, wann dies ein Problem sein könnte:

  • preprocessing_fn muss auf das eigene Python-Modul des Benutzers verweisen
  • ein benutzerdefinierter Extraktor für die Evaluator-Komponente
  • benutzerdefinierte Module, die von einer TFX-Komponente untergeordnet sind

TFX stützt sich auf Beam Unterstützung für Verwaltung Python Pipeline Abhängigkeiten Python Abhängigkeiten zu behandeln. Derzeit gibt es zwei Möglichkeiten, dies zu verwalten:

  1. Bereitstellung von Python-Code und Abhängigkeiten als Quellpaket
  2. [Nur Dataflow] Verwenden eines Container-Image als Worker

Diese werden als nächstes besprochen.

Bereitstellung von Python-Code und Abhängigkeiten als Quellpaket

Dies wird für Benutzer empfohlen, die:

  1. Sind mit Python-Verpackung vertraut und
  2. Verwenden Sie nur Python-Quellcode (dh keine C-Module oder Shared Libraries).

Bitte folgen Sie einem der Pfade in Verwalten von Python Pipeline Abhängigkeiten dies mit einer der folgenden beam_pipeline_args zu bieten:

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

Hinweis: Bei allen oben genannten Fällen, stellen Sie sicher , dass die gleiche Version von tfx als Abhängigkeit aufgeführt ist.

[Nur Dataflow] Verwenden eines Container-Image für einen Worker

TFX 0.26.0 und oben hat experimentelle Unterstützung für die Verwendung von benutzerdefinierten Containern Bild für Datenfluß - Arbeiter.

Um dies zu verwenden, müssen Sie:

  • Bauen Sie ein Docker Bild , das sowohl hat tfx und den benutzerdefinierten Code Benutzer und Abhängigkeiten vorinstalliert.
    • Für Benutzer , die (1) Verwendung tfx>=0.26 und (2) verwenden Python 3.7 , um ihre Pipelines zu entwickeln, ist der einfachste Weg , dies zu tun ist , um die entsprechende Version von dem offiziellen Verlängerung tensorflow/tfx Bild:
# 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
  • Übertragen Sie das erstellte Image per Push in eine Container-Image-Registrierung, auf die das von Dataflow verwendete Projekt zugreifen kann.
    • Google Cloud - Benutzer können mit betrachten Cloud - Build - die obigen Schritte gut automatisiert.
  • Geben Sie folgende 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): Entfernen Sie use_runner_v2, sobald es Standard für Dataflow ist.

TODO (b / 179738639): Erstellen Sie Dokumentation , wie man Test Custom Container lokal nach https://issues.apache.org/jira/browse/BEAM-5440

Argumente für die Beam-Pipeline

Mehrere TFX-Komponenten verlassen sich für die verteilte Datenverarbeitung auf Beam. Sie sind mit konfiguriert beam_pipeline_args , die während der Erstellung während Pipeline spezifiziert ist:

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

0.30 TFX und oberhalb fügt eine Schnittstelle, with_beam_pipeline_args , für die Pipeline Ebene Strahl args pro Komponente erstreckt:

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