使用 Vertex AI 上的远程模型进行预测


在本教程中,您将在 BigQuery 中将 Vertex AI 端点注册为远程模型。然后,使用 ML.PREDICT 函数通过远程模型进行预测。

当模型太大而无法导入 BigQuery 时,您可以使用远程模型。如果您想要对在线、批量和微批量用例使用单一推断点,它们也很有用。

目标

  • 将经过预训练的 TensorFlow 模型导入 Vertex AI Model Registry。
  • 将模型部署到 Vertex AI 端点。
  • 创建 Cloud 资源连接。
  • 使用 CREATE MODEL 语句在 BigQuery 中创建远程模型。
  • 使用 ML.PREDICT 函数通过远程模型进行预测。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery, Vertex AI, Cloud Storage, and BigQuery Connection APIs.

    Enable the APIs

  6. 确保您拥有必要的权限,以便执行本文档中的任务。

所需的角色

如果您创建了一个新项目,那么您就是项目所有者,并且会获得完成本教程所需的所有必要 IAM 权限。

如果您要使用现有项目,请执行以下操作。

Make sure that you have the following role or roles on the project:

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

    进入 IAM
  2. 选择项目。
  3. 点击 授予访问权限
  4. 新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

  5. 选择角色列表中,选择一个角色。
  6. 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
  7. 点击 Save(保存)。
  8. 如需详细了解 BigQuery 中的 IAM 权限,请参阅 BigQuery 权限

将模型导入 Vertex AI Model Registry

在本教程中,您将使用 Cloud Storage 中可用的预训练 TensorFlow 模型(位于 gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/)。Cloud Storage 存储桶位于 US 多区域位置。

该模型是一个名为 saved_model.pb 的 TensorFlow 模型。这是一个自定义情感分析模型,是通过使用纯文本 IMDB 电影评论对 BERT 模型进行微调而创建的。该模型使用电影评论中的文本输入,并返回 0 到 1 之间的情感得分。将模型导入 Model Registry 时,您需要使用预构建的 TensorFlow 容器。

请按照以下步骤导入模型。

  1. 在 Google Cloud 控制台中,进入 Vertex AI Model Registry 页面。

    进入 Model Registry

  2. 点击导入

  3. 对于第一步:名称和区域,请执行以下操作:

    1. 选择作为新模型导入

    2. 对于名称,输入 bert_sentiment

    3. 对于说明,输入 BQML tutorial model

    4. 对于区域,选择 us-central1。您必须选择美国区域,因为 Cloud Storage 存储桶位于 US 多区域位置。

    5. 点击继续

  4. 对于第 2 步:模型设置,请执行以下操作:

    1. 选择将模型工件导入到新的预构建容器中

    2. 预构建容器设置部分,执行以下操作:

      1. 对于模型框架,选择 TensorFlow

      2. 对于模型框架版本,选择 2.15

      3. 对于加速器类型,请选择 GPU

      4. 对于模型制品位置,输入 gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/

      5. 将所有其他选项保留为默认值,然后点击导入

导入完成后,您的模型将显示在 Model Registry 页面上。

将模型部署到 Vertex AI 端点

请按照以下步骤将模型部署到端点。

  1. 在 Google Cloud 控制台中,进入 Vertex AI Model Registry 页面。

    进入 Model Registry

  2. 名称列中,点击 bert_sentiment

  3. 点击部署和测试标签页。

  4. 点击部署到端点

  5. 在第一步定义端点中,请执行以下操作:

    1. 点击创建新的端点

    2. 对于端点名称,输入 bert sentiment endpoint

    3. 保留其余默认值,然后点击继续

  6. 对于第二步模型设置,请执行以下操作:

    1. 计算设置部分的计算节点数下限中,输入 1。这是模型始终需要可用的节点数。

    2. 高级缩放选项部分的机器类型中,选择标准 (n1-standard-2)。由于您在导入模型时选择了 GPU 作为加速器类型,因此在您选择机器类型后,系统会自动设置加速器类型和加速器数量。

    3. 保留其余的默认值,然后点击部署

      将模型部署到端点后,状态会更改为 Active

    4. 复制 ID 列中的数字端点 ID 和 Region 列中的值。稍后将会用到这些值。

创建数据集

创建 BigQuery 数据集以存储机器学习模型。

控制台

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

    转到 BigQuery 页面

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

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

    “创建数据集”菜单选项。

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

    • 数据集 ID 部分,输入 bqml_tutorial

    • 位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。

    公共数据集存储在 US 多区域中。为简单起见,请将数据集存储在同一位置。

    • 保持其余默认设置不变,然后点击创建数据集

    填充了值的“创建数据集”页面。

bq

如需创建新数据集,请使用带有 --location 标志的 bq mk 命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset 命令参考文档。

  1. 创建一个名为 bqml_tutorial 的数据集,并将数据位置设置为 US,说明为 BigQuery ML tutorial dataset

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    该命令使用的不是 --dataset 标志,而是 -d 快捷方式。如果省略 -d--dataset,该命令会默认创建一个数据集。

  2. 确认已创建数据集:

    bq ls

API

使用已定义的数据集资源调用 datasets.insert 方法。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

创建 BigQuery Cloud 资源连接

您必须具有 Cloud 资源连接才能连接到 Vertex AI 端点。

控制台

  1. 转到 BigQuery 页面。

    转到 BigQuery

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

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

  4. 连接 ID 字段中,输入 bqml_tutorial

  5. 确认已选择多区域 - 美国

  6. 点击创建连接

  7. 在窗口底部,点击前往连接。或者,在探索器窗格中,展开外部连接,然后点击 us.bqml_tutorial

  8. 连接信息窗格中,复制服务账号 ID。为连接配置权限时,您需要使用此 ID。当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。

bq

  1. 创建连接:

    bq mk --connection --location=US --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE bqml_tutorial

    PROJECT_ID 替换为您的 Google Cloud 项目 ID。 --project_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.us.bqml_tutorial

    输出内容类似如下:

    name                          properties
    1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

设置连接访问权限

向 Cloud 资源连接的服务账号授予 Vertex AI User 角色。您必须在您创建远程模型端点的项目中授予此角色。

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

  1. 前往 IAM 和管理页面。

    转到“IAM 和管理”

  2. 点击 授予访问权限

  3. 新建主账号字段中,输入您之前复制的 Cloud 资源连接的服务账号 ID。

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

  5. 点击保存

创建 BigQuery 机器学习远程模型

您可以使用 CREATE MODEL 语句和 REMOTE WITH CONNECTION 子句来创建 BigQuery ML 远程模型。如需详细了解 CREATE MODEL 语句,请参阅适用于自定义模型的远程模型的 CREATE MODEL 语句

您可以在 US 多区域位置创建模型。在 BigQuery 多区域(USEU)数据集中,您只能创建一个远程模型,该模型连接到同一多区域位置(USEU)中某个区域中部署的端点。

创建远程模型时,您需要在将模型部署到 Vertex AI 时生成的端点 ID。此外,输入和输出字段名称和类型必须与 Vertex AI 模型的输入和输出完全相同。在此示例中,输入是文本 STRING,输出是类型为 FLOAT64ARRAY

控制台

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

    转到 BigQuery

  2. 对于创建新内容,请点击 SQL 查询

  3. 在查询编辑器中,输入以下 CREATE MODEL 语句,然后点击运行

    CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY)
    REMOTE WITH CONNECTION `PROJECT_ID.us.bqml_tutorial`
    OPTIONS(ENDPOINT = 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID')

    替换以下内容:

    • PROJECT_ID:您的项目名称。
    • ENDPOINT_ID:您之前复制的端点 ID。

    操作完成后,您会看到类似于 Successfully created model named bert_sentiment 的消息。

    您的新模型会显示在资源面板中。模型由模型图标 模型图标 表示。

    如果您在资源面板中选择该新模型,则模型相关信息将显示在查询编辑器下方。

bq

  1. 通过输入以下 CREATE MODEL 语句来创建远程模型:

    bq query --use_legacy_sql=false \
    "CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY)
    REMOTE WITH CONNECTION `PROJECT_ID.us.bqml_tutorial`
    OPTIONS(ENDPOINT = 'https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpoints/ENDPOINT_ID')"

    替换以下内容:

    • PROJECT_ID:您的项目名称。
    • ENDPOINT_ID:您之前复制的端点 ID。
  2. 创建模型后,请验证该模型是否显示在数据集中:

    bq ls -m bqml_tutorial

    输出内容类似如下:

    Id               Model Type   Labels    Creation Time
    ---------------- ------------ -------- -----------------
    bert_sentiment                         28 Jan 17:39:43

使用 ML.PREDICT 获取预测

您可以使用 ML.PREDICT 函数从远程模型获取情感预测。输入是文本列 (review),其中包含 bigquery-public-data.imdb.reviews 表中的电影评价。

在此示例中,系统选择并发送 10,000 条记录以获取预测。远程模型默认的请求批次大小为 128 个请求。

控制台

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

    转到 BigQuery

  2. 创建新内容部分中,点击 SQL 查询

  3. 在查询编辑器中,输入以下使用 ML.PREDICT 函数的查询,然后点击运行

    SELECT *
    FROM ML.PREDICT (
        MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
        (
            SELECT review as text
            FROM `bigquery-public-data.imdb.reviews`
            LIMIT 10000
        )
    )

    结果应如下所示:

    查询结果

bq

输入以下命令以运行使用 ML.PREDICT 的查询。

bq query --use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT (
MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
  (
    SELECT review as text
    FROM `bigquery-public-data.imdb.reviews`
    LIMIT 10000
  )
)'

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

控制台

  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.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

删除各个资源

或者,如需移除本教程中使用的各个资源,请执行以下操作:

  1. 删除模型

  2. 可选:删除数据集

  3. 取消部署模型并删除端点

  4. 从 Model Registry 中删除模型

  5. 删除 Cloud 资源连接

后续步骤