Exporter un modèle BigQuery ML pour la prédiction en ligne


Ce tutoriel explique comment exporter un modèle BigQuery ML, puis le déployer sur AI Platform ou sur une machine locale. Vous allez utiliser la table iris des ensembles de données publics BigQuery et effectuer les trois scénarios de bout en bout suivants :

  • Entraîner et déployer un modèle de régression logistique (s'applique également aux modèles de classificateur DNN, de régresseur DNN, de k-moyennes, de régression linéaire et de factorisation matricielle)
  • Entraîner et déployer un modèle de classificateur d'arbre de décision à boosting (s'applique également au modèle de régresseur d'arbre de décision à boosting)
  • Entraîner et déployer un modèle de classificateur AutoML (s'applique également au modèle de régresseur AutoML)

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, dont :

  • BigQuery ML
  • Cloud Storage
  • AI Platform (facultatif, utilisé pour la prédiction en ligne)

Pour en savoir plus sur le coût de BigQuery ML, consultez la page Tarifs de BigQuery ML.

Pour en savoir plus sur le coût de Cloud Storage, consultez la page Tarifs de Cloud Storage.

Pour en savoir plus sur le coût d'AI Platform, consultez la section Comprendre les nœuds de prédiction et l'allocation des ressources.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, accédez à

    Activez l'API BigQuery

    Activer l'API

  7. Activer les API AI Platform Training and Prediction API and Compute Engine.

    Activer les API

  8. Installez Google Cloud CLI et Google Cloud CLI.

Créer votre ensemble de données

Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :

  1. Dans la console Google Cloud, accédez à la page "BigQuery".

    Accéder à la page "BigQuery"

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    • Dans le champ ID de l'ensemble de données, saisissez bqml_tutorial.

    • Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

      Les ensembles de données publics sont stockés dans l'emplacement multirégional US. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.

    • Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

      Créer une page d'ensemble de données

Entraîner et déployer un modèle de régression logistique

Entraîner le modèle

Entraînez un modèle de régression logistique qui prédit le type d'iris à l'aide de l'instruction BigQuery ML CREATE MODEL. Cette tâche d'entraînement devrait prendre environ une minute.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.iris_model`
  OPTIONS (model_type="logistic_reg",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

Exporter le modèle

Exportez le modèle vers un bucket Cloud Storage à l'aide de l'outil de ligne de commande bq. Pour découvrir d'autres méthodes d'exportation de modèles, consultez la section Exporter des modèles BigQuery ML. L'exécution de cette tâche d'extraction devrait prendre moins d'une minute.

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

Déploiement et diffusion en local

Vous pouvez déployer des modèles TensorFlow exportés à l'aide du conteneur Docker de TensorFlow Serving. Les étapes suivantes nécessitent l'installation de Docker.

Télécharger les fichiers de modèle exportés dans un répertoire temporaire

mkdir tmp_dir
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

Créer un sous-répertoire de version

Cette étape définit un numéro de version (1 dans ce cas) pour le modèle.

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Extraire l'image Docker

docker pull tensorflow/serving

Exécuter le conteneur Docker

docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &

Exécuter la prédiction

curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict

Déploiement et diffusion en ligne

Dans cette section, les prédictions sont déployées et exécutées sur le modèle exporté à l'aide de Google Cloud CLI.

Pour en savoir plus sur le déploiement d'un modèle sur AI Platform pour les prédictions en ligne/par lot, consultez la page Déployer des modèles.

Créer une ressource de modèle

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Créer une version de modèle

1. Définissez les variables d'environnement :

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2. Créez la version :

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

Cette étape peut prendre quelques minutes. Le message Creating version (this might take a few minutes)...... doit s'afficher.

3. (Facultatif) Récupérez des informations sur votre nouvelle version

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

Le résultat doit ressembler à ce qui suit :

createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

Prédiction en ligne

Pour en savoir plus sur l'exécution de prédictions en ligne sur un modèle déployé, consultez la page Demander des prédictions.

1. Créez un fichier JSON délimité par un retour à la ligne pour les entrées, par exemple un fichier instances.json avec le contenu ci-dessous :

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2. Configurez des variables d'environnement pour la prédiction :

INPUT_DATA_FILE="instances.json"

3. Exécutez la prédiction :

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Entraîner et déployer un modèle de classificateur d'arbre de décision à boosting

Entraîner le modèle

Entraînez un modèle de classificateur d'arbre de décision à boosting qui prédit le type d'iris à l'aide de l'instruction CREATE MODEL. L'exécution de cette tâche d'entraînement doit prendre environ sept minutes.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model`
  OPTIONS (model_type="boosted_tree_classifier",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

Exporter le modèle

Exportez le modèle vers un bucket Cloud Storage à l'aide de l'outil de ligne de commande bq. Pour découvrir d'autres méthodes d'exportation de modèles, consultez la section Exporter des modèles BigQuery ML.

bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model

Déploiement et diffusion en local

Dans les fichiers exportés, il existe un fichier main.py pour l'exécution locale.

Télécharger les fichiers de modèle exportés dans un répertoire local

mkdir serving_dir
gsutil cp -r gs://some/gcs/path/boosted_tree_iris_model serving_dir

Extraire le prédicteur

tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/

Installer la bibliothèque XGBoost

Installez la bibliothèque XGBoost (version 0.82 ou ultérieure).

Exécuter la prédiction

cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'

Déploiement et diffusion en ligne

Cette section utilise la CLI Google Cloud pour déployer et exécuter des prédictions sur le modèle exporté dans la prédiction en ligne AI Platform.

Pour en savoir plus sur le déploiement d'un modèle sur AI Platform pour les prédictions en ligne/par lot à l'aide de routines personnalisées, consultez la page Déployer des modèles.

Créer une ressource de modèle

MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Créer une version de modèle

1. Définissez les variables d'environnement :

MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"

2. Créez la version :

gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15

Cette étape peut prendre quelques minutes. Le message Creating version (this might take a few minutes)...... doit s'afficher.

3. (Facultatif) Récupérez des informations sur votre nouvelle version

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

Le résultat doit ressembler à ce qui suit :

createTime: '2020-02-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

Prédiction en ligne

Pour en savoir plus sur l'exécution de prédictions en ligne sur un modèle déployé, consultez la section Effectuer une requête de prédiction.

1. Créez un fichier JSON délimité par un retour à la ligne pour les entrées, par exemple un fichier instances.json avec le contenu ci-dessous :

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2. Configurez des variables d'environnement pour la prédiction.

INPUT_DATA_FILE="instances.json"

3. Exécutez la prédiction :

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Entraîner et déployer un modèle de classificateur AutoML

Entraîner le modèle

Entraînez un modèle de classificateur AutoML qui prédit le type d'iris à l'aide de l'instruction CREATE MODEL. Les modèles AutoML ont besoin d'au moins 1 000 lignes de données d'entrée. Comme ml_datasets.iris ne comporte que 150 lignes, nous dupliquons les données 10 fois. L'exécution de cette tâche d'entraînement doit prendre environ deux heures.

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.automl_iris_model`
  OPTIONS (model_type="automl_classifier",
      budget_hours=1, input_label_cols=["species"])
  AS SELECT
    * EXCEPT(multiplier)
  FROM
    `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'

Exporter le modèle

Exportez le modèle vers un bucket Cloud Storage à l'aide de l'outil de ligne de commande bq. Pour découvrir d'autres méthodes d'exportation de modèles, consultez la section Exporter des modèles BigQuery ML.

bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model

Déploiement et diffusion en local

Pour en savoir plus sur la création de conteneurs AutoML, consultez la page Exporter des modèles. Les étapes suivantes nécessitent l'installation de Docker.

Copier les fichiers de modèle exportés dans un répertoire local

mkdir automl_serving_dir
gsutil cp -r gs://some/gcs/path/automl_iris_model/* automl_serving_dir/

Extraire l'image Docker AutoML

docker pull gcr.io/cloud-automl-tables-public/model_server

Démarrer le conteneur Docker

docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server

Exécuter la prédiction

1. Créez un fichier JSON délimité par un retour à la ligne pour les entrées, par exemple un fichier input.json avec le contenu ci-dessous :

{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0},
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}]}

