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 的機器學習產品整合至 Google Cloud,提供流暢的開發體驗。除了模型訓練和部署服務,Vertex AI 也提供多種機器學習運作產品,包括 Vertex Pipelines (本實驗室的重點)、Model Monitoring、特徵儲存庫等。所有 Vertex AI 產品項目均如下圖所示。
如有任何意見,請參閱支援頁面。
機器學習管道為何很實用?
在深入說明之前,讓我們先瞭解您想使用管道的原因。假設您正在建構機器學習工作流程,其中包含處理資料、訓練模型、超參數調整、評估和模型部署。這些步驟各自可能有不同的依附元件,如果您將整個工作流程視為單一應用程式,可能會變得難以管理。開始擴大機器學習程序時,您可能會想與團隊中的其他成員分享機器學習工作流程,讓他們執行並提供程式碼。但如果沒有可靠且可重現的程序,這項工作就會變得困難。在管道中,機器學習程序的每個步驟都是獨立的容器。這樣一來,您就能獨立開發各個步驟,並以可重現的方式追蹤每個步驟的輸入和輸出。您也可以根據 Cloud 環境中的其他事件,排定或觸發管道的執行作業,例如在有新訓練資料時啟動管道執行作業。
重點摘要:管道可協助您簡化和重現機器學習工作流程。
3. Cloud 環境設定
您必須擁有啟用計費功能的 Google Cloud Platform 專案,才能執行這個程式碼研究室。如要建立專案,請按照這裡的操作說明進行。
步驟 1:啟動 Cloud Shell
在本研究室中,您將會透過 Cloud Shell 工作階段執行,也就是由在 Google 雲端環境中運作的虛擬機器託管的指令解譯器。您可以和在自己的電腦本機輕鬆執行這個部分,但只要使用 Cloud Shell,就能在一致的環境中提供可重現的體驗。實驗室結束後,歡迎您在自己的電腦上重試這一節。
啟用 Cloud Shell
在 Cloud 控制台右上方,按一下下方的按鈕,即可啟用 Cloud Shell:
如果您從未啟動 Cloud Shell,系統會顯示中間畫面 (在折疊下方),說明 Cloud Shell 的用途。如果是這種情況,請按一下「Continue」 (您之後就不會再看到這個畫面)。這裡是一次性畫面的外觀:
佈建並連線至 Cloud Shell 只需幾分鐘的時間。
這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,可大幅提升網路效能和驗證功能。您可以使用瀏覽器或 Chromebook 完成本編碼實驗室的大部分工作,甚至是全部工作。
連線至 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
,其中包含目前 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」:
接著在「使用者自行管理的 Notebooks」中,按一下「New Notebook」:
接著選取「TensorFlow 企業版 2.3 (含 LTS)」執行個體類型,且不加入任何 GPU:
使用預設選項,然後按一下「建立」。
步驟 5:開啟 Notebook
建立執行個體後,請選取「Open JupyterLab」:
4. Vertex Pipelines 設定
如要使用 Vertex Pipelines,您還需要安裝一些額外的程式庫:
- Kubeflow Pipelines:這是我們用來建構管道的 SDK。Vertex Pipelines 支援使用 Kubeflow Pipelines 或 TFX 建構的管線執行作業。
- Google Cloud Pipeline 元件:這個程式庫提供預先建構的元件,可讓您更輕鬆地透過管道步驟與 Vertex AI 服務互動。
步驟 1:建立 Python 筆記本並安裝程式庫
首先,請在 Notebook 執行個體的「Launcher」選單中 (可透過點選筆記本左上方的「+」圖示存取),選取「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 和值區
在這個研究室中,您會參照 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 dataset,來源為:KOKLU, M. and OZKAN, I.A., (2020 年)《Multiclass Classification of ry Beans Using Computer Vision and Machine Learning Techniques》(使用電腦視覺和機器學習技術的多重類別分類)。DOI。
在第一個管道步驟中,我們會使用包含此豆類資料版本的 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")
接著,返回 Notebook 並執行以下指令,將上述指令碼中的 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 區段」,確認您的容器是否存在。如下所示:
6. 設定批次預測工作
管道最後一個步驟會執行批次預測工作。為使這項功能運作,我們需要在 Cloud Storage 中提供 CSV 檔案,其中包含我們要取得預測結果的範例。我們會在 Notebook 中建立這個 CSV 檔案,然後使用 gsutil
指令列工具將檔案複製到 Cloud Storage。
將批次預測範例複製到 Cloud Storage
以下檔案包含豆類資料集中各個類別的 3 個範例。以下範例不包含 Class
欄,因為這是我們的模型預測的值。執行下列指令,在本機的 Notebook 中建立這個 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 AI Pipelines 圖表
- 使用預先建構的管道元件,將 Vertex AI 服務新增至管道
- 排定週期性管道工作
如要進一步瞭解 Vertex 的其他部分,請參閱說明文件。
9. 清除
為避免產生費用,建議您刪除在本研究室中建立的資源。
步驟 1:停止或刪除 Notebooks 執行個體
如果您想繼續使用在本實驗室中建立的 Notebook,建議您在未使用時關閉 Notebook。在 Cloud 控制台的 Notebook 使用者介面中,選取 Notebook,然後選取「Stop」。如要完全刪除執行個體,請選取「刪除」:
步驟 2:刪除 Cloud Storage 值區
如要刪除儲存體值區,請使用 Cloud 控制台的「導覽」選單,前往「儲存體」頁面,選取所需值區,然後按一下「刪除」: