使用 Gemini 视觉模型分析图片
本教程介绍了如何创建基于 Vertex AI gemini-1.0-pro-vision
模型的 BigQuery ML 远程模型,然后将该模型与 ML.GENERATE_TEXT
函数结合使用来分析一组电影海报图片。
本教程介绍了以下任务:
- 基于 Cloud Storage 存储桶中的图片数据创建 BigQuery 对象表。
- 创建一个针对 Vertex AI
gemini-1.0-pro-vision
模型(预览版)的 BigQuery ML 远程模型。 - 将远程模型与
ML.GENERATE_TEXT
函数结合使用,以识别与一组电影海报关联的电影。
电影海报数据可通过公开 Cloud Storage 存储桶 gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
获取。
所需的角色
如需创建连接,您需要具有 BigQuery Connection Admin (
roles/bigquery.connectionAdmin
) 角色。如需为连接的服务账号授予权限,您需要具有 Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) 角色。如需创建数据集、模型和表,您需要具有 BigQuery Data Editor (
roles/bigquery.dataEditor
) 角色。如需运行 BigQuery 作业,您需要具有 BigQuery User (
roles/bigquery.user
) 角色。
费用
在本文档中,您将使用 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 that is represented by the BigQuery remote model.
您可使用价格计算器根据您的预计使用情况来估算费用。
如需详细了解 BigQuery 价格,请参阅 BigQuery 文档中的 BigQuery 价格。
如需详细了解 Vertex AI 生成式 AI 价格,请参阅 Vertex AI 价格页面。
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
创建数据集
创建 BigQuery 数据集以存储您的机器学习模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在Explorer窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在创建数据集页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
公共数据集存储在
US
多区域中。为简单起见,请将数据集存储在同一位置。保持其余默认设置不变,然后点击创建数据集。
创建连接
创建 Cloud 资源连接并获取连接的服务账号。
控制台
转到 BigQuery 页面。
如需创建连接,请点击
添加,然后点击与外部数据源的连接。在连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
在连接 ID 字段中,输入
tutorial
。点击创建连接。
点击转到连接。
从连接信息窗格中复制服务账号 ID,以便在后续步骤中使用。
bq
在命令行环境中,创建连接:
bq mk --connection --location=us --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE tutorial
--project_id
参数会替换默认项目。将
PROJECT_ID
替换为您的 Google Cloud 项目 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.tutorial
输出类似于以下内容:
name properties 1234.us.tutorial {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
将以下部分附加到 main.tf
文件中。
## This creates a Cloud Resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "tutorial" project = "PROJECT_ID" location = "us" cloud_resource {} }
将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
向连接的服务账号授予权限
向连接的服务账号授予适当的角色以访问 Cloud Storage 和 Vertex AI 服务。您必须在您在准备工作部分创建或选择的项目中授予这些角色。在其他项目中授予这些角色会导致错误 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。
点击添加其他角色。
在选择角色字段中,选择 Cloud Storage,然后选择 Storage Object Viewer。
点击保存。
创建对象表
基于公开 Cloud Storage 存储桶中的电影海报图片创建对象表。对象表让您无需从 Cloud Storage 中移动图片即可分析图片。
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,运行以下查询以创建对象表:
CREATE OR REPLACE EXTERNAL TABLE `bqml_tutorial.movie_posters` WITH CONNECTION `us.tutorial` OPTIONS ( object_metadata = 'SIMPLE', uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']);
创建远程模型
创建一个代表 Vertex AI gemini-1.0-pro-vision
模型的远程模型:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,运行以下查询以创建远程模型:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-pro-vision` REMOTE WITH CONNECTION `us.tutorial` OPTIONS (ENDPOINT = 'gemini-pro-vision');
查询需要几秒钟才能完成,之后
gemini-pro-vision
模型会显示在Explorer窗格的bqml_tutorial
数据集中。 由于查询使用CREATE MODEL
语句来创建模型,因此没有查询结果。
分析电影海报
使用远程模型分析电影海报并确定每张海报代表哪部电影,然后将此数据写入表中。
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,运行以下查询以分析电影海报图片:
CREATE OR REPLACE TABLE `bqml_tutorial.movie_posters_results` AS ( SELECT uri, ml_generate_text_llm_result FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini-pro-vision`, TABLE `bqml_tutorial.movie_posters`, STRUCT( 0.2 AS temperature, 'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer.' AS PROMPT, TRUE AS FLATTEN_JSON_OUTPUT)));
在查询编辑器中,运行以下语句以查看表数据:
SELECT * FROM `bqml_tutorial.movie_posters_results`;
输出类似于以下内容:
+--------------------------------------------+----------------------------------+ | uri | ml_generate_text_llm_result | +--------------------------------------------+----------------------------------+ | gs://cloud-samples-data/vertex-ai/dataset- | ```json | | management/datasets/classic-movie- | { | | posters/little_annie_rooney.jpg | "title": "Little Annie Rooney", | | | "year": 1912 | | | } | | | ``` | +--------------------------------------------+----------------------------------+ | gs://cloud-samples-data/vertex-ai/dataset- | ```json | | management/datasets/classic-movie- | { | | posters/mighty_like_a_mouse.jpg | "title": "Mighty Like a Moose", | | | "year": 1926 | | | } | | | ``` | +--------------------------------------------+----------------------------------+ | gs://cloud-samples-data/vertex-ai/dataset- | ```json | | management/datasets/classic-movie- | { | | posters/brown_of_harvard.jpeg | "title": "Brown of Harvard", | | | "year": 1926 | | | } | | | ``` | +--------------------------------------------+----------------------------------+
设置模型输出的格式
设置模型返回的电影分析数据的格式,使电影标题和年份数据更易读。
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,运行以下查询以设置数据格式:
CREATE OR REPLACE TABLE `bqml_tutorial.movie_posters_results_formatted` AS ( SELECT uri, JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.title") AS title, JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.year") AS year FROM `bqml_tutorial.movie_posters_results` results );
在查询编辑器中,运行以下语句以查看表数据:
SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;
输出类似于以下内容:
+--------------------------------------------+----------------------------+------+ | uri | title | year | +--------------------------------------------+----------------------------+------+ | gs://cloud-samples-data/vertex-ai/dataset- | "Barque sortant du port" | 1895 | | management/datasets/classic-movie- | | | | posters/barque_sortant_du_port.jpeg | | | +--------------------------------------------+----------------------------+------+ | gs://cloud-samples-data/vertex-ai/dataset- | "The Great Train Robbery" | 1903 | | management/datasets/classic-movie- | | | | posters/the_great_train_robbery.jpg | | | +--------------------------------------------+----------------------------+------+ | gs://cloud-samples-data/vertex-ai/dataset- | "Little Annie Rooney" | 1912 | | management/datasets/classic-movie- | | | | posters/little_annie_rooney.jpg | | | +--------------------------------------------+----------------------------+------+
清理
- 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.