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。

3. 设置环境
您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。
第 1 步:启用 Compute Engine API
前往 Compute Engine,然后选择启用(如果尚未启用)。您需要此权限才能创建笔记本实例。
第 2 步:启用 Vertex AI API
前往 Cloud Console 的 Vertex AI 部分,然后点击启用 Vertex AI API。

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

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

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

4. 训练 BigQuery ML 模型
借助 BigQuery ML,您可以使用存储在 BigQuery 中的数据训练自定义机器学习模型。您可以在 SQL 中训练模型并获取预测结果。在本实验中,我们将使用 BigQuery 中公开提供的数据集来预测信用卡付款违约的可能性。
第 1 步:在项目中创建 BigQuery 数据集
如需在 BigQuery ML 中训练模型,您需要在项目中创建一个数据集来存储该模型。点击左侧菜单栏中的项目,然后选择创建数据集:

在数据集 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 之间的数值,表明运行大约需要一分钟。完成后,您会在数据集下方看到相应模型:

您可以点击模型,查看其训练和评估指标。
5. 导出 BigQuery ML 模型
借助训练好的 BQML 模型,我们可以使用 BQML SQL 语法来获取预测结果,也可以导出模型以将其部署到其他位置。在此处,我们将导出模型,以便将其部署到 Vertex AI,从而以可扩缩的方式提供模型服务并获取预测结果。
第 1 步:为模型创建 Cloud Storage 存储分区
在模型详情中,点击导出模型:

系统会提示您输入要将模型资源导出到的 Google Cloud Storage (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-central1、europe-west4 或 asia-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 中的导航菜单,浏览到“存储空间”,选择您的存储桶,然后点击“删除”:
