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

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. Nhiều hướng dẫn là lệnh shell Linux, sẽ chạy trên phiên bản Máy tính xách tay nền tảng AI. Tương ứng với các tế bào đang Notebook Jupyter 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 thử xây dựng đường dẫn 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 dẫn này làm đường cơ sở.

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

Hệ thống đường ống nền tảng AI sẽ chuẩn bị một môi trường phát triển để xây dựng đường ống và một cụm đường ống Kubeflow để chạy đường ống mới được xây dựng.

Cài đặt tfx gói python với kfp yêu cầu thêm.

import sys
# Use the latest version of pip.
!pip install --upgrade pip
# Install tfx and kfp Python packages.
!pip install --upgrade "tfx[kfp]<2"

Hãy cùng kiểm tra các phiên bản của TFX.

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

Trong AI vBulletin Đường ống, TFX đang chạy trong một môi trường Kubernetes tổ chức sử dụng Kubeflow Đường ống .

Hãy đặt một số biến môi trường để sử dụng Kubeflow Pipelines.

Đầu tiên, lấy ID dự án GCP của bạn.

# Read GCP project id from env.
shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
GOOGLE_CLOUD_PROJECT=shell_output[0]
%env GOOGLE_CLOUD_PROJECT={GOOGLE_CLOUD_PROJECT}
print("GCP project ID:" + GOOGLE_CLOUD_PROJECT)
env: GOOGLE_CLOUD_PROJECT=tf-benchmark-dashboard
GCP project ID:tf-benchmark-dashboard

Chúng tôi cũng cần truy cập cụm KFP của bạn. Bạn có thể truy cập nó trong Google Cloud Console của mình trong menu "Nền tảng AI> Đường ống". Bạn có thể tìm thấy "điểm cuối" của cụm KFP từ URL của trang tổng quan Pipelines hoặc bạn có thể lấy nó từ URL của trang Bắt đầu nơi bạn đã khởi chạy sổ ghi chép này. Hãy tạo một ENDPOINT biến môi trường và đặt nó vào cluster endpoint KFP. ENDPOINT chỉ nên chứa phần tên máy chủ của URL. Ví dụ, nếu URL của bảng điều khiển KFP là <a href="https://1e9deb537390ca22-dot-asia-east1.pipelines.googleusercontent.com/#/start">https://1e9deb537390ca22-dot-asia-east1.pipelines.googleusercontent.com/#/start</a> , giá trị Endpoint trở thành 1e9deb537390ca22-dot-asia-east1.pipelines.googleusercontent.com .

# This refers to the KFP cluster endpoint
ENDPOINT='' # Enter your ENDPOINT here.
if not ENDPOINT:
    from absl import logging
    logging.error('Set your ENDPOINT in this cell.')
ERROR:absl:Set your ENDPOINT in this cell.

Đặt tên hình ảnh như tfx-pipeline thuộc Dự án GCP hiện hành.

# Docker image name for the pipeline image.
CUSTOM_TFX_IMAGE='gcr.io/' + GOOGLE_CLOUD_PROJECT + '/tfx-pipeline'

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.

