Apache Beam dan TFX

Apache Beam menyediakan kerangka kerja untuk menjalankan tugas pemrosesan data batch dan streaming yang dijalankan pada berbagai mesin eksekusi. Beberapa perpustakaan TFX menggunakan Beam untuk menjalankan tugas, yang memungkinkan skalabilitas tingkat tinggi di seluruh kluster komputasi. Beam menyertakan dukungan untuk berbagai mesin eksekusi atau "runner", termasuk runner langsung yang berjalan pada node komputasi tunggal dan sangat berguna untuk pengembangan, pengujian, atau penerapan kecil. Beam menyediakan lapisan abstraksi yang memungkinkan TFX berjalan pada runner mana pun yang didukung tanpa modifikasi kode. TFX menggunakan Beam Python API, sehingga terbatas pada runner yang didukung oleh Python API.

Penerapan dan Skalabilitas

Seiring meningkatnya kebutuhan beban kerja, Beam dapat menskalakan penerapan yang sangat besar di seluruh kluster komputasi besar. Hal ini hanya dibatasi oleh skalabilitas runner yang mendasarinya. Pelari dalam penerapan besar biasanya akan diterapkan ke sistem orkestrasi container seperti Kubernetes atau Apache Mesos untuk mengotomatisasi penerapan, penskalaan, dan manajemen aplikasi.

Lihat dokumentasi Apache Beam untuk informasi selengkapnya tentang Apache Beam.

Bagi pengguna Google Cloud, Dataflow adalah pilihan yang direkomendasikan karena menyediakan platform tanpa server dan hemat biaya melalui penskalaan sumber daya secara otomatis, penyeimbangan ulang pekerjaan yang dinamis, integrasi mendalam dengan layanan Google Cloud lainnya, keamanan bawaan, dan pemantauan.

Kode dan Dependensi Python Kustom

Salah satu kompleksitas penting dalam penggunaan Beam dalam pipeline TFX adalah menangani kode khusus dan/atau dependensi yang diperlukan dari modul Python tambahan. Berikut adalah beberapa contoh kapan hal ini mungkin menjadi masalah:

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

TFX mengandalkan dukungan Beam untuk Mengelola Ketergantungan Pipa Python untuk menangani ketergantungan Python. Saat ini ada dua cara untuk mengelolanya:

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

Hal ini akan dibahas selanjutnya.

Menyediakan Kode Python dan Dependensi sebagai Paket Sumber

Ini direkomendasikan bagi pengguna yang:

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

Silakan ikuti salah satu jalur dalam Mengelola Ketergantungan Pipa Python untuk menyediakan ini menggunakan salah satu dari beam_pipeline_args berikut:

  • --setup_file
  • --paket_ekstra
  • --persyaratan_file

Pemberitahuan: Dalam kasus apa pun di atas, pastikan versi tfx yang sama terdaftar sebagai ketergantungan.

[Hanya aliran data] Menggunakan Gambar Kontainer untuk Pekerja

TFX 0.26.0 dan yang lebih baru memiliki dukungan eksperimental untuk menggunakan gambar kontainer khusus untuk pekerja Dataflow.

Untuk menggunakan ini, Anda harus:

  • Bangun image Docker yang sudah menginstal tfx dan kode kustom serta dependensi pengguna.
    • Untuk pengguna yang (1) menggunakan tfx>=0.26 dan (2) menggunakan python 3.7 untuk mengembangkan pipeline mereka, cara termudah untuk melakukannya adalah dengan memperluas versi gambar tensorflow/tfx resmi yang sesuai:
# 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 kontainer yang dapat diakses oleh proyek yang digunakan oleh Dataflow.
    • Pengguna Google Cloud dapat mempertimbangkan untuk menggunakan Cloud Build yang mengotomatiskan langkah-langkah di atas dengan baik.
  • Berikan beam_pipeline_args berikut :
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 menjadi default untuk Dataflow.

TODO(b/179738639): Buat dokumentasi tentang cara menguji wadah khusus secara lokal setelah https://issues.apache.org/jira/browse/BEAM-5440

Argumen Pipa Balok

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

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

TFX 0.30 dan yang lebih baru menambahkan antarmuka, with_beam_pipeline_args , untuk memperluas argumen beam level pipeline per komponen:

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