使用 Vertex AI 上的远程模型进行预测
您可以将 Vertex AI 端点注册为远程模型,并使用 ML.PREDICT
直接从 BigQuery 调用此端点。
当模型太大而无法导入 BigQuery 或者您想要对在线、批量和微批量用例使用单一推断点时,这一做法非常有用。
本教程通过使用纯文本 IMDB 电影评论对 BERT 模型进行微调,来使用自定义的情感分析模型。生成的模型使用文本输入(电影评论)并返回 0 到 1 之间的情感得分。该模型在 Vertex AI Model Registry 中注册,并在 Vertex AI 端点上提供。接着,该模型会添加到 BigQuery 中作为远程模型。您可以使用 BigQuery 中的远程模型来获取一个文本列(100,000 行表 bigquery-public-data.imdb.reviews
中的电影评论)的情感预测。
如需查看 Python 版本的 GitHub 教程,请参阅 BQML 远程模型教程。
工作流概览
教程设置
本教程使用 Google Cloud 的以下收费组件:Cloud Storage、Vertex AI 和 BigQuery。在本教程结束时,您将移除收费组件。
- 点击此处启用 Vertex AI、Cloud Storage 和 BigQuery Cloud Resource Connections 的 API。
- Cloud Storage:按照这些说明在默认的
US
多区域中创建存储桶。
创建机器学习模型
使用 BQML 远程模型教程创建模型,其中包括在添加分类层时通过微调 BERT 模型创建的情感分析预测模型。
我们已训练了一个示例模型,并将其上传到 gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/
以供您直接使用。
在 Vertex AI 上部署模型
按照说明在 Vertex AI Model Registry 中注册模型。
按照说明将模型从 Vertex AI Model Registry 部署到 Vertex AI 端点。
我们建议设置计算节点数上限。这将在 Vertex AI 端开启自动扩缩功能,并在 BigQuery 数据表包含大量行时帮助端点处理更多请求。
BigQuery 机器学习远程模型
创建 BigQuery 机器学习远程模型有两个组件:BigQuery Cloud 资源连接和使用该连接的 BigQuery 远程模型。
创建 BigQuery Cloud 资源连接
您必须具有 Cloud 资源连接才能连接到 Vertex AI。
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
如需创建连接,请点击
添加,然后点击与外部数据源的连接。在连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
在连接 ID 字段中,输入连接的名称。
点击创建连接。
点击转到连接。
在连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。
bq
在命令行环境中,创建连接:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
参数会替换默认项目。替换以下内容:
REGION
:您的连接区域PROJECT_ID
:您的 Google Cloud 项目 IDCONNECTION_ID
:您的连接的 ID
当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。
问题排查:如果您收到以下连接错误,请更新 Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
检索并复制服务账号 ID 以在后续步骤中使用:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
输出类似于以下内容:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
使用 google_bigquery_connection
资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例会在 US
区域中创建一个名为 my_cloud_resource_connection
的 Cloud 资源连接:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
设置访问权限
向连接的服务账号授予 Vertex AI User 角色。您必须在打算在创建 BigQuery ML 远程模型部分中的远程模型端点网址(如果您使用的是短版本端点,则为您的模型项目)中指定的项目中授予此角色。在其他项目中授予此角色会导致错误 bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
。
如需授予该角色,请按以下步骤操作:
前往 IAM 和管理页面。
点击
授予访问权限。在新的主账号字段中,输入您之前复制的服务账号 ID。
在选择角色字段中,选择 Vertex AI,然后选择 Vertex AI User 角色。
点击保存。
创建数据集
创建 BigQuery 数据集以存储您的机器学习模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在创建数据集页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
公共数据集存储在
US
多区域中。为简单起见,请将数据集存储在同一位置。保持其余默认设置不变,然后点击创建数据集。
创建 BigQuery 机器学习远程模型
通过向端点发送请求来查看 TensorFlow 模型的输入和输出架构:
请求的示例:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:predict -d "{'instances': [{ 'text': 'This is an amazing movie'}, { 'text': 'The movie was terrible'}]}"
响应的示例:
{
"predictions": [
[
[ 0.999410391 ]
],
[
[ 0.000628352049 ]
]
]
}
创建远程模型时,输入和输出字段名称和类型必须与 Vertex AI 输入和输出完全相同。
对于具有单个输出的模型,Vertex AI 不会返回字段名称。在 CREATE MODEL
中,您可以指定任何字段名称。
以下示例展示了如何使用连接创建远程模型:
CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
INPUT (text STRING)
OUTPUT(scores ARRAY<FLOAT64>)
REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS(endpoint = 'ENDPOINT_URL')
使用 ML.PREDICT
获取预测
使用 ML.PREDICT
函数从 BigQuery 中的远程模型获取预测。此处选择并发送 10,000 条记录以获取预测。远程模型默认的请求批次大小为 128 个请求。
SELECT *
FROM ML.PREDICT (
MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
(
SELECT review as text
FROM `bigquery-public-data.imdb.reviews`
LIMIT 10000
)
)
支持的区域
BigQuery 中有两种类型的位置:
- 单区域位置是单个具体的地理位置,如伦敦。
- 多区域是指至少包含两个地理位置的大型地理区域,例如美国。
单区域
在 BigQuery 单区域数据集中,您所创建的远程模型只能使用同一区域中部署的 Vertex AI 端点。BigQuery 单区域 us-central1 中的远程模型只能使用 us-central1
中的 Vertex AI。因此,对于单区域,只有同时支持 Vertex AI 和 BigQuery 的区域才支持远程模型。
多区域
在 BigQuery 多区域(US
、EU
)数据集中,您所创建的远程模型只能使用同一大型地理区域(US
、EU
)内的区域中部署的远程模型。例如:BigQuery US 多区域中的远程模型只能使用美国地理区域内的单区域(例如 us-central1
、us-east4
、us-west2
等)中部署的 Vertex AI 端点。
BigQuery EU 多区域中的远程模型只能使用欧盟成员国的单区域(例如 europe-north1
、europe-west3
等)中部署的 Vertex AI 端点。
如需详细了解 BigQuery 单区域和多区域,请参阅数据集位置页面。如需详细了解 Vertex AI 区域,请参阅 Vertex AI 位置。
使用 VPC Service Controls
VPC Service Controls 是 Google Cloud 的一项功能,可让您设置安全的边界以防数据渗漏。如需将 VPC Service Controls 与远程模型搭配使用以提高安全性,请按照 VPC Service Controls 指南创建服务边界。
使用远程模型将查询的 BigQuery 项目添加到边界中。将端点项目添加到边界中,并根据端点类型在受限服务中设置 Vertex AI API。如需了解详情,请参阅 Vertex AI VPC Service Controls。
清理
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.