Exporter des modèles

Cette page explique comment utiliser AutoML Tables pour exporter votre modèle personnalisé vers Cloud Storage, télécharger le modèle sur votre serveur, puis utiliser Docker pour rendre le modèle disponible pour les prédictions.

Le modèle exporté ne peut s'exécuter que sur les processeurs d'architecture x86 compatibles avec les ensembles d'instructions AVX (Advanced Vector Extensions).

Introduction

La procédure pour exporter votre modèle est la suivante :

  1. Exporter le modèle.
  2. Exécuter le serveur de modèles.
  3. Demander des prédictions.

Avant de commencer

Avant de pouvoir effectuer cette tâche, vous devez avoir réalisé les opérations suivantes :

  • Configurez votre projet comme décrit dans la section Avant de commencer.
  • Entraînez le modèle que vous souhaitez télécharger.
  • Installez et initialisez le SDK Cloud sur le serveur que vous utiliserez pour exécuter le modèle exporté.
  • Installez Docker sur votre serveur.
  • Récupérez l'image Docker du serveur de modèles AutoML Tables :

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

Exporter un modèle

Vous ne pouvez pas exporter un modèle créé avant le 23 août 2019.

Console

  1. Accédez à la page AutoML Tables dans Google Cloud Console.

    Accéder à la page AutoML Tables

  2. Ouvrez l'onglet Modèles dans le volet de navigation de gauche.

  3. Dans le menu Autres actions du modèle que vous souhaitez exporter, cliquez sur Export model (Exporter le modèle).

    Menu "Plus d'actions" – "Exporter le modèle"

  4. Sélectionnez ou créez un dossier Cloud Storage à l'emplacement souhaité.

    Le bucket doit répondre aux exigences de bucket.

    Vous ne pouvez pas exporter un modèle vers un bucket de niveau supérieur. Vous devez utiliser au moins un niveau de dossier.

  5. Cliquez sur Export (Exporter).

    Fenêtre d'exportation du modèle

    Vous allez télécharger le modèle exporté sur votre serveur dans la section suivante.

API REST et ligne de commande

Vous utilisez la méthode models.export pour exporter un modèle vers Cloud Storage.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • endpoint : automl.googleapis.com pour l'emplacement mondial et eu-automl.googleapis.com pour la région UE.
  • project-id : ID de votre projet Google Cloud.
  • location : emplacement de la ressource : us-central1 pour l'emplacement mondial ou eu pour l'Union européenne.
  • model-id : ID du modèle que vous souhaitez déployer. Exemple : TBL543.
  • gcs-destination : dossier de destination dans Cloud Storage. Par exemple, gs://export-bucket/exports.

    Vous ne pouvez pas exporter un modèle vers un bucket de niveau supérieur. Vous devez utiliser au moins un niveau de dossier.

Méthode HTTP et URL :

POST https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export

Corps JSON de la requête :

{
  "outputConfig": {
    "modelFormat": "tf_saved_model",
    "gcsDestination": {
      "outputUriPrefix": "gcs-destination"
    }
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:export" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/292381/locations/us-central1/operations/TBL543",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2019-12-30T18:23:47.728373Z",
    "updateTime": "2019-12-30T18:23:47.728373Z",
    "worksOn": [
      "projects/292381/locations/us-central1/models/TBL543"
    ],
    "exportModelDetails": {
      "outputInfo": {
        "gcsOutputDirectory": "gs://export-bucket/exports/model-export/tbl/tf_saved_model-automl_integration_test_model-2019-12-30T18:23:47.461Z/"
      }
    },
    "state": "RUNNING"
  }
}

L'exportation d'un modèle est une opération de longue durée. Vous pouvez interroger l'état de l'opération ou attendre qu'elle ait abouti. En savoir plus

Exécuter le serveur de modèles

Dans cette tâche, vous allez télécharger le modèle exporté à partir de Cloud Storage et démarrer le conteneur Docker pour que votre modèle soit prêt à recevoir des requêtes de prédiction.

Le modèle doit être exécuté dans un conteneur Docker.

