1. 概览
在本实验中,您将学习如何在 Vertex Pipelines 上使用 Kubeflow Pipelines SDK 运行自定义模型训练作业。
学习内容
您将了解如何:
- 使用 Kubeflow Pipelines SDK 构建可扩缩的机器学习流水线
- 创建并容器化一个使用 Vertex AI 管理的数据集的自定义 Scikit-learn 模型训练作业,该作业将在流水线内的 Vertex AI Training 上运行
- 在 Vertex 流水线中运行批量预测作业
- 使用通过
google_cloud_pipeline_components库提供的预构建组件与 Vertex AI 服务交互
在 Google Cloud 上运行此实验的总费用约为 5 美元。
2. Vertex AI 简介
本实验使用 Vertex AI,这是 Google Cloud 上的端到端托管式机器学习平台。Vertex AI 全面集成了 Google Cloud 中的 Google 机器学习产品,可打造无缝的开发体验。除了模型训练和部署服务之外,Vertex AI 还包含各种 MLOps 产品,包括 Vertex Pipelines(本实验的重点)、Model Monitoring、Feature Store 等。您可以在下图中查看所有 Vertex AI 产品。

如果您有任何反馈,请参阅支持页面。
机器学习流水线有哪些优势?
在深入探讨之前,先来了解一下为什么要使用流水线。假设您正在构建一个机器学习工作流,该工作流中包含数据处理、模型训练、超参数调优、评估和模型部署步骤。每个步骤可能有不同的依赖项,如果将整个工作流作为一个单体式应用来处理,可能会变得难以管理。在开始扩展机器学习流程时,您可能需要与团队中的其他成员共享您的机器学习工作流,以便其运行该工作流并贡献代码。但如果没有可靠且可重复的流程,将很难做到这一点。有了流水线,机器学习流程中的每个步骤都是其各自的容器。这样您就能独立开发各个步骤,并以可重复的方式跟踪每个步骤的输入和输出。您还可以基于云环境中的其他事件(比如有新训练数据可用时)来安排或触发流水线的运行。
总结:流水线有助于简化和重现机器学习工作流。
3. 云环境设置
您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。
第 1 步:启动 Cloud Shell
在本实验中,您将使用 Cloud Shell 会话,这是一个由在 Google 云中运行的虚拟机托管的命令解释器。您也可以在自己的计算机上本地运行本部分,但使用 Cloud Shell 可让每个人在一致的环境中获得可重现的体验。完成本实验后,欢迎您在自己的计算机上重试本部分。

激活 Cloud Shell
在 Cloud 控制台的右上角,点击下方按钮以激活 Cloud Shell:

如果您以前从未启动过 Cloud Shell,将看到一个中间屏幕(非首屏),描述它是什么。如果是这种情况,请点击继续(您将永远不会再看到它)。一次性屏幕如下所示:

预配和连接到 Cloud Shell 只需花几分钟时间。

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大幅提高了网络性能和身份验证效率。只需使用一个浏览器或 Google Chromebook 即可完成本 Codelab 中的大部分(甚至全部)工作。
在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的项目 ID:
在 Cloud Shell 中运行以下命令以确认您已通过身份验证:
gcloud auth list
您应该会在命令输出中看到类似以下内容:

