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ụngtf::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
pipelinevà nhấp đúp vào một lần nữa để mởpipeline.py. Tìm và bỏ 3 dòng mà thêmStatisticsGen,SchemaGen, vàExampleValidatorđến các đường ống dẫn. (Mẹo: tìm kiếm để lấy ý kiến chứaTODO(step 5):). Hãy chắc chắn để tiết kiệmpipeline.pysau 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êmTransform,Trainer,Resolver,EvaluatorvàPusherđến các đường ống dẫn. (Mẹo: tìm kiếmTODO(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 raCsvExampleGenvà bỏ ghi chú dòng mà tạo ra một thể hiện củaBigQueryExampleGen. Bạn cũng cần phải bỏ ghi chú cácquerytham số củacreate_pipelinechứ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ủaGOOGLE_CLOUD_REGION,BIG_QUERY_WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGSvàBIG_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_pipelinenếu bạn không thay đổi.
Double-click để mở
kubeflow_runner.py. Bỏ ghi chú hai đối số,queryvàbeam_pipeline_args, chocreate_pipelinechứ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
pipelinevào thư mục thay đổi, và nhấp đúp để mởconfigs.py. Bỏ ghi chú định nghĩa củaGOOGLE_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_pipelinenế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ệnbeam_pipeline_argsmà 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 Trainer và Pusher 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
pipelinevào thư mục thay đổi, và nhấp đúp để mởconfigs.py. Bỏ ghi chú định nghĩa củaGOOGLE_CLOUD_REGION,GCP_AI_PLATFORM_TRAINING_ARGSvàGCP_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ậpmasterConfig.imageUritrongGCP_AI_PLATFORM_TRAINING_ARGSvới giá trị tương tự nhưCUSTOM_TFX_IMAGEtrê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_argsvàai_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.
- Nếu dữ liệu của bạn được lưu trữ trong các tập tin, thay đổi
DATA_PATHtrongkubeflow_runner.pyhoặclocal_runner.pyvà đặ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 đổiBIG_QUERY_QUERYtrongpipeline/configs.pyđến một cách chính xác truy vấn cho dữ liệu của bạn. - Thêm tính năng trong
models/features.py. - Sửa đổi
models/preprocessing.pyđể chuyển đổi dữ liệu đầu vào cho đào tạo . - Sửa đổi
models/keras/model.pyvàmodels/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_FNliên tục đểmodels.estimator.model.run_fntrongpipeline/configs.py.
- Bạn cũng có thể sử dụng mô hình dựa trên công cụ ước tính. Thay đổi
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:
Xem trên TensorFlow.org
Chạy trong Google Colab
Xem nguồn trên GitHub
Tải xuống sổ ghi chép