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:
- Dostarczanie kodu i zależności Pythona jako pakietu źródłowego
- [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:
- Znają pakowanie w Pythonie i
- 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ędnikatensorflow/tfx
obrazu:
- Dla użytkowników, którzy (1) stosowanie
# 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([...])