在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目:
gcloud config list project
命令输出
[core] project = <PROJECT_ID>
如果不是上述结果,您可以使用以下命令进行设置:
gcloud config set project <PROJECT_ID>
命令输出
Updated property [core/project].
Cloud Shell 有几个环境变量,包括 GOOGLE_CLOUD_PROJECT,其中包含当前云项目的名称。在本实验中,我们将在多个地方使用此变量。您可以通过运行以下命令查看:
echo $GOOGLE_CLOUD_PROJECT
第 2 步:启用 API
在后续步骤中,您将了解在哪些情况下需要这些服务(以及原因),但现在,请运行以下命令,以授予您的项目对 Compute Engine、Container Registry 和 Vertex AI 服务的访问权限:
gcloud services enable compute.googleapis.com \
containerregistry.googleapis.com \
aiplatform.googleapis.com
这应该会生成类似如下内容的成功消息:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
第 3 步:创建 Cloud Storage 存储分区
如需在 Vertex AI 上运行训练作业,我们需要一个存储分区来存储已保存的模型资产。存储分区必须是区域级存储分区。我们在此处使用的是 us-central,但您也可以使用其他区域(只需在本实验中将其替换掉即可)。如果您已有存储分区,则可以跳过此步骤。
在 Cloud Shell 终端中运行以下命令以创建存储分区:
BUCKET_NAME=gs://$GOOGLE_CLOUD_PROJECT-bucket
gsutil mb -l us-central1 $BUCKET_NAME
接下来,我们将向计算服务账号授予对此存储分区的访问权限。这样可确保 Vertex Pipelines 拥有将文件写入此存储分区所需的权限。运行以下命令可添加此权限:
gcloud projects describe $GOOGLE_CLOUD_PROJECT > project-info.txt
PROJECT_NUM=$(cat project-info.txt | sed -nre 's:.*projectNumber\: (.*):\1:p')
SVC_ACCOUNT="${PROJECT_NUM//\'/}-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:$SVC_ACCOUNT --role roles/storage.objectAdmin
第 4 步:创建 Vertex AI Workbench 实例
在 Cloud Console 的 Vertex AI 部分中,点击“Workbench”:

然后,在用户管理的笔记本中,点击新建笔记本:

然后选择不带 GPU 的 TensorFlow 企业版 2.3(提供长期支持)实例类型:

使用默认选项,然后点击创建。
第 5 步:打开笔记本
创建实例后,选择打开 JupyterLab:

4. Vertex Pipelines 设置
若要使用 Vertex Pipelines,我们还需要额外安装几个库:
- Kubeflow Pipelines:此 SDK 将用于构建流水线。Vertex Pipelines 支持运行使用 Kubeflow Pipelines 或 TFX 构建的流水线。
- Google Cloud 流水线组件:此库可提供预构建的组件,可让您更轻松地在流水线步骤中与 Vertex AI 服务进行交互。
第 1 步:创建 Python 笔记本并安装库
首先,在笔记本实例页面中,从“启动器”菜单中(您可以通过点击笔记本左上角的加号图标来访问该菜单)选择 Python 3 以创建笔记本:

若要访问“启动器”菜单,请点击笔记本实例页面左上角的加号 (+)。
如需安装本实验中要使用的两项服务,请先在笔记本单元中设置用户标志:
USER_FLAG = "--user"
然后,从笔记本中运行以下命令:
!pip3 install {USER_FLAG} google-cloud-aiplatform==1.7.0 --upgrade
!pip3 install {USER_FLAG} kfp==1.8.9 google-cloud-pipeline-components==0.2.0
安装这些软件包后,需要重启内核:
import os
if not os.getenv("IS_TESTING"):
# Automatically restart kernel after installs
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
最后,检查您是否正确安装了软件包。KFP SDK 应为 1.8 或更高版本:
!python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
!python3 -c "import google_cloud_pipeline_components; print('google_cloud_pipeline_components version: {}'.format(google_cloud_pipeline_components.__version__))"
第 2 步:设置项目 ID 和存储桶
在本实验中,您将全程引用之前创建的云项目 ID 和存储分区。接下来,我们将为每个变量创建变量。
如果不知道项目 ID,可运行以下命令来获取:
import os
PROJECT_ID = ""
# Get your Google Cloud project ID from gcloud
if not os.getenv("IS_TESTING"):
shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
PROJECT_ID = shell_output[0]
print("Project ID: ", PROJECT_ID)
否则,请在此处进行设置:
if PROJECT_ID == "" or PROJECT_ID is None:
PROJECT_ID = "your-project-id" # @param {type:"string"}
然后,创建一个变量来存储您的存储分区名称。如果您是在本实验中创建的,则以下操作会奏效。否则,您需要手动设置此项:
BUCKET_NAME="gs://" + PROJECT_ID + "-bucket"
第 3 步:导入库
添加以下命令,以导入我们将在整个 Codelab 中使用的库:
from kfp.v2 import compiler, dsl
from kfp.v2.dsl import pipeline
from google.cloud import aiplatform
from google_cloud_pipeline_components import aiplatform as gcc_aip
第 4 步:定义常量
在构建流水线之前,我们需要做的最后一件事是定义一些常量变量。PIPELINE_ROOT 是一个 Cloud Storage 路径,流水线创建的制品将写入该路径。这里我们使用的区域是 us-central1,如果您在创建存储分区时使用了其他区域,请运行以下代码来更新 REGION 变量:
PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
REGION="us-central1"
PIPELINE_ROOT = f"{BUCKET_NAME}/pipeline_root/"
PIPELINE_ROOT
运行上述代码后,您应该会看到输出的流水线根目录。来自流水线的制品将写入此 Cloud Storage 位置。它将采用 gs://YOUR-BUCKET-NAME/pipeline_root/ 格式
5. 配置自定义模型训练作业
在设置流水线之前,我们需要为自定义模型训练作业编写代码。为了训练模型,我们将使用 UCI 机器学习干豆数据集,该数据集来自 KOKLU, M. 和 OZKAN, I.A.于 2020 年在《Computers and Electronics in Agriculture》上发表的“Multiclass Classification of Dry Beans Using Computer Vision and Machine Learning Techniques.”(利用计算机视觉和机器学习技术对干豆进行多类别分类)一文 (174, 105507. DOI。
我们的第一个流水线步骤将使用包含此豆类数据版本信息的 BigQuery 表在 Vertex AI 中创建一个受管理的数据集。该数据集将作为输入传递给我们的训练作业。在训练代码中,我们将有权访问环境变量,从而访问此受管理的数据集。
以下是我们设置自定义训练作业的方式:
- 编写 Scikit-learn
DecisionTreeClassifier模型,对数据中的豆类进行分类 - 将训练代码打包到 Docker 容器中并将其推送到 Container Registry
这样一来,我们就可以直接从流水线启动 Vertex AI Training 作业。让我们开始吧!
第 1 步:在 Docker 容器中定义训练代码
在笔记本实例中,打开启动器并选择“终端”:

然后,运行以下命令来设置一个目录,您将在其中添加容器化代码:
mkdir traincontainer
cd traincontainer
touch Dockerfile
mkdir trainer
touch trainer/train.py
运行这些命令后,您应该会在左侧看到一个名为 traincontainer/ 的目录(可能需要点击刷新图标才能看到)。您会在 traincontainer/ 目录中看到以下内容:
+ Dockerfile
+ trainer/
+ train.py
容器化代码的第一步是创建 Dockerfile。在 Dockerfile 中,我们将添加运行映像所需的所有命令。它将安装我们使用的所有库,并为训练代码设置入口点。打开刚刚创建的 Dockerfile,然后添加以下内容:
FROM gcr.io/deeplearning-platform-release/sklearn-cpu.0-23
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
RUN pip install sklearn google-cloud-bigquery joblib pandas google-cloud-storage
# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.train"]
如需在笔记本实例中编辑文件时保存文件,您可以使用 ctrl+s。
接下来,打开 train.py 文件。我们将在此处添加训练代码。将以下内容复制到 train.py 中。此代码会从受管理的数据集中检索数据,将其放入 Pandas DataFrame 中,训练 Scikit-learn 模型,并将训练好的模型上传到 Cloud Storage:
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve
from sklearn.model_selection import train_test_split
from google.cloud import bigquery
from google.cloud import storage
from joblib import dump
import os
import pandas as pd
bqclient = bigquery.Client()
storage_client = storage.Client()
def download_table(bq_table_uri: str):
prefix = "bq://"
if bq_table_uri.startswith(prefix):
bq_table_uri = bq_table_uri[len(prefix):]
table = bigquery.TableReference.from_string(bq_table_uri)
rows = bqclient.list_rows(
table,
)
return rows.to_dataframe(create_bqstorage_client=False)
# These environment variables are from Vertex AI managed datasets
training_data_uri = os.environ["AIP_TRAINING_DATA_URI"]
test_data_uri = os.environ["AIP_TEST_DATA_URI"]
# Download data into Pandas DataFrames, split into train / test
df = download_table(training_data_uri)
test_df = download_table(test_data_uri)
labels = df.pop("Class").tolist()
data = df.values.tolist()
test_labels = test_df.pop("Class").tolist()
test_data = test_df.values.tolist()
# Define and train the Scikit model
skmodel = DecisionTreeClassifier()
skmodel.fit(data, labels)
score = skmodel.score(test_data, test_labels)
print('accuracy is:',score)
# Save the model to a local file
dump(skmodel, "model.joblib")
# Upload the saved model file to GCS
bucket = storage_client.get_bucket("YOUR_GCS_BUCKET")
model_directory = os.environ["AIP_MODEL_DIR"]
storage_path = os.path.join(model_directory, "model.joblib")
blob = storage.blob.Blob.from_string(storage_path, client=storage_client)
blob.upload_from_filename("model.joblib")
然后,返回到笔记本,运行以下命令,将上述脚本中的 YOUR_GCS_BUCKET 替换为您的 Cloud Storage 存储分区的名称:
BUCKET = BUCKET_NAME[5:] # Trim the 'gs://' before adding to train script
!sed -i -r 's@YOUR_GCS_BUCKET@'"$BUCKET"'@' traincontainer/trainer/train.py
如果您愿意,也可以手动执行此操作。如果您这样做,请务必在更新脚本时不要在存储分区名称中添加 gs://。
现在,我们的训练代码已放入 Docker 容器中,可以开始在云端运行训练了。
第 2 步:将容器推送到 Container Registry
训练代码已完成,现在可以将其推送到 Google Container Registry。稍后,当我们配置流水线的训练组件时,会将 Vertex Pipelines 指向此容器。
返回到终端,然后从 traincontainer/ 目录的根目录中,使用 Container Registry 中容器映像的 URI 定义一个变量。
PROJECT_ID=$(gcloud config get-value project)
IMAGE_URI="gcr.io/$PROJECT_ID/scikit:v1"
然后,运行以下命令来构建容器:
docker build ./ -t $IMAGE_URI
最后,将容器推送到 Container Registry:
docker push $IMAGE_URI
前往 Cloud 控制台的 Container Registry 部分,验证您的容器是否位于此处。请参见以下示例:

6. 配置批量预测作业
流水线的最后一步将运行批量预测作业。为此,我们需要在 Cloud Storage 中提供一个 CSV 文件,其中包含我们想要获取预测结果的示例。我们将在笔记本中创建此 CSV 文件,并使用 gsutil 命令行工具将其复制到 Cloud Storage。
将批量预测示例复制到 Cloud Storage
以下文件包含我们豆类数据集中的每个类别的 3 个示例。以下示例未包含 Class 列,因为这是我们的模型将要预测的内容。运行以下代码,在笔记本中本地创建此 CSV 文件:
%%writefile batch_examples.csv
Area,Perimeter,MajorAxisLength,MinorAxisLength,AspectRation,Eccentricity,ConvexArea,EquivDiameter,Extent,Solidity,roundness,Compactness,ShapeFactor1,ShapeFactor2,ShapeFactor3,ShapeFactor4
23288,558.113,207.567738,143.085693,1.450653336,0.7244336162,23545,172.1952453,0.8045881703,0.9890847314,0.9395021523,0.8295857874,0.008913077034,0.002604069884,0.6882125787,0.9983578734
23689,575.638,205.9678003,146.7475015,1.403552348,0.7016945718,24018,173.6714472,0.7652721693,0.9863019402,0.8983750474,0.8431970773,0.00869465998,0.002711119968,0.7109813112,0.9978994889
23727,559.503,189.7993849,159.3717704,1.190922235,0.5430731512,24021,173.8106863,0.8037601626,0.9877607094,0.952462433,0.9157600082,0.007999299741,0.003470231343,0.8386163926,0.9987269085
31158,641.105,212.0669751,187.1929601,1.132879009,0.4699241567,31474,199.1773023,0.7813134733,0.989959967,0.9526231013,0.9392188582,0.0068061806,0.003267009878,0.8821320637,0.9993488983
32514,649.012,221.4454899,187.1344232,1.183349841,0.5346736437,32843,203.4652564,0.7849831,0.9899826447,0.9700068737,0.9188051492,0.00681077351,0.002994124691,0.8442029022,0.9989873701
33078,659.456,235.5600775,178.9312328,1.316483846,0.6503915309,33333,205.2223615,0.7877214708,0.9923499235,0.9558229607,0.8712102818,0.007121351881,0.002530662194,0.7590073551,0.9992209221
33680,683.09,256.203255,167.9334938,1.525623324,0.7552213942,34019,207.081404,0.80680321,0.9900349805,0.9070392732,0.8082699962,0.007606985006,0.002002710402,0.6533003868,0.9966903078
33954,716.75,277.3684803,156.3563259,1.773951126,0.825970469,34420,207.9220419,0.7994819873,0.9864613597,0.8305492781,0.7496238998,0.008168948587,0.001591181142,0.5619359911,0.996846984
36322,719.437,272.0582306,170.8914975,1.591993952,0.7780978465,36717,215.0502424,0.7718560075,0.9892420405,0.8818487005,0.7904566678,0.007490177594,0.001803782407,0.6248217437,0.9947124371
36675,742.917,285.8908964,166.8819538,1.713132487,0.8119506999,37613,216.0927123,0.7788277766,0.9750618137,0.8350248381,0.7558572692,0.0077952528,0.001569528272,0.5713202115,0.9787472145
37454,772.679,297.6274753,162.1493177,1.835514817,0.8385619338,38113,218.3756257,0.8016695205,0.9827093118,0.7883332637,0.7337213257,0.007946480356,0.001420623993,0.5383469838,0.9881438654
37789,766.378,313.5680678,154.3409867,2.031657789,0.8704771226,38251,219.3500608,0.7805870567,0.9879218844,0.8085170916,0.6995293312,0.008297866252,0.001225659709,0.4893412853,0.9941740339
47883,873.536,327.9986493,186.5201272,1.758516115,0.822571799,48753,246.9140116,0.7584464543,0.9821549443,0.7885506623,0.7527897207,0.006850002074,0.00135695419,0.5666923636,0.9965376533
49777,861.277,300.7570338,211.6168613,1.42123379,0.7105823885,50590,251.7499649,0.8019106536,0.9839296304,0.843243269,0.8370542883,0.00604208839,0.001829706116,0.7006598815,0.9958014989
49882,891.505,357.1890036,179.8346914,1.986207449,0.8640114945,51042,252.0153467,0.7260210171,0.9772736178,0.7886896753,0.7055518063,0.007160679276,0.001094585314,0.4978033513,0.9887407248
53249,919.923,325.3866286,208.9174205,1.557489212,0.7666552108,54195,260.3818974,0.6966846347,0.9825445152,0.7907120655,0.8002231025,0.00611066177,0.001545654241,0.6403570138,0.9973491406
61129,964.969,369.3481688,210.9473449,1.750902193,0.8208567513,61796,278.9836198,0.7501135067,0.9892064211,0.8249553283,0.7553404711,0.006042110436,0.001213219664,0.5705392272,0.9989583843
61918,960.372,353.1381442,224.0962377,1.575832543,0.7728529173,62627,280.7782864,0.7539207091,0.9886790043,0.8436218213,0.7950947556,0.005703319619,0.00140599258,0.6321756704,0.9962029945
141953,1402.05,524.2311633,346.3974998,1.513380332,0.7505863011,143704,425.1354762,0.7147107987,0.9878152313,0.9074598849,0.8109694843,0.003692991084,0.0009853172185,0.6576715044,0.9953071199
145285,1440.991,524.9567463,353.0769977,1.486805285,0.7400216694,146709,430.0960442,0.7860466375,0.9902937107,0.8792413513,0.8192980608,0.003613289371,0.001004269363,0.6712493125,0.9980170255
146153,1476.383,526.1933264,356.528288,1.475881001,0.7354662103,149267,431.3789276,0.7319360978,0.9791380546,0.8425962592,0.8198107159,0.003600290972,0.001003163512,0.6720896099,0.991924286
然后,将文件复制到您的 Cloud Storage 存储分区:
!gsutil cp batch_examples.csv $BUCKET_NAME
我们将在下一步中定义流水线时引用此文件。
7. 使用预构建的组件构建流水线
现在,我们的训练代码已位于云端,接下来可以从流水线中调用该代码了。我们将定义的流水线将使用之前安装的 google_cloud_pipeline_components 库中的三个预构建组件。这些预定义的组件可简化我们为设置流水线而需要编写的代码,并允许我们使用模型训练和批量预测等 Vertex AI 服务。
我们的三步流水线将执行以下操作:
- 在 Vertex AI 中创建托管式数据集
- 使用我们设置的自定义容器在 Vertex AI 上运行训练作业
- 针对我们训练的 Scikit-learn 分类模型运行批量预测作业
第 1 步:定义流水线
由于我们使用的是预构建的组件,因此可以在流水线定义中设置整个流水线。将以下内容添加到笔记本单元中:
@pipeline(name="automl-beans-custom",
pipeline_root=PIPELINE_ROOT)
def pipeline(
bq_source: str = "bq://sara-vertex-demos.beans_demo.large_dataset",
bucket: str = BUCKET_NAME,
project: str = PROJECT_ID,
gcp_region: str = REGION,
bq_dest: str = "",
container_uri: str = "",
batch_destination: str = ""
):
dataset_create_op = gcc_aip.TabularDatasetCreateOp(
display_name="tabular-beans-dataset",
bq_source=bq_source,
project=project,
location=gcp_region
)
training_op = gcc_aip.CustomContainerTrainingJobRunOp(
display_name="pipeline-beans-custom-train",
container_uri=container_uri,
project=project,
location=gcp_region,
dataset=dataset_create_op.outputs["dataset"],
staging_bucket=bucket,
training_fraction_split=0.8,
validation_fraction_split=0.1,
test_fraction_split=0.1,
bigquery_destination=bq_dest,
model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.0-24:latest",
model_display_name="scikit-beans-model-pipeline",
machine_type="n1-standard-4",
)
batch_predict_op = gcc_aip.ModelBatchPredictOp(
project=project,
location=gcp_region,
job_display_name="beans-batch-predict",
model=training_op.outputs["model"],
gcs_source_uris=["{0}/batch_examples.csv".format(BUCKET_NAME)],
instances_format="csv",
gcs_destination_output_uri_prefix=batch_destination,
machine_type="n1-standard-4"
)
第 2 步:编译并运行流水线
流水线已经定义完毕,您可以开始编译了。以下命令将生成一个用于运行流水线的 JSON 文件:
compiler.Compiler().compile(
pipeline_func=pipeline, package_path="custom_train_pipeline.json"
)
接下来,创建一个 TIMESTAMP 变量。我们将在作业 ID 中使用此值:
from datetime import datetime
TIMESTAMP = datetime.now().strftime("%Y%m%d%H%M%S")
然后,定义流水线作业,传入一些特定于项目的参数:
pipeline_job = aiplatform.PipelineJob(
display_name="custom-train-pipeline",
template_path="custom_train_pipeline.json",
job_id="custom-train-pipeline-{0}".format(TIMESTAMP),
parameter_values={
"project": PROJECT_ID,
"bucket": BUCKET_NAME,
"bq_dest": "bq://{0}".format(PROJECT_ID),
"container_uri": "gcr.io/{0}/scikit:v1".format(PROJECT_ID),
"batch_destination": "{0}/batchpredresults".format(BUCKET_NAME)
},
enable_caching=True,
)
最后,运行作业以创建新的流水线执行:
pipeline_job.submit()
运行此单元后,您应该会看到日志,其中包含一个链接,供您在控制台中查看流水线运行作业:

前往该链接。您还可以通过打开流水线信息中心来访问该页面。完成后的流水线应如下所示:

此流水线需要 5-10 分钟时间才能运行完毕,但您可以在其完成之前继续执行下一步。接下来,您将详细了解每个流水线步骤中发生的情况。
8. 了解流水线执行情况
接下来,我们将深入探讨流水线的三个步骤。
流水线步骤 1:创建受管理的数据集
流水线的第一步是在 Vertex AI 中创建代管式数据集。如果您点击控制台“流水线”部分中的以下数据集链接:

您将在 Vertex AI 中看到自己的数据集,其中包含指向 BigQuery 中数据源的链接,以及有关数据集中不同列的信息。将托管式数据集上传到 Vertex AI 后,您可以使用该数据集来训练 AutoML 模型或自定义模型。
对于使用托管式数据集的自定义模型作业,Vertex AI 会将特殊的环境变量传递给您的训练作业,并处理将数据拆分为训练集和测试集。我们将在下一个流水线步骤中用到此变量。
流水线步骤 2:在 Vertex AI Training 中训练模型
在自定义训练作业运行时,您可以点击以直接在 Vertex Pipelines 控制台中查看日志:

您还可以在 Vertex AI 训练信息中心内查看自定义训练作业的详细信息。训练作业完成后,系统会在 Vertex AI 中创建模型资源。然后,我们可以将此模型部署到端点以进行在线预测,也可以创建批量预测作业,我们将在下一个流水线步骤中执行此操作。
流水线步骤 3:针对模型运行批量预测作业
最后,我们的流水线将针对我们通过 CSV 文件传入的示例获得预测结果。批量预测作业完成后,Vertex AI 会将 CSV 文件写入我们在 Cloud Storage 中指定的位置。当此流水线步骤开始运行时,您可以前往 Vertex AI 控制台的“批量预测”部分,查看已创建的作业。
点击已完成的作业,查看批量预测的 Cloud Storage 网址:

点击该链接前往 Cloud Storage 目录,您可以在其中找到预测结果,然后点击下载其中一个 prediction.results 文件。在文件中,您应该会看到如下所示的行:
{"instance": [33954.0, 716.75, 277.3684803, 156.3563259, 1.773951126, 0.825970469, 34420.0, 207.9220419, 0.7994819873, 0.9864613597, 0.8305492781, 0.7496238998, 0.008168948587, 0.001591181142, 0.5619359911, 0.996846984], "prediction": "HOROZ"}
这包括特定实例的特征值,以及模型预测的类别。在此示例中,我们的模型认为这是“HOROZ”豆。
至此,您已完成本实验!
🎉 恭喜!🎉
您学习了如何使用 Vertex AI 执行以下操作:
- 使用 Kubeflow Pipelines SDK 构建具有自定义组件的端到端流水线
- 在 Vertex Pipelines 上运行流水线,并使用 SDK 启动流水线运行
- 在控制台中查看和分析 Vertex Pipelines 图
- 使用预构建的流水线组件将 Vertex AI 服务添加到流水线中
- 安排周期性流水线作业
如需详细了解 Vertex 的不同部分,请参阅相关文档。
9. 清理
为避免产生费用,建议您删除在本实验中创建的资源。
第 1 步:停止或删除 Notebooks 实例
如果您想继续使用在本实验中创建的笔记本,建议您在不使用时将其关闭。在 Cloud 控制台的笔记本界面中,选择笔记本,然后选择停止。如果您想完全删除该实例,请选择删除:

第 2 步:删除 Cloud Storage 存储分区
如需删除存储桶,请使用 Cloud Console 中的导航菜单,浏览到“存储空间”,选择您的存储桶,然后点击“删除”:
