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 包含许多不同的产品,可支持端到端机器学习工作流。本实验将重点介绍下面突出显示的产品:预测和笔记本。
3. 设置您的环境
您需要一个启用了结算功能的 Google Cloud Platform 项目才能运行此 Codelab。如需创建项目,请按照此处的说明操作。
第 1 步:启用 Compute Engine API
前往 Compute Engine,然后选择启用(如果尚未启用)。您需要用它来创建笔记本实例。
第 2 步:启用 Vertex AI API
前往 Cloud Console 的 Vertex AI 部分,然后点击启用 Vertex AI API。
第 3 步:创建 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
替换为您的 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 之间的数值(表示运行大约一分钟)。完成后,您会在数据集下看到该模型:
您可以点击模型以查看其训练和评估指标。
5. 导出 BigQuery ML 模型
借助经过训练的 BQML 模型,我们可以使用 BQML SQL 语法来获取预测结果,或者导出模型以将其部署到其他位置。在这里,我们将导出模型,以便将其部署到 Vertex AI,从而以可扩缩的方式提供模型并获取预测结果。
第 1 步:为模型创建 Cloud Storage 存储分区
在模型详细信息中,点击导出模型:
系统会提示您输入希望将模型资产导出到的 Google Cloud Storage (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-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 界面中,点击您刚部署的端点对应的 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 中的导航菜单,浏览到“存储空间”,选择您的存储桶,然后点击“删除”: