Analiza imágenes con un modelo de visión de Gemini
En este instructivo, se muestra cómo crear un modelo remoto de BigQuery ML que se base en el modelo gemini-1.0-pro-vision
de Vertex AI y, luego, usar ese modelo con la función ML.GENERATE_TEXT
para analizar un conjunto de imágenes de pósteres de películas.
En este instructivo, se abarcan las siguientes tareas:
- Crear una tabla de objetos de BigQuery sobre datos de imágenes en un bucket de Cloud Storage.
- Crear un modelo remoto de BigQuery ML que se oriente al modelo
gemini-1.0-pro-vision
de Vertex AI (vista previa). - Usar el modelo remoto con la función
ML.GENERATE_TEXT
para identificar las películas asociadas con un conjunto de pósteres de películas.
Los datos de pósteres de películas están disponibles en el bucket de Cloud Storage público gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
.
Roles obligatorios
Para crear una conexión, necesitas el rol de administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin
).Para otorgar permisos a la cuenta de servicio de la conexión, necesitas el rol de Administrador de IAM del proyecto (
roles/resourcemanager.projectIamAdmin
).Para crear conjuntos de datos, modelos y tablas, necesitas el rol de editor de datos de BigQuery (
roles/bigquery.dataEditor
).Para ejecutar trabajos de BigQuery, necesitas el rol Usuario de BigQuery (
roles/bigquery.user
).
Costos
En este documento, usarás los siguientes componentes facturables de 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.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información sobre los precios de BigQuery, consulta Precios de BigQuery en la documentación de BigQuery.
Para obtener más información sobre los precios de IA generativa de Vertex AI, consulta la página Precios de Vertex AI.
Antes de comenzar
-
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.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Los conjuntos de datos públicos se almacenan en la multirregión
US
. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
Crear una conexión
Crea una conexión de recurso de Cloud y obtén la cuenta de servicio de la conexión.
Console
Ve a la página de BigQuery.
Para crear una conexión, haz clic en
Agregar y, luego, en Conexiones a fuentes de datos externas.En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).
En el campo ID de conexión, escribe
tutorial
.Haz clic en Crear conexión.
Haz clic en Ir a la conexión.
Copia el ID de la cuenta de servicio del panel Información de conexión para usarlo en un paso posterior.
bq
En un entorno de línea de comandos, crea una conexión:
bq mk --connection --location=us --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE tutorial
El parámetro
--project_id
anula el proyecto predeterminado.Reemplaza
PROJECT_ID
con tu ID del proyecto de Google Cloud.Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.
Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.us.tutorial
El resultado es similar a este:
name properties 1234.us.tutorial {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Agrega la siguiente sección a tu archivo 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 {} }
Reemplaza PROJECT_ID
por el ID del proyecto de Google Cloud.
Otorga permisos a la cuenta de servicio de las conexiones
Otorga a la cuenta de servicio de la conexión los roles adecuados para acceder a los servicios de Cloud Storage y Vertex AI. Debes otorgar estos roles en el mismo proyecto que creaste o seleccionaste en la sección Antes de comenzar. Si otorgas los roles en un proyecto diferente, se produce el error bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
.
Para otorgar los roles adecuados, sigue estos pasos:
Ir a la página IAM y administración
Haz clic en
Otorgar acceso.En el campo Principales nuevas, escribe el ID de la cuenta de servicio que copiaste antes.
En el campo Selecciona un rol, elige Vertex AI y, luego, selecciona Usuario de Vertex AI.
Haz clic en Agregar otro rol.
En el campo Elige un rol, elige Cloud Storage y, luego,Visualizador de objetos de Storage.
Haz clic en Guardar.
Crea la tabla de objetos
Crea una tabla de objetos sobre las imágenes de pósteres de películas en el bucket público de Cloud Storage. La tabla de objetos permite analizar las imágenes sin transferirlas desde Cloud Storage.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para crear la tabla de objetos:
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/*']);
Crea el modelo remoto
Crea un modelo remoto que represente un modelo gemini-1.0-pro-vision
de Vertex AI:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para crear el modelo remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-pro-vision` REMOTE WITH CONNECTION `us.tutorial` OPTIONS (ENDPOINT = 'gemini-pro-vision');
La consulta tarda varios segundos en completarse, después de eso, el modelo
gemini-pro-vision
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Analiza los pósteres de películas
Usa el modelo remoto para analizar los pósteres de películas y determinar qué película representa cada uno de ellos. Luego, escribe estos datos en una tabla.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para analizar las imágenes de pósteres de películas:
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)));
En el editor de consultas, ejecuta la siguiente declaración para ver los datos de la tabla:
SELECT * FROM `bqml_tutorial.movie_posters_results`;
El resultado es similar al siguiente:
+--------------------------------------------+----------------------------------+ | 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 | | | } | | | ``` | +--------------------------------------------+----------------------------------+
Da formato a la salida del modelo
Da formato a los datos de análisis de películas que muestra el modelo para hacer que el título de la película y los datos de años sean más legibles.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para dar formato a los datos:
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 );
En el editor de consultas, ejecuta la siguiente declaración para ver los datos de la tabla:
SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;
El resultado es similar al siguiente:
+--------------------------------------------+----------------------------+------+ | 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 | | | +--------------------------------------------+----------------------------+------+
Limpia
- 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.