Déployer des modèles

Cette page explique comment déployer votre modèle sur AI Platform Prediction pour obtenir des prédictions.

Pour déployer votre modèle entraîné sur AI Platform Prediction, vous devez :

  • importer votre modèle enregistré dans un bucket Cloud Storage ;
  • créer une ressource de modèle AI Platform Prediction ;
  • créer une ressource de version AI Platform Prediction en spécifiant le chemin d'accès Cloud Storage vers votre modèle enregistré.

Avant de commencer

Entraînez votre modèle de machine learning et suivez le guide d'exportation des modèles pour la prédiction afin de créer des artefacts de modèle pouvant être déployés sur AI Platform Prediction.

Stocker le modèle dans Cloud Storage

En règle générale, il est plus facile d'utiliser un bucket Cloud Storage dédié dans le même projet que celui utilisé pour AI Platform Prediction.

Si vous utilisez un bucket dans un autre projet, 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 requête de création d'une version de modèle AI Platform Prediction ne peut pas aboutir. En savoir plus sur l'octroi d'autorisations relatives au stockage.

Configurer un bucket Cloud Storage

Vous trouverez dans cette section la procédure à suivre pour créer un bucket. Vous pouvez utiliser un bucket existant, mais il doit se trouver dans la même région que celle où vous prévoyez d'exécuter des tâches AI Platform. En outre, s'il ne fait pas partie du projet que vous utilisez pour exécuter AI Platform Prediction, vous devez accorder l'accès aux comptes de service AI Platform Prediction.

  1. Indiquez un nom pour votre nouveau bucket. Ce nom doit être unique par rapport à tous les buckets dans Cloud Storage.

    BUCKET_NAME="your_bucket_name"

    Par exemple, vous pouvez utiliser le nom de votre projet en ajoutant -aiplatform :

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-aiplatform
  2. Vérifiez le nom du bucket que vous avez créé.

    echo $BUCKET_NAME
  3. Sélectionnez une région pour votre bucket, puis définissez une variable d'environnement REGION.

    Utilisez la même région que celle où vous prévoyez d'exécuter des tâches AI Platform Prediction. Consultez la liste des régions disponibles pour les services AI Platform Prediction.

    Par exemple, le code suivant crée la variable REGION et la définit sur us-central1 :

    REGION=us-central1
  4. Créez le bucket :

    gsutil mb -l $REGION gs://$BUCKET_NAME

Importer le modèle exporté dans Cloud Storage

Les exemples suivants montrent comment importer différents types d'artefacts de modèle dans un répertoire de modèle dans Cloud Storage :

Modèle SavedModel TensorFlow

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

Lorsque vous exportez un modèle SavedModel à partir de tf.keras ou à partir d'une instance TensorFlow Estimator, il est enregistré en tant que sous-répertoire horodaté d'un répertoire d'exportation de base de votre choix, tel que your-export-dir-base/1487877383942. Cet exemple montre comment importer le répertoire avec l'horodatage le plus récent. Si vous avez créé votre modèle SavedModel d'une autre manière, il est susceptible de se trouver à un emplacement différent sur votre système de fichiers local.

Fichier de modèle scikit-learn ou XGBoost

Selon la manière dont vous avez exporté votre modèle entraîné, importez votre fichier model.joblib, model.pkl ou model.bst.

L'exemple suivant montre comment importer un fichier exporté par sklearn.externals.joblib :

gsutil cp ./model.joblib gs://your-bucket/model.joblib

L'exemple suivant montre comment importer un fichier exporté par le module pickle de Python :

gsutil cp ./model.pkl gs://your-bucket/model.pkl

L'exemple suivant montre comment importer un fichier exporté par la méthode save_model de xgboost.Booster :

gsutil cp ./model.bst gs://your-bucket/model.bst

Si vous déployez une routine de prédiction personnalisée (bêta), importez également tous les autres artefacts de modèle dans votre répertoire de modèle.

La taille totale du fichier de votre répertoire de modèle doit être inférieure ou égale à 500 Mo si vous utilisez un ancien type de machine (MLS1), ou inférieure ou égale à 2 Go si vous utilisez un type de machine Compute Engine (N1). En savoir plus sur les types de machines pour la prédiction en ligne

