Vertex AI:导出和部署用于预测的 BigQuery 机器学习模型

1. 概览

在本实验中,您将使用 BigQuery Machine Learning 训练模型,然后将该模型导出并部署到 Vertex AI。这是 Google Cloud 上最新的 AI 产品。

学习内容

您将了解如何:

  • 使用 BigQuery 机器学习 (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 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。

第 1 步:启用 Compute Engine API

前往 Compute Engine,然后选择启用(如果尚未启用)。您需要用它来创建笔记本实例。

第 2 步:启用 Vertex AI API

前往 Cloud Console 的 Vertex AI 部分,然后点击启用 Vertex AI API

Vertex AI 信息中心

第 3 步:创建 Notebooks 实例

在部署模型后,我们将使用笔记本来获取预测结果。在 Cloud 控制台的 Vertex AI 部分中,点击“笔记本”:

Vertex AI 菜单

在此处,选择新建实例。然后选择不带 GPUTensorFlow 企业版 2.3 实例类型:

TFE 实例

使用默认选项,然后点击创建。创建实例后,选择打开 JupyterLab

打开 CAIP 笔记本

4. 训练 BigQuery ML 模型

借助 BigQuery ML,您可以使用 BigQuery 中存储的数据来训练自定义机器学习模型。您可以在 SQL 中通过模型进行训练和获取预测结果。在本实验中,我们将使用 BigQuery 中公开可用的数据集来预测信用卡付款失败的可能性。

第 1 步:在项目中创建 BigQuery 数据集

如需在 BigQuery ML 中训练模型,您需要在项目中创建数据集以存储此模型。在左侧菜单栏中点击您的项目,然后选择创建数据集

创建 BQ 数据集

数据集 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 存储分区

在模型详细信息中,点击导出模型

导出 BQML 模型

系统会提示您输入希望将模型资产导出到的 Google Cloud Storage (GCS) 位置。如果您还没有 GCS 存储分区,别担心!我们即将创建一个。首先,点击浏览

浏览 GCS 存储分区

然后点击 + 图标以创建新的存储分区:

新建 GCS 存储分区

为其指定唯一名称(存储分区名称必须是全局唯一的)。点击继续。在下一步中,在位置类型下,选择区域,然后从下拉菜单中选择任意区域:

存储分区位置

使用默认存储类别,并确保在访问权限控制下选择统一

统一访问权限控制

点击“继续”,对其余选项使用默认值。然后点击 Create(创建)。

第 2 步:导出 BQML 模型

创建新存储分区后,在名称字段中输入 model-assets(或您喜欢的任何内容),然后点击选择

模型导出路径

然后,点击导出。这将在 BigQuery 中创建一项作业,以 TensorFlow 的 DDA 格式将模型导出到您指定的新创建的 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 步:创建端点

在您的模型页面上,转到部署和测试标签页,然后点击部署到端点

部署和测试

为端点命名(如 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 界面中,点击您刚部署的端点对应的 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 Notebooks 和 curl 对已部署的端点进行预测

如需详细了解 Vertex AI 的不同部分,请参阅文档

9. 清理

如果您想继续使用在本实验中创建的笔记本,建议您在不使用时将其关闭。在 Cloud 控制台的 Notebooks 界面中,选择相应笔记本,然后选择停止

可停止实例

如果您想完全删除该笔记本,只需点击右上角的“删除”按钮即可。

如需删除已部署的端点,请前往 Vertex AI 控制台的端点部分,然后点击删除图标:

删除端点

如需删除存储桶,请使用 Cloud Console 中的导航菜单,浏览到“存储空间”,选择您的存储桶,然后点击“删除”:

删除存储空间