Apache Beam dan TFX

Apache Beam menyediakan kerangka kerja untuk menjalankan batch dan mengalir pengolahan data pekerjaan yang berjalan di berbagai mesin eksekusi. Beberapa library TFX menggunakan Beam untuk menjalankan tugas, yang memungkinkan skalabilitas tingkat tinggi di seluruh cluster komputasi. Beam mencakup dukungan untuk berbagai mesin eksekusi atau "runner", termasuk runner langsung yang berjalan pada satu node komputasi dan sangat berguna untuk pengembangan, pengujian, atau penerapan kecil. Beam menyediakan lapisan abstraksi yang memungkinkan TFX untuk berjalan pada setiap runner yang didukung tanpa modifikasi kode. TFX menggunakan Beam Python API, sehingga terbatas pada runner yang didukung oleh Python API.

Penerapan dan Skalabilitas

Karena persyaratan beban kerja meningkat, Beam dapat menskalakan ke penerapan yang sangat besar di seluruh cluster komputasi besar. Ini hanya dibatasi oleh skalabilitas runner yang mendasarinya. Runner dalam penerapan besar biasanya akan di-deploy ke sistem orkestrasi container seperti Kubernetes atau Apache Mesos untuk mengotomatiskan penerapan, penskalaan, dan manajemen aplikasi.

Lihat Apache Beam dokumentasi untuk informasi lebih lanjut tentang Apache Beam.

Untuk pengguna Google Cloud, Dataflow adalah pelari yang direkomendasikan, yang menyediakan serverless dan hemat biaya platform yang melalui autoscaling sumber daya, rebalancing kerja yang dinamis, integrasi mendalam dengan layanan lain Google Cloud, built-in keamanan, dan monitoring.

Kode dan Ketergantungan Python Kustom

Salah satu kerumitan penting dalam menggunakan Beam dalam saluran TFX adalah menangani kode khusus dan/atau dependensi yang diperlukan dari modul Python tambahan. Berikut adalah beberapa contoh saat ini mungkin menjadi masalah:

  • preprocessing_fn perlu merujuk ke modul Python milik pengguna
  • ekstraktor khusus untuk komponen Evaluator
  • modul khusus yang merupakan sub-kelas dari komponen TFX

TFX bergantung pada dukungan Beam untuk Mengelola Python Pipeline Dependensi untuk menangani Python dependensi. Saat ini ada dua cara untuk mengelola ini:

  1. Menyediakan Kode Python dan Dependensi sebagai Paket Sumber
  2. [Hanya aliran data] Menggunakan Gambar Kontainer sebagai Pekerja

Ini dibahas selanjutnya.

Menyediakan Kode Python dan Dependensi sebagai Paket Sumber

Ini direkomendasikan untuk pengguna yang:

  1. Familiar dengan kemasan Python dan
  2. Hanya gunakan kode sumber Python (yaitu, tidak ada modul C atau pustaka bersama).

Silakan ikuti salah satu jalan di Mengelola Python Pipeline Dependensi untuk memberikan ini menggunakan salah satu beam_pipeline_args berikut:

  • --setup_file
  • --ekstra_paket
  • --requirements_file

Pemberitahuan: Dalam setiap kasus di atas, pastikan bahwa versi yang sama dari tfx terdaftar sebagai dependensi.

[Dataflow saja] Menggunakan Gambar Kontainer untuk Pekerja

TFX 0.26.0 dan di atas memiliki dukungan eksperimental untuk menggunakan gambar wadah kustom untuk pekerja Dataflow.

Untuk menggunakan ini, Anda harus:

  • Membangun citra Docker yang memiliki baik tfx dan kode dan dependensi kebiasaan pengguna pra-instal.
    • Bagi pengguna yang (1) penggunaan tfx>=0.26 dan (2) menggunakan python 3.7 untuk mengembangkan jaringan pipa mereka, cara termudah untuk melakukannya adalah memperluas versi yang sesuai dari pejabat tensorflow/tfx image:
# 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
  • Dorong gambar yang dibuat ke registri gambar penampung yang dapat diakses oleh proyek yang digunakan oleh Dataflow.
    • Pengguna Google Cloud dapat mempertimbangkan menggunakan Cloud Build yang baik mengotomatisasi langkah di atas.
  • Menyediakan berikut 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): Hapus use_runner_v2 setelah default untuk Dataflow.

TODO (b / 179.738.639): Buat dokumentasi untuk bagaimana tes kontainer kustom lokal setelah https://issues.apache.org/jira/browse/BEAM-5440

Argumen Beam Pipeline

Beberapa komponen TFX mengandalkan Beam untuk pemrosesan data terdistribusi. Mereka dikonfigurasi dengan beam_pipeline_args , yang ditentukan selama selama pembuatan pipa:

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

TFX 0,30 dan di atas menambahkan sebuah antarmuka, with_beam_pipeline_args , untuk memperluas args balok tingkat pipa per komponen:

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