Lorsque vous créez des versions ultérieures de votre modèle, organisez-les en les plaçant dans un répertoire distinct, propre à chaque version, dans votre bucket Cloud Storage.

Importer du code personnalisé

Si vous déployez un pipeline scikit-learn avec du code personnalisé ou une routine de prédiction personnalisée, vous devez également importer le package de distribution source contenant votre code personnalisé. Exemple :

gsutil cp dist/my_custom_code-0.1.tar.gz gs://your-bucket/my_custom_code-0.1.tar.gz

Vous pouvez importer ce package tarball dans le même répertoire Cloud Storage que votre fichier de modèle, mais ce n'est pas obligatoire. En réalité, les séparer peut permettre une meilleure organisation, en particulier si vous déployez plusieurs versions de votre modèle et de votre code.

Tester le modèle avec des prédictions locales

Vous pouvez utiliser la commande gcloud ai-platform local predict pour tester la façon dont votre modèle diffuse des prédictions avant de le déployer dans AI Platform Prediction. La commande effectue des prédictions à l'aide des dépendances de votre environnement local et renvoie les résultats au même format que la commande gcloud ai-platform predict lorsqu'elle effectue des prédictions en ligne. Les tests de prédictions en local peuvent vous permettre de détecter les erreurs avant d'engager des coûts pour les requêtes de prédiction en ligne.

Pour l'argument --model-dir, spécifiez un répertoire contenant votre modèle de machine learning exporté sur votre ordinateur local ou dans Cloud Storage. Pour l'argument --framework, spécifiez tensorflow, scikit-learn ou xgboost. Vous ne pouvez pas exécuter la commande gcloud ai-platform local predict avec une routine de prédiction personnalisée.

L'exemple suivant montre comment effectuer une prédiction locale :

gcloud ai-platform local predict --model-dir local-or-cloud-storage-path-to-model-directory/ \
  --json-instances local-path-to-prediction-input.json \
  --framework name-of-framework

Déployer des modèles et des versions

AI Platform Prediction organise vos modèles entraînés à l'aide de ressources de modèle et de version. Un modèle AI Platform Prediction est un conteneur pour les versions de votre modèle de machine learning.

Pour déployer un modèle, vous créez une ressource de modèle dans AI Platform Prediction, vous créez ensuite une version de ce modèle, puis vous associez la version du modèle au fichier de modèle stocké dans Cloud Storage.

Créer une ressource de modèle

AI Platform Prediction organise les différentes versions de votre modèle à l'aide de ressources de modèle.

À ce stade, vous devez décider si vous souhaitez que les versions de modèle appartenant à ce modèle utilisent un point de terminaison régional ou le point de terminaison global. Dans la plupart des cas, choisissez un point de terminaison régional. Si vous avez besoin d'une fonctionnalité disponible seulement sur les anciens types de machines (MLS1) ou que vous souhaitez exécuter des nœuds de prédiction dans une région seulement compatible avec les anciens types de machines (MLS1), utilisez le point de terminaison global.

Vous devez également décider à ce stade si vous souhaitez que les versions de modèle appartenant à ce modèle exportent les journaux lorsqu'ils diffusent des prédictions. Les exemples suivants n'activent pas la journalisation. Découvrez comment activer la journalisation.

Console

  1. Accédez à la page des modèles AI Platform Prediction dans Cloud Console :

    Accéder à la page des modèles

  2. Cliquez sur le bouton Nouveau modèle en haut de la page Modèles. La page Créer un modèle s'affiche.

  3. Saisissez un nom unique pour le modèle dans le champ Nom du modèle.

  4. Lorsque la case Utiliser le point de terminaison régional est cochée, AI Platform Prediction utilise un point de terminaison régional. Pour utiliser le point de terminaison mondial, décochez la case Utiliser le point de terminaison régional.

  5. Dans la liste déroulante Région, sélectionnez un emplacement pour vos nœuds de prédiction. Les régions disponibles diffèrent selon que vous utilisez un point de terminaison régional ou un point de terminaison mondial.

  6. Cliquez sur Créer.

  7. Vérifiez que vous êtes revenu sur la page Modèles et que le nouveau modèle figure dans la liste.

gcloud

Point de terminaison régional

Exécutez la commande suivante :

gcloud ai-platform models create MODEL_NAME \
  --region=REGION

Remplacez l'élément suivant :

Point de terminaison mondial

Exécutez la commande suivante :

gcloud ai-platform models create MODEL_NAME \
  --regions=REGION

Remplacez l'élément suivant :

API REST

Point de terminaison régional

  1. Mettez en forme votre requête en plaçant l'objet de modèle dans le corps de la requête. Spécifiez au moins le nom de votre modèle en remplaçant MODEL_NAME dans l'exemple suivant :

    {
      "name": "MODEL_NAME"
    }
    
  2. Effectuez un appel d'API REST vers l'URL suivante, en remplaçant PROJECT_ID par l'ID de votre projet Google Cloud :

    POST https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    Remplacez l'élément suivant :

    Par exemple, vous pouvez envoyer la requête suivante à l'aide de la commande curl. Cette commande autorise la requête en utilisant les identifiants associés à votre installation du SDK Cloud.

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    L'API renvoie une réponse semblable à la suivante :

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

Point de terminaison mondial

  1. Mettez en forme votre requête en plaçant l'objet de modèle dans le corps de la requête. Spécifiez au moins le nom de votre modèle en remplaçant MODEL_NAME dans l'exemple suivant, ainsi qu'une région en remplaçant REGION par une région compatible avec les anciens types de machines (MLS1) :

    {
      "name": "MODEL_NAME",
      "regions": ["REGION"]
    }
    
  2. Effectuez un appel d'API REST vers l'URL suivante, en remplaçant PROJECT_ID par l'ID de votre projet Google Cloud :

    POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    Par exemple, vous pouvez envoyer la requête suivante à l'aide de la commande curl. Cette commande autorise la requête en utilisant les identifiants associés à votre installation du SDK Cloud.

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME", "regions": ["REGION"]}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    L'API renvoie une réponse semblable à la suivante :

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

Reportez-vous à la page API du modèle AI Platform Prediction pour plus d'informations.

Créer une version de modèle

Vous êtes prêt à créer une version de modèle avec le modèle entraîné que vous avez importé tout à l'heure dans Cloud Storage. Lorsque vous créez une version, vous pouvez spécifier un certain nombre de paramètres. La liste suivante décrit les paramètres courants, dont certains sont obligatoires :

  • name : doit être unique dans le modèle AI Platform Prediction.
  • deploymentUri : chemin d'accès au répertoire de modèle dans Cloud Storage.

    • Si vous déployez un modèle TensorFlow, il s'agit d'un répertoire SavedModel.
    • Si vous déployez un modèle scikit-learn ou XGBoost, il s'agit du répertoire contenant votre fichier model.joblib, model.pkl ou model.bst.
    • Si vous déployez une routine de prédiction personnalisée, il s'agit du répertoire contenant tous vos artefacts de modèle. La taille totale de ce répertoire doit être inférieure ou égale à 500 Mo.
  • framework : TENSORFLOW, SCIKIT_LEARN ou XGBOOST. Omettez ce paramètre si vous déployez une routine de prédiction personnalisée.

  • runtimeVersion : version d'exécution basée sur les dépendances dont votre modèle a besoin. Si vous déployez un modèle scikit-learn, un modèle XGBoost ou une routine de prédiction personnalisée, celle-ci doit au moins correspondre à la version 1.4. Si vous prévoyez d'utiliser la version de modèle pour la prédiction par lot, vous devez utiliser la version d'exécution 2.1 ou une version antérieure.

  • packageUris (facultatif) : liste des chemins d'accès à vos packages de distribution de code personnalisés (fichiers .tar.gz) dans Cloud Storage. Ne fournissez ce paramètre que si vous déployez un pipeline scikit-learn avec du code personnalisé (bêta) ou une routine de prédiction personnalisée (bêta).

  • predictionClass (facultatif) : nom de votre classe de prédicteur au format module_name.class_name. Ne fournissez ce paramètre que si vous déployez une routine de prédiction personnalisée (bêta).

  • serviceAccount (facultatif) : vous pouvez spécifier un compte de service à utiliser pour la version de votre modèle si vous accédez aux ressources Google Cloud tout en diffusant des prédictions. Découvrez comment spécifier un compte de service. Ne fournissez ce paramètre que si vous utilisez un conteneur personnalisé ou une routine de prédiction personnalisée.

  • pythonVersion : la version de Python doit être définie à la valeur 3.5 (pour les versions d'exécution 1.4 à 1.14) ou 3.7 (pour les versions d'exécution 1.15 et ultérieures) afin d'être compatible avec les fichiers de modèle exportés avec Python 3. Ce paramètre peut également être défini sur 2.7 pour les versions d'exécution 1.15 et antérieures.

  • machineType (facultatif) : type de machine virtuelle utilisé par AI Platform Prediction pour les nœuds qui diffusent des prédictions. Apprenez-en plus sur les types de machines. S'il n'est pas défini, la valeur par défaut est mls1-c1-m2.