2. Effectuez l'appel de prédiction :

curl -X POST --data @input.json http://localhost:8080/predict

Déploiement et diffusion en ligne

La prédiction en ligne pour les modèles de régresseur et de classificateur AutoML n'est pas compatible avec AI Platform.

Nettoyer

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

  • Supprimez le projet que vous avez créé.
  • Vous pouvez également conserver le projet, et supprimer l'ensemble de données et le bucket Cloud Storage.

Arrêter le conteneur Docker

1. Répertoriez tous les conteneurs Docker en cours d'exécution.

docker ps

2. Arrêtez le conteneur portant l'ID de conteneur approprié dans la liste des conteneurs.

docker stop container_id

Supprimer les ressources AI Platform

1. Supprimez la version du modèle.

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2. Supprimez le modèle.

gcloud ai-platform models delete $MODEL_NAME

Supprimer l'ensemble de données

La suppression de votre projet entraîne celle de tous les ensembles de données et de toutes les tables qui lui sont associés. Si vous préférez réutiliser le projet, vous pouvez supprimer l'ensemble de données que vous avez créé dans ce tutoriel :

  1. Si nécessaire, ouvrez la page BigQuery dans Cloud Console.

    Accéder à BigQuery

  2. Dans le panneau de navigation, cliquez sur l'ensemble de données bqml_tutorial que vous avez créé.

  3. Cliquez sur Delete dataset (Supprimer l'ensemble de données) dans la partie droite de la fenêtre. Cette action supprime l'ensemble de données, la table et toutes les données.

  4. Dans la boîte de dialogue Supprimer l'ensemble de données, confirmez la commande de suppression en saisissant le nom de votre ensemble de données (bqml_tutorial), puis cliquez sur Supprimer.

Supprimer votre bucket Cloud Storage

La suppression de votre projet entraîne celle de tous les buckets Cloud Storage du projet. Si vous préférez réutiliser le projet, vous pouvez supprimer le bucket que vous avez créé dans ce tutoriel.

  1. Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.

    Accéder à la page "Buckets"

  2. Cochez la case correspondant au bucket que vous souhaitez supprimer.

  3. Cliquez sur Supprimer.

  4. Dans la fenêtre qui apparaît en superposition, cliquez sur Supprimer pour confirmer que vous souhaitez supprimer le bucket et son contenu.

Supprimer votre projet

Pour supprimer le projet :

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes