Questo tutorial mostra come importare un modello Open Neural Network Exchange (ONNX) addestrato con scikit-learn. Importa il modello in un set di dati BigQuery e utilizzalo per fare previsioni utilizzando una query SQL.
ONNX fornisce un formato uniforme progettato per rappresentare qualsiasi framework di machine learning (ML). Il supporto di BigQuery ML per ONNX ti consente di svolgere quanto segue:
- Addestra un modello utilizzando il tuo framework preferito.
- Converti il modello nel formato del modello ONNX.
- Importa il modello ONNX in BigQuery ed esegui le previsioni utilizzando BigQuery ML.
Obiettivi
- Crea e addestra un modello utilizzando scikit-learn.
- Converti il modello in formato ONNX utilizzando sklearn-onnx.
- Utilizza l'istruzione
CREATE MODEL
per importare il modello ONNX in BigQuery. - Utilizza la funzione
ML.PREDICT
per fare previsioni con il modello ONNX importato.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Cloud Storage APIs.
- Assicurati di disporre delle autorizzazioni necessarie per eseguire le attività descritte in questo documento.
Ruoli obbligatori
Se crei un nuovo progetto, sei il proprietario del progetto e ti vengono concesse tutte le autorizzazioni IAM (Identity and Access Management) necessarie per completare questo tutorial.
Se utilizzi un progetto esistente, svolgi i seguenti passaggi.
Make sure that you have the following role or roles on the project:
- BigQuery Studio Admin (
roles/bigquery.studioAdmin
) - Storage Object Creator (
roles/storage.objectCreator
)
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi accesso.
-
Nel campo Nuovi principali, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.
- Nell'elenco Seleziona un ruolo, seleziona un ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
- Fai clic su Salva.
Per ulteriori informazioni sulle autorizzazioni IAM in BigQuery, consulta Autorizzazioni IAM.
(Facoltativo) Addestra un modello e convertilo in formato ONNX
I seguenti esempi di codice mostrano come addestrare un modello di classificazione con
scikit-learn e come convertire la pipeline risultante in formato ONNX. Questo
tutorial utilizza un modello di esempio predefinito archiviato in
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
. Non è necessario completare questi passaggi se utilizzi il modello di esempio.
Addestrare un modello di classificazione con scikit-learn
Utilizza il seguente codice di esempio per creare e addestrare una pipeline di scikit-learn sul set di dati Iris. Per istruzioni su come installare e utilizzare scikit-learn, consulta la guida all'installazione di 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)
Converti la pipeline in un modello ONNX
Utilizza il seguente codice di esempio in 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
Dopo aver salvato il modello, svolgi le seguenti operazioni:
- Crea un bucket Cloud Storage per memorizzare il modello.
- Carica il modello ONNX nel tuo bucket Cloud Storage.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML.
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel riquadro Explorer, fai clic sul nome del progetto.
Fai clic su
Visualizza azioni > Crea set di dati.Nella pagina Crea set di dati:
In ID set di dati, inserisci
bqml_tutorial
.Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).
I set di dati pubblici sono archiviati nella
US
multiregione. Per semplicità, archivia il tuo set di dati nella stessa posizione.- Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
bq
Per creare un nuovo set di dati, utilizza il comando
bq mk
con il flag --location
. Per un elenco completo dei possibili parametri, consulta la documentazione di riferimento del comando bq mk --dataset
.
Crea un set di dati denominato
bqml_tutorial
con la posizione dei dati impostata suUS
e una descrizione diBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anziché utilizzare il flag
--dataset
, il comando utilizza la scorciatoia-d
. Se ometti-d
e--dataset
, il comando crea per impostazione predefinita un set di dati.Verifica che il set di dati sia stato creato:
bq ls
API
Chiama il metodo datasets.insert
con una risorsa set di dati definita.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Importa il modello ONNX in BigQuery
I passaggi riportati di seguito mostrano come importare il modello ONNX di esempio da Cloud Storage utilizzando un'istruzione CREATE MODEL
.
Per importare il modello ONNX nel set di dati, seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery Studio.
Nell'editor di query, inserisci il seguente statement
CREATE MODEL
.CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')
Sostituisci
BUCKET_PATH
con il percorso del modello che hai caricato su Cloud Storage. Se utilizzi il modello di esempio, sostituisciBUCKET_PATH
con il seguente valore:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.Al termine dell'operazione, viene visualizzato un messaggio simile al seguente:
Successfully created model named imported_onnx_model
.Il nuovo modello viene visualizzato nel riquadro Risorse. I modelli sono indicati dall'icona del modello:
Se selezioni il nuovo modello nel riquadro Risorse, le informazioni sul modello vengono visualizzate accanto all'editor di query.
bq
Importa il modello ONNX da Cloud Storage inserendo la seguente dichiarazione
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')"
Sostituisci
BUCKET_PATH
con il percorso del modello che hai caricato su Cloud Storage. Se utilizzi il modello di esempio, sostituisciBUCKET_PATH
con il seguente valore:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.Al termine dell'operazione, viene visualizzato un messaggio simile al seguente:
Successfully created model named imported_onnx_model
.Dopo aver importato il modello, verifica che sia visualizzato nel set di dati.
bq ls bqml_tutorial
L'output è simile al seguente:
tableId Type --------------------- ------- imported_onnx_model MODEL
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.
Importa il modello utilizzando l'oggetto ONNXModel
.
Per ulteriori informazioni sull'importazione dei modelli ONNX in BigQuery, inclusi i requisiti di formato e archiviazione, consulta L'istruzione CREATE MODEL
per l'importazione dei modelli ONNX.
Fai previsioni con il modello ONNX importato
Dopo aver importato il modello ONNX, utilizza la funzione ML.PREDICT
per fare
predizioni con il modello.
La query nei passaggi successivi utilizza imported_onnx_model
per fare previsioni utilizzando i dati di input della tabella iris
nel set di dati pubblico ml_datasets
. Il
modello ONNX si aspetta quattro valori FLOAT
come input:
sepal_length
sepal_width
petal_length
petal_width
Questi input corrispondono a initial_types
definiti quando hai convertito il
modello in formato ONNX.
Gli output includono le colonne label
e probabilities
e le colonne della tabella di input. label
rappresenta l'etichetta della classe prevista.
probabilities
è un array di probabilità che rappresentano le probabilità per ogni classe.
Per fare previsioni con il modello TensorFlow importato, scegli una delle seguenti opzioni:
Console
Vai alla pagina BigQuery Studio.
Nell'editor delle query, inserisci questa query che utilizza la funzione
ML.PREDICT
.SELECT * FROM ML.PREDICT(MODEL `bqml_tutorial.imported_onnx_model`, ( SELECT * FROM `bigquery-public-data.ml_datasets.iris` ) )
I risultati della query sono simili ai seguenti:
bq
Esegui la query che utilizza 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
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames riportate nella guida introduttiva di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.
Utilizza la funzione predict
per eseguire il modello remoto.
Il risultato è simile al seguente:
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Console
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimina singole risorse
In alternativa, per rimuovere le singole risorse utilizzate in questo tutorial:
(Facoltativo) Elimina il set di dati.
Passaggi successivi
- Per ulteriori informazioni sull'importazione dei modelli ONNX, consulta
L'istruzione
CREATE MODEL
per i modelli ONNX. - Per ulteriori informazioni sui convertitori e sui tutorial ONNX disponibili, consulta Conversione in formato ONNX.
- Per una panoramica di BigQuery ML, consulta Introduzione a BigQuery ML.
- Per iniziare a utilizzare BigQuery ML, consulta Creare modelli di machine learning in BigQuery ML.