Pour en savoir plus sur chacun de ces paramètres, ainsi que sur d'autres paramètres moins courants, consultez la documentation de référence de l'API pour la ressource de version.

En outre, si vous avez créé votre modèle sur un point de terminaison régional, assurez-vous également de créer la version sur le même point de terminaison régional.

Console

  1. Accédez à la page des modèles AI Platform Prediction dans Cloud Console :

    Accéder à la page des modèles

  2. Sur la page Modèles, sélectionnez le nom de la ressource de modèle que vous souhaitez utiliser pour créer votre version. La page Informations sur le modèle s'affiche.

  3. En haut de la page Informations sur le modèle, cliquez sur le bouton Nouvelle version. La page Créer une version s'affiche.

  4. Saisissez le nom de la version dans le champ Nom. Saisissez éventuellement une description de cette version dans le champ Description.

  5. Renseignez les informations relatives à l'entraînement de votre modèle à l'aide des listes déroulantes correspondantes :

  6. Si vous le souhaitez, sélectionnez un Type de machine pour exécuter la prédiction en ligne. La valeur par défaut de ce champ est "Processeur à cœur unique".

  7. Dans le champ URI du modèle, saisissez l'emplacement du bucket Cloud Storage dans lequel vous avez importé le fichier de modèle. Vous pouvez utiliser le bouton Parcourir pour trouver le chemin d'accès.

    Veillez à indiquer le chemin d'accès du répertoire contenant le fichier, et non celui du fichier de modèle proprement dit. Par exemple, utilisez gs://your_bucket_name/model-dir/ au lieu de gs://your_bucket_name/model-dir/saved_model.pb ou gs://your_bucket_name/model-dir/model.pkl.

  8. Si vous déployez un pipeline scikit-learn avec code personnalisé (bêta) ou une routine de prédiction personnalisée (bêta), fournissez le chemin d'accès Cloud Storage à tout package de code personnalisé (.tar.gz) sous Code personnalisé et dépendances. Si vous déployez une routine de prédiction personnalisée, saisissez le nom de la classe de prédicteur dans le champ Classe de prédiction.

  9. Sélectionnez une option de Scaling pour le déploiement de la prédiction en ligne :

    • Si vous sélectionnez "Autoscaling", le champ facultatif Nombre minimal de nœuds s'affiche. Vous pouvez alors saisir le nombre minimal de nœuds à exécuter en permanence en cas de réduction du service. La valeur par défaut de ce champ est 0.

    • Si vous sélectionnez "Scaling manuel", vous devez saisir le Nombre de nœuds qui doivent être exécutés à tout moment.

      Consultez la section Plus d'informations sur les frais liés aux prédictions.

  10. Pour terminer la création de votre version de modèle, cliquez sur Enregistrer.

