1. 總覽
在本研究室中,您將使用 BigQuery Machine Learning 訓練模型,然後將模型匯出並部署至 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 提供許多不同的產品,可支援端對端機器學習工作流程。本研究室將著重介紹下列產品:預測與筆記本。
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」(筆記本):
接著選取「New Instance」。接著選取「TensorFlow 企業版 2.3」執行個體類型,但「不含 GPU」:
使用預設選項,然後點選「建立」。執行個體建立完成後,請選取「Open JupyterLab」:
4. 訓練 BigQuery ML 模型
BigQuery ML 可讓您使用 BigQuery 中儲存的資料訓練自訂機器學習模型。您可以在 SQL 中訓練並取得模型預測結果。在這個研究室中,我們會使用 BigQuery 中的公開資料集來預測信用卡付款預設可能性的可能性。
步驟 1:在專案中建立 BigQuery 資料集
如要在 BigQuery ML 中訓練模型,您必須在專案中建立資料集來儲存此模型。在左側選單列中點選您的專案,然後選取「Create Dataset」:
在「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 值區
在模型詳細資料中,按一下「Export Model」:
系統會提示你輸入模型資產的 Google Cloud Storage (GCS) 位置。如果您尚未建立 GCS 值區,請不用擔心!即將建立一個。首先,按一下「瀏覽」:
然後點選 + 圖示來建立新值區:
為值區指定不重複的名稱 (儲存空間值區名稱在全域範圍內不得重複)。按一下「Continue」(繼續)。在下一個步驟中,選取「位置類型」下方的「區域」,然後從下拉式選單中選擇任何區域:
使用預設的儲存空間級別,並在存取權控管下方確認已選取「統一」:
按一下「繼續」,其餘選項則使用預設值。然後按一下 [Create] (建立)。
步驟 2:匯出 BQML 模型
建立新值區後,請在「名稱」欄位中輸入 model-assets
(或任何所需內容),然後按一下「選取」:
然後點選「匯出」。這項操作會在 BigQuery 中建立工作,以 TensorFlow 的 1 格式將模型匯出至您指定的新建 GCS 值區。匯出程序大約需要一分鐘。
在模型匯出期間,前往 Cloud 控制台的「儲存空間」部分。工作完成後,您應該會在 model-assets
子目錄下看見匯出至剛建立的值區的模型資產:
6. 將模型匯入 Vertex AI
在這個步驟中,我們會參照剛才匯出模型資產的 GCS 儲存位置,以便建立模型並匯入 Vertex AI。
步驟 1:匯入模型
在 Cloud 控制台中,前往 Vertex AI 的「模型」專區。然後選取「匯入」:
請在第一個步驟中,為模型命名 predict_default
。選取當初建立值區的地區 (us-central1、europe-west4 或 asia-east1)。然後按一下「繼續」。在「模型設定」中,保留「將模型構件匯入新的預先建構容器」已選取。
在「模型架構」下拉式選單中,選取「TensorFlow」。接著選取「2.3」做為架構版本。
在「模型成品位置」欄位中按一下「瀏覽」,點選進入您剛建立的 GCS 值區,然後點選「model-assets」目錄:
然後按一下「匯入」。模型匯入作業需要幾分鐘才能完成。建立完畢之後,您會在 Cloud 控制台的「模型」部分看到這個模型:
7. 將模型部署至端點
現在我們已上傳模型,下一步是在 Vertex 中建立端點。Vertex 中的模型資源可能有多個相關聯的端點,您可以將流量拆分至各個端點。
步驟 1:建立端點
在模型頁面上,前往「Deploy and test」分頁,然後按一下「Deploy toEndpoint」:
為端點命名 (例如 default_pred_v1
),將流量拆分設定保持不變,然後選取模型部署的機器類型。這裡使用 n1-highcpu-2
,但您可以選擇您想要的任何機器類型。
接著選取「完成」,然後按一下「繼續」。將所選位置設定維持不變,然後點選「部署」。端點會在幾分鐘內部署完畢。完成時,待完成事項旁會顯示綠色勾號:
就快大功告成了!現在,您可以從部署的模型取得預測結果了。
8. 針對已部署的模型取得預測結果
取得模型預測結果的方式如下:
- Vertex AI UI
- Vertex AI API
以下說明如何透過 API 取得預測結果
步驟 1:透過 Vertex AI API 取得模型預測結果
為協助您瞭解如何在這裡取得模型預測結果,我們將使用您在本研究室一開始建立的 Vertex 筆記本執行個體。
接著,開啟您建立的筆記本執行個體,然後從啟動器開啟 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 的程式碼複製到筆記本,然後執行儲存格:
接著,針對先前建立值區和模型的區域新增變數。取代下方字串中的 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 筆記本和 curl 取得已部署端點的預測結果
如要進一步瞭解 Vertex AI 的其他部分,請參閱說明文件。
9. 清除
如果想繼續使用您在這個研究室中建立的筆記本,建議在不使用時將其關閉。在 Cloud 控制台的「Notebooks」(筆記本) UI 中,依序選取筆記本和「Stop」(停止):
如想完全刪除筆記本,只要按一下右上方的「刪除」按鈕即可。
如要刪除您部署的端點,請前往 Vertex AI 控制台的「端點」部分,然後按一下「刪除」圖示:
如要刪除 Storage 值區,請使用 Cloud 控制台中的導覽選單前往「Storage」(儲存空間)、選取值區,然後點選「Delete」(刪除):