Esegui previsioni con i modelli scikit-learn in formato ONNX
Panoramica
Open Neural Network Exchange (ONNX) fornisce un formato uniforme progettato per rappresentare qualsiasi framework di machine learning. Il supporto di BigQuery ML per ONNX ti consente di:
- Addestra un modello utilizzando il tuo framework preferito.
- Converti il modello nel formato del modello ONNX. Per maggiori informazioni, consulta la pagina relativa alla conversione nel formato ONNX.
- Importa il modello ONNX in BigQuery ed esegui previsioni utilizzando BigQuery ML.
Questo tutorial mostra come importare modelli ONNX addestrati con scikit-learn in un set di dati BigQuery e utilizzarli per fare previsioni da una query SQL. Puoi importare modelli ONNX utilizzando queste interfacce:
- Nella console Google Cloud
- Il comando
bq query
nello strumento a riga di comando bq - L'API BigQuery
Per ulteriori informazioni sull'importazione dei modelli ONNX in BigQuery, inclusi i requisiti per il formato e lo spazio di archiviazione, consulta L'istruzione CREATE
MODEL
per l'importazione dei modelli ONNX.
Obiettivi
In questo tutorial, imparerai a:
- Creare e addestrare modelli con scikit-learn.
- Converti i modelli in formato ONNX utilizzando sklearn-onnx.
- Importa i modelli ONNX in BigQuery ed esegui previsioni.
Addestra un modello di classificazione con scikit-learn
Crea e addestra una pipeline di scikit-learn sul set di dati Iris:
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)
Converti il modello in formato ONNX e salva
Usa sklearn-onnx per convertire la pipeline scikit-learn in un modello ONNX denominato 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())
Carica il modello ONNX in Cloud Storage
Crea un bucket Cloud Storage per archiviare il file del modello ONNX, quindi carica il file del modello ONNX salvato nel tuo bucket Cloud Storage. Per ulteriori informazioni, vedi Caricare oggetti da un file system.
Importa il modello ONNX in BigQuery
Questo passaggio presuppone che tu abbia caricato il modello ONNX nel tuo bucket Cloud Storage. Un modello di esempio è archiviato in gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, inserisci un'istruzione
CREATE MODEL
come la seguente.CREATE OR REPLACE MODEL `mydataset.mymodel` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='gs://bucket/path/to/onnx_model/*')
Ad esempio:
CREATE OR REPLACE MODEL `example_dataset.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx')
La query precedente importa il modello ONNX situato in
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
come modello BigQuery denominatoimported_onnx_model
.Il nuovo modello dovrebbe apparire nel riquadro Risorse. Man mano che espandi ciascuno dei set di dati in un progetto, i modelli vengono elencati insieme alle altre risorse BigQuery nei set di dati. I modelli sono indicati dall'icona del modello: .
Se selezioni il nuovo modello nel riquadro Risorse, le informazioni sul modello vengono visualizzate sotto l'Editor query.
bq
Per importare un modello ONNX da Cloud Storage, esegui una query batch inserendo un comando come questo:
bq query \
--use_legacy_sql=false \
"CREATE MODEL
`mydataset.mymodel`
OPTIONS
(MODEL_TYPE='ONNX',
MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
Ad esempio:
bq query --use_legacy_sql=false \
"CREATE OR REPLACE MODEL
`example_dataset.imported_onnx_model`
OPTIONS
(MODEL_TYPE='ONNX',
MODEL_PATH='gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx')"
Dopo aver importato il modello, questo dovrebbe apparire nell'output di bq ls [dataset_name]
:
$ bq ls example_dataset
tableId Type Labels Time Partitioning
--------------------- ------- -------- -------------------
imported_onnx_model MODEL
API
Inserisci un nuovo job e compila la proprietà jobs#configuration.query come nel seguente corpo della richiesta:
{
"query": "CREATE MODEL project_id:mydataset.mymodel OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
}
DataFrame BigQuery
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida rapida di BigQuery sull'utilizzo di BigQuery DataFrames. Per saperne di più, consulta la documentazione di riferimento di BigQuery DataFrames.
Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Importa il modello utilizzando l'oggetto ONNXModel
.
Esegui previsioni con il modello ONNX importato
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nell'editor query, inserisci una query utilizzando
ML.PREDICT
come segue.SELECT * FROM ML.PREDICT(MODEL
example_dataset.imported_onnx_model
, ( SELECT * FROMbigquery-public-data.ml_datasets.iris
) )La query precedente utilizza il modello denominato
imported_onnx_model
nel set di datiexample_dataset
del progetto attuale per fare previsioni dai dati di input nella tabella pubblicairis
dal set di datiml_datasets
nel progettobigquery-public-data
. In questo caso, il modello ONNX prevede quattro input in virgola mobile:sepal_length
,sepal_width
,petal_length
epetal_width
, che corrispondono al valoreinitial_types
definito nel passaggio 2 , quindi la sottoquerySELECT
è l'intera tabellabigquery-public-data
contenente queste quattro colonne di input.Il modello restituisce come output le colonne
label
eprobabilities
, nonché le colonne dalla tabella di input.label
rappresenta l'etichetta della classe prevista.probabilities
è un array di probabilità che rappresentano le probabilità per ogni classe.
Il risultato della query è simile al seguente:
bq
Per fare previsioni a partire dai dati di input nella tabella input_data
, inserisci un comando come il seguente, utilizzando il modello ONNX importato my_model
:
bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
MODEL `my_project.my_dataset.my_model`,
(SELECT * FROM input_data))'
Ad esempio:
bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
MODEL `example_dataset.imported_onnx_model`,
(SELECT * FROM `bigquery-public-data.ml_datasets.iris`))'
API
Inserisci un nuovo job e compila la proprietà jobs#configuration.query come nel seguente corpo della richiesta:
{
"query": "SELECT * FROM ML.PREDICT(MODEL `my_project.my_dataset.my_model`, (SELECT * FROM input_data))"
}
DataFrame BigQuery
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida rapida di BigQuery sull'utilizzo di BigQuery DataFrames. Per saperne di più, consulta la documentazione di riferimento di BigQuery DataFrames.
Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Utilizza la funzione predict
per eseguire il modello remoto:
Il risultato è simile al seguente:
Passaggi successivi
- Per saperne di più sull'importazione di modelli ONNX, consulta l'istruzione
CREATE MODEL
per i modelli ONNX. - Per ulteriori informazioni sui convertitori ONNX e sui tutorial, consulta la sezione Conversione nel formato ONNX.
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per iniziare a utilizzare BigQuery ML, consulta Creazione di modelli di machine learning in BigQuery ML.
- Per saperne di più sull'utilizzo dei modelli, consulta queste risorse: