Buat saluran TFX menggunakan templat dengan orkestra Beam

pengantar

Dokumen ini akan memberikan petunjuk untuk membuat TensorFlow Extended (TFX) pipeline menggunakan template yang disediakan dengan paket TFX Python. Sebagian besar instruksi yang perintah Linux shell, dan sesuai Jupyter sel kode Notebook yang memanggil perintah yang menggunakan ! disediakan.

Anda akan membangun pipa dengan menggunakan taksi Trips dataset yang dirilis oleh City of Chicago. Kami sangat menganjurkan Anda untuk mencoba membangun saluran Anda sendiri menggunakan kumpulan data Anda dengan memanfaatkan saluran ini sebagai garis dasar.

Kami akan membangun pipa menggunakan Apache Beam Orchestrator . Jika Anda tertarik menggunakan Kubeflow orkestra di Google Cloud, silakan lihat TFX pada Cloud AI Landasan Pipa tutorial .

Prasyarat

  • Linux / MacOS
  • Python >= 3.5.3

Anda bisa mendapatkan semua prasyarat mudah dengan menjalankan notebook ini di Google CoLab .

Langkah 1. Siapkan lingkungan Anda.

Sepanjang dokumen ini, kami akan menyajikan perintah dua kali. Sekali sebagai perintah shell copy-and-paste-ready, sekali sebagai sel notebook jupyter. Jika Anda menggunakan Colab, lewati saja blok skrip shell dan jalankan sel notebook.

Anda harus menyiapkan lingkungan pengembangan untuk membangun saluran.

Instal tfx paket python. Kami merekomendasikan penggunaan virtualenv di lingkungan setempat. Anda dapat menggunakan cuplikan skrip shell berikut untuk menyiapkan lingkungan Anda.

# Create a virtualenv for tfx.
virtualenv -p python3 venv
source venv/bin/activate
# Install python packages.
python -m pip install -q --user --upgrade tfx==0.23.0

Jika Anda menggunakan colab:

import sys
!{sys.executable} -m pip install -q --user --upgrade -q tfx==0.23.0

KESALAHAN: beberapa-paket 0.some_version.1 memiliki persyaratan paket lain!=2.0.,<3,>=1.15, tetapi Anda akan memiliki paket lain 2.0.0 yang tidak kompatibel.

Harap abaikan kesalahan ini saat ini.

# Set `PATH` to include user python binary directory.
HOME=%env HOME
PATH=%env PATH
%env PATH={PATH}:{HOME}/.local/bin
env: PATH=/tmpfs/src/tf_docs_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin:/opt/android-studio/current/bin:/usr/local/go/bin:/usr/local/go/packages/bin:/opt/kubernetes/client/bin/:/home/kbuilder/.local/bin:/home/kbuilder/.local/bin

Mari kita periksa versi TFX.

python -c "import tfx; print('TFX version: {}'.format(tfx.__version__))"
python3 -c "import tfx; print('TFX version: {}'.format(tfx.__version__))"
TFX version: 0.23.0

Dan, sudah selesai. Kami siap untuk membuat pipa.

Langkah 2. Salin template yang telah ditentukan ke direktori proyek Anda.

Pada langkah ini, kita akan membuat direktori dan file proyek pipeline yang berfungsi dengan menyalin file tambahan dari template yang telah ditentukan.

Anda dapat memberikan pipa Anda nama yang berbeda dengan mengubah PIPELINE_NAME bawah. Ini juga akan menjadi nama direktori proyek tempat file Anda akan diletakkan.

export PIPELINE_NAME="my_pipeline"
export PROJECT_DIR=~/tfx/${PIPELINE_NAME}
PIPELINE_NAME="my_pipeline"
import os
# Create a project directory under Colab content directory.
PROJECT_DIR=os.path.join(os.sep,"content",PIPELINE_NAME)

TFX termasuk taxi template dengan paket TFX python. Jika Anda berencana untuk memecahkan masalah prediksi poin-bijaksana, termasuk klasifikasi dan regresi, template ini dapat digunakan sebagai titik awal.

The tfx template copy perintah CLI salinan ditentukan sebelumnya file template ke dalam direktori proyek Anda.

tfx template copy \
   --pipeline_name="${PIPELINE_NAME}" \
   --destination_path="${PROJECT_DIR}" \
   --model=taxi
!tfx template copy \
  --pipeline_name={PIPELINE_NAME} \
  --destination_path={PROJECT_DIR} \
  --model=taxi
2020-09-07 09:09:40.131982: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Copying taxi pipeline template
Traceback (most recent call last):
  File "/home/kbuilder/.local/bin/tfx", line 8, in <module>
    sys.exit(cli_group())
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/tfx/tools/cli/commands/template.py", line 73, in copy
    template_handler.copy_template(ctx.flags_dict)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/tfx/tools/cli/handler/template_handler.py", line 168, in copy_template
    replace_dict)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/tfx/tools/cli/handler/template_handler.py", line 107, in _copy_and_replace_placeholder_dir
    tf.io.gfile.makedirs(dst)
  File "/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py", line 480, in recursive_create_dir_v2
    _pywrap_file_io.RecursivelyCreateDir(compat.as_bytes(path))
tensorflow.python.framework.errors_impl.PermissionDeniedError: /content; Permission denied

Ubah konteks direktori kerja di buku catatan ini ke direktori proyek.

cd ${PROJECT_DIR}
%cd {PROJECT_DIR}
[Errno 2] No such file or directory: '/content/my_pipeline'
/tmpfs/src/temp/docs/tutorials/tfx

Langkah 3. Jelajahi file sumber yang Anda salin.

Template TFX menyediakan file scaffold dasar untuk membangun pipeline, termasuk kode sumber Python, data sampel, dan Jupyter Notebooks untuk menganalisis output pipeline. The taxi Template menggunakan dataset Chicago Taxi yang sama dan model ML sebagai aliran udara Tutorial .

Di Google Colab, Anda dapat menjelajahi file dengan mengeklik ikon folder di sebelah kiri. File harus disalin di bawah directoy proyek, yang namanya my_pipeline dalam kasus ini. Anda dapat mengklik nama direktori untuk melihat konten direktori, dan mengklik dua kali nama file untuk membukanya.

Berikut adalah pengantar singkat untuk masing-masing file Python.

  • pipeline - Direktori ini berisi definisi pipa
    • configs.py - mendefinisikan konstanta umum untuk pelari pipa
    • pipeline.py - mendefinisikan komponen TFX dan pipa
  • models - Direktori ini berisi ML definisi Model.
    • features.py , features_test.py - mendefinisikan fitur untuk model
    • preprocessing.py , preprocessing_test.py - mendefinisikan preprocessing pekerjaan menggunakan tf::Transform
    • estimator - Direktori ini berisi model berbasis Pengukur.
      • constants.py - mendefinisikan konstanta model
      • model.py , model_test.py - mendefinisikan Model DNN menggunakan TF estimator
    • keras - Direktori ini berisi model yang didasarkan Keras.
      • constants.py - mendefinisikan konstanta model
      • model.py , model_test.py - mendefinisikan Model DNN menggunakan Keras
  • beam_dag_runner.py , kubeflow_dag_runner.py - mendefinisikan pelari untuk setiap mesin orkestrasi

Anda mungkin melihat bahwa ada beberapa file dengan _test.py di nama mereka. Ini adalah pengujian unit dari pipeline dan disarankan untuk menambahkan lebih banyak pengujian unit saat Anda mengimplementasikan pipeline Anda sendiri. Anda dapat menjalankan unit test dengan menyediakan nama modul file uji dengan -m bendera. Anda biasanya bisa mendapatkan nama modul dengan menghapus .py ekstensi dan mengganti / dengan . . Sebagai contoh:

python -m models.features_test
{sys.executable} -m models.features_test
{sys.executable} -m models.keras.model_test
/tmpfs/src/tf_docs_env/bin/python: Error while finding module specification for 'models.features_test' (ModuleNotFoundError: No module named 'models')
/tmpfs/src/tf_docs_env/bin/python: Error while finding module specification for 'models.keras.model_test' (ModuleNotFoundError: No module named 'models')

