Quantcast
Channel: Publicis Sapient Engineering – Engineering Done Right
Viewing all articles
Browse latest Browse all 1865

Comment déployer votre propre modèle ML sur GCP en 5 étapes simples

$
0
0
Comment déployer votre propre modèle ML sur GCP en 5 étapes simples

Un jour, vous êtes confronté à la nécessité de déployer votre propre modèle ML sur GCP. À première vue, vous pouvez supposer que Google Cloud Platform (GCP) n’est pas très convivial pour les modèles externes construits avec sklearn ou xgboost, car ils ne sont pas «natifs de Google». Et même si vous devez déployer un modèle TensorFlow pré-entraîné, vous pouvez envisager de faire face à certaines difficultés et / ou problèmes de compatibilité entre les versions de TensorFlow.

Cependant, GCP est très convivial et vous avez en fait très peu de travail à faire. De plus, GCP a récemment lancé une version BETA de Continous Evaluation Tool qui vous permet d’évaluer et de suivre les performances de votre modèle juste après l’avoir déployé. Notez que l’outil d’évaluation continue est toujours en mode BETA. De plus, si vous souhaitez suivre les mesures de qualité avant d’utiliser le modèle en production, vous pouvez utiliser MLflow entre-temps.

Voici maintenant une explication sur la manière dont vous pouvez vous y prendre pour déployer votre modèle sur GCP, en 5 étapes:

Étape 1: Packager correctement votre modèle

Étape 2: Créer un Bucket de Stockage sur Google Cloud

Étape 3: Télécharger votre modèle packagé dans un Cloud Cloud Bucket de Stockage

Étape 4: Créer une AI Platform Prediction Model Resource

Étape 5: Créer une AI Platform Prediction Version Resource

N’oubliez pas non plus quelques astuces pratiques utiles qui vous aideront à rendre le déploiement de votre modèle aussi fluide et agréable que possible.

Étape 1: Packager correctement votre modèle

Vous avez plusieurs options pour le faire. Pour le moment, si vous déployez votre modèle ou votre pipeline à l’aide de la procédure décrite ici, GCP accepte les formats joblib, pickle ou protobuf. Vous avez donc une certaine liberté en ce qui concerne un choix de bibliothèque / cadre.

Les exemples de code dans l’Annexe 1, vous montreront:

1.1 Comment packager votre modèle sklearn

1.1.1 Avec joblib, également en cas de pipeline

1.1.2 Avec pickle

1.2 Comment packager votre modèle XGBoost avec pickle

1.3 Comment packager votre modèle TF au format protobuf

GCP attend un modèle représenté en un seul fichier ou en plusieurs fichiers (dans le cas de TensorFlow).

GCP n’attend rien d’autre, mais des fichiers avec le modèle de nom. *. Cela signifie que vous devez toujours appeler votre fichier modèle nommé comme tel: model.joblib, model.pkl,… précisément!

Étape 2: Créer un Google Cloud Bucket de Stockage

Comme vous pouvez le voir, une fois pakagés, vos modèles ne sont plus que des fichiers uniques ou multiples. Afin de les rendre accessibles par les ressources de Google Cloud Platform, vous devez les télécharger sur GCP et les stocker correctement: la solution standard proposée par GCP consiste à stocker vos fichiers de modèle dans des buckets et ici vous devez en créer un. Un moyen simple de le faire est de passer la commande gsutil suivante:

$ gsutil mb -l <nom_région> gs: //

Gardez à l’esprit que tous les noms de buckets partagent un seul espace de noms Google global et que le nom de votre bucket doit donc être unique. Pour d’autres détails et instructions sur la création de bucket à l’aide de WebUI, reportez-vous aux instructions simples sur la création de Créer des buckets de stockage.

Étape 3: Télécharger votre modèle packagé dans le Cloud Bucket de Stockage.

3.1 Si vous avez construit votre modèle avec TensorFlow 1.x
Dans le cas où votre modèle TensorFlow est enregistré en tant que fichier au format protobuf, copiez simplement votre fichier dans un bucket dédié sur GCP et passez aux étapes suivantes.

Alternativement, si vous n’avez pas packagé votre modèle au format protobuf, vous devez télécharger le répertoire entier, par exemple, en utilisant gsutil. Par exemple, votre modèle TF a été enregistré en tant que sous-répertoire horodaté d’un répertoire d’exportation de base, comme your-model-export-dir / 14879122020, vous pouvez télécharger le répertoire avec l’horodatage le plus récent comme indiqué ci-dessous:

> SAVED_MODEL_DIR = $(ls ./your-model-export-dir | tail -1) gsutil cp -r $SAVED_MODEL_DIR gs:// votre-bucket

3.2 Si vous avez déjà migré vers TensorFlow 2.x
Il existe plusieurs façons de déployer votre modèle TensorFlow 2.x:

  • Utilisation de Cloud AI Platform Prediction
  • Utilisation d’un cluster Compute Engine avec le TF serving installé
  • Création et utilisation des Cloud Functions

Cet article se concentre sur l’utilisation de Cloud AI Platform Prediction qui correspond au cas de TensorFlow 1.x (reportez-vous à la section ci-dessus et aux étapes suivantes décrites ci-dessous) et ne couvre pas les cas basés sur «TF Serving» et «Cloud Functions ».

Étape 4: Créer une AI Platform Prediction Model Resource

Le modèle AI Platform Prediction est un conteneur pour les versions de votre modèle ML. Il gère les ressources informatiques dans le cloud pour exécuter le modèle afin que toute application puisse demander une prédiction de modèle.

Étape 5: Créer une AI Platform Prediction Version Resource

Les versions du modèle est un moyen d’organiser votre travail. Il vous permet de développer et de mettre à niveau votre modèle de manière itérative. Ainsi, chaque fois que vous améliorez ou modifiez votre modèle, par exemple, en passant de RandomForest à XGBoost, vous pouvez réussir à conserver plusieurs versions sans avoir besoin de changer d’autres structures d’application que vous avez peut-être construites autour de votre modèle.

Bien sûr, selon le cadre que votre modèle utilise, e. g. TensorFlow ou sklearn, vous devez également choisir une valeur appropriée pour votre cadre et la version correspondante.

Vous êtes tous prêts maintenant !!! Vous pouvez voir votre modèle déployé et prêt à l’emploi.

Et enfin, il y a quelques astuces pour vous assurer que votre expérience avec le déploiement de modèles sur GCP sera fluide et vous aidera à éviter quelques bosses sur cette route:

ASTUCE 1 – La taille du modèle est limitée: la taille totale du fichier de votre répertoire de modèles doit être de 500 Mb ou moins si vous utilisez un type de machine hérité (MLS1) ou de 2 Gb ou moins si vous utilisez un type de machine Compute Engine (N1) (bêta ).

Jetez un œil aux Choisir un type de machine pour les prédictions en ligne.

ASTUCE 2 – GCP AI Platform dépend de vous pour vous soucier de l’accessibilité de votre modèle: si vous utilisez un compartiment dans un projet différent, vous devez vous assurer que votre compte de service AI Platform Prediction peut accéder à votre modèle dans Cloud Storage. Sans les autorisations appropriées, votre demande de création d’une version de modèle AI Platform Prediction échoue. En savoir plus sur contrôle des accès.

ASTUCE 3 – Organisez bien la gestion des versions des modèles: lorsque vous créez des versions ultérieures de votre modèle, organisez-les en les plaçant chacune dans son propre répertoire distinct dans votre Bucket Cloud Storage….

Par exemple: Vous avez démarré votre projet, vous déployez une seule version d’un modèle pour prédire un score de campagne publicitaire. Vous vous appelez la version simple_scoring_model. Plus tard, une version supplémentaire de la notation a été demandée par le client et un nouveau modèle a été déployé dans un répertoire advanced_scoring_model. Ainsi, vous pouvez soit maintenir deux versions d’application faisant référence à deux versions différentes, soit basculer facilement entre deux versions déployées sans mettre à jour ou réinitialiser quoi que ce soit au sein de votre infrastructure d’application, paramètres d’accès, etc.

ASTUCE 4 – Vérifiez la prise en charge de la bibliothèque Google pour votre région: lorsque vous choisissez l’emplacement du compartiment pour votre modèle, n’oubliez pas de vérifier la disponibilité de XGBoost ou TensorFlow pour différentes régions. Certains peuvent ne pas avoir toutes les ressources ou versions de bibliothèques dont vous avez besoin, préinstallées! Ce guide sur les Régions GCP vous aidera à trouver ce que vous cherchez. Faites également attention à la disponibilité d’une certaine version des bibliothèques / cadres. Par exemple, la version la plus récente actuellement disponible pour scikit-learn est 0.20.4 et vous ne pourrez pas déployer un modèle développé avec la version la plus récente 0.22.x par défaut. Cependant, il est toujours possible de télécharger les packages supplémentaires dont vous avez besoin lors de la création de la version dans la section «Custom code and dependencies».

Avec tout cela, je vous souhaite un bon déploiement de vos fantastiques modèles ML sur Google Cloud Platform.


Annexe 1. EXEMPLES DE CODE.

1.1 Packager modèle sklearn

1.1.1 Avec joblib
from sklearn import datasets
from sklearn.ensemble import RandomForestRegressor
from sklearn.externals import joblib

boston_set = datasets.load_boston()
model = RandomForestRegressor()
model.fit(boston_set.data, boston_set.target)

joblib.dump(model, 'model.joblib')

également en cas de pipeline:

from sklearn import datasets
from sklearn.ensemble import RandomForestRegressor
from sklearn.externals import joblib
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

boston_set = datasets.load_boston()
pipeline = Pipeline([('fill in nans', SimpleImputer(strategy='mean')),
                      ('normalize', StandardScaler()),
                      ('regressor', RandomForestRegressor())])

pipeline.fit(boston_set.data, boston_set.target)

joblib.dump(pipeline, 'model.joblib')
1.1.2 Avec pickle
from sklearn import datasets
from sklearn.ensemble import RandomForestRegressor
import pickle

boston_set = datasets.load_boston()
model = RandomForestRegressor()
model.fit(boston_set.data, boston_set.target)

with open('model.pkl', 'wb') as model_file:
    pickle.dump(model, model_file)

1.2 Packager modèle XGBoost

import pickle

from sklearn import datasets
import xgboost as xgb

data_set = datasets.load_breast_cancer()

dtrain = xgb.DMatrix(data_set.data, label=data_set.target)
xgb_model = xgb.train({}, dtrain, 100)

with open('model.pkl', 'wb') as model_file:
    pickle.dump(xgb_model, model_file)

1.3 Packager votre modèle TensorFlow

Une fois créé et entrainé, un modèle TensorFlow typique contient quatre fichiers:

  1. model-ckpt.meta: il contient le tampon de protocole MetaGraphDef sérialisé complet, qui décrit le flux de données, les annotations pour les variables, les pipelines d’entrée et d’autres informations pertinentes.
  2. model-ckpt.data-0000-of-00001: contient toutes les valeurs réelles des variables (poids, biais, espaces réservés, gradients, hyper-paramètres, etc.).
  3. model-ckpt.index: il s’agit d’une table immuable (tensoflow.table.Table). Chaque clé est le nom d’un tenseur et sa valeur est un BundleEntryProto sérialisé. Chaque BundleEntryProto décrit les métadonnées d’un tenseur.
  4. checkpoint: toutes les informations sur le point de contrôle.

Une fois que nous savons où se trouvent tous nos fichiers de modèle, nous pouvons packager le modèle. Pour l’exemple ci-dessous, supposons que le modèle est enregistré dans le répertoire ./my_model/.

Notez que pour mon exemple ci-dessous, j’ai créé et entraîné un classifieur pour le dataset Titanic et enregistré mon modèle juste après son entrainement, à l’aide d’un TensorFlow.saver.

import os
import tensorflow as tf

model_dir = os.path.dirname('./my_model/')
output_node_names = "weights"

checkpoint = tf.train.get_checkpoint_state(model_dir)
input_checkpoint = checkpoint.model_checkpoint_path

absolute_model_dir = "/".join(input_checkpoint.split('/')[:-1])
output_graph = absolute_model_dir + "/model.pb"

with tf.Session(graph=tf.Graph()) as sess:
    saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)
    saver.restore(sess, input_checkpoint)
    output_graph_def = tf.graph_util.convert_variables_to_constants(
        sess, 
        tf.get_default_graph().as_graph_def(),
        output_node_names.split(",")
    ) 
    with tf.gfile.GFile(output_graph, "wb") as f:
        f.write(output_graph_def.SerializeToString())

Viewing all articles
Browse latest Browse all 1865

Trending Articles