Effectuer des prédictions à l'aide de modèles scikit-learn au format ONNX
Open Neural Network Exchange (ONNX) fournit un format uniforme conçu pour représenter tous les frameworks de machine learning. La compatibilité de BigQuery ML avec ONNX vous permet de :
- Entraîner un modèle à l'aide du framework de votre choix
- Convertir le modèle au format ONNX (pour en savoir plus, consultez la section Convertir au format ONNX)
- Importer le modèle ONNX dans BigQuery et effectuer des prédictions à l'aide de BigQuery ML
Ce tutoriel vous explique comment importer des modèles ONNX entraînés avec scikit-learn dans un ensemble de données BigQuery et les utiliser pour effectuer des prédictions à partir d'une requête SQL. Vous pouvez importer des modèles ONNX à l'aide des interfaces suivantes :
- Google Cloud Console
- La commande
bq query
dans l'outil de ligne de commande bq - L'API BigQuery
Pour en savoir plus sur l'importation de modèles ONNX dans BigQuery, y compris sur les exigences en matière de format et de stockage, consultez la page Instruction CREATE
MODEL
pour l'importation de modèles ONNX.
Objectifs
Au cours de ce tutoriel, vous allez :
- créer et entraîner des modèles avec scikit-learn ;
- convertir les modèles au format ONNX à l'aide de sklearn-onnx ;
- importer les modèles ONNX dans BigQuery et effectuer des prédictions.
Entraîner un modèle de classification à l'aide de scikit-learn
Créez et entraînez un pipeline scikit-learn sur l'ensemble de données 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)
Convertir le modèle au format ONNX et l'enregistrer
Utilisez sklearn-onnx pour convertir le pipeline scikit-learn en un modèle ONNX nommé 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())
Importer le modèle ONNX dans Cloud Storage
Créez un bucket Cloud Storage pour stocker le fichier de modèle ONNX, puis importez le fichier de modèle ONNX enregistré dans votre bucket Cloud Storage. Pour en savoir plus, consultez la page Importer des objets à partir d'un système de fichiers.
Importer le modèle ONNX dans BigQuery
Cette étape suppose que vous avez importé le modèle ONNX dans votre bucket Cloud Storage. Un exemple de modèle est stocké à l'emplacement gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.
Console
Dans Google Cloud Console, accédez à la page "BigQuery".
Dans l'éditeur de requêtes, saisissez l'instruction
CREATE MODEL
suivante :CREATE OR REPLACE MODEL `mydataset.mymodel` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='gs://bucket/path/to/onnx_model/*')
Exemple :
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 requête précédente importe le modèle ONNX situé à l'emplacement
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
en tant que modèle BigQuery nomméimported_onnx_model
.Votre nouveau modèle devrait désormais s'afficher dans le panneau Ressources. À mesure que vous développez chacun des ensembles de données d'un projet, les modèles sont répertoriés avec les autres ressources BigQuery des ensembles de données. Les modèles sont indiqués par l'icône .
Si vous sélectionnez le nouveau modèle dans le panneau Ressources, les informations relatives au modèle s'affichent sous l'éditeur de requête.
bq
Pour importer un modèle ONNX à partir de Cloud Storage, exécutez une requête par lot en saisissant une commande semblable à la suivante :
bq query \
--use_legacy_sql=false \
"CREATE MODEL
`mydataset.mymodel`
OPTIONS
(MODEL_TYPE='ONNX',
MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
Exemple :
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')"
Une fois le modèle importé, il doit apparaître dans le résultat de la requête bq ls [dataset_name]
:
$ bq ls example_dataset
tableId Type Labels Time Partitioning
--------------------- ------- -------- -------------------
imported_onnx_model MODEL
API
Insérez une nouvelle tâche et renseignez la propriété jobs#configuration.query comme dans le corps de la requête suivante :
{
"query": "CREATE MODEL project_id:mydataset.mymodel OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
}
BigQuery DataFrames
Avant d'essayer cet exemple, suivez les instructions de configuration pour BigQuery DataFrames du guide de démarrage rapide de BigQuery DataFrames. Pour en savoir plus, consultez la documentation de référence sur BigQuery DataFrames.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'ADC pour un environnement de développement local.
Importez le modèle à l'aide de l'objet ONNXModel
.
Effectuer des prédictions à l'aide du modèle ONNX importé
Console
Dans Google Cloud Console, accédez à la page "BigQuery".
Dans l'éditeur de requête, saisissez une requête à l'aide de
ML.PREDICT
comme ceci :SELECT * FROM ML.PREDICT(MODEL
example_dataset.imported_onnx_model
, ( SELECT * FROMbigquery-public-data.ml_datasets.iris
) )La requête précédente utilise le modèle nommé
imported_onnx_model
dans l'ensemble de donnéesexample_dataset
du projet en cours pour effectuer des prédictions à partir des données d'entrée de la table publiqueiris
de l'ensemble de donnéesml_datasets
du projetbigquery-public-data
. Dans ce cas, le modèle ONNX attend quatre entrées flottantes :sepal_length
,sepal_width
,petal_length
etpetal_width
qui correspondent à l'entréeinitial_types
définie à l'étape 2. La sous-requêteSELECT
interroge donc l'ensemble de la tablebigquery-public-data
contenant ces quatre colonnes d'entrée.Le modèle génère les colonnes
label
etprobabilities
, ainsi que les colonnes de la table d'entrée.label
représente l'étiquette de classe prédite.probabilities
est un tableau de probabilités représentant les probabilités de chaque classe.
Le résultat de la requête se présente comme suit :
bq
Pour effectuer des prédictions à partir des données d'entrée de la table input_data
, saisissez une commande comme suit, à l'aide du modèle ONNX importé my_model
:
bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
MODEL `my_project.my_dataset.my_model`,
(SELECT * FROM input_data))'
Exemple :
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
Insérez une nouvelle tâche et renseignez la propriété jobs#configuration.query comme dans le corps de la requête suivante :
{
"query": "SELECT * FROM ML.PREDICT(MODEL `my_project.my_dataset.my_model`, (SELECT * FROM input_data))"
}
BigQuery DataFrames
Avant d'essayer cet exemple, suivez les instructions de configuration pour BigQuery DataFrames du guide de démarrage rapide de BigQuery DataFrames. Pour en savoir plus, consultez la documentation de référence sur BigQuery DataFrames.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'ADC pour un environnement de développement local.
Utilisez la fonction predict
pour exécuter le modèle distant :
Le résultat ressemble à ce qui suit :
Étapes suivantes
- Pour en savoir plus sur l'importation de modèles ONNX, consultez la page Instruction
CREATE MODEL
pour les modèles ONNX. - Pour en savoir plus sur les convertisseurs ONNX disponibles et les tutoriels, consultez la page Convertir au format ONNX.
- Pour obtenir plus d'informations sur BigQuery ML, consultez la page Présentation de BigQuery ML.
- Pour commencer à utiliser BigQuery ML, consultez la page Créer des modèles de machine learning dans BigQuery ML.
- Pour en savoir plus sur l'utilisation des modèles, consultez les ressources suivantes :