En este instructivo, se muestra cómo importar un modelo de Open Neural Network Exchange (ONNX) entrenado con scikit-learn. Importarás el modelo a un conjunto de datos de BigQuery y lo usarás para hacer predicciones con una consulta en SQL.
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
- Crear y entrenar un modelo con scikit-learn
- Convierte el modelo al formato ONNX con sklearn-onnx.
- Usa la sentencia
CREATE MODELpara importar el modelo de ONNX a BigQuery. - Usa la función
ML.PREDICTpara realizar predicciones con el modelo de ONNX importado.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
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
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud .
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 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.
Si usas un proyecto existente, haz lo siguiente.
Asegúrate de tener los siguientes roles en el proyecto:
- Administrador de BigQuery Studio (
roles/bigquery.studioAdmin) - Creador de objetos de Storage (
roles/storage.objectCreator)
Verifica los roles
-
En la consola de Google Cloud , dirígete a la página IAM.
Ir a IAM - Selecciona el proyecto.
-
En la columna Principal, busca todas las filas que te identifiquen a ti o a un grupo en el que se te incluya. Para saber en qué grupos estás incluido, comunícate con tu administrador.
- Para todas las filas en las que se te especifique o se te incluya, verifica la columna Rol para ver si la lista de roles incluye los roles necesarios.
Otorga los roles
-
En la consola de Google Cloud , dirígete a la página IAM.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Otorgar acceso.
-
En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.
- Haz clic en Selecciona un rol y, luego, busca el rol.
- Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
- Haz clic en Guardar.
Para obtener más información sobre los permisos de IAM en BigQuery, consulta Permisos de IAM.
Opcional: Entrena un modelo y conviértelo al formato ONNX
En las siguientes muestras de código, se indica cómo entrenar un modelo de clasificación con
scikit-learn y cómo convertir la canalización resultante en formato ONNX. En este
instructivo, se usa un modelo de ejemplo compilado previamente que se almacena en
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx. No es necesario que
completes estos pasos si usas el modelo de muestra.
Entrena un modelo de clasificación con scikit-learn
Usa el siguiente código de muestra para crear y entrenar una canalización de scikit-learn en el conjunto de datos de Iris. Para obtener instrucciones sobre cómo instalar y usar scikit-learn, consulta la guía de instalación de scikit-learn.
import numpy
from sklearn.datasets import load_iris
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
data = load_iris()
X = data.data[:, :4]
y = data.target
ind = numpy.arange(X.shape[0])
numpy.random.shuffle(ind)
X = X[ind, :].copy()
y = y[ind].copy()
pipe = Pipeline([('scaler', StandardScaler()),
('clr', RandomForestClassifier())])
pipe.fit(X, y)
Convierte la canalización en un modelo de ONNX
Usa el siguiente código de muestra en sklearn-onnx para convertir la canalización de scikit-learn
en un modelo de ONNX llamado pipeline_rf.onnx.
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
# Disable zipmap as it is not supported in BigQuery ML.
options = {id(pipe): {'zipmap': False}}
# Define input features. scikit-learn does not store information about the
# training dataset. It is not always possible to retrieve the number of features
# or their types. That's why the function needs another argument called initial_types.
initial_types = [
('sepal_length', FloatTensorType([None, 1])),
('sepal_width', FloatTensorType([None, 1])),
('petal_length', FloatTensorType([None, 1])),
('petal_width', FloatTensorType([None, 1])),
]
# Convert the model.
model_onnx = convert_sklearn(
pipe, 'pipeline_rf', initial_types=initial_types, options=options
)
# And save.
with open('pipeline_rf.onnx', 'wb') as f:
f.write(model_onnx.SerializeToString())
Sube el modelo ONNX a Cloud Storage.
Después de guardar el modelo, haz lo siguiente:
- Crea un bucket de Cloud Storage para almacenar el modelo.
- Sube el modelo ONNX 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 Google Cloud , 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.
Importa el modelo ONNX a BigQuery
En los siguientes pasos, se muestra cómo importar el modelo de ONNX de ejemplo desde
Cloud Storage con una sentencia CREATE MODEL.
Para importar el modelo de ONNX a tu conjunto de datos, selecciona una de las siguientes opciones:
Console
En la consola de Google Cloud , ve a la página BigQuery Studio.
En el editor de consultas, ingresa la siguiente sentencia
CREATE MODEL.CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')
Reemplaza
BUCKET_PATHpor la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de muestra, reemplazaBUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx.Cuando se complete la operación, verás un mensaje similar al siguiente:
Successfully created model named imported_onnx_model.Tu modelo nuevo aparecerá en el panel Recursos. Los modelos se indican con el ícono del modelo:
Si seleccionas el modelo nuevo en el panel Recursos, la información
sobre el modelo aparece junto al Editor de consultas.
bq
Importa el modelo de ONNX desde Cloud Storage ingresando la siguiente sentencia
CREATE MODEL.bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')"
Reemplaza
BUCKET_PATHpor la ruta de acceso al modelo que subiste a Cloud Storage. Si usas el modelo de muestra, reemplazaBUCKET_PATHpor el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx.Cuando se complete la operación, verás un mensaje similar al siguiente:
Successfully created model named imported_onnx_model.Después de importar el modelo, verifica que aparezca en el conjunto de datos.
bq ls -m bqml_tutorial
El resultado es similar a lo siguiente:
tableId Type --------------------- ------- imported_onnx_model MODEL
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.
Crea el modelo con la función bigframes.bigquery.ml.create_model.
Para obtener más información sobre la importación de modelos ONNX a BigQuery,
incluidos los requisitos de formato y almacenamiento, consulta la declaración CREATE MODEL para
importar modelos ONNX.
Realiza predicciones con el modelo ONNX importado
Después de importar el modelo de ONNX, usa la función ML.PREDICT para realizar
predicciones con el modelo.
La consulta de los siguientes pasos usa imported_onnx_model para realizar predicciones
con los datos de entrada de la tabla iris en el conjunto de datos públicos ml_datasets. El
modelo de ONNX espera cuatro valores FLOAT como entrada:
sepal_lengthsepal_widthpetal_lengthpetal_width
Estas entradas coinciden con los initial_types que se definieron cuando convertiste el modelo al formato ONNX.
Los resultados incluyen las columnas label y probabilities, y las columnas
de la tabla de entrada. label representa la etiqueta de clase prevista.
probabilities es un array de probabilidades que representan probabilidades para
cada clase.
Para realizar predicciones con el modelo de ONNX importado, elige una de las siguientes opciones:
Console
Ve a la página de BigQuery Studio.
En el editor de consultas, ingresa esta consulta que usa la función
ML.PREDICT.SELECT * FROM ML.PREDICT(MODEL `bqml_tutorial.imported_onnx_model`, ( SELECT * FROM `bigquery-public-data.ml_datasets.iris` ) )
Los resultados de la consulta son similares a los siguientes:
bq
Ejecuta la consulta que usa ML.PREDICT.
bq query --use_legacy_sql=false \ 'SELECT * FROM ML.PREDICT( MODEL `example_dataset.imported_onnx_model`, (SELECT * FROM `bigquery-public-data.ml_datasets.iris`))'
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 la función bigframes.bigquery.ml.predict para ejecutar el modelo de ONNX.
El resultado es similar al 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 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.
gcloud
Borra un proyecto de Google Cloud :
gcloud projects delete PROJECT_ID
Borra los recursos individuales
Como alternativa, para quitar los recursos individuales que se usaron en este instructivo, haz lo siguiente:
Opcional: Borra el conjunto de datos.
¿Qué sigue?
- 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 los instructivos y los convertidores de ONNX disponibles, consulta Convierte al formato ONNX.
- 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.