Vertex AI:匯出及部署 BigQuery 機器學習模型,以便進行預測

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。

Vertex 產品總覽

3. 設定環境

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

步驟 1:啟用 Compute Engine API

前往「Compute Engine」,然後選取「啟用」 (如果尚未啟用)。您需要這項資訊才能建立筆記本執行個體。

步驟 2:啟用 Vertex AI API

前往 Cloud 控制台的 Vertex AI 專區,然後點選「啟用 Vertex AI API」

Vertex AI 資訊主頁

步驟 3:建立 Notebooks 執行個體

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

Vertex AI 選單

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

TFE 執行個體

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

開啟 CAIP 筆記本

4. 訓練 BigQuery ML 模型

BigQuery ML 可讓您使用儲存在 BigQuery 中的資料,訓練自訂機器學習模型。您可以在 SQL 中訓練模型並取得預測結果。在本實驗室中,我們將使用 BigQuery 中的公開資料集,預測信用卡付款的違約機率。

步驟 1:在專案中建立 BigQuery 資料集

如要在 BigQuery ML 中訓練模型,您需要在專案中建立資料集來儲存模型。在左側選單列中點選專案,然後選取「建立資料集」

建立 BigQuery 資料集

在「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 之間的數值,表示大約需要一分鐘才能執行。完成後,您會在資料集下方看到模型:

BQML 模型詳細資料

您可以點選模型,查看訓練和評估指標。

5. 匯出 BigQuery ML 模型

訓練 BQML 模型後,我們可以使用 BQML SQL 語法取得預測結果,也可以匯出模型並部署到其他位置。我們將在此匯出模型,以便部署至 Vertex AI,大規模提供模型服務並取得預測結果。

步驟 1:為模型建立 Cloud Storage bucket

在模型詳細資料中,按一下「匯出模型」

匯出 BQML 模型

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

瀏覽 GCS bucket

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

新的 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-central1europe-west4asia-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」:

刪除儲存空間