通过以迭代方式调用 ML.GENERATE_TEXT 来处理配额错误
本教程介绍如何使用 BigQuery bqutil.procedure.bqml_generate_text
公共存储过程来迭代对 ML.GENERATE_TEXT
函数的调用。通过以迭代方式调用函数,您可以解决因超出适用于函数的配额和限制而发生的任何可重试错误。
如需查看 GitHub 中 bqutil.procedure.bqml_generate_text
存储过程的源代码,请参阅 bqml_generate_text.sqlx
。如需详细了解存储过程参数和用法,请参阅自述文件。
本教程将指导您完成以下任务:
- 基于
gemini-1.5-flash-002
模型创建远程模型。 - 通过
bqutil.procedure.bqml_generate_text
存储过程,使用远程模型和bigquery-public-data.bbc_news.fulltext
公共数据表迭代对ML.GENERATE_TEXT
函数的调用。
所需权限
- 如需创建数据集,您需要拥有
bigquery.datasets.create
Identity and Access Management (IAM) 权限。 如需创建连接资源,您需要以下 IAM 权限:
bigquery.connections.create
bigquery.connections.get
如需向连接的服务账号授予权限,您需要以下权限:
resourcemanager.projects.setIamPolicy
如需创建模型,您需要以下权限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
如需运行推理,您需要以下权限:
bigquery.models.getData
bigquery.jobs.create
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI model.
您可使用价格计算器根据您的预计使用情况来估算费用。
如需详细了解 BigQuery 价格,请参阅 BigQuery 价格。
如需详细了解 Vertex AI 价格,请参阅 Vertex AI 价格。
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
创建数据集
创建 BigQuery 数据集来存储模型和示例数据:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击 > 创建数据集。
查看操作在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
sample
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
保持其余默认设置不变,然后点击创建数据集。
创建连接
创建 Cloud 资源连接并获取连接的服务账号。在上一步中创建的数据集所在的位置创建连接。
从下列选项中选择一项:
控制台
转到 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 已创建或更新它们。
向连接的服务账号授予权限
如需向连接的服务账号授予适当的角色以访问 Cloud Storage 和 Vertex AI 服务,请执行以下步骤:
前往 IAM 和管理页面。
点击
授予访问权限。在新的主账号字段中,输入您之前复制的服务账号 ID。
在选择角色菜单中,选择 Vertex AI > Vertex AI User。
点击保存。
创建文本生成模型
创建一个代表托管式 Vertex AI gemini-1.5-flash-002
模型的远程模型:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,运行以下语句:
CREATE OR REPLACE MODEL `sample.generate_text` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'gemini-1.5-flash-002');
替换以下内容:
LOCATION
:连接位置。CONNECTION_ID
:BigQuery 连接的 ID。当您在 Google Cloud 控制台中查看连接详情时,它是连接 ID 中显示的完全限定连接 ID 的最后一部分中的值,例如
projects/myproject/locations/connection_location/connections/myconnection
。
查询需要几秒钟才能完成,之后
generate_text
模型会显示在探索器窗格的sample
数据集中。由于查询使用CREATE MODEL
语句来创建模型,因此没有查询结果。
运行存储过程
运行 bqutil.procedure.bqml_generate_text
存储过程,该存储过程会使用 sample.generate_text
模型和 bigquery-public-data.bbc_news.fulltext
公共数据表迭代对 ML.GENERATE_TEXT
函数的调用:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,运行以下语句:
CALL `bqutil.procedure.bqml_generate_text`( "bigquery-public-data.bbc_news.fulltext", -- source table "PROJECT_ID.sample.news_generated_text", -- destination table "PROJECT_ID.sample.generate_text", -- model "body", -- content column ["filename"], -- key columns '{}' -- optional arguments );
将
PROJECT_ID
替换为您在本教程中使用的项目的 ID。该存储过程会创建一个
sample.news_generated_text
表,以包含ML.GENERATE_TEXT
函数的输出。查询运行完毕后,确认
sample.news_generated_text
表中没有包含可重试错误的行。在查询编辑器中,运行以下语句:SELECT * FROM `sample.news_generated_text` WHERE ml_generate_text_status LIKE '%A retryable error occurred%';
查询会返回消息
No data to display
。
清理
- 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.