Apache Beam i TFX

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Apache Beam zapewnia ramy dla prowadzenia partii i strumieniowego przesyłania danych przetwarzania zadań, które działają na różnych silników wykonawczych. Kilka bibliotek TFX używa Beam do uruchamiania zadań, co zapewnia wysoki stopień skalowalności w klastrach obliczeniowych. Beam obejmuje obsługę różnych aparatów wykonawczych lub „uruchamiających”, w tym bezpośredniego programu uruchamiającego, który działa w jednym węźle obliczeniowym i jest bardzo przydatny do programowania, testowania lub małych wdrożeń. Beam zapewnia warstwę abstrakcji, która umożliwia uruchamianie TFX na dowolnym obsługiwanym runnerze bez modyfikacji kodu. TFX używa API Beam Pythona, więc jest ograniczony do programów uruchamiających, które są obsługiwane przez API Pythona.

Wdrożenie i skalowalność

Wraz ze wzrostem wymagań dotyczących obciążenia Beam może skalować się do bardzo dużych wdrożeń w dużych klastrach obliczeniowych. Jest to ograniczone tylko skalowalnością bazowego biegacza. Runnery w dużych wdrożeniach są zazwyczaj wdrażane w systemie orkiestracji kontenerów, takim jak Kubernetes lub Apache Mesos, w celu automatyzacji wdrażania, skalowania i zarządzania aplikacjami.

Zobacz Apache Beam dokumentacji Więcej informacji na temat Apache Beam.

Dla użytkowników Google Cloud, Dataflow jest zalecana biegacz, który stanowi platformę Serverless i efektywne kosztowo poprzez AutoScaling zasobów, dynamicznego równoważenia pracy, głębokiej integracji z innymi usługami Google Cloud, wbudowane zabezpieczenia i monitoringu.

Niestandardowy kod i zależności w Pythonie

Jedną z godnych uwagi złożoności używania Beam w potoku TFX jest obsługa niestandardowego kodu i/lub zależności wymaganych od dodatkowych modułów Pythona. Oto kilka przykładów, kiedy może to stanowić problem:

  • preprocessing_fn musi odnosić się do własnego modułu Pythona użytkownika
  • niestandardowy ekstraktor dla komponentu Evaluator
  • niestandardowe moduły, które są podklasyfikowane z komponentu TFX

TFX opiera się na wsparciu dla wiązki Zarządzanie Python Pipeline Zależności obsłużyć zależności Python. Obecnie istnieją dwa sposoby zarządzania tym:

  1. Dostarczanie kodu i zależności Pythona jako pakietu źródłowego
  2. [Tylko Dataflow] Używanie obrazu kontenera jako pracownika

Zostały one omówione dalej.

Dostarczanie kodu i zależności Pythona jako pakietu źródłowego

Jest to zalecane dla użytkowników, którzy:

  1. Znają pakowanie w Pythonie i
  2. Używaj tylko kodu źródłowego Pythona (tzn. żadnych modułów C ani bibliotek współdzielonych).

Należy wykonać jedną z dróg w Zarządzanie Python Pipeline Zależności zapewnić to przy użyciu jednej z następujących beam_pipeline_args:

  • --plik_konfiguracji
  • --dodatkowy_pakiet
  • --plik_wymagań

Wskazówka: W każdym z powyższych przypadków, upewnij się, że ta sama wersja tfx jest wymieniony jako zależność.

[Tylko Dataflow] Używanie obrazu kontenera dla pracownika

TFX 0.26.0 i powyżej ma eksperymentalną obsługę przy użyciu niestandardowego kontenera wizerunek pracowników przepływ danych.

Aby z tego skorzystać, musisz:

  • Budowanie wizerunku Docker który posiada zarówno tfx i wstępnie zainstalowany niestandardowy kod i zależnościami użytkowników.
    • Dla użytkowników, którzy (1) stosowanie tfx>=0.26 i (2) wykorzystuje Pythona 3.7 rozwijać swoje rurociągi, najprostszym sposobem na to jest rozszerzenie odpowiadającą wersję urzędnika tensorflow/tfx obrazu:
# 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
  • Przekaż utworzony obraz do rejestru obrazów kontenera, do którego dostęp ma projekt używany przez Dataflow.
    • Użytkownicy Google Cloud można rozważyć użycie Chmura Zbuduj który ładnie automatyzuje powyżej etapów.
  • Dostarczyć następujące 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): Usuń use_runner_v2 gdy jest to ustawienie domyślne dla Dataflow.

TODO (b / 179.738.639): Tworzenie dokumentacji jak testowym niestandardowego kontenera lokalnie po https://issues.apache.org/jira/browse/BEAM-5440

Argumenty dotyczące rurociągu wiązki

Kilka komponentów TFX polega na Beam do rozproszonego przetwarzania danych. Są one skonfigurowane z beam_pipeline_args , która jest określona w czasie podczas tworzenia rurociągu:

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

TFX 0,30 powyżej dodaje interfejs with_beam_pipeline_args dla powiększenia argumenty wiązki poziomu rurociąg za komponent:

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