在 Vertex Pipelines 上執行自訂模型訓練

1. 總覽

在本研究室中,您將瞭解如何在 Vertex Pipelines 中使用 Kubeflow Pipelines SDK 執行自訂模型訓練工作。

課程內容

您將學習下列內容:

  • 使用 Kubeflow Pipelines SDK 建構可擴充的機器學習管道
  • 建立及容器化使用 Vertex AI 代管資料集的自訂 Scikit-learn 模型訓練工作,並在管線中透過 Vertex AI 訓練執行
  • 在 Vertex Pipelines 中執行批次預測工作
  • 使用透過 google_cloud_pipeline_components 程式庫提供的預先建構元件,與 Vertex AI 服務互動

在 Google Cloud 中執行這個研究室的總費用約為 $5 美元。

2. Vertex AI 簡介

本研究室使用 Vertex AI,這是 Google Cloud 中的端對端代管機器學習平台。Vertex AI 將 Google 的機器學習產品整合至 Google Cloud,提供流暢的開發體驗。除了模型訓練和部署服務之外,Vertex AI 也提供各種機器學習運作產品,包括 Vertex Pipelines (本研究室的核心)、模型監控和特徵儲存庫等。所有 Vertex AI 產品項目均如下圖所示。

Vertex 產品總覽

如有任何意見,請參閱支援頁面

機器學習管道為何很實用?

在深入說明之前,讓我們先瞭解您想使用管道的原因。假設您要建構的機器學習工作流程包含處理資料、訓練模型、超參數調整、評估和模型部署。每個步驟都有不同的依附元件,如果您將整個工作流程視為單體,可能會變得不穩定。開始擴展機器學習程序時,可能會想與團隊中的其他人共用機器學習工作流程,以便他們執行及編寫程式碼。如果沒有可靠且能重現的程序,可能會變得困難。透過管道,機器學習程序中的每個步驟都是各自的容器。如此一來,您就能獨立開發步驟,並以可重現的方式追蹤每個步驟的輸入和輸出內容。您也可以根據 Cloud 環境中的其他事件,為管道執行作業排程或觸發執行作業,例如在有新訓練資料時開始執行管道。

重點摘要:管道可協助您簡化及重現機器學習工作流程。

3. Cloud 環境設定

您需要已啟用計費功能的 Google Cloud Platform 專案,才能執行這個程式碼研究室。如要建立專案,請按照這裡的操作說明進行。

步驟 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 啟動

這個虛擬機器搭載您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可以透過瀏覽器或 Chromebook 完成。

連線至 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 控制台的 Vertex AI 專區中,按一下 Workbench:

Vertex AI 選單

接著在「使用者自行管理的筆記本」中,按一下「新增筆記本」

建立新的筆記本

接著選取「TensorFlow 企業版 2.3 (含 LTS)」執行個體類型,但「不含 GPU」

TFE 執行個體

使用預設選項,然後點選「建立」

步驟 5:開啟筆記本

執行個體建立完成後,請選取「Open JupyterLab」

開啟筆記本

4. Vertex Pipelines 設定

必須安裝下列程式庫,才能使用 Vertex Pipelines:

  • Kubeflow 管道:我們將用這個 SDK 建構管道。Vertex Pipelines 支援執行使用 Kubeflow Pipelines 或 TFX 建構的管線。
  • Google Cloud Pipeline 元件:這個程式庫提供預先建構的元件,讓您透過管道步驟輕鬆與 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,可以執行下列指令來取得專案 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:匯入程式庫

新增以下內容,匯入要在本程式碼研究室中使用的程式庫:

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 Machine Learning Dry beans 資料集,來源:KOKLU、M. 和 OZKAN, I.A.、(2020 年)《Multiclass Classification of ry Beans Using Computer Vision and Machine Learning Techniques》(使用電腦視覺和機器學習技術的多重分類分類)。DOI

第一個管道步驟會使用內含此 BERT 資料版本的 BigQuery 資料表,在 Vertex AI 中建立代管資料集。系統會將資料集做為輸入內容傳遞到訓練工作。在訓練程式碼中,我們可以存取環境變數,以存取這個代管資料集。

以下說明如何設定自訂訓練工作:

  • 編寫 Scikit-learn DecisionTreeClassifier 模型,依資料分類豆類
  • 將訓練程式碼封裝在 Docker 容器中,並推送至 Container Registry

接著,我們就能直接在管道中啟動 Vertex AI 訓練工作。立即開始!

步驟 1:在 Docker 容器中定義訓練程式碼

在 Notebooks 執行個體中開啟啟動器並選取終端機:

開啟終端機

然後執行下列指令,設定要新增容器化程式碼的目錄:

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 容器中,且已準備好在 Cloud 中執行訓練。

步驟 2:將容器推送至 Container Registry

完成訓練程式碼後,就可以推送至 Google Container Registry。稍後設定管線的訓練元件時,我們會將 Vertex 管道指向這個容器。

回到終端機,然後從 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 中建立代管資料集
  • 使用我們設定的自訂容器,在 Vertx 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()

執行這個儲存格後,您應該會看到含有連結的記錄檔,上面的連結,可讓您查看在主控台中執行的管道:

管道工作記錄檔

前往該連結。您也可以開啟「Pipelines」(管道) 資訊主頁來存取該資訊主頁。完成之後,管道應如下所示:

已完成簡介管道

這個管道需要 5 到 10 分鐘的執行時間,但您可以在完成前繼續進行下一個步驟。接下來,您將進一步瞭解每個管道步驟所發生的情況。

8. 瞭解管道執行作業

現在來深入瞭解這三個管道步驟

管道步驟 1:建立代管資料集

管道中的第一個步驟是在 Vertex AI 中建立代管資料集。如果您在控制台的「管道」專區中點選下列資料集連結:

從管道建立資料集的連結

您會在 Vertex AI 中看到資料集,其中包括 BigQuery 資料來源的連結,以及資料集中不同資料欄的資訊。將代管資料集上傳至 Vertex AI 後,即可用來訓練 AutoML 或自訂模型。

針對使用代管資料集的自訂模型工作,Vertex AI 會將特殊環境變數傳送至訓練工作,並將資料拆分為訓練集和測試集。我們會在下一個管道步驟中使用此功能。

管道步驟 2:在 Vertex AI 訓練中訓練模型

自訂訓練工作執行期間,只要點選滑鼠,即可直接在 Vertex Pipelines 控制台中查看記錄檔:

自訂訓練記錄檔

您也可以在 Vertex AI 訓練資訊主頁中查看自訂訓練工作的詳細資料。訓練工作完成後,系統會在 Vertex AI 中建立模型資源。接著,我們可以將這個模型部署至端點,以進行線上預測或建立批次預測工作。我們將在下一個管道步驟中執行這項操作。

管道步驟 3:透過我們的模型執行批次預測工作

最後,我們的管道將根據我們透過 CSV 檔案傳遞的範例取得預測結果。批次預測工作完成後,Vertex AI 會將 CSV 檔案寫入我們在 Cloud Storage 中指定的位置。這個管道步驟開始執行後,您可以前往 Vertex AI 控制台的「Batch Predictions」(批次預測) 部分,查看已建立的工作。

完成後,按一下該項工作,即可查看批次預測的 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」(筆記本) UI 中,依序選取筆記本和「Stop」(停止)。如要將執行個體完全刪除,請選取 [Delete] (刪除)

停止執行個體

步驟 2:刪除 Cloud Storage 值區

如要刪除 Storage 值區,請使用 Cloud 控制台中的導覽選單前往「Storage」(儲存空間)、選取值區,然後點選「Delete」(刪除):

刪除儲存空間