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 包含许多不同的产品,可支持端到端机器学习工作流。本实验将重点介绍下面突出显示的产品:Prediction 和 Notebooks。

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 实例

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

Vertex AI 菜单

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

TFE 实例

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

打开 CAIP Notebook

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 替换为您的云项目的名称:

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 的 SavedModel 格式导出到您指定的新创建的 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 界面中,点击您刚刚部署的端点的示例请求

示例请求

将 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 控制台的笔记本界面中,选择笔记本,然后选择停止

可停止实例

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

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

删除端点

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

删除存储空间