En este tutorial se muestra cómo importar un modelo Open Neural Network Exchange (ONNX) entrenado con scikit-learn. Importa el modelo a un conjunto de datos de BigQuery y úsalo para hacer predicciones con una consulta SQL.
ONNX proporciona un formato uniforme diseñado para representar cualquier framework de aprendizaje automático (ML). La compatibilidad de BigQuery ML con ONNX te permite hacer lo siguiente:
- Entrena un modelo con tu framework favorito.
- Convierte el modelo al formato ONNX.
- Importa el modelo ONNX a BigQuery y haz predicciones con BigQuery ML.
Opcional: Entrenar un modelo y convertirlo al formato ONNX
En los siguientes ejemplos de código se muestra cómo entrenar un modelo de clasificación con scikit-learn y cómo convertir la canalización resultante al formato ONNX. En este tutorial se usa un modelo de ejemplo precompilado que se almacena en gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
. No es necesario que completes estos pasos si utilizas el modelo de ejemplo.
Entrenar un modelo de clasificación con scikit-learn
Usa el siguiente código de ejemplo para crear y entrenar una pipeline de scikit-learn en el conjunto de datos 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)
Convertir la canalización en un modelo ONNX
Usa el siguiente código de ejemplo en sklearn-onnx para convertir la canalización de scikit-learn en un modelo 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())
Subir el modelo ONNX a Cloud Storage
Después de guardar el modelo, haz lo siguiente:
- Crea un segmento de Cloud Storage para almacenar el modelo.
- Sube el modelo ONNX a tu segmento de Cloud Storage.
Crear conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de aprendizaje automático.
Consola
En la Cloud de Confiance consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haga 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, introduce
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, a continuación, EE. UU. (varias regiones de Estados Unidos).
Deje el resto de los ajustes predeterminados como están y haga clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos, usa el comando
bq mk
con la marca --location
. Para ver una lista completa de los parámetros posibles, consulta la referencia del comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos definida comoUS
y la descripciónBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
En lugar de usar la marca
--dataset
, el comando usa el acceso directo-d
. Si omite-d
y--dataset
, el comando creará un conjunto de datos de forma predeterminada.Confirma que se ha 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" } }
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Importar el modelo ONNX a BigQuery
En los pasos siguientes se muestra cómo importar el modelo ONNX de ejemplo desde Cloud Storage mediante una instrucción CREATE MODEL
.
Para importar el modelo ONNX al conjunto de datos, selecciona una de las siguientes opciones:
Consola
En la Cloud de Confiance consola, ve a la página BigQuery Studio.
En el editor de consultas, introduce la siguiente instrucción
CREATE MODEL
.CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')
Sustituye
BUCKET_PATH
por la ruta al modelo que has subido a Cloud Storage. Si utilizas el modelo de ejemplo, sustituyeBUCKET_PATH
por el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.Cuando la operación se haya completado, verás un mensaje similar al siguiente:
Successfully created model named imported_onnx_model
.El nuevo modelo aparecerá en el panel Recursos. Los modelos se indican con el icono de modelo:
Si selecciona el nuevo modelo en el panel Recursos, aparecerá información sobre el modelo junto al editor de consultas.
bq
Importa el modelo ONNX de Cloud Storage introduciendo la siguiente instrucción
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')"
Sustituye
BUCKET_PATH
por la ruta al modelo que has subido a Cloud Storage. Si utilizas el modelo de ejemplo, sustituyeBUCKET_PATH
por el siguiente valor:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.Cuando la operación se haya completado, verás un mensaje similar al siguiente:
Successfully created model named imported_onnx_model
.Después de importar el modelo, comprueba que aparece en el conjunto de datos.
bq ls -m bqml_tutorial
El resultado debería ser similar al siguiente:
tableId Type --------------------- ------- imported_onnx_model MODEL
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Importa el modelo mediante el objeto ONNXModel
.
Para obtener más información sobre cómo importar modelos ONNX a BigQuery, incluidos los requisitos de formato y almacenamiento, consulta la sentencia CREATE MODEL
para importar modelos ONNX.
Hacer predicciones con el modelo ONNX importado
Después de importar el modelo ONNX, usa la función ML.PREDICT
para hacer predicciones con el modelo.
La consulta de los siguientes pasos usa imported_onnx_model
para hacer predicciones
con datos de entrada de la tabla iris
del conjunto de datos público ml_datasets
. El modelo ONNX espera cuatro valores FLOAT
como entrada:
sepal_length
sepal_width
petal_length
petal_width
Estas entradas coinciden con las initial_types
que se definieron cuando convirtió el modelo al formato ONNX.
Los resultados incluyen las columnas label
y probabilities
, así como las columnas de la tabla de entrada. label
representa la etiqueta de clase predicha.
probabilities
es una matriz de probabilidades que representa las probabilidades de cada clase.
Para hacer predicciones con el modelo ONNX importado, elige una de las siguientes opciones:
Consola
Ve a la página BigQuery Studio.
En el editor de consultas, introduce 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`))'
BigQuery DataFrames
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames que se indican 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 los DataFrames de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local.
Usa la función predict
para ejecutar el modelo ONNX.
El resultado es similar al siguiente: