En este instructivo, usarás la CLI de Hugging Face Optimum
para exportar el modelo de sentence-transformers/all-MiniLM-L6-v2 al formato de Open Neural
Network Exchange (ONNX). Usa la sentencia CREATE MODEL para importar el modelo de ONNX a BigQuery. Por último, usa
la función ML.PREDICT
para generar embeddings con el modelo de ONNX importado.
En este instructivo, se usa el modelo sentence-transformers/all-MiniLM-L6-v2. Este
modelo de transformador de oraciones es conocido por su rendimiento rápido y eficaz en
la generación de incorporaciones de oraciones. La incorporación de oraciones permite realizar tareas como la búsqueda semántica, el agrupamiento en clústeres y la similitud de oraciones, ya que captura el significado subyacente
del texto.
ONNX proporciona un formato uniforme diseñado para representar cualquier framework de aprendizaje automático (AA). La compatibilidad de BigQuery ML con ONNX te permite hacer lo siguiente:
- Entrenar un modelo con tu framework favorito.
- Convertir el modelo al formato de modelo ONNX.
- Importar el modelo ONNX a BigQuery y hacer predicciones con BigQuery ML
Objetivos
- Exporta el modelo de
sentence-transformers/all-MiniLM-L6-v2a ONNX. - Importar el modelo ONNX a BigQuery
- Usa la función
ML.PREDICTpara generar incorporaciones con el modelo de ONNX importado.
Costos
En este documento, usarás los siguientes componentes facturables de Cloud de Confiance by S3NS:
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verifica que la facturación esté habilitada para tu proyecto de Cloud de Confiance .
Habilita las APIs de BigQuery y Cloud Storage, si aún no están habilitadas.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.- Asegúrate de tener los permisos necesarios para realizar las tareas de este documento.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:
-
Crea conjuntos de datos, tablas y modelos, y ejecuta trabajos de BigQuery:
Administrador de BigQuery Studio (
roles/bigquery.studioAdmin) -
Crea un bucket de Cloud Storage y objetos de almacenamiento (si conviertes de forma manual los archivos del modelo de Transformer a ONNX):
Administrador de almacenamiento (
roles/storage.admin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Si creas un proyecto nuevo, eres el propietario del proyecto y se te otorgan todos los permisos de Identity and Access Management (IAM) que necesitas para completar este instructivo.
Para obtener más información sobre los permisos de IAM en BigQuery, consulta Permisos de IAM.
Opcional: Convierte de forma manual los archivos del modelo de Transformer a ONNX
Si conviertes manualmente el modelo y el asignador de token de sentence-transformers/all-MiniLM-L6-v2
a ONNX, sigue los pasos que se indican en las siguientes secciones. Como alternativa, puedes
usar los archivos de muestra en el bucket de Cloud Storage gs://cloud-samples-data.
Los archivos de este bucket ya se convirtieron. Si usas los archivos de muestra,
ve a Crea un conjunto de datos.
Si eliges convertir los archivos de forma manual, debes tener un entorno de línea de comandos local con Python instalado. Para obtener más información sobre cómo instalar Python, consulta Descargas de Python.
Exporta el modelo Transformer a ONNX
Usa la CLI de Hugging Face Optimum para exportar el
modelo sentence-transformers/all-MiniLM-L6-v2 a ONNX.
Para obtener más información sobre la exportación de modelos con la CLI de Optimum, consulta
Exporta un modelo a ONNX con optimum.exporters.onnx.
Para exportar el modelo, abre un entorno de línea de comandos y sigue estos pasos:
Instala la CLI de Optimum:
pip install optimum[onnx]Exporta el modelo:
optimum-cli export onnx \ --model sentence-transformers/all-MiniLM-L6-v2 \ --task sentence-similarity \ --opset 17 all-MiniLM-L6-v2/El argumento
--modelespecifica el ID del modelo de Hugging Face. El argumento--opsetespecifica la versión de la biblioteca de ONNXRuntime y se establece en17para mantener la compatibilidad con la biblioteca de ONNXRuntime admitida por BigQuery.
El archivo del modelo se exporta al directorio all-MiniLM-L6-v2 como model.onnx.
Aplica la cuantización al modelo de Transformer
Usa la CLI de Optimum para aplicar la cuantización al modelo de Transformer exportado con el objetivo de reducir el tamaño del modelo y acelerar la inferencia. Para obtener más información, consulta Cuantización.
Para aplicar la cuantización al modelo, ejecuta el siguiente comando:
optimum-cli onnxruntime quantize \
--onnx_model all-MiniLM-L6-v2/ \
--avx512_vnni -o all-MiniLM-L6-v2_quantized
El archivo del modelo cuantizado se exporta al directorio all-MiniLM-L6-v2_quantized
como model_quantized.onnx.
Convierte el asignador de token a ONNX
Para generar embeddings con un modelo de Transformer en formato ONNX, por lo general,
usas un
tokenizador
para producir dos entradas para el modelo,
input_ids y
attention_mask.
Para producir estas entradas, convierte el asignador de token del
modelo sentence-transformers/all-MiniLM-L6-v2 al formato ONNX con la
biblioteca
onnxruntime-extensions. Después de convertir el asignador de token, puedes realizar la asignación de token
directamente en las entradas de texto sin procesar para generar predicciones de ONNX.
Para convertir el asignador de token, sigue estos pasos en la línea de comandos:
Instala la CLI de Optimum:
pip install optimum[onnx]Con el editor de texto que prefieras, crea un archivo llamado
convert-tokenizer.py. En el siguiente ejemplo, se usa el editor de texto nano:nano convert-tokenizer.pyCopia y pega la siguiente secuencia de comandos de Python en el archivo
convert-tokenizer.py:from onnxruntime_extensions import gen_processing_models # Load the Huggingface tokenizer tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2") # Export the tokenizer to ONNX using gen_processing_models onnx_tokenizer_path = "tokenizer.onnx" # Generate the tokenizer ONNX model, and set the maximum token length. # Ensure 'max_length' is set to a value less than the model's maximum sequence length, failing to do so will result in error during inference. tokenizer_onnx_model = gen_processing_models(tokenizer, pre_kwargs={'max_length': 256})[0] # Modify the tokenizer ONNX model signature. # This is because certain tokenizers don't support batch inference. tokenizer_onnx_model.graph.input[0].type.tensor_type.shape.dim[0].dim_value = 1 # Save the tokenizer ONNX model with open(onnx_tokenizer_path, "wb") as f: f.write(tokenizer_onnx_model.SerializeToString())Guarda el archivo
convert-tokenizer.py.Para convertir el asignador de token, ejecuta la secuencia de comandos de Python:
python convert-tokenizer.py
El asignador de token convertido se exporta al directorio all-MiniLM-L6-v2_quantized
como tokenizer.onnx.
Sube los archivos del modelo convertidos a Cloud Storage
Después de convertir el modelo de Transformer y el asignador de token, haz lo siguiente:
- Crea un bucket de Cloud Storage para almacenar los archivos convertidos.
- Sube los archivos del modelo de Transformer y del asignador de token convertidos a tu bucket de Cloud Storage.
Crea un conjunto de datos
Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:Console
En la consola de Cloud de Confiance , ve a la página BigQuery.
En el panel de la izquierda, haz clic en Explorar:

Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.
En Explorador, expande tu proyecto y, luego, haz clic en Conjuntos de datos.
En la página Conjuntos de datos, haz clic en Crear conjunto de datos.
En el panel Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial.En Ubicación de los datos, selecciona EE.UU..
Deja el resto de la configuración predeterminada como está.
Haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el
comando bq mk --dataset.
Crea un conjunto de datos llamado
bqml_tutorialcon la ubicación de los datos establecida enUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Confirma que se haya creado el conjunto de datos:
bq ls
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Importar los modelos de ONNX a BigQuery
Importa el asignador de token convertido y los modelos de transformador de oraciones como modelos de BigQuery ML.
Selecciona una de las siguientes opciones:
Console
En la consola de Cloud de Confiance , ve a la página Studio de BigQuery.
En el editor de consultas, ejecuta la siguiente sentencia
CREATE MODELpara crear el modelotokenizer:CREATE OR REPLACE MODEL `bqml_tutorial.tokenizer` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TOKENIZER_BUCKET_PATH');
Reemplaza
TOKENIZER_BUCKET_PATHpor la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTOKENIZER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.Cuando se complete la operación, verás un mensaje en el panel Resultados de la consulta similar al siguiente:
Successfully created model named tokenizer.Para abrir el panel Detalles, haz clic en Ir al modelo.
Para ver las entradas y el resultado del modelo en la Columna de etiqueta, revisa la sección Columnas de atributos:
Para crear el modelo
all-MiniLM-L6-v2, ejecuta la siguiente sentenciaCREATE MODELen el editor de consultas:CREATE OR REPLACE MODEL `bqml_tutorial.all-MiniLM-L6-v2` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TRANSFORMER_BUCKET_PATH');
Reemplaza
TRANSFORMER_BUCKET_PATHpor la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTRANSFORMER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.Cuando se complete la operación, verás un mensaje en el panel Resultados de la consulta similar al siguiente:
Successfully created model named all-MiniLM-L6-v2.Para abrir el panel Detalles, haz clic en Ir al modelo.
Para ver las entradas y los resultados del modelo en la Columna de etiqueta, revisa la sección Columnas de atributos:
bq
Ejecuta la sentencia CREATE MODEL con el comando query de la herramienta de línea de comandos de bq.
Crea el modelo
tokenizer:bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.tokenizer` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TOKENIZER_BUCKET_PATH')"Reemplaza
TOKENIZER_BUCKET_PATHpor la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTOKENIZER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.Cuando se complete la operación, verás un mensaje similar al siguiente:
Successfully created model named tokenizer.Crea el modelo
all-MiniLM-L6-v2:bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.all-MiniLM-L6-v2` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='TRANSFORMER_BUCKET_PATH')"Reemplaza
TRANSFORMER_BUCKET_PATHpor la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTRANSFORMER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.Cuando se complete la operación, verás un mensaje similar al siguiente:
Successfully created model named all-MiniLM-L6-v2.Después de importar los modelos, verifica que aparezcan en el conjunto de datos.
bq ls -m bqml_tutorial
El resultado es similar a lo siguiente:
tableId Type ------------------------ tokenizer MODEL all-MiniLM-L6-v2 MODEL
API
Usa el método jobs.insert
para importar los modelos. Completa el parámetro query del
recurso QueryRequest
en el cuerpo de la solicitud con la sentencia CREATE MODEL.
Para crear el modelo
tokenizer, usa el siguiente parámetroquery:{ "query": "CREATE MODEL `PROJECT_ID :bqml_tutorial.tokenizer` OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='TOKENIZER_BUCKET_PATH')" }Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto.TOKENIZER_BUCKET_PATH: Es la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTOKENIZER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.
Para crear el modelo
all-MiniLM-L6-v2, usa el siguiente valor del parámetroquery:{ "query": "CREATE MODEL `PROJECT_ID :bqml_tutorial.all-MiniLM-L6-v2` OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='TRANSFORMER_BUCKET_PATH')" }Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto.TRANSFORMER_BUCKET_PATH: Es la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTRANSFORMER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Importa los modelos de tokenizador y transformador de oraciones con el
objeto ONNXModel.
import bigframes from bigframes.ml.imported import ONNXModel bigframes.options.bigquery.project = PROJECT_ID bigframes.options.bigquery.location = "US" tokenizer = ONNXModel( model_path= "TOKENIZER_BUCKET_PATH" ) imported_onnx_model = ONNXModel( model_path="TRANSFORMER_BUCKET_PATH" )
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto.TOKENIZER_BUCKET_PATH: Es la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTOKENIZER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/tokenizer.onnx.TRANSFORMER_BUCKET_PATH: Es la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de ejemplo, reemplazaTRANSFORMER_BUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/all-MiniLM-L6-v2/model_quantized.onnx.
Genera embeddings con los modelos de ONNX importados
Usa el tokenizador importado y los modelos de transformador de oraciones para generar
incorporaciones basadas en datos del conjunto de datos públicos
bigquery-public-data.imdb.reviews.
Selecciona una de las siguientes opciones:
Console
Usa la
función ML.PREDICT
para generar embeddings con los modelos.
La consulta usa una llamada a ML.PREDICT anidada para procesar el texto sin procesar directamente
a través del asignador de token y el modelo de incorporación de la siguiente manera:
- Asignación de token (consulta interna): La llamada interna a
ML.PREDICTusa el modelobqml_tutorial.tokenizer. Toma la columnatitledel conjunto de datos públicobigquery-public-data.imdb.reviewscomo su entradatext. El modelotokenizerconvierte las cadenas de texto sin procesar en las entradas de tokens numéricos que requiere el modelo principal, incluidas las entradasinput_idsyattention_mask. - Generación de embeddings (consulta externa): La llamada externa a
ML.PREDICTusa el modelobqml_tutorial.all-MiniLM-L6-v2. La consulta toma las columnasinput_idsyattention_maskdel resultado de la consulta interna como su entrada.
La sentencia SELECT recupera la columna sentence_embedding, que
es un array de valores FLOAT que representan la incorporación semántica del texto.
Para generar los embeddings, sigue estos pasos:
En la consola de Cloud de Confiance , ve a la página Studio de BigQuery.
En el editor de consultas, ejecuta la siguiente consulta.
SELECT sentence_embedding FROM ML.PREDICT (MODEL `bqml_tutorial.all-MiniLM-L6-v2`, ( SELECT input_ids, attention_mask FROM ML.PREDICT(MODEL `bqml_tutorial.tokenizer`, ( SELECT title AS text FROM `bigquery-public-data.imdb.reviews` limit 10))));
El resultado es similar al siguiente:
+-----------------------+ | sentence_embedding | +-----------------------+ | -0.02361682802438736 | | 0.02025664784014225 | | 0.005168713629245758 | | -0.026361213997006416 | | 0.0655381828546524 | | ... | +-----------------------+
bq
Usa el comando query de la herramienta de línea de comandos de bq para ejecutar una consulta. La consulta usa la
función ML.PREDICT
para generar incorporaciones con los modelos.
La consulta usa una llamada a ML.PREDICT anidada para procesar el texto sin procesar directamente
a través del asignador de token y el modelo de incorporación de la siguiente manera:
- Asignación de token (consulta interna): La llamada interna a
ML.PREDICTusa el modelobqml_tutorial.tokenizer. Toma la columnatitledel conjunto de datos públicobigquery-public-data.imdb.reviewscomo su entradatext. El modelotokenizerconvierte las cadenas de texto sin procesar en las entradas de tokens numéricos que requiere el modelo principal, incluidas las entradasinput_idsyattention_mask. - Generación de embeddings (consulta externa): La llamada externa a
ML.PREDICTusa el modelobqml_tutorial.all-MiniLM-L6-v2. La consulta toma las columnasinput_idsyattention_maskdel resultado de la consulta interna como su entrada.
La sentencia SELECT recupera la columna sentence_embedding, que
es un array de valores FLOAT que representan la incorporación semántica del texto.
En la línea de comandos, ejecuta el siguiente comando para ejecutar la consulta.
bq query --use_legacy_sql=false \ 'SELECT sentence_embedding FROM ML.PREDICT (MODEL `bqml_tutorial.all-MiniLM-L6-v2`, ( SELECT input_ids, attention_mask FROM ML.PREDICT(MODEL `bqml_tutorial.tokenizer`, ( SELECT title AS text FROM `bigquery-public-data.imdb.reviews` limit 10))))'
El resultado es similar al siguiente:
+-----------------------+ | sentence_embedding | +-----------------------+ | -0.02361682802438736 | | 0.02025664784014225 | | 0.005168713629245758 | | -0.026361213997006416 | | 0.0655381828546524 | | ... | +-----------------------+
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Usa el método predict
para generar embeddings con los modelos de ONNX.
import bigframes.pandas as bpd
df = bpd.read_gbq("bigquery-public-data.imdb.reviews", max_results=10)
df_pred = df.rename(columns={"title": "text"})
tokens = tokenizer.predict(df_pred)
predictions = imported_onnx_model.predict(tokens)
predictions.peek(5)
El resultado es similar a lo siguiente:
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
Console
- En la Cloud de Confiance 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.
gcloud
Borra un proyecto de Cloud de Confiance :
gcloud projects delete PROJECT_ID
Borra los recursos individuales
Como alternativa, para conservar el proyecto y borrar los recursos que se usaron en este instructivo, sigue estos pasos:
En la consola de Cloud de Confiance , ve a la página Studio de BigQuery.
En el panel izquierdo, expande tu proyecto y, luego, haz clic en Conjuntos de datos.
En el conjunto de datos
bqml_tutorial, haz clic en Abrir acciones > Borrar.En el cuadro de diálogo Borrar conjunto de datos, haz clic en Borrar para confirmar.
Si seguiste los pasos para convertir de forma manual los archivos del modelo de Transformer en ONNX, borra el bucket de Cloud Storage.
¿Qué sigue?
- Aprende a usar embeddings de texto para la búsqueda semántica y la generación aumentada por recuperación (RAG).
- Para obtener más información sobre cómo convertir modelos de transformadores en ONNX, consulta
Exporta un modelo a ONNX con
optimum.exporters.onnx. - Para obtener más información sobre la importación de modelos ONNX, consulta
la declaración
CREATE MODELpara modelos ONNX. - Para obtener más información sobre cómo realizar predicciones, consulta
La función
ML.PREDICT. - Para obtener una descripción general de BigQuery ML, consulta Introducción a BigQuery ML.
- Para comenzar a usar BigQuery ML, consulta Crea modelos de aprendizaje automático en BigQuery ML.