1. 總覽
在本實驗室中,您將使用 BigQuery 機器學習訓練模型,然後將該模型匯出並部署至 Vertex AI。這是 Google Cloud 最新推出的 AI 產品服務。
課程內容
內容如下:
- 使用 BigQuery Machine Learning (BQML) 訓練模型
- 將 BQML 模型匯出至 Cloud Storage
- 將訓練好的 BQML 模型部署至 Vertex AI
- 從部署的模型取得預測結果
在 Google Cloud 上執行這個實驗室的總費用約為 $2 美元。
2. Vertex AI 簡介
本實驗室使用 Google Cloud 最新推出的 AI 產品服務。Vertex AI 整合了 Google Cloud 機器學習服務,提供流暢的開發體驗。以 AutoML 訓練的模型和自訂模型,先前需透過不同的服務存取。這項新服務將兩者併至單一 API,並加入其他新產品。您也可以將現有專案遷移至 Vertex AI。如有任何意見,請參閱支援頁面。
Vertex AI 包含許多不同的產品,可支援端對端機器學習工作流程。本實驗室將著重於下列產品:預測和 Notebooks。

3. 設定環境
您必須擁有已啟用計費功能的 Google Cloud Platform 專案,才能執行這項程式碼研究室。如要建立專案,請按照這裡的說明操作。
步驟 1:啟用 Compute Engine API
前往「Compute Engine」,然後選取「啟用」 (如果尚未啟用)。您需要這項資訊才能建立筆記本執行個體。
步驟 2:啟用 Vertex AI API
前往 Cloud 控制台的 Vertex AI 專區,然後點選「啟用 Vertex AI API」。

步驟 3:建立 Notebooks 執行個體
部署模型後,我們將使用 Notebooks 取得預測結果。在 Cloud 控制台的 Vertex AI 專區中,按一下「Notebooks」:

然後選取「新增執行個體」。然後選取「TensorFlow Enterprise 2.3」執行個體類型,且不加入任何 GPU:

使用預設選項,然後按一下「建立」。建立執行個體後,請選取「Open JupyterLab」:

4. 訓練 BigQuery ML 模型
BigQuery ML 可讓您使用儲存在 BigQuery 中的資料,訓練自訂機器學習模型。您可以在 SQL 中訓練模型並取得預測結果。在本實驗室中,我們將使用 BigQuery 中的公開資料集,預測信用卡付款的違約機率。
步驟 1:在專案中建立 BigQuery 資料集
如要在 BigQuery ML 中訓練模型,您需要在專案中建立資料集來儲存模型。在左側選單列中點選專案,然後選取「建立資料集」:

在「Dataset ID」(資料集 ID) 欄位中,輸入 cc_default。其餘欄位保留預設值,然後點選「建立資料集」。
步驟 2:執行 CREATE MODEL 查詢
在 BigQuery 查詢編輯器中,執行下列 CREATE MODEL 查詢,在我們將使用的公開資料集上建立及訓練 BigQuery ML 模型。請務必將 your-project 替換為 Cloud 專案的名稱:
CREATE OR REPLACE MODEL
`your-project.cc_default.logistic_model` OPTIONS(model_type='LOGISTIC_REG',
input_label_cols=['default_payment_next_month']) AS
SELECT
limit_balance,
sex,
education_level,
marital_status,
age,
pay_0,
pay_2,
pay_3,
pay_4,
pay_5,
pay_6,
bill_amt_1,
bill_amt_2,
bill_amt_3,
bill_amt_4,
bill_amt_5,
bill_amt_6,
pay_amt_1,
pay_amt_2,
pay_amt_3,
pay_amt_4,
pay_amt_5,
pay_amt_6,
default_payment_next_month
FROM
`bigquery-public-data.ml_datasets.credit_card_default`
這會建立邏輯迴歸模型,輸出介於 0 到 1 之間的數值,表示大約需要一分鐘才能執行。完成後,您會在資料集下方看到模型:

您可以點選模型,查看訓練和評估指標。
5. 匯出 BigQuery ML 模型
訓練 BQML 模型後,我們可以使用 BQML SQL 語法取得預測結果,也可以匯出模型並部署到其他位置。我們將在此匯出模型,以便部署至 Vertex AI,大規模提供模型服務並取得預測結果。
步驟 1:為模型建立 Cloud Storage bucket
在模型詳細資料中,按一下「匯出模型」:

系統會提示您輸入要匯出模型資產的 Google Cloud Storage (GCS) 位置。如果還沒有 GCS bucket,也別擔心!我們即將建立一個。首先,按一下「瀏覽」:

然後按一下「+」圖示,建立新的值區:

為其指定不重複的名稱 (Storage bucket 名稱在全域範圍內都不得重複)。按一下「繼續」。在下一個步驟中,於「位置類型」下方選取「區域」,然後從下拉式選單中選擇任一區域:

使用預設儲存空間類別,並在存取控管下方確認已選取「統一」:

按一下「繼續」,其餘選項則使用預設值。然後按一下 [Create] (建立)。
步驟 2:匯出 BQML 模型
建立新 bucket 後,在「Name」(名稱) 欄位中輸入 model-assets (或任何您想要的名稱),然後按一下「Select」(選取):

然後按一下「匯出」。這會在 BigQuery 中建立工作,將模型以 TensorFlow 的 SavedModel 格式匯出至您指定的新建 GCS bucket。匯出作業約需一分鐘。
模型匯出期間,請前往 Cloud 控制台的「儲存空間」部分。工作完成後,您應該會看到模型資產已匯出至剛才建立的 bucket,並位於 model-assets 子目錄下:

