在 Vertex Pipelines 上运行自定义模型训练

1. 概览

在本实验中,您将学习如何在 Vertex Pipelines 上使用 Kubeflow Pipelines SDK 运行自定义模型训练作业。

学习内容

您将了解如何:

  • 使用 Kubeflow Pipelines SDK 构建可扩缩的机器学习流水线
  • 创建并容器化一个自定义 Scikit-learn 模型训练作业,该作业使用 Vertex AI 管理的数据集,并将在流水线中的 Vertex AI Training 上运行
  • 在 Vertex Pipelines 中运行批量预测作业
  • 使用通过 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(本实验的重点)、模型监控、Feature Store 等。您可以在下图中查看所有 Vertex AI 产品。

Vertex 产品概览

如果您有任何反馈,请参阅支持页面

机器学习流水线有何作用?

在深入了解之前,我们先来了解一下为什么要使用流水线。假设您要构建一个机器学习工作流,其中包括处理数据、训练模型、超参数调优、评估和模型部署。这些步骤中的每一个都可能具有不同的依赖项,如果您将整个工作流视为一个单体,可能会变得难以管理。当您开始扩展机器学习流程时,可能需要与团队中的其他人分享您的机器学习工作流,以便他们运行该工作流并贡献代码。如果没有可靠且可重现的流程,这可能会很困难。借助流水线,机器学习流程中的每个步骤都有自己的容器。这样,您就可以独立开发步骤,并以可重现的方式跟踪每个步骤的输入和输出。您还可以根据 Cloud 环境中的其他事件安排或触发流水线运行,例如在有新训练数据可用时启动流水线运行。

要点:流水线可帮助您简化和重现机器学习工作流。

3. 云环境设置

您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。

第 1 步:启动 Cloud Shell

在本实验中,您将使用 Cloud Shell 会话,这是一个由在 Google 云中运行的虚拟机托管的命令解释器。您也可以在自己的计算机上本地运行本部分,但使用 Cloud Shell 可让所有人都能在一致的环境中获得可重现的体验。实验结束后,您可以随时在自己的计算机上重试本部分。

为 Cloud Shell 授权

激活 Cloud Shell

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

激活 Cloud Shell

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

Cloud Shell 设置

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

Cloud Shell init

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。只需使用一个浏览器或 Google Chromebook 即可完成本 Codelab 中的大部分(甚至全部)工作。

在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的项目 ID:

在 Cloud Shell 中运行以下命令以确认您已通过身份验证:

gcloud auth list

您应该会在命令输出中看到类似以下内容:

Cloud Shell 输出

在 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,其中包含当前 Cloud 项目的名称。我们将在本实验的各个部分使用它。您可以通过运行以下命令查看该文件:

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”:

Vertex AI 菜单

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

新建笔记本

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

TFE 实例

使用默认选项,然后点击创建

第 5 步:打开您的记事本

创建实例后,选择打开 JupyterLab

打开笔记本

4. Vertex Pipelines 设置

我们还需要安装几个额外的库,才能使用 Vertex Pipelines:

  • Kubeflow 流水线:这是我们将用于构建流水线的 SDK。Vertex Pipelines 支持运行使用 Kubeflow Pipelines 或 TFX 构建的流水线。
  • Google Cloud 流水线组件:此库提供了预构建的组件,可让您更轻松地通过流水线步骤与 Vertex AI 服务进行交互。

第 1 步:创建 Python 笔记本并安装库

首先,在笔记本实例的“启动器”菜单(您可以通过点击笔记本左上角的“+”图标访问)中,选择 Python 3 以创建笔记本:

创建 Python3 笔记本

您可以点击笔记本实例左上角的 + 号,访问启动器菜单。

如需安装我们将在本实验中使用的两项服务,请先在笔记本单元中设置用户标志:

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 和存储分区

在本实验中,您将引用您的 Cloud 项目 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. and OZKAN, I.A., (2020), "Using Computer Vision and Machine Learning Techniques."In Computers and Electronics in Agriculture, 174, 105507. DOI

流水线的第一步将使用包含此豆类数据版本的 BigQuery 表在 Vertex AI 中创建一个托管式数据集。该数据集将作为输入传递给我们的训练作业。在训练代码中,我们将能够访问环境变量,以访问此托管式数据集。

我们将按如下方式设置自定义训练作业:

  • 编写一个 Scikit-learn DecisionTreeClassifier 模型来对数据中的 Bean 类型进行分类
  • 将训练代码打包到 Docker 容器中,并将其推送到 Container Registry

然后,我们将能够直接从流水线启动 Vertex AI 训练作业。让我们开始吧!

第 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 部分,验证您的容器是否在其中。请参见以下示例:

Container Registry

6. 配置批量预测作业

流水线的最后一步将运行批量预测作业。为此,我们需要在 Cloud Storage 中提供一个 CSV 文件,其中包含我们想要进行预测的样本。我们将在笔记本中创建此 CSV 文件,并使用 gsutil 命令行工具将其复制到 Cloud Storage。

将批量预测示例复制到 Cloud Storage

以下文件包含 beans 数据集中每个类的 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 Training 信息中心中查看自定义训练作业的详细信息。训练作业完成后,系统会在 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 控制台中的“Notebooks”界面中,选择相应 Notebook,然后选择停止。如果您想完全删除该实例,请选择删除

可停止实例

第 2 步:删除您的 Cloud Storage 存储分区

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

删除存储空间