Langkah 4. Jalankan pipa TFX pertama Anda

Anda dapat membuat pipa menggunakan pipeline create perintah.

tfx pipeline create --engine=beam --pipeline_path=beam_dag_runner.py
tfx pipeline create --engine=beam --pipeline_path=beam_dag_runner.py
2020-09-07 09:09:45.612839: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating pipeline
Invalid pipeline path: beam_dag_runner.py

Kemudian, Anda dapat menjalankan pipa dibuat menggunakan run create perintah.

tfx run create --engine=beam --pipeline_name="${PIPELINE_NAME}"
tfx run create --engine=beam --pipeline_name={PIPELINE_NAME}
2020-09-07 09:09:50.725339: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

Jika berhasil, Anda akan melihat Component CsvExampleGen is finished. Saat Anda menyalin template, hanya satu komponen, CsvExampleGen, yang disertakan dalam pipeline.

Langkah 5. Tambahkan komponen untuk validasi data.

Pada langkah ini, Anda akan menambahkan komponen untuk validasi data termasuk StatisticsGen , SchemaGen , dan ExampleValidator . Jika Anda tertarik dalam validasi data, lihat Memulai Tensorflow Validasi data .

Kami akan memodifikasi definisi pipa disalin di pipeline/pipeline.py . Jika Anda bekerja di lingkungan lokal Anda, gunakan editor favorit Anda untuk mengedit file. Jika Anda bekerja di Google Colab,

Klik icon folder di sebelah kiri untuk membuka Files pandangan.

Klik my_pipeline untuk membuka direktori dan klik pipeline direktori-klik dua kali terbuka dan pipeline.py untuk membuka file.

Cari dan tanda komentar pada 3 baris yang menambah StatisticsGen , SchemaGen , dan ExampleValidator untuk pipa. (Tip: menemukan komentar yang mengandung TODO(step 5): ).

Perubahan Anda akan disimpan secara otomatis dalam beberapa detik. Pastikan bahwa * tanda di depan pipeline.py menghilang dalam judul tab. Tidak ada tombol simpan atau pintasan untuk editor file di Colab. File python editor file dapat disimpan ke lingkungan runtime bahkan dalam playground modus.

Anda sekarang perlu memperbarui pipa yang ada dengan definisi pipa yang dimodifikasi. Gunakan tfx pipeline update perintah untuk memperbarui pipa Anda, diikuti oleh tfx run create perintah untuk membuat eksekusi run baru pipa Anda diperbarui.

# Update the pipeline
tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
# You can run the pipeline the same way.
tfx run create --engine beam --pipeline_name "${PIPELINE_NAME}"
# Update the pipeline
tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
# You can run the pipeline the same way.
tfx run create --engine beam --pipeline_name {PIPELINE_NAME}
2020-09-07 09:09:55.915484: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Updating pipeline
Invalid pipeline path: beam_dag_runner.py
2020-09-07 09:10:01.148250: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

Anda seharusnya dapat melihat log keluaran dari komponen yang ditambahkan. Pipa kami menciptakan artefak output dalam tfx_pipeline_output/my_pipeline direktori.

Langkah 6. Tambahkan komponen untuk pelatihan.

Pada langkah ini, Anda akan menambahkan komponen untuk pelatihan dan validasi model termasuk Transform , Trainer , ResolverNode , Evaluator , dan Pusher .

Terbuka pipeline/pipeline.py . Cari dan uncomment 5 baris yang menambah Transform , Trainer , ResolverNode , Evaluator dan Pusher untuk pipa. (Tip: find TODO(step 6): )

Seperti yang Anda lakukan sebelumnya, Anda sekarang perlu memperbarui pipa yang ada dengan definisi pipa yang dimodifikasi. Instruksi yang sama dengan Langkah 5. Update pipa menggunakan tfx pipeline update , dan membuat eksekusi run menggunakan tfx run create .

tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
tfx run create --engine beam --pipeline_name "${PIPELINE_NAME}"
tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
tfx run create --engine beam --pipeline_name {PIPELINE_NAME}
2020-09-07 09:10:06.281753: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Updating pipeline
Invalid pipeline path: beam_dag_runner.py
2020-09-07 09:10:11.333668: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

Ketika eksekusi ini selesai dengan sukses, Anda sekarang telah membuat dan menjalankan pipa TFX pertama Anda menggunakan orkestra Beam!

Langkah 7. (Opsional) Coba BigQueryExampleGen.

[BigQuery] adalah gudang data cloud tanpa server, sangat skalabel, dan hemat biaya. BigQuery dapat digunakan sebagai sumber untuk contoh pelatihan di TFX. Pada langkah ini, kita akan menambahkan BigQueryExampleGen ke pipa.

Anda memerlukan Google Cloud Platform akun untuk menggunakan BigQuery. Harap siapkan project GCP.

Login untuk proyek Anda menggunakan perpustakaan auth colab atau gcloud utilitas.

# You need `gcloud` tool to login in local shell environment.
gcloud auth login
if 'google.colab' in sys.modules:
  from google.colab import auth
  auth.authenticate_user()
  print('Authenticated')

Anda harus menentukan nama project GCP untuk mengakses resource BigQuery menggunakan TFX. Set GOOGLE_CLOUD_PROJECT variabel lingkungan untuk nama proyek Anda.

export GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_NAME_HERE
# Set your project name below.
# WARNING! ENTER your project name before running this cell.
%env GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_NAME_HERE
env: GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_NAME_HERE

Terbuka pipeline/pipeline.py . Komentar keluar CsvExampleGen dan tanda komentar baris yang membuat sebuah instance dari BigQueryExampleGen . Anda juga perlu tanda komentar query argumen dari create_pipeline fungsi.

Kita perlu menentukan proyek GCP digunakan untuk BigQuery lagi, dan ini dilakukan dengan menetapkan --project di beam_pipeline_args saat membuat saluran pipa.

Terbuka pipeline/configs.py . Tanda komentar definisi BIG_QUERY__WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGS dan BIG_QUERY_QUERY . Anda harus mengganti id proyek dan nilai region dalam file ini dengan nilai yang benar untuk proyek GCP Anda.

Terbuka beam_dag_runner.py . Tanda komentar dua argumen, query dan beam_pipeline_args , untuk metode create_pipeline ().

Sekarang pipeline siap menggunakan BigQuery sebagai sumber contoh. Perbarui pipeline dan buat proses seperti yang kita lakukan pada langkah 5 dan 6.

tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
tfx run create --engine beam --pipeline_name {PIPELINE_NAME}
2020-09-07 09:10:16.406635: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Updating pipeline
Invalid pipeline path: beam_dag_runner.py
2020-09-07 09:10:21.439101: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

Berikutnya: Menyerap data ANDA ke pipeline.

Kami membuat pipeline untuk model menggunakan dataset Chicago Taxi. Sekarang saatnya untuk memasukkan data Anda ke dalam pipeline.

Data Anda dapat disimpan di mana saja yang dapat diakses oleh pipeline Anda, termasuk GCS, atau BigQuery. Anda perlu mengubah definisi saluran untuk mengakses data Anda.

  1. Jika data Anda disimpan dalam file, memodifikasi DATA_PATH di kubeflow_dag_runner.py atau beam_dag_runner.py dan set ke lokasi file Anda. Jika data Anda disimpan di BigQuery, memodifikasi BIG_QUERY_QUERY di pipeline/configs.py untuk benar permintaan untuk data Anda.
  2. Menambahkan fitur di models/features.py .
  3. Memodifikasi models/preprocessing.py untuk mentransformasi input data untuk pelatihan .
  4. Memodifikasi models/keras/model.py dan models/keras/constants.py untuk menggambarkan model ML Anda .
    • Anda juga dapat menggunakan model berbasis estimator. Perubahan RUN_FN konstan untuk models.estimator.model.run_fn di pipeline/configs.py .

Silakan lihat Trainer panduan komponen untuk lebih memperkenalkan.