Pour exécuter le serveur de modèles, procédez comme suit :

  1. Sur la machine sur laquelle vous allez exécuter le modèle, accédez au répertoire dans lequel vous souhaitez enregistrer le modèle exporté.

  2. Téléchargez le modèle exporté :

    gsutil cp -r gcs-destination/* .

    gcs-destination est le chemin d'accès à l'emplacement du modèle exporté dans Cloud Storage. Exemple :

    gsutil cp -r gs://export-us-central1/models/* .
    

    Le modèle est copié dans votre répertoire actuel, sous le chemin suivant :

    ./model-export/tbl/tf_saved_model-<model-name>-<export-timestamp>

  3. Renommez le répertoire contenant l'horodatage.

    mv model-export/tbl/tf_saved_model-<model-name>-<export-timestamp> model-export/tbl/<new-dir-name>
    

    Le format d'horodatage rend le répertoire non valide pour Docker.

  4. Démarrez le conteneur Docker en utilisant le nom de répertoire que vous venez de créer :

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

Vous pouvez arrêter le serveur de modèles à tout moment à l'aide de Ctrl-C.

Mettre à jour le conteneur Docker du modèle

Étant donné que vous téléchargez le conteneur Docker du modèle lors de l'exportation du modèle, vous devez explicitement mettre à jour le serveur de modèles pour obtenir des mises à jour et des corrections de bugs. Vous devez mettre à jour le serveur de modèles régulièrement à l'aide de la commande suivante :

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

Obtenir des prédictions à partir du modèle exporté

Le serveur de modèles du conteneur d'images AutoML Tables gère les requêtes de prédiction et renvoie des résultats de la prédiction.

La prédiction par lot n'est pas disponible pour les modèles exportés.

Format des données de prédiction

Vous renseignez le champ de données payload pour votre requête de prédiction au format JSON suivant :

{ "instances": [ { "column_name_1": value, "column_name_2": value, … } , … ] }

Les types de données JSON requis dépendent du type de données AutoML Tables de la colonne. Pour plus d'informations, reportez-vous à la page Format d'objet de ligne.

L'exemple suivant montre une requête comportant trois colonnes : une colonne catégorielle, un tableau numérique et une structure. La requête contient deux lignes.

{
  "instances": [
    {
      "categorical_col": "mouse",
      "num_array_col": [
        1,
        2,
        3
      ],
      "struct_col": {
        "foo": "piano",
        "bar": "2019-05-17T23:56:09.05Z"
      }
    },
    {
      "categorical_col": "dog",
      "num_array_col": [
        5,
        6,
        7
      ],
      "struct_col": {
        "foo": "guitar",
        "bar": "2019-06-17T23:56:09.05Z"
      }
    }
  ]
}

Effectuer la requête de prédiction

  1. Copiez les données de votre requête dans un fichier texte, par exemple, tmp/request.json.

    Le nombre de lignes de données dans la requête de prédiction, dénommé taille de mini-lot, a une incidence sur la latence et le débit de la prédiction. Plus la taille du mini-lot est élevée, plus la latence et le débit augmentent. Pour réduire la latence, diminuez la taille de mini-lot. Pour augmenter le débit, augmentez la taille de mini-lot. Les tailles de mini-lot les plus couramment utilisées sont 1, 32, 64, 128, 256, 512 et 1024.

  2. Demandez la prédiction :

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

Format des résultats de la prédiction

Le format des résultats dépend du type de votre modèle.

Résultats d'un modèle de classification

Les résultats de la prédiction pour les modèles de classification (binaires et multiclasses) affichent un score de probabilité pour chaque valeur potentielle de la colonne cible. Vous devez déterminer comment vous souhaitez utiliser les scores. Par exemple, pour obtenir une classification binaire à partir des scores fournis, vous devez identifier une valeur de seuil. S'il existe deux classes, A et B, vous devez classer l'exemple dans A si le score de A est supérieur au seuil choisi, et dans B dans le cas contraire. Pour les ensembles de données déséquilibrés, le seuil peut atteindre 100 % ou 0 %.

La charge utile des résultats d'un modèle de classification ressemble à ce qui suit :

{
  "predictions": [
    {
      "scores": [
        0.539999994635582,
        0.2599999845027924,
        0.2000000208627896
      ],
      "classes": [
        "apple",
        "orange",
        "grape"
      ]
    },
    {
      "scores": [
        0.23999999463558197,
        0.35999998450279236,
        0.40000002086278963
      ],
      "classes": [
        "apple",
        "orange",
        "grape"
      ]
    }
  ]
}

Résultats d'un modèle de régression

Une valeur prédite s'affiche pour chaque ligne valide de la requête de prédiction. Les intervalles de prédiction ne s'affichent pas pour les modèles exportés.

La charge utile des résultats pour un modèle de régression ressemble à ceci :

{
  "predictions": [
    3982.3662109375,
    3982.3662109375
  ]
}