PIPELINE_NAME="my_pipeline"
import os
PROJECT_DIR=os.path.join(os.path.expanduser("~"),"imported",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
CLI
Copying taxi pipeline template
kubeflow_runner.py -> /home/kbuilder/imported/my_pipeline/kubeflow_runner.py
kubeflow_v2_dag_runner.py -> /home/kbuilder/imported/my_pipeline/kubeflow_v2_dag_runner.py
features_test.py -> /home/kbuilder/imported/my_pipeline/models/features_test.py
model_test.py -> /home/kbuilder/imported/my_pipeline/models/estimator/model_test.py
constants.py -> /home/kbuilder/imported/my_pipeline/models/estimator/constants.py
model.py -> /home/kbuilder/imported/my_pipeline/models/estimator/model.py
__init__.py -> /home/kbuilder/imported/my_pipeline/models/estimator/__init__.py
model_test.py -> /home/kbuilder/imported/my_pipeline/models/keras/model_test.py
constants.py -> /home/kbuilder/imported/my_pipeline/models/keras/constants.py
model.py -> /home/kbuilder/imported/my_pipeline/models/keras/model.py
__init__.py -> /home/kbuilder/imported/my_pipeline/models/keras/__init__.py
preprocessing_test.py -> /home/kbuilder/imported/my_pipeline/models/preprocessing_test.py
preprocessing.py -> /home/kbuilder/imported/my_pipeline/models/preprocessing.py
__init__.py -> /home/kbuilder/imported/my_pipeline/models/__init__.py
features.py -> /home/kbuilder/imported/my_pipeline/models/features.py
pipeline.py -> /home/kbuilder/imported/my_pipeline/pipeline/pipeline.py
configs.py -> /home/kbuilder/imported/my_pipeline/pipeline/configs.py
__init__.py -> /home/kbuilder/imported/my_pipeline/pipeline/__init__.py
local_runner.py -> /home/kbuilder/imported/my_pipeline/local_runner.py
model_analysis.ipynb -> /home/kbuilder/imported/my_pipeline/model_analysis.ipynb
__init__.py -> /home/kbuilder/imported/my_pipeline/__init__.py
data_validation.ipynb -> /home/kbuilder/imported/my_pipeline/data_validation.ipynb
.gitignore -> /home/kbuilder/imported/my_pipeline/.gitignore
Traceback (most recent call last):
  File "/tmpfs/src/tf_docs_env/bin/tfx", line 8, in <module>
    sys.exit(cli_group())
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/tools/cli/commands/template.py", line 73, in copy
    template_handler.copy_template(ctx.flags_dict)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/tools/cli/handler/template_handler.py", line 185, in copy_template
    fileio.copy(src_path, dst_path)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/dsl/io/fileio.py", line 51, in copy
    src_fs.copy(src, dst, overwrite=overwrite)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/dsl/io/plugins/tensorflow_gfile.py", line 48, in copy
    tf.io.gfile.copy(src, dst, overwrite=overwrite)
  File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/lib/io/file_io.py", line 516, in copy_v2
    compat.path_to_bytes(src), compat.path_to_bytes(dst), overwrite)
tensorflow.python.framework.errors_impl.AlreadyExistsError: file already exists

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}
/home/kbuilder/imported/my_pipeline

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 .

Đâ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
  • local_runner.py , kubeflow_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ụ:

