使用 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。在本教程结束时,您将移除收费组件。

  1. 点击此处启用 Vertex AI、Cloud Storage 和 BigQuery Cloud Resource Connections 的 API。
  2. 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。

从下列选项中选择一项:

控制台

  1. 转到 BigQuery 页面。

    转到 BigQuery

  2. 如需创建连接,请点击 添加,然后点击与外部数据源的连接

  3. 连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)

  4. 连接 ID 字段中,输入连接的名称。

  5. 点击创建连接

  6. 点击转到连接

  7. 连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。

bq

  1. 在命令行环境中,创建连接:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    --project_id 参数会替换默认项目。

    替换以下内容:

    • REGION:您的连接区域
    • PROJECT_ID:您的 Google Cloud 项目 ID
    • CONNECTION_ID:您的连接的 ID

    当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。

    问题排查:如果您收到以下连接错误,请更新 Google Cloud SDK

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 检索并复制服务账号 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 资源连接:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 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

如需授予该角色,请按以下步骤操作:

  1. 前往 IAM 和管理页面。

    转到“IAM 和管理”

  2. 点击 授予访问权限

  3. 新的主账号字段中,输入您之前复制的服务账号 ID。

  4. 选择角色字段中,选择 Vertex AI,然后选择 Vertex AI User 角色

  5. 点击保存

创建数据集

创建 BigQuery 数据集以存储您的机器学习模型:

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery 页面

  2. 探索器窗格中,点击您的项目名称。

  3. 点击 查看操作 > 创建数据集

    创建数据集。

  4. 创建数据集页面上,执行以下操作:

    • 数据集 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 多区域(USEU)数据集中,您所创建的远程模型只能使用同一大型地理区域(USEU)内的区域中部署的远程模型。例如:BigQuery US 多区域中的远程模型只能使用美国地理区域内的单区域(例如 us-central1us-east4us-west2 等)中部署的 Vertex AI 端点。

BigQuery EU 多区域中的远程模型只能使用欧盟成员国的单区域(例如 europe-north1europe-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。

清理

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.