Tạo đường dẫn TFX bằng cách sử dụng các mẫu với Beam orchestrator

Giới thiệu

Tài liệu này sẽ cung cấp hướng dẫn để tạo một TensorFlow Extended (TFX) đường ống sử dụng mẫu được cung cấp với gói TFX Python. Hầu hết các hướng dẫn có lệnh Linux shell, và tương ứng Jupyter tế bào đang Notebook mà gọi những lệnh sử dụng ! được cung cấp.

Bạn sẽ xây dựng một đường ống dẫn bằng Taxi Trips bộ dữ liệu phát hành bởi các thành phố Chicago. Chúng tôi đặc biệt khuyến khích bạn cố gắng xây dựng đường ống của riêng mình bằng cách sử dụng tập dữ liệu của bạn bằng cách sử dụng đường ống này làm đường cơ sở.

Chúng tôi sẽ xây dựng một đường ống dẫn sử dụng Apache chùm Orchestrator . Nếu bạn đang quan tâm đến việc sử dụng Kubeflow Orchestrator trên Google Cloud, vui lòng xem TFX trên đám mây AI vBulletin Đường ống dẫn .

Điều kiện tiên quyết

  • Linux / MacOS
  • Python> = 3.5.3

Bạn có thể nhận được tất cả điều kiện tiên quyết dễ dàng bằng cách chạy máy tính xách tay này trên Google Colab .

Bước 1. Thiết lập môi trường của bạn.

Trong suốt tài liệu này, chúng tôi sẽ trình bày các lệnh hai lần. Một lần dưới dạng lệnh shell sẵn sàng sao chép và dán, một lần dưới dạng ô sổ ghi chép jupyter. Nếu bạn đang sử dụng Colab, chỉ cần bỏ qua khối tập lệnh shell và thực thi các ô sổ ghi chép.

Bạn nên chuẩn bị một môi trường phát triển để xây dựng đường ống.

Cài đặt tfx gói python. Chúng tôi đề nghị sử dụng virtualenv trong môi trường địa phương. Bạn có thể sử dụng đoạn mã shell script sau để thiết lập môi trường của mình.

# 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

Nếu bạn đang sử dụng colab:

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

LỖI: some-package 0.some_version.1 có yêu cầu other-package! = 2.0., <3,> = 1.15, nhưng bạn sẽ có gói khác 2.0.0 không tương thích.

Xin vui lòng bỏ qua những lỗi này tại thời điểm này.

# 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

Hãy kiểm tra phiên bản của 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

Và, nó đã hoàn thành. Chúng tôi đã sẵn sàng để tạo một đường dẫn.

Bước 2. Sao chép mẫu được xác định trước vào thư mục dự án của bạn.

Trong bước này, chúng tôi sẽ tạo một thư mục dự án đường ống đang hoạt động và các tệp bằng cách sao chép các tệp bổ sung từ một mẫu được xác định trước.

Bạn có thể cung cấp cho đường ống của bạn một tên khác nhau bằng cách thay đổi PIPELINE_NAME dưới đây. Đây cũng sẽ trở thành tên của thư mục dự án nơi các tệp của bạn sẽ được đặt.

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 bao gồm taxi mẫu với gói TFX python. Nếu bạn đang có kế hoạch giải quyết một vấn đề dự đoán khôn ngoan, bao gồm phân loại và hồi quy, thì mẫu này có thể được sử dụng làm điểm khởi đầu.

Các tfx template copy CLI lệnh bản xác định trước các file template vào thư mục dự án của bạn.

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

Thay đổi bối cảnh thư mục làm việc trong sổ ghi chép này thành thư mục dự án.

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

Bước 3. Duyệt qua các tệp nguồn đã sao chép của bạn.

Mẫu TFX cung cấp các tệp khung cơ bản để xây dựng một đường dẫn, bao gồm mã nguồn Python, dữ liệu mẫu và Sổ tay Jupyter để phân tích đầu ra của đường dẫn. Các taxi mẫu sử dụng cùng một tập dữ liệu Chicago Taxi và mô hình ML như Airflow Tutorial .

Trong Google Colab, bạn có thể duyệt các tệp bằng cách nhấp vào biểu tượng thư mục ở bên trái. File nên được sao chép dưới directoy dự án, có tên là my_pipeline trong trường hợp này. Bạn có thể bấm vào tên thư mục để xem nội dung của thư mục và bấm đúp vào tên tệp để mở chúng.

Đây là phần giới thiệu ngắn gọn về từng tệp Python.

  • pipeline - Thư mục này chứa các định nghĩa của đường ống
    • configs.py - định nghĩa hằng số chung cho vận động viên đường ống
    • pipeline.py - định nghĩa các thành phần TFX và một đường ống dẫn
  • models - Thư mục này chứa các định nghĩa mô hình ML.
    • features.py , features_test.py - định nghĩa đặc trưng cho mô hình
    • preprocessing.py , preprocessing_test.py - định nghĩa tiền xử lý việc sử dụng tf::Transform
    • estimator - Thư mục này chứa một cụ Ước tính dựa trên mô hình.
      • constants.py - định nghĩa các hằng số của mô hình
      • model.py , model_test.py - định nghĩa mô hình DNN sử dụng TF ước lượng
    • keras - Thư mục này chứa một Keras dựa trên mô hình.
      • constants.py - định nghĩa các hằng số của mô hình
      • model.py , model_test.py - định nghĩa mô hình DNN sử dụng Keras
  • beam_dag_runner.py , kubeflow_dag_runner.py - xác định vận động viên cho mỗi động cơ dàn nhạc

Bạn có thể nhận thấy rằng có một số file với _test.py trong tên của họ. Đây là các bài kiểm tra đơn vị của đường ống và bạn nên thêm nhiều bài kiểm tra đơn vị hơn khi bạn triển khai đường ống của riêng mình. Bạn có thể chạy thử nghiệm đơn vị bằng cách cung cấp tên module của file thử nghiệm với -m cờ. Bạn thường có thể có được một tên mô-đun bằng cách xóa .py mở rộng và thay thế / với . . Ví dụ:

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')

Bước 4. Chạy đường dẫn TFX đầu tiên của bạn

Bạn có thể tạo một đường ống dẫn bằng pipeline create lệnh.

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

Sau đó, bạn có thể chạy các đường ống dẫn tạo sử dụng run create lệnh.

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.

Nếu thành công, bạn sẽ thấy Component CsvExampleGen is finished. Khi bạn sao chép mẫu, chỉ một thành phần, CsvExampleGen, được đưa vào đường dẫn.

Bước 5. Thêm các thành phần để xác thực dữ liệu.

Trong bước này, bạn sẽ thêm các thành phần để xác nhận dữ liệu bao gồm StatisticsGen , SchemaGen , và ExampleValidator . Nếu bạn đang quan tâm đến việc xác nhận dữ liệu, vui lòng xem Bắt đầu với Tensorflow Data Validation .

Chúng tôi sẽ thay đổi định nghĩa đường ống dẫn sao chép trong pipeline/pipeline.py . Nếu bạn đang làm việc trên môi trường cục bộ của mình, hãy sử dụng trình chỉnh sửa yêu thích của bạn để chỉnh sửa tệp. Nếu bạn đang làm việc trên Google Colab,

Nhấp vào biểu tượng thư mục ở bên trái để mở Files xem.

Nhấn my_pipeline để mở thư mục và nhấp vào pipeline thư mục để mở và nhấp đúp pipeline.py để mở tập tin.

Tìm và bỏ 3 dòng mà thêm StatisticsGen , SchemaGen , và ExampleValidator đến các đường ống dẫn. (Mẹo: tìm các nhận xét chứa TODO(step 5): ).

Thay đổi của bạn sẽ được lưu tự động sau vài giây. Hãy chắc chắn rằng * đánh dấu ở phía trước của pipeline.py biến mất trong tiêu đề tab. Không có nút lưu hoặc phím tắt cho trình chỉnh sửa tệp trong Colab. File python trong trình soạn thảo tập tin có thể được lưu vào môi trường runtime ngay cả trong playground chế độ.

Bây giờ bạn cần cập nhật đường ống hiện có với định nghĩa đường ống đã sửa đổi. Sử dụng các tfx pipeline update lệnh để cập nhật đường ống của bạn, tiếp theo là tfx run create lệnh để tạo ra một thi chạy mới của đường ống dẫn cập nhật của bạn.

# 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.

Bạn sẽ có thể xem nhật ký đầu ra từ các thành phần được thêm vào. Đường ống của chúng tôi tạo ra các đồ tạo tác ra trong tfx_pipeline_output/my_pipeline thư mục.

Bước 6. Thêm các thành phần để đào tạo.

Trong bước này, bạn sẽ thêm các thành phần đào tạo và mô hình xác nhận bao gồm Transform , Trainer , ResolverNode , Evaluator , và Pusher .

Mở pipeline/pipeline.py . Tìm và bỏ ghi chú 5 dòng mà thêm Transform , Trainer , ResolverNode , EvaluatorPusher đến các đường ống dẫn. (Mẹo: find TODO(step 6): )

Như bạn đã làm trước đây, bây giờ bạn cần cập nhật đường ống hiện có với định nghĩa đường ống đã sửa đổi. Các hướng dẫn cũng giống như Bước 5. Cập nhật các đường ống dẫn sử dụng tfx pipeline update , và tạo ra một cuộc chạy thi bằng 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.

Khi quá trình thực thi này kết thúc thành công, bây giờ bạn đã tạo và chạy đường dẫn TFX đầu tiên của mình bằng cách sử dụng Beam orchestrator!

Bước 7. (Tùy chọn) Hãy thử BigQueryExampleGen.

[BigQuery] là kho dữ liệu đám mây không máy chủ, có khả năng mở rộng cao và tiết kiệm chi phí. BigQuery có thể được sử dụng làm nguồn cho các ví dụ đào tạo trong TFX. Trong bước này, chúng tôi sẽ bổ sung thêm BigQueryExampleGen đến các đường ống dẫn.

Bạn cần một Google Cloud Platform tài khoản để sử dụng BigQuery. Vui lòng chuẩn bị một dự án GCP.

Đăng nhập vào dự án của bạn sử dụng thư viện auth colab hoặc gcloud tiện ích.

# 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')

Bạn nên chỉ định tên dự án GCP của mình để truy cập tài nguyên BigQuery bằng TFX. Set GOOGLE_CLOUD_PROJECT biến môi trường để đặt tên dự án của bạn.

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

Mở pipeline/pipeline.py . Nhận xét ra CsvExampleGen và bỏ ghi chú dòng mà tạo ra một thể hiện của BigQueryExampleGen . Bạn cũng cần phải bỏ ghi chú query tham số của create_pipeline chức năng.

Chúng ta cần phải xác định các dự án GCP để sử dụng cho BigQuery một lần nữa, và điều này được thực hiện bằng cách thiết lập --project trong beam_pipeline_args khi tạo một đường ống dẫn.

Mở pipeline/configs.py . Bỏ ghi chú định nghĩa của BIG_QUERY__WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGSBIG_QUERY_QUERY . Bạn nên thay thế id dự án và giá trị vùng trong tệp này bằng các giá trị chính xác cho dự án GCP của mình.

Mở beam_dag_runner.py . Bỏ ghi chú hai đối số, querybeam_pipeline_args , cho phương pháp create_pipeline ().

Giờ đây, quy trình đã sẵn sàng để sử dụng BigQuery làm nguồn mẫu. Cập nhật đường dẫn và tạo một đường chạy như chúng ta đã làm trong bước 5 và 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.

Tiếp theo là gì: Nhập dữ liệu của BẠN vào đường dẫn.

Chúng tôi đã tạo một đường dẫn cho một mô hình bằng cách sử dụng bộ dữ liệu Taxi Chicago. Bây giờ đã đến lúc đưa dữ liệu của bạn vào đường dẫn.

Dữ liệu của bạn có thể được lưu trữ ở bất kỳ đâu mà đường dẫn của bạn có thể truy cập, bao gồm GCS hoặc BigQuery. Bạn sẽ cần sửa đổi định nghĩa đường ống để truy cập dữ liệu của mình.

  1. Nếu dữ liệu của bạn được lưu trữ trong các tập tin, thay đổi DATA_PATH trong kubeflow_dag_runner.py hoặc beam_dag_runner.py và đặt nó vào vị trí của tập tin của bạn. Nếu dữ liệu của bạn được lưu trữ trong BigQuery, sửa đổi BIG_QUERY_QUERY trong pipeline/configs.py đến một cách chính xác truy vấn cho dữ liệu của bạn.
  2. Thêm tính năng trong models/features.py .
  3. Sửa đổi models/preprocessing.py để chuyển đổi dữ liệu đầu vào cho đào tạo .
  4. Sửa đổi models/keras/model.pymodels/keras/constants.py để mô tả mô hình ML của bạn .
    • Bạn cũng có thể sử dụng mô hình dựa trên công cụ ước tính. Thay đổi RUN_FN liên tục để models.estimator.model.run_fn trong pipeline/configs.py .

Xin vui lòng xem Trainer hướng dẫn thành phần cho ra đời hơn.