6. 將模型匯入 Vertex AI
在這個步驟中,我們會參照剛才匯出模型資產的 GCS 儲存空間位置,建立模型並匯入 Vertex AI。
步驟 1:匯入模型
在 Cloud 控制台中,前往 Vertex AI 「模型」部分。然後選取「匯入」:

在第一個步驟中,為模型命名為 predict_default。選取您建立水桶的相同地區 (us-central1、europe-west4 或 asia-east1)。然後點按「繼續」。在「模型設定」中,保留選取的「將模型構件匯入新的預建容器」。
在「Model framework」(模型架構) 下拉式選單中,選取「TensorFlow」。然後選取「2.3」做為架構版本。
在「模型構件位置」欄位中,按一下「瀏覽」,然後點選您剛建立的 GCS 值區,並按一下「model-assets」目錄:

然後按一下「匯入」。匯入模型需要幾分鐘。建立完成後,您會在 Cloud 控制台的模型部分看到該模型:

7. 將模型部署至端點
模型上傳完畢後,下一步就是在 Vertex 中建立端點。Vertex 中的模型資源可能有多個相關聯的端點,您可以將流量拆分至各個端點。
步驟 1:建立端點
在模型頁面中,前往「部署及測試」分頁,然後點選「部署至端點」:

為端點命名 (例如 default_pred_v1),流量拆分設定維持不變,然後選取模型部署的機器類型。我們使用了 n1-highcpu-2,但您可以選擇任何想要的機器類型。
然後選取「完成」,並點選「繼續」。保留選取的位置設定,然後點選「部署」。端點會在幾分鐘內部署完畢。完成後,旁邊會顯示綠色勾號:

就快完成了!現在,您可以從部署的模型取得預測結果了。
8. 從部署的模型取得預測結果
您可以透過幾種方式取得模型預測結果:
- Vertex AI 使用者介面
- Vertex AI API
本文將說明如何透過 API 取得預測結果
步驟 1:使用 Vertex AI API 取得模型預測結果
為示範如何取得模型預測結果,我們將使用在本實驗室一開始建立的 Vertex Notebook 執行個體。
接著開啟您建立的筆記本執行個體,然後從啟動器開啟 Python 3 筆記本:

在筆記本中,於儲存格中執行下列指令,將測試範例寫入名為 default-pred.json 的 JSON 檔案。我們會將這個範例傳送至模型,以進行預測:
%%writefile default-pred.json
{
"instances": [
{"age": 39,
"bill_amt_1": 47174,
"bill_amt_2": 47974,
"bill_amt_3": 48630,
"bill_amt_4": 50803,
"bill_amt_5": 30789,
"bill_amt_6": 15874,
"education_level": "1",
"limit_balance": 50000,
"marital_status": "2",
"pay_0": 0,
"pay_2":0,
"pay_3": 0,
"pay_4": 0,
"pay_5": "0",
"pay_6": "0",
"pay_amt_1": 1800,
"pay_amt_2": 2000,
"pay_amt_3": 3000,
"pay_amt_4": 2000,
"pay_amt_5": 2000,
"pay_amt_6": 2000,
"sex": "1"}
]
}
接著,在 Vertex UI 中,點選剛部署端點的「Sample Request」:

將 REST 分頁中步驟 4 的程式碼複製到筆記本,然後執行儲存格:

然後為您建立 bucket 和模型的區域新增變數。在下列字串中,將 your-region 替換為:
REGION="your-region" # either us-central1, europe-west4, or asia-east1
最後,將下列程式碼複製到筆記本中,使用 curl 向端點提出預測要求:
!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-prediction-aiplatform.googleapis.com/v1alpha1/projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID:predict \
-d "@default-pred.json"
您看到的畫面應如下所示 (實際預測值會略有不同):
{
"predictions": [
{
"default_payment_next_month_values": [
"1",
"0"
],
"default_payment_next_month_probs": [
0.180815295299778,
0.819184704700222
],
"predicted_default_payment_next_month": [
"0"
]
}
],
"deployedModelId": "your-model-id"
}
default_payment_next_month_probs 中的值會顯示每個類別的機率。以這個例子來說,我們的模型預測此人有 81% 的機率不會在下次付款時違約。.819 值會對應至 0 類別 (非預設)。
🎉 恭喜!🎉
您已學會如何:
- 在 BQML 中訓練模型
- 將 BQML 模型匯出至 Cloud Storage
- 將 BQML 模型匯入 Vertex AI 以進行預測
- 建立 Vertex AI 模型,並將模型部署至端點
- 透過 Vertex Notebooks 和 curl 取得已部署端點的預測結果
如要進一步瞭解 Vertex AI 的其他部分,請參閱說明文件。
9. 清除
如要繼續使用在本實驗室中建立的筆記本,建議您在未使用時關閉筆記本。在 Cloud 控制台的 Notebooks 使用者介面中,選取筆記本,然後選取「停止」:

如要徹底刪除記事本,請按一下右上方的「刪除」按鈕。
如要刪除已部署的端點,請前往 Vertex AI 控制台的「端點」專區,然後按一下刪除圖示:

如要刪除 Storage Bucket,請使用 Cloud 控制台中的導覽選單瀏覽至 Storage,選取 bucket,然後按一下「Delete」:
