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

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 提供許多不同的產品,可支援端對端機器學習工作流程。本研究室將著重介紹下列產品:預測與筆記本。

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 選單

接著選取「New Instance」。接著選取「TensorFlow 企業版 2.3」執行個體類型,但「不含 GPU」

TFE 執行個體

使用預設選項,然後點選「建立」。執行個體建立完成後,請選取「Open JupyterLab」

開啟 CAIP 筆記本

4. 訓練 BigQuery ML 模型

BigQuery ML 可讓您使用 BigQuery 中儲存的資料訓練自訂機器學習模型。您可以在 SQL 中訓練並取得模型預測結果。在這個研究室中,我們會使用 BigQuery 中的公開資料集來預測信用卡付款預設可能性的可能性。

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

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

建立 BQ 資料集

在「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 值區

在模型詳細資料中,按一下「Export Model」

匯出 BQML 模型

系統會提示你輸入模型資產的 Google Cloud Storage (GCS) 位置。如果您尚未建立 GCS 值區,請不用擔心!即將建立一個。首先,按一下「瀏覽」

瀏覽 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-central1europe-west4asia-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」(刪除):

刪除儲存空間