在本教程中,您将在 BigQuery 中将 Vertex AI 端点注册为远程模型。然后,使用 ML.PREDICT
函数通过远程模型进行预测。
当模型太大而无法导入 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 容器。
请按照以下步骤导入模型。
在 Google Cloud 控制台中,前往 Vertex AI Model Registry 页面。
点击导入。
对于第一步:名称和区域,请执行以下操作:
选择作为新模型导入。
对于名称,输入
bert_sentiment
。对于说明,输入
BQML tutorial model
。对于区域,选择
us-central1
。您必须选择美国区域,因为 Cloud Storage 存储桶位于US
多区域位置。点击继续。
对于第 2 步:模型设置,请执行以下操作:
选择将模型工件导入到新的预构建容器中。
在预构建容器设置部分,执行以下操作:
对于模型框架,选择 TensorFlow。
对于模型框架版本,选择 2.15。
对于加速器类型,请选择 GPU。
对于模型制品位置,输入
gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/
。将所有其他选项保留为默认值,然后点击导入。
导入完成后,您的模型将显示在 Model Registry 页面上。
将模型部署到 Vertex AI 端点
请按照以下步骤将模型部署到端点。
在 Google Cloud 控制台中,前往 Vertex AI Model Registry 页面。
在名称列中,点击
bert_sentiment
。点击部署和测试标签页。
点击部署到端点。
在第一步定义端点中,请执行以下操作:
点击创建新的端点。
对于端点名称,输入
bert sentiment endpoint
。保留其余默认值,然后点击继续。
对于第二步模型设置,请执行以下操作:
在计算设置部分的计算节点数下限中,输入
1
。这是模型始终需要可用的节点数。在高级缩放选项部分的机器类型中,选择标准 (n1-standard-2)。由于您在导入模型时选择了 GPU 作为加速器类型,因此在您选择机器类型后,系统会自动设置加速器类型和加速器数量。
保留其余的默认值,然后点击部署。
将模型部署到端点后,状态会更改为
Active
。复制 ID 列中的数字端点 ID 和 Region 列中的值。稍后将会用到这些值。
创建数据集
创建 BigQuery 数据集以存储机器学习模型。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
保持其余默认设置不变,然后点击创建数据集。
bq
如需创建新数据集,请使用带有 --location
标志的 bq mk
命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset
命令参考文档。
创建一个名为
bqml_tutorial
的数据集,并将数据位置设置为US
,说明为BigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
该命令使用的不是
--dataset
标志,而是-d
快捷方式。如果省略-d
和--dataset
,该命令会默认创建一个数据集。确认已创建数据集:
bq ls
API
使用已定义的数据集资源调用 datasets.insert
方法。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC。
创建 BigQuery Cloud 资源连接
您必须具有 Cloud 资源连接才能连接到 Vertex AI 端点。
控制台
前往 BigQuery 页面。
在左侧窗格中,点击
Explorer:如果您没有看到左侧窗格,请点击
展开左侧窗格以打开该窗格。在浏览器窗格中,点击
添加数据。系统随即会打开添加数据对话框。
在过滤条件窗格中的数据源类型部分,选择数据库。
或者,在搜索数据源字段中,您可以输入
Vertex AI
。在精选数据源部分中,点击 Vertex AI。
点击 Vertex AI 模型:BigQuery 联合解决方案卡片。
在连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
在连接 ID 字段中,输入
bqml_tutorial
。确认已选择多区域 - 美国。
点击创建连接。
在窗口底部,点击前往连接。或者,在探索器窗格中,点击连接,然后点击
us.bqml_tutorial
。在连接信息窗格中,复制服务账号 ID。为连接配置权限时,您需要使用此 ID。当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。
bq
创建连接:
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...
检索并复制服务账号 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 角色。您必须在您创建远程模型端点的项目中授予此角色。
如需授予该角色,请按以下步骤操作:
前往 IAM 和管理页面。
点击
授予访问权限。在新建主账号字段中,输入您之前复制的 Cloud 资源连接的服务账号 ID。
在选择角色字段中,选择 Vertex AI,然后选择 Vertex AI User。
点击保存。
创建 BigQuery 机器学习远程模型
您可以使用 CREATE MODEL
语句和 REMOTE WITH CONNECTION
子句来创建 BigQuery ML 远程模型。如需详细了解 CREATE MODEL
语句,请参阅适用于自定义模型的远程模型的 CREATE MODEL 语句。
您可以在 US
多区域位置创建模型。在 BigQuery 多区域(US
、EU
)数据集中,您只能创建一个远程模型,该模型连接到同一多区域位置(US
、EU
)中某个区域中部署的端点。
创建远程模型时,您需要在将模型部署到 Vertex AI 时生成的端点 ID。此外,输入和输出字段名称和类型必须与 Vertex AI 模型的输入和输出完全相同。在此示例中,输入是文本 STRING
,输出是类型为 FLOAT64
的 ARRAY
。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
对于创建新内容,请点击 SQL 查询。
在查询编辑器中,输入以下
CREATE MODEL
语句,然后点击运行:CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment` INPUT (text STRING) OUTPUT(scores ARRAY<FLOAT64>) 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
通过输入以下
CREATE MODEL
语句来创建远程模型:bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment` INPUT (text STRING) OUTPUT(scores ARRAY<FLOAT64>) 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。
创建模型后,请验证该模型是否显示在数据集中:
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 个请求。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在创建新内容部分中,点击 SQL 查询。
在查询编辑器中,输入以下使用
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 ) )'