{sys.executable} -m models.features_test
{sys.executable} -m models.keras.model_test
Running tests under Python 3.7.5: /tmpfs/src/tf_docs_env/bin/python
[ RUN      ] FeaturesTest.testNumberOfBucketFeatureBucketCount
INFO:tensorflow:time(__main__.FeaturesTest.testNumberOfBucketFeatureBucketCount): 0.0s
I1204 11:33:54.064224 139808961349440 test_util.py:2076] time(__main__.FeaturesTest.testNumberOfBucketFeatureBucketCount): 0.0s
[       OK ] FeaturesTest.testNumberOfBucketFeatureBucketCount
[ RUN      ] FeaturesTest.testTransformedNames
INFO:tensorflow:time(__main__.FeaturesTest.testTransformedNames): 0.0s
I1204 11:33:54.064666 139808961349440 test_util.py:2076] time(__main__.FeaturesTest.testTransformedNames): 0.0s
[       OK ] FeaturesTest.testTransformedNames
[ RUN      ] FeaturesTest.test_session
[  SKIPPED ] FeaturesTest.test_session
----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK (skipped=1)
Running tests under Python 3.7.5: /tmpfs/src/tf_docs_env/bin/python
[ RUN      ] ModelTest.testBuildKerasModel
2021-12-04 11:33:57.507456: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcusolver.so.10'; dlerror: libcusolver.so.10: cannot open shared object file: No such file or directory
2021-12-04 11:33:57.508566: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1757] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...
I1204 11:33:57.581331 139740839778112 layer_utils.py:191] Model: "model"
I1204 11:33:57.581501 139740839778112 layer_utils.py:192] __________________________________________________________________________________________________
I1204 11:33:57.581558 139740839778112 layer_utils.py:189] Layer (type)                    Output Shape         Param #     Connected to                     
I1204 11:33:57.581596 139740839778112 layer_utils.py:194] ==================================================================================================
I1204 11:33:57.581741 139740839778112 layer_utils.py:189] pickup_latitude_xf (InputLayer) [(None,)]            0                                            
I1204 11:33:57.581793 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.581883 139740839778112 layer_utils.py:189] trip_miles_xf (InputLayer)      [(None,)]            0                                            
I1204 11:33:57.581926 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.582010 139740839778112 layer_utils.py:189] trip_start_hour_xf (InputLayer) [(None,)]            0                                            
I1204 11:33:57.582052 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.582189 139740839778112 layer_utils.py:189] dense_features (DenseFeatures)  (None, 1)            0           pickup_latitude_xf[0][0]         
I1204 11:33:57.582241 139740839778112 layer_utils.py:189]                                                                  trip_miles_xf[0][0]              
I1204 11:33:57.582280 139740839778112 layer_utils.py:189]                                                                  trip_start_hour_xf[0][0]         
I1204 11:33:57.582315 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.582462 139740839778112 layer_utils.py:189] dense (Dense)                   (None, 1)            2           dense_features[0][0]             
I1204 11:33:57.582518 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.582629 139740839778112 layer_utils.py:189] dense_1 (Dense)                 (None, 1)            2           dense[0][0]                      
I1204 11:33:57.582674 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.582824 139740839778112 layer_utils.py:189] dense_features_1 (DenseFeatures (None, 34)           0           pickup_latitude_xf[0][0]         
I1204 11:33:57.582879 139740839778112 layer_utils.py:189]                                                                  trip_miles_xf[0][0]              
I1204 11:33:57.582921 139740839778112 layer_utils.py:189]                                                                  trip_start_hour_xf[0][0]         
I1204 11:33:57.582957 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.583053 139740839778112 layer_utils.py:189] concatenate (Concatenate)       (None, 35)           0           dense_1[0][0]                    
I1204 11:33:57.583099 139740839778112 layer_utils.py:189]                                                                  dense_features_1[0][0]           
I1204 11:33:57.583143 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.583260 139740839778112 layer_utils.py:189] dense_2 (Dense)                 (None, 1)            36          concatenate[0][0]                
I1204 11:33:57.583309 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.583389 139740839778112 layer_utils.py:189] tf.compat.v1.squeeze (TFOpLambd (None,)              0           dense_2[0][0]                    
I1204 11:33:57.583432 139740839778112 layer_utils.py:256] ==================================================================================================
I1204 11:33:57.583687 139740839778112 layer_utils.py:267] Total params: 40
I1204 11:33:57.583751 139740839778112 layer_utils.py:268] Trainable params: 40
I1204 11:33:57.583794 139740839778112 layer_utils.py:269] Non-trainable params: 0
I1204 11:33:57.583832 139740839778112 layer_utils.py:270] __________________________________________________________________________________________________
I1204 11:33:57.649701 139740839778112 layer_utils.py:191] Model: "model_1"
I1204 11:33:57.649825 139740839778112 layer_utils.py:192] __________________________________________________________________________________________________
I1204 11:33:57.649878 139740839778112 layer_utils.py:189] Layer (type)                    Output Shape         Param #     Connected to                     
I1204 11:33:57.649932 139740839778112 layer_utils.py:194] ==================================================================================================
I1204 11:33:57.650066 139740839778112 layer_utils.py:189] pickup_latitude_xf (InputLayer) [(None,)]            0                                            
I1204 11:33:57.650120 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.650207 139740839778112 layer_utils.py:189] trip_miles_xf (InputLayer)      [(None,)]            0                                            
I1204 11:33:57.650259 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.650356 139740839778112 layer_utils.py:189] trip_start_hour_xf (InputLayer) [(None,)]            0                                            
I1204 11:33:57.650398 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.650552 139740839778112 layer_utils.py:189] dense_features_2 (DenseFeatures (None, 1)            0           pickup_latitude_xf[0][0]         
I1204 11:33:57.650603 139740839778112 layer_utils.py:189]                                                                  trip_miles_xf[0][0]              
I1204 11:33:57.650644 139740839778112 layer_utils.py:189]                                                                  trip_start_hour_xf[0][0]         
I1204 11:33:57.650682 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.650812 139740839778112 layer_utils.py:189] dense_3 (Dense)                 (None, 1)            2           dense_features_2[0][0]           
I1204 11:33:57.650864 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.651007 139740839778112 layer_utils.py:189] dense_features_3 (DenseFeatures (None, 34)           0           pickup_latitude_xf[0][0]         
I1204 11:33:57.651061 139740839778112 layer_utils.py:189]                                                                  trip_miles_xf[0][0]              
I1204 11:33:57.651102 139740839778112 layer_utils.py:189]                                                                  trip_start_hour_xf[0][0]         
I1204 11:33:57.651146 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.651229 139740839778112 layer_utils.py:189] concatenate_1 (Concatenate)     (None, 35)           0           dense_3[0][0]                    
I1204 11:33:57.651274 139740839778112 layer_utils.py:189]                                                                  dense_features_3[0][0]           
I1204 11:33:57.651311 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.651462 139740839778112 layer_utils.py:189] dense_4 (Dense)                 (None, 1)            36          concatenate_1[0][0]              
I1204 11:33:57.651547 139740839778112 layer_utils.py:258] __________________________________________________________________________________________________
I1204 11:33:57.651632 139740839778112 layer_utils.py:189] tf.compat.v1.squeeze_1 (TFOpLam (None,)              0           dense_4[0][0]                    
I1204 11:33:57.651675 139740839778112 layer_utils.py:256] ==================================================================================================
I1204 11:33:57.651959 139740839778112 layer_utils.py:267] Total params: 38
I1204 11:33:57.652019 139740839778112 layer_utils.py:268] Trainable params: 38
I1204 11:33:57.652061 139740839778112 layer_utils.py:269] Non-trainable params: 0
I1204 11:33:57.652098 139740839778112 layer_utils.py:270] __________________________________________________________________________________________________
INFO:tensorflow:time(__main__.ModelTest.testBuildKerasModel): 0.84s
I1204 11:33:57.652639 139740839778112 test_util.py:2076] time(__main__.ModelTest.testBuildKerasModel): 0.84s
[       OK ] ModelTest.testBuildKerasModel
[ RUN      ] ModelTest.test_session
[  SKIPPED ] ModelTest.test_session
----------------------------------------------------------------------
Ran 2 tests in 0.836s

OK (skipped=1)

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

Thành phần trong các đường ống TFX sẽ tạo đầu ra cho mỗi lần chạy như Artifacts ML Metadata , và họ cần phải được lưu trữ ở đâu đó. Bạn có thể sử dụng bất kỳ bộ nhớ nào mà cụm KFP có thể truy cập và đối với ví dụ này, chúng tôi sẽ sử dụng Google Cloud Storage (GCS). Nhóm GCS mặc định phải được tạo tự động. Tên của nó sẽ là <your-project-id>-kubeflowpipelines-default .

Hãy tải dữ liệu mẫu của chúng tôi lên nhóm GCS để chúng tôi có thể sử dụng dữ liệu đó trong quy trình của mình sau này.

gsutil cp data/data.csv gs://{GOOGLE_CLOUD_PROJECT}-kubeflowpipelines-default/tfx-template/data/taxi/data.csv
BucketNotFoundException: 404 gs://tf-benchmark-dashboard-kubeflowpipelines-default bucket does not exist.

Hãy tạo một đường ống dẫn TFX sử dụng tfx pipeline create lệnh.

!tfx pipeline create  --pipeline-path=kubeflow_runner.py --endpoint={ENDPOINT} \
--build-image
CLI
Usage: tfx pipeline create [OPTIONS]
Try 'tfx pipeline create --help' for help.

Error: no such option: --build-image

Trong khi tạo một đường ống, Dockerfile sẽ được tạo để xây dựng một hình ảnh Docker. Đừng quên thêm nó vào hệ thống kiểm soát nguồn (ví dụ: git) cùng với các tệp nguồn khác.

Bây giờ bắt đầu một hành chạy với đường ống mới được tạo ra bằng cách sử dụng tfx run create lệnh.

tfx run create --pipeline-name={PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Creating a run for pipeline: my_pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
Pipeline "my_pipeline" does not exist.

Hoặc, bạn cũng có thể chạy đường dẫn trong Bảng điều khiển KFP. Lần chạy thực thi mới sẽ được liệt kê trong Thử nghiệm trong Trang tổng quan KFP. Nhấp vào thử nghiệm sẽ cho phép bạn theo dõi tiến trình và trực quan hóa các tạo tác được tạo trong quá trình chạy thực thi.

Tuy nhiên, chúng tôi khuyên bạn nên truy cập Trang tổng quan KFP. Bạn có thể truy cập Trang tổng quan KFP từ menu Đường dẫn nền tảng Cloud AI trong Google Cloud Console. Khi bạn truy cập trang tổng quan, bạn sẽ có thể tìm thấy đường dẫn và truy cập vô số thông tin về đường ống. Ví dụ, bạn có thể tìm thấy bạn chạy dưới menu thí nghiệm, và khi bạn mở chạy thi của bạn dưới Experiments bạn có thể tìm thấy tất cả các hiện vật của bạn từ các đường ống dẫn dưới menu Artifacts.

Một trong những nguyên nhân chính của sự thất bại là các vấn đề liên quan đến quyền. Hãy đảm bảo rằng cụm KFP của bạn có quyền truy cập các API đám mây của Google. Điều này có thể được cấu hình khi bạn tạo một cụm KFP trong GCP , hoặc xem tài liệu đáp thắc mắc trong GCP .

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 .

Nhấp đúp vào thư mục thay đổi pipeline và nhấp đúp vào một lần nữa để mở pipeline.py . 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 kiếm để lấy ý kiến chứa TODO(step 5): ). Hãy chắc chắn để tiết kiệm pipeline.py sau khi bạn chỉnh sửa nó.

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 \
--pipeline-path=kubeflow_runner.py \
--endpoint={ENDPOINT}
# You can run the pipeline the same way.
!tfx run create --pipeline-name {PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Updating pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
beam runner not found in dsl.
CLI
Creating a run for pipeline: my_pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
Pipeline "my_pipeline" does not exist.

Kiểm tra đầu ra của đường ống

Truy cập trang tổng quan KFP để tìm đầu ra đường ống trong trang cho quá trình chạy đường ống của bạn. Nhấp vào tab Các thí nghiệm trên bên trái, và tất cả chạy trong trang Thử nghiệm. Bạn sẽ có thể tìm thấy lần chạy mới nhất dưới tên của đường dẫn của bạn.

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 , Resolver , Evaluator , và Pusher .

Double-click để mở pipeline.py . Tìm và bỏ 5 dòng mà thêm Transform , Trainer , Resolver , EvaluatorPusher đến các đường ống dẫn. (Mẹo: tìm kiếm 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 \
--pipeline-path=kubeflow_runner.py \
--endpoint={ENDPOINT}
!tfx run create --pipeline-name {PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Updating pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
beam runner not found in dsl.
CLI
Creating a run for pipeline: my_pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
Pipeline "my_pipeline" does not exist.

Khi quá trình thực thi này kết thúc thành công, bạn hiện đã tạo và chạy đường dẫn TFX đầu tiên của mình trong Đường ống nền tảng AI!

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

BigQuery là một serverless, khả năng mở rộng, và kho dữ liệu đám mây hiệu quả. 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.

Double-click để mở 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ú các 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, 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.

Double-click để mở configs.py . Bỏ ghi chú định nghĩa của GOOGLE_CLOUD_REGION , BIG_QUERY_WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGSBIG_QUERY_QUERY . Bạn nên thay thế 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.

Thay đổi thư mục một cấp. Bấm vào tên của thư mục phía trên danh sách tệp. Tên của thư mục là tên của đường ống đó là my_pipeline nếu bạn không thay đổi.

Double-click để mở kubeflow_runner.py . Bỏ ghi chú hai đối số, querybeam_pipeline_args , cho create_pipeline chức năng.

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 như trước và tạo một lần chạy thực thi mới như chúng ta đã làm trong bước 5 và 6.

!tfx pipeline update \
--pipeline-path=kubeflow_runner.py \
--endpoint={ENDPOINT}
!tfx run create --pipeline-name {PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Updating pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
beam runner not found in dsl.
CLI
Creating a run for pipeline: my_pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
Pipeline "my_pipeline" does not exist.

Bước 8. (Không bắt buộc) Hãy thử Dataflow với KFP

Một số TFX Linh kiện sử dụng Apache chùm để thực hiện đường ống dữ liệu song song, và nó có nghĩa là bạn có thể phân phối dữ liệu khối lượng công việc chế biến sử dụng Google Cloud Dataflow . Trong bước này, chúng tôi sẽ đặt bộ điều phối Kubeflow để sử dụng luồng dữ liệu làm phần cuối xử lý dữ liệu cho Apache Beam.

Double-click pipeline vào thư mục thay đổi, và nhấp đúp để mở configs.py . Bỏ ghi chú định nghĩa của GOOGLE_CLOUD_REGION , và DATAFLOW_BEAM_PIPELINE_ARGS .

Thay đổi thư mục một cấp. Bấm vào tên của thư mục phía trên danh sách tệp. Tên của thư mục là tên của đường ống đó là my_pipeline nếu bạn không thay đổi.

Double-click để mở kubeflow_runner.py . Bỏ ghi chú beam_pipeline_args . (Ngoài ra hãy chắc chắn để nhận xét ra hiện beam_pipeline_args mà bạn thêm vào trong Bước 7.)

Bây giờ đường ống đã sẵn sàng để sử dụng Dataflow. Cập nhật đường dẫn và tạo một quá trình chạy thực thi như chúng ta đã làm trong bước 5 và 6.

!tfx pipeline update \
--pipeline-path=kubeflow_runner.py \
--endpoint={ENDPOINT}
!tfx run create --pipeline-name {PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Updating pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
beam runner not found in dsl.
CLI
Creating a run for pipeline: my_pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
Pipeline "my_pipeline" does not exist.

Bạn có thể tìm được việc làm Dataflow của bạn trong Dataflow trong Cloud Bảng điều khiển .

Bước 9. (Không bắt buộc) Hãy thử Mây AI vBulletin Đào tạo và Dự đoán với KFP

Interoperates TFX với một số dịch vụ GCP quản lý, chẳng hạn như đám mây AI Cương lĩnh và Đào tạo Dự đoán . Bạn có thể đặt bạn Trainer thành phần để sử dụng đám mây AI hệ thống huấn luyện, một dịch vụ quản lý đào tạo mô hình ML. Hơn nữa, khi mô hình của bạn được xây dựng và sẵn sàng để được phục vụ, bạn có thể đẩy mô hình của bạn với Cloud AI vBulletin Dự đoán phục vụ. Trong bước này, chúng tôi sẽ thiết của chúng tôi TrainerPusher thành phần để sử dụng các dịch vụ đám mây AI Platform.

Trước khi chỉnh sửa file, đầu tiên bạn có thể phải kích hoạt AI vBulletin Đào tạo & Dự đoán API.

Double-click pipeline vào thư mục thay đổi, và nhấp đúp để mở configs.py . Bỏ ghi chú định nghĩa của GOOGLE_CLOUD_REGION , GCP_AI_PLATFORM_TRAINING_ARGSGCP_AI_PLATFORM_SERVING_ARGS . Chúng tôi sẽ sử dụng hình ảnh chứa tùy chỉnh xây dựng của chúng tôi để đào tạo một mô hình trong Cloud AI hệ thống huấn luyện, vì vậy chúng ta nên thiết lập masterConfig.imageUri trong GCP_AI_PLATFORM_TRAINING_ARGS với giá trị tương tự như CUSTOM_TFX_IMAGE trên.

Thay đổi thư mục lên mức trên, và nhấp đúp để mở kubeflow_runner.py . Bỏ ghi chú ai_platform_training_argsai_platform_serving_args .

Cập nhật đường dẫn và tạo một quá trình chạy thực thi như chúng ta đã làm trong bước 5 và 6.

!tfx pipeline update \
--pipeline-path=kubeflow_runner.py \
--endpoint={ENDPOINT}
!tfx run create --pipeline-name {PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Updating pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
beam runner not found in dsl.
CLI
Creating a run for pipeline: my_pipeline
Detected Beam.
[WARNING] Default engine will be changed to "local" in the near future.
Use --engine flag if you intend to use a different orchestrator.
Pipeline "my_pipeline" does not exist.

Bạn có thể tìm được việc làm đào tạo của bạn trong đám mây AI vBulletin Jobs . Nếu đường ống của bạn thành công, bạn có thể tìm thấy mô hình của bạn trong đám mây AI vBulletin Models .

Bước 10. 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_runner.py hoặc local_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.

Dọn dẹp

Để dọn dẹp mọi nguồn lực Google Cloud sử dụng trong dự án này, bạn có thể xóa các dự án Google Cloud bạn sử dụng để hướng dẫn.

Ngoài ra, bạn có thể dọn dẹp các tài nguyên riêng lẻ bằng cách truy cập từng bảng điều khiển: