Maneja errores de cuota mediante una llamada a ML.GENERATE_EMBEDDING de forma iterativa
En este instructivo, se muestra cómo usar el procedimiento almacenado público bqutil.procedure.bqml_generate_embeddings de BigQuery para iterar a través de llamadas a la función ML.GENERATE_EMBEDDING.
Llamar a la función de forma iterativa te permite abordar cualquier error que se pueda reintentar que se produzca debido a que se superaron las cuotas y los límites que se aplican a la función.
Para revisar el código fuente del procedimiento almacenado bqutil.procedure.bqml_generate_embeddings en GitHub, consulta bqml_generate_embeddings.sqlx.
Para obtener más información sobre los parámetros y el uso del procedimiento almacenado, consulta el archivo readme.
En este instructivo, se te guiará por las siguientes tareas:
- Crear un modelo remoto sobre un modelo
text-embedding-005. - Itera a través de llamadas a la función
ML.GENERATE_EMBEDDINGmediante el modelo remoto y la tabla de datos públicosbigquery-public-data.bbc_news.fulltextcon el procedimiento almacenadobqutil.procedure.bqml_generate_embeddings.
Permisos necesarios
Para ejecutar este instructivo, necesitas los siguientes roles de Identity and Access Management (IAM):
- Crear y usar conjuntos de datos, conexiones y modelos de BigQuery: Administrador de BigQuery (
roles/bigquery.admin) - Otorga permisos a la cuenta de servicio de la conexión: Administrador de IAM del proyecto (
roles/resourcemanager.projectIamAdmin).
Estos roles predefinidos contienen los permisos necesarios para realizar las tareas de este documento. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:
Permisos necesarios
- Crea un conjunto de datos:
bigquery.datasets.create - Crea, delega y usa una conexión:
bigquery.connections.* - Establece la conexión predeterminada:
bigquery.config.* - Configura los permisos de la cuenta de servicio:
resourcemanager.projects.getIamPolicyyresourcemanager.projects.setIamPolicy - Crea un modelo y ejecuta la inferencia:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
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.
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Si deseas obtener más información sobre los precios de BigQuery, consulta Precios de BigQuery.
Para obtener más información sobre los precios de Vertex AI, consulta Precios de Vertex AI.
Antes de comenzar
-
En la consola de Google Cloud , en la página del selector de proyectos, selecciona o crea un proyecto de Google Cloud .
Roles necesarios para seleccionar o crear un proyecto
- Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
-
Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (
roles/resourcemanager.projectCreator), que contiene el permisoresourcemanager.projects.create. Obtén más información para otorgar roles.
-
Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .
-
Habilita las APIs de BigQuery, BigQuery Connection y Vertex AI.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tus modelos y datos de muestra:
En la consola de Google Cloud , ve a la página 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
target_dataset.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
Crea el modelo de generación de embedding de texto
Crea un modelo remoto que represente un modelo text-embedding-005 de Vertex AI alojado:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE MODEL `target_dataset.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-embedding-005');
La consulta tarda varios segundos en completarse, después de eso, el modelo
embeddingaparece en el conjunto de datossampleen el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODELpara crear un modelo, no hay resultados de consultas.
Ejecuta el procedimiento almacenado
Ejecuta el procedimiento almacenado bqutil.procedure.bqml_generate_embeddings, que itera a través de llamadas a la función ML.GENERATE_EMBEDDING mediante el modelo target_dataset.embedding_model y la tabla de datos públicos bigquery-public-data.bbc_news.fulltext:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CALL `bqutil.procedure.bqml_generate_embeddings`( "bigquery-public-data.bbc_news.fulltext", -- source table "PROJECT_ID.target_dataset.news_body_embeddings", -- destination table "PROJECT_ID.target_dataset.embedding_model", -- model "body", -- content column ["filename"], -- key columns '{}' -- optional arguments encoded as a JSON string );
Reemplaza
PROJECT_IDpor el ID del proyecto que estás usando para este instructivo.El procedimiento almacenado crea una tabla
target_dataset.news_body_embeddingspara contener el resultado de la funciónML.GENERATE_EMBEDDING.Cuando la consulta termine de ejecutarse, confirma que no haya filas en la tabla
target_dataset.news_body_embeddingsque contengan un error que se pueda volver a intentar. En el editor de consultas, ejecuta la siguiente declaración:SELECT * FROM `target_dataset.news_body_embeddings` WHERE ml_generate_embedding_status LIKE '%A retryable error occurred%';
La consulta muestra el mensaje
No data to display.
Realiza una limpieza
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.