gcloud

  1. Définissez les variables d'environnement pour stocker le chemin d'accès au répertoire Cloud Storage dans lequel se trouve le fichier binaire du modèle, le nom du modèle, le nom de la version et le framework de votre choix.

    Lorsque vous créez une version avec l'outil gcloud, vous pouvez fournir le nom du framework en majuscules avec des traits de soulignement (par exemple, SCIKIT_LEARN) ou en minuscules avec des tirets (par exemple, scikit-learn). Les deux options permettent d'obtenir un comportement identique.

    Remplacez [VALUES_IN_BRACKETS] par les valeurs appropriées :

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
    

    Pour un pipeline scikit-learn avec du code personnalisé (bêta), définissez une variable supplémentaire avec le chemin d'accès à votre package tarball de code personnalisé :

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="scikit-learn"
    CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
    

    Pour une routine de prédiction personnalisée (bêta), omettez la variable FRAMEWORK et définissez d'autres variables avec le chemin d'accès à votre package tarball de code personnalisé et le nom de votre classe de prédicteur :

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
    PREDICTOR_CLASS="[MODULE_NAME].[CLASS_NAME]"
    
  2. Créez la version :

    gcloud ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=2.2 \
      --framework=$FRAMEWORK \
      --python-version=3.7 \
      --region=REGION \
      --machine-type=MACHINE_TYPE
    

    Remplacez l'élément suivant :

    Pour un pipeline scikit-learn avec du code personnalisé (bêta), utilisez le composant gcloud beta et définissez l'indicateur --package-uris : Pour déployer du code personnalisé, votre modèle doit utiliser le point de terminaison mondial.

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=2.2 \
      --framework=$FRAMEWORK \
      --python-version=3.7 \
      --machine-type=mls1-c1-m2 \
      --package-uris=$CUSTOM_CODE_PATH
    

    Pour une routine de prédiction personnalisée (bêta), utilisez le composant gcloud beta, omettez l'indicateur --framework et définissez les indicateurs --package-uris et --prediction-class. Pour déployer du code personnalisé, votre modèle doit utiliser le point de terminaison mondial.

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=1.15 \
      --python-version=3.7 \
      --machine-type=mls1-c1-m2 \
      --package-uris=$CUSTOM_CODE_PATH \
      --prediction-class=$PREDICTOR_CLASS
    

    La création de la version prend quelques minutes. Une fois la version prête, vous devez obtenir le résultat suivant :

    Creating version (this might take a few minutes)......done.
  3. Obtenez des informations sur la nouvelle version :

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

    Le résultat doit ressembler à ce qui suit :

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: [YOUR-FRAMEWORK-NAME]
    machineType: mls1-c1-m2
    name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
    pythonVersion: '3.7'
    runtimeVersion: '2.2'
    state: READY

API REST

  1. Mettez en forme le corps de votre requête pour y inclure l'objet de version. Cet exemple spécifie la version name, deploymentUri, runtimeVersion, framework et machineType. Remplacez [VALUES_IN_BRACKETS] par les valeurs appropriées :

    {
      "name": "[YOUR-VERSION-NAME]",
      "deploymentUri": "gs://your_bucket_name/",
      "runtimeVersion": "2.2",
      "framework": "[YOUR_FRAMEWORK_NAME]",
      "pythonVersion": "3.7",
      "machineType": "[YOUR_MACHINE_TYPE]"
    }
    
  2. Envoyez un appel de l'API REST au chemin d'accès suivant, en remplaçant les expressions entre crochets ([VALUES_IN_BRACKETS]) par les valeurs appropriées :

    POST https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
    

    Remplacez REGION par la région du point de terminaison régional où vous avez créé votre modèle. Si vous avez créé votre modèle sur le point de terminaison mondial, utilisez ml.googleapis.com.

    Par exemple, vous pouvez envoyer la requête suivante à l'aide de la commande curl :

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.2", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
    

    La création de la version prend quelques minutes. Une fois la version prête, vous devez obtenir un résultat semblable à celui-ci :

    {
      "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata",
        "createTime": "2018-07-07T02:51:50Z",
        "operationType": "CREATE_VERSION",
        "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
        "version": {
          "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]",
          "deploymentUri": "gs://your_bucket_name",
          "createTime": "2018-07-07T02:51:49Z",
          "runtimeVersion": "2.2",
          "framework": "[YOUR_FRAMEWORK_NAME]",
          "machineType": "[YOUR_MACHINE_TYPE]",
          "pythonVersion": "3.7"
        }
      }
    }