Vorhersagen mit scikit-learn-Modellen im ONNX-Format treffen
Open Neural Network Exchange (ONNX) bietet ein einheitliches Format für die Darstellung von Frameworks für maschinelles Lernen. Die BigQuery ML-Unterstützung für ONNX bietet folgende Möglichkeiten:
- Trainieren eines Modells mit Ihrem bevorzugten Framework.
- Konvertieren des Modells in das ONNX-Modellformat. Weitere Informationen finden Sie unter In ONNX-Format konvertieren.
- ONNX-Modell in BigQuery importieren und Vorhersagen mit BigQuery ML treffen.
In dieser Anleitung erfahren Sie, wie Sie ONNX-Modelle, die mit scikit-learn trainiert wurden, in ein BigQuery-Dataset importieren und damit Vorhersagen aus einer SQL-Abfrage treffen. Sie können ONNX-Modelle mit diesen Benutzeroberflächen importieren:
- Die Google Cloud Console
- Der Befehl
bq query
im bq-Befehlszeilentool - BigQuery API
Weitere Informationen zum Importieren von ONNX-Modellen in BigQuery, einschließlich Format- und Speicheranforderungen, finden Sie unter Anweisung CREATE
MODEL
zum Importieren von ONNX-Modellen.
Ziele
In dieser Anleitung wird Folgendes beschrieben:
- Modelle mit scikit-learn erstellen und trainieren
- Modelle mit sklearn-onnx in das ONNX-Format konvertieren.
- ONNX-Modelle in BigQuery importieren und Vorhersagen treffen.
Klassifizierungsmodell mit scikit-learn trainieren
Erstellen und trainieren Sie eine scikit-learn-Pipeline für das Dataset 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)
Modell in das ONNX-Format konvertieren und speichern
Verwenden Sie sklearn-onnx, um die scikit-learn-Pipeline in ein ONNX-Modell mit dem Namen pipeline_rf.onnx
zu konvertieren:
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())
ONNX-Modell in Cloud Storage hochladen
Erstellen Sie einen Cloud Storage-Bucket zum Speichern der ONNX-Modelldatei und laden Sie dann die gespeicherte ONNX-Modelldatei in den Cloud Storage-Bucket hoch. Weitere Informationen finden Sie unter Objekte aus einem Dateisystem hochladen.
ONNX-Modell in BigQuery importieren
Bei diesem Schritt wird davon ausgegangen, dass Sie das ONNX-Modell in den Cloud Storage-Bucket hochgeladen haben. Ein Beispielmodell wird unter gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
gespeichert.
Console
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Geben Sie im Abfrageeditor die Anweisung
CREATE MODEL
etwa so ein:CREATE OR REPLACE MODEL `mydataset.mymodel` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='gs://bucket/path/to/onnx_model/*')
Beispiel:
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')
Die vorherige Abfrage importiert das ONNX-Modell unter
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
als BigQuery-Modell mit dem Namenimported_onnx_model
.Ihr neues Modell sollte jetzt im Feld Ressourcen angezeigt werden. Wenn Sie die einzelnen Datasets in einem Projekt maximieren, werden die Modelle zusammen mit den anderen BigQuery-Ressourcen in den Datasets aufgelistet. Modelle sind am Modellsymbol zu erkennen.
Wenn Sie das neue Modell im Feld Ressourcen auswählen, werden Informationen zum Modell unter dem Abfrageeditor angezeigt.
bq
Führen Sie zum Importieren eines ONNX-Modells aus Cloud Storage eine Batchabfrage aus. Dazu nutzen Sie einen Befehl wie den folgenden:
bq query \
--use_legacy_sql=false \
"CREATE MODEL
`mydataset.mymodel`
OPTIONS
(MODEL_TYPE='ONNX',
MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
Beispiel:
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')"
Nach dem Import sollte das Modell in der Ausgabe von bq ls [dataset_name]
angezeigt werden:
$ bq ls example_dataset
tableId Type Labels Time Partitioning
--------------------- ------- -------- -------------------
imported_onnx_model MODEL
API
Fügen Sie einen neuen Job ein und geben Sie das Attribut jobs#configuration.query wie in diesem Anfragetext an:
{
"query": "CREATE MODEL project_id:mydataset.mymodel OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
}
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Importieren Sie das Modell mit dem ONNXModel
-Objekt.
Vorhersagen mit dem importierten ONNX-Modell treffen
Console
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Geben Sie im Abfrageeditor mit
ML.PREDICT
eine Abfrage wie folgende ein.SELECT * FROM ML.PREDICT(MODEL
example_dataset.imported_onnx_model
, ( SELECT * FROMbigquery-public-data.ml_datasets.iris
) )Die vorherige Abfrage nutzt das Modell namens
imported_onnx_model
im Datasetexample_dataset
im aktuellen Projekt, um Vorhersagen auf Basis der Eingabedaten in der öffentlichen Tabelleiris
des Datasetsml_datasets
im Projektbigquery-public-data
zu treffen. In diesem Fall erwartet das ONNX-Modell vier Float-Eingaben:sepal_length
,sepal_width
,petal_length
undpetal_width
, die den im Schritt 2 definierteninitial_types
entsprechen, also die UnterabfrageSELECT
der gesamtenbigquery-public-data
-Tabelle, die diese vier Eingabespalten enthält.Das Modell gibt die Spalten
label
undprobabilities
sowie die Spalten aus der Eingabetabelle aus.label
steht für das vorhergesagte Klassenlabel.probabilities
ist ein Array von Wahrscheinlichkeiten, die Wahrscheinlichkeiten für jede Klasse darstellen.
Das Ergebnis sieht etwa so aus:
bq
Geben Sie einen Befehl wie den folgenden unter Nutzung des importierten ONNX-Modells my_model
ein, um Vorhersagen aus Eingabedaten der Tabelle input_data
zu treffen:
bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
MODEL `my_project.my_dataset.my_model`,
(SELECT * FROM input_data))'
Beispiel:
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
Fügen Sie einen neuen Job ein und geben Sie das Attribut jobs#configuration.query wie in diesem Anfragetext an:
{
"query": "SELECT * FROM ML.PREDICT(MODEL `my_project.my_dataset.my_model`, (SELECT * FROM input_data))"
}
BigQuery DataFrames
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von BigQuery DataFrames in der BigQuery-Kurzanleitung: BigQuery DataFrames verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu BigQuery DataFrames.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Verwenden Sie die Funktion predict
, um das Remote-Modell auszuführen:
Das Ergebnis sieht etwa so aus:
Nächste Schritte
- Weitere Informationen zum Importieren von ONNX-Modellen finden Sie unter
CREATE MODEL
-Anweisung für ONNX-Modelle. - Weitere Informationen zu verfügbaren ONNX-Convertern und Anleitungen finden Sie unter In ONNX-Format konvertieren.
- Einführung in BigQuery ML
- Informationen zur Verwendung von BigQuery ML finden Sie unter Modelle für maschinelles Lernen in BigQuery ML erstellen.
- Weitere Informationen zum Arbeiten mit Modellen finden Sie in folgenden Ressourcen: