Présentation de la prédiction

Vous pouvez héberger vos modèles de machine learning entraînés dans le cloud et utiliser AI Platform Prediction pour déduire les valeurs cibles de nouvelles données. Cette page traite de l'hébergement de modèles et de la prédiction. Elle contient des informations que vous devez garder à l'esprit tout au long de vos projets.

Fonctionnement

AI Platform Prediction gère les ressources informatiques dans le cloud pour exécuter vos modèles. Vous pouvez demander des prédictions à partir de vos modèles et obtenir des valeurs cibles les concernant. Voici le processus à suivre pour configurer les prédictions dans le cloud :

  1. Vous exportez votre modèle en tant qu'artefacts que vous pouvez déployer sur AI Platform Prediction.

  2. Créez une ressource de modèle dans AI Platform, puis créez une version du modèle à partir du modèle enregistré.

    Si vous déployez une routine de prédiction personnalisée, vous fournissez également le code à exécuter au moment de la prédiction.

  3. Mettez en forme vos données d'entrée pour la prédiction et demandez soit une prédiction en ligne, soit une prédiction par lot.

  4. Lorsque vous utilisez la prédiction en ligne, le service exécute le modèle enregistré et renvoie les prédictions demandées sous forme de message de réponse à l'appel.

    • La version de votre modèle est déployée dans la région que vous avez spécifiée lors de la création du modèle.
    • Bien que cela ne soit pas garanti, une version de modèle que vous utilisez régulièrement est, en général, toujours prête à fonctionner.

    Lorsque vous utilisez la prédiction par lot, qui n'est compatible qu'avec les modèles TensorFlow, le processus est un peu plus complexe :

    1. Le service de prédiction alloue des ressources pour l'exécution de votre tâche. Ceci comprend un ou plusieurs nœuds de prédiction.

    2. Le service restaure votre graphique TensorFlow sur chaque nœud alloué.

    3. Le service de prédiction distribue les données d'entrée sur les nœuds alloués.

    4. Chaque nœud exécute le graphique et enregistre les prédictions à l'emplacement Cloud Storage que vous spécifiez.

    5. Lorsque toutes les données d'entrée sont traitées, le service arrête la tâche et libère les ressources qu'il lui a allouées.

Déploiement de modèle

AI Platform peut héberger vos modèles, ce qui vous permet d'obtenir des prévisions dans le cloud à partir de ceux-ci. Le processus d'hébergement d'un modèle enregistré est appelé déploiement. Le service de prédiction gère l'infrastructure requise pour exécuter votre modèle à grande échelle et le rend disponible pour les requêtes de prédiction en ligne et par lot. Cette section décrit le déploiement d'un modèle.

À propos des modèles et des versions

AI Platform organise vos modèles entraînés à l'aide de ressources appelées modèles et versions. Un modèle est une solution de machine learning. Par exemple, vous pouvez créer un modèle appelé census qui contiendra l'ensemble de votre travail sur un modèle de machine learning associé au recensement de la population américaine. L'entité que vous créez, nommée census, sert de conteneur aux mises en œuvre concrètes du modèle de machine learning, appelées versions.

Le développement d'un modèle de machine learning est un processus itératif. Pour cette raison, le paradigme des ressources d'AI Platform est défini en supposant la création de plusieurs versions de chaque modèle de machine learning. Cette terminologie peut prêter à confusion, car une ressource de modèle AI Platform n'est pas véritablement un modèle de machine learning. Dans AI Platform, un modèle est un conteneur de versions du modèle de machine learning.

Qu'y a-t-il dans une version ?

Le "modèle" que vous déployez sur AI Platform en tant que version de modèle est composé d'un ou plusieurs artefacts produits par entraînement avec des frameworks hébergés, TensorFlow, scikit-learn ou XGBoost. Peu importe si vous entraînez votre modèle dans le cloud avec AI Platform Training ou ailleurs.

Vous pouvez également déployer une routine de prédiction personnalisée (version bêta). Dans ce cas, vous pouvez fournir à la version du modèle des artefacts d'entraînement supplémentaires ainsi que du code permettant de gérer les requêtes de prédiction.

Différences entre versions

Les versions que vous créez pour une ressource de modèle donnée sont arbitraires. Vous pouvez utiliser la même ressource de modèle, même si vous changez complètement de modèle de machine learning entre les versions. Un modèle est un outil organisationnel qui s'adapte à votre situation.

Il est courant, surtout après avoir mis une version en production, de conserver les mêmes entrées et sorties entre les versions du modèle. Ceci permet de changer de version sans avoir à modifier la structure de l'application que vous avez construite autour du modèle. Il est également facile de tester ainsi de nouvelles versions à l'aide de données existantes.

Version par défaut

Chaque modèle comptant au moins une version possède une version par défaut. La valeur par défaut est définie lorsque la première version est créée. Si vous demandez des prédictions en ne spécifiant qu'un nom de modèle, AI Platform utilise la version par défaut de ce modèle.

Notez que le service définit automatiquement la version par défaut uniquement lorsque vous créez la première version. Vous pouvez définir manuellement toute version ultérieure comme version par défaut en appelant la méthode projects.models.versions.setDefault, qui est également exposée sous la forme gcloud ai-platform versions set-default et en tant qu'option dans la liste des versions, visible sur la page des détails relatifs au modèle dans la console Google Cloud Platform (pour accéder à la page des détails du modèle, cliquez sur votre modèle dans la liste figurant sur la page Modèles). Ceci vous permet, par exemple, d'utiliser une version par défaut stable pour diffuser des prédictions en production, tout en testant des versions plus récentes sans créer de ressource de modèle dédiée.

Nommer les modèles et les versions

Les noms de modèles et de versions doivent respecter les règles suivantes :

  • Contenir uniquement des lettres de casse mixte (sensibles à la casse), des chiffres et des traits de soulignement
  • Commencer par une lettre
  • Contenir 128 caractères au maximum
  • Être uniques dans le projet (pour les modèles) ou le modèle (pour les versions)

Aucune règle ne s'applique aux noms hormis ces exigences techniques, mais voici quelques bonnes pratiques :

  • Les noms de modèles doivent être descriptifs et distinctifs. Ceci facilite leur sélection au sein de longues listes de noms dans des journaux ou des rapports.
  • Les noms de versions doivent de préférence être courts et simples. Il est plus facile d'identifier "v1" dans une liste de ressources que "2017_01_29T13_54_58", par exemple.

Limites des modèles et des versions

Les règles d'AI Platform relatives aux quotas autorisent un maximum de 100 modèles par projet et limitent le nombre total de versions (tous modèles inclus) à 200.

Paramètres de déploiement des modèles

AI Platform a besoin d'informations pour créer la version de modèle. Quelques options sont à configurer. Cette section décrit les paramètres des deux types. Ces paramètres sont définis dans l'objet Version ou, pour plus de commodité, ajoutés à la commande gcloud ai-platform versions create.

Nom de la version
Nom de la nouvelle version, qui doit être unique parmi les noms des autres versions du modèle.
Description
Vous pouvez saisir une description pour votre version. À l'heure actuelle, la description n'est reprise que lorsque vous obtenez les informations de version via l'API. Ni l'outil de ligne de commande gcloud ni la console GCP n'affichent la description.
URI de déploiement
Vous devez fournir l'URI de l'emplacement Cloud Storage où est stocké votre modèle SavedModel. AI Platform extrait le modèle de cet emplacement et le déploie. Dans la commande gcloud ai-platform versions create, ce paramètre s'appelle --origin. Si vous déployez une routine de prédiction personnalisée (version bêta), vous pouvez fournir l'URI d'un répertoire Cloud Storage contenant tout artefact utilisé par votre version de modèle pour la prédiction, et non uniquement un modèle SavedModel.
Version d'exécution
À moins que vous ne spécifiiez une autre version compatible, AI Platform utilise la dernière version d'exécution stable pour déployer votre version de modèle. La version d'exécution détermine principalement la version de TensorFlow utilisée par le service de prédiction pour exécuter le modèle. Lorsque vous exécutez une tâche de prédiction par lot, vous avez la possibilité de remplacer la version d'exécution attribuée. La prédiction en ligne utilise toujours la version d'exécution définie lors du déploiement de la version du modèle.
Scaling manuel

Vous pouvez spécifier le nombre de nœuds de prédiction exécutés en permanence pour la version de modèle. Consultez la section relative au scaling pour plus d'informations.

Bucket de préproduction

Si vous déployez le modèle à l'aide de l'outil de ligne de commande gcloud, vous pouvez faire appel à un modèle SavedModel stocké en local sur votre ordinateur. L'outil le met en préproduction dans l'emplacement Cloud Storage que vous spécifiez, avant de le déployer sur AI Platform.

Modifications du graphique pour la prédiction

Vous avez peut-être inclus des opérations TensorFlow dans votre graphique de calcul qui étaient surtout utiles dans le contexte de l'entraînement. Une fois que vous avez entraîné votre modèle, vous pouvez supprimer ces opérations du graphique avant d'en exporter la version finale.

La plupart des conseils de la page de développement d'applications d'entraînement sont destinés à la prédiction. Dans certains cas, ce sont les modifications que vous apportez à votre modèle lorsque la majeure partie de l'entraînement est terminée et que vous êtes prêt à commencer à déployer des versions.

Obtenir des prédictions

Vous pouvez transmettre de nouvelles données à vos versions de modèle déployées pour obtenir des prédictions. Les sections suivantes fournissent de plus amples informations sur les prédictions.

Prédiction en ligne et prédiction par lot

En savoir plus sur les différences entre la prédiction en ligne et par lot.

Comprendre les nœuds de prédiction et l’attribution des ressources

AI Platform mesure la quantité de traitement que vous consommez pour la prédiction en termes d'heures de nœud. Cette section décrit ces nœuds et leur attribution aux différents types de prédictions.

Il est plus facile d'imaginer un nœud sous forme de machine virtuelle (VM), même si sa mise en œuvre implique un mécanisme différent. Chaque nœud est provisionné avec une quantité définie de capacité de traitement et de mémoire. Un nœud dispose également d'une image du système d'exploitation et d'une configuration logicielle définie, nécessaire à l’exécution du modèle afin d'obtenir des prédictions.

La prédiction en ligne et la prédiction par lot s'exécutent toutes deux sur votre nœud selon un traitement distribué, de sorte qu'une requête ou une tâche donnée peut faire appel à plusieurs nœuds simultanément. L'utilisation totale du nœud est facturée à la minute, selon un taux horaire. Par exemple, l'exécution de deux nœuds pendant 10 minutes est facturée de la même manière que l'exécution d'un nœud pendant 20 minutes. La prédiction en ligne et par lot affecte les nœuds différemment, ce qui peut influer considérablement sur la facturation.

Attribuer des nœuds pour la prédiction par lot

Le service de prédiction par lot adapte le nombre de nœuds qu'il utilise pour réduire au minimum le délai de réalisation d'une tâche. Dans cet objectif, le service :

  • attribue certains nœuds à la gestion de la tâche lors de son démarrage ;

  • adapte le nombre de nœuds au cours de la tâche afin d'en optimiser l'efficacité. Chaque nœud prend du temps pour démarrer. Le service essaye donc d'en attribuer un minimum pour que le délai de démarrage soit compensé par la réduction de la durée totale ;

  • arrête les nœuds dès que la tâche est terminée.

Vous pouvez influer sur le scaling d'une tâche de prédiction par lot en spécifiant le nombre maximal de nœuds à utiliser. Généralement, vous cherchez à disposer d'autant de nœuds que nécessaire pour le service, mais l'utilisation des nœuds est soumise aux règles d'AI Platform relatives aux quotas. Vous souhaiterez peut-être limiter le nombre de nœuds attribués à une tâche donnée, en particulier si vous partagez votre projet avec d'autres personnes et exécutez parfois des tâches simultanément (entraînement et prédiction).

Attribuer des nœuds pour la prédiction en ligne

Le service de prédiction en ligne adapte le nombre de nœuds qu'il utilise afin de maximiser le nombre de requêtes qu'il peut traiter sans provoquer trop de latence. Dans cet objectif, le service :

  • attribue certains nœuds lorsque vous demandez des prédictions pour la première fois après une longue interruption ;

  • adapte le nombre de nœuds en fonction du trafic, en ajoutant des nœuds lorsque le trafic augmente et en les supprimant lorsque le nombre de requêtes est plus réduit ;

  • tient prêt un minimum d'un nœud sur une période de plusieurs minutes, afin de gérer les requêtes, même s'il n'y en a aucune. Cette préparation garantit la prise en charge rapide des prédictions par le service ;

  • repasse à zéro nœud après plusieurs minutes sans requête de prédiction par votre version du modèle.

Une fois le service remis à zéro ou en cas de pic de trafic soudain, l'initialisation des nœuds peut mettre du temps (quelques secondes à quelques minutes) à répondre aux requêtes. Le temps d'initialisation dépend de la taille de la version de modèle, de sorte qu'un délai d'attente côté client peut provoquer l'abandon des requêtes jusqu'à l'initialisation des nouveaux modèles et/ou davantage de latence pendant cette période.

Pour garantir une diffusion rapide à tout moment, vous pouvez spécifier un nombre minimal de nœuds que le service doit garder prêts, en définissant l'option minNodes dans votre version de modèle. Ce paramètre peut augmenter les coûts, car vous êtes facturé pour les nœuds même si aucune prédiction n'est diffusée.

Limites du scaling automatique

Le scaling automatique d'AI Platform destiné à la prédiction en ligne peut vous aider à répondre à des quantités de requêtes de prédiction variées tout en minimisant les coûts. Cependant, il n'est pas adapté à toutes les situations. Il est possible que le service ne puisse pas mettre les nœuds en ligne assez rapidement pour faire face à des pics de requêtes majeurs. Si le trafic connaît régulièrement des pics importants, et si votre application exige une faible latence, le scaling manuel est envisageable.

Utiliser le scaling manuel

Vous pouvez influer sur le scaling de la prédiction en ligne pour une version de modèle en spécifiant un nombre de nœuds devant continuer à fonctionner quel que soit le trafic. Avec la définition manuelle du nombre de nœuds, le scaling du service est arrêté, ce qui signifie que le nombre de nœuds que vous spécifiez sera toujours prêt et que vous serez facturé en permanence pour ceux-ci. Ceci est à éviter, à moins que le nombre de requêtes reçues par votre modèle fluctue plus rapidement que le délai d'adaptation du scaling automatique. Le nombre de nœuds à utiliser est défini par manualScaling dans l'objet Version que vous transmettez à projects.models.versions.create.

Données d'entrée de prédiction

Les données que vous utilisez pour obtenir des prédictions sont nouvelles et se présentent sous la même forme que celles que vous avez utilisées pendant l'entraînement. Les prédictions en ligne et par lot emploient les mêmes données (caractéristiques de votre modèle), mais elles nécessitent des formats différents selon le type de prédiction et l'interface. Ces formats sont résumés dans le tableau suivant et décrits plus en détail dans les sections ci-dessous :

Type de prédiction et interface Format d'entrée accepté
Lot avec appel d'API Fichier texte avec chaînes d'instance JSON ou fichier TFRecord (peut être compressé)
Lot avec l'outil gcloud Fichier texte avec chaînes d'instance JSON ou fichier TFRecord (peut être compressé)
En ligne avec appel d'API Message de requête JSON
En ligne avec l'outil gcloud Fichier texte avec chaînes d'instance JSON ou fichier CSV

Chaînes JSON des instances

Le format de base pour la prédiction en ligne et par lot est une liste de Tensors de données d'instance. Il peut s'agir de listes de valeurs ou de membres d'un objet JSON, selon la configuration des entrées dans l'application d'entraînement.

Cet exemple illustre un Tensor d'entrée et une clé d'instance :

{"values": [1, 2, 3, 4], "key": 1}

La composition de la chaîne JSON peut être complexe tant qu'elle suit les règles suivantes :

  • Le premier niveau des données d'instance doit être un objet JSON, soit un dictionnaire de paires clé/valeur.

  • Les valeurs individuelles dans un objet d'instance peuvent être des chaînes, des nombres ou des listes. Vous ne pouvez pas intégrer d'objets JSON.

  • Les listes doivent contenir uniquement des éléments du même type (y compris d'autres listes). Vous ne pouvez pas mélanger des valeurs numériques et des chaînes.

La chaîne suivante (mise en forme à des fins de lisibilité) montre un objet contenant un libellé et une image, où l'image est un tableau tridimensionnel d'entiers de 8 bits :

{
  "tag": "beach",
  "image": [
    [
      [138, 30, 66],
      [130, 20, 56],
      ...
    ],
    [
      [126, 38, 61],
      [122, 24, 57],
      ...
    ],
        ...
  ]
}

Si votre modèle ne prend qu'une seule entrée en compte, vous n'avez pas besoin de l'encapsuler dans un objet JSON. Par exemple, si vous envoyez un seul Tensor (vecteur dans ce cas) de quatre valeurs, il n'est pas nécessaire d'utiliser la mise en forme suivante :

{"values": [1, 2, 3, 4]}

Vous pouvez simplement mettre en forme chaque instance sous forme de liste :

[1, 2, 3, 4]
Données binaires en entrée de prédiction

Les données binaires ne peuvent pas être mises en forme en tant que chaînes encodées au format UTF-8 compatibles avec JSON. Si des données binaires apparaissent dans les entrées, vous devez les représenter à l'aide de l'encodage base64. Le format spécial suivant est requis :

  • La chaîne encodée doit être mise en forme en tant qu'objet JSON avec une seule clé nommée b64. L'exemple Python suivant encode un tampon de données JPEG brutes en utilisant la bibliothèque base64 pour créer une instance :

    {"image_bytes":{"b64": base64.b64encode(jpeg_data)}}
    
  • Dans le code de modèle TensorFlow, vous devez nommer les alias pour les Tensors d'entrée et de sortie afin qu'ils se terminent par "_bytes".

Données d'entrée de prédiction en ligne

Vous transmettez des instances d'entrée pour la prédiction en ligne sous forme de corps de message de requête de prédiction. Concernant la mise en forme du corps de la requête et de la réponse, consultez les détails de la requête de prédiction.

En bref, faites de chaque instance un élément dans une liste et nommez les membres de la liste instances. Ainsi, l'exemple JSON d'instance de données simple fourni ci-dessus devient :

{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}

Lorsque vous utilisez gcloud ai-platform projects predict pour demander des prédictions en ligne, vous transmettez un fichier possédant le même format que celui utilisé pour la prédiction par lot.

Données d'entrée de prédiction par lot

Vous transmettez des données d'entrée destinées à la prédiction par lot sous forme d'un ou de plusieurs fichiers texte contenant des lignes de données d'instance JSON, comme décrit ci-dessus. Un fichier d'entrée ne contient aucun en-tête de colonne ou autre mise en forme, hormis la simple syntaxe JSON.

{"image": [0.0, 0.0, ... ], "key": 0}
{"image": [0.0, 0.0, ... ], "key": 1}
{"image": [0.0, 0.0, ... ], "key": 2}

Clés d'instance

AI Platform exécute vos tâches de prédiction par lot à l'aide d'un traitement distribué. Vos données sont réparties entre un cluster arbitraire de machines virtuelles et traitées dans un ordre imprévisible. Pour pouvoir faire correspondre les prédictions renvoyées avec vos instances d'entrée, vous devez posséder des clés d'instance définies. Une clé d'instance est une valeur unique pour chacune des instances d'un ensemble de données. La clé la plus simple est un numéro d'index.

Vous devez transmettre les clés via votre graphique inchangé dans votre application d'entraînement. Si vos données ne disposent pas déjà de clés d'instance, vous pouvez les ajouter dans le cadre du prétraitement des données.

Versions d'exécution

À mesure que de nouvelles versions d'AI Platform sont publiées, il est possible que les modèles développés sur des versions plus anciennes deviennent obsolètes. Ceci est surtout vrai si vous parvenez à obtenir une version de modèle efficace qui reste inchangée pendant une longue période. Nous vous recommandons de consulter la stratégie de gestion des versions d'AI Platform et de vous assurer de bien comprendre quelle est la version de l'environnement d'exécution AI Platform utilisée pour entraîner vos versions de modèle.

Versions d'exécution et prédictions

Vous pouvez spécifier une version d'exécution compatible d'AI Platform lorsque vous créez une version de modèle. Ceci définit le paramètre de version de modèle par défaut. Si vous ne spécifiez pas de version explicite, AI Platform crée votre version sur la base de l'environnement d'exécution 1.0 par défaut actuel.

Vous pouvez spécifier une version d'exécution à utiliser lorsque vous démarrez une tâche de prédiction par lot. Ceci permet d'obtenir des prédictions à l'aide d'un modèle qui n'est pas déployé sur AI Platform. Pour un modèle déployé, utilisez la version d'exécution par défaut du modèle dans votre requête de tâche. L'utilisation d'une version d'exécution différente est susceptible de provoquer des erreurs inattendues.

Vous ne pouvez pas demander de prédictions en ligne à partir de modèles situés en dehors d'AI Platform. Il n'existe donc aucune option permettant de remplacer la version d'exécution par défaut dans votre requête.

La version d'exécution par défaut définie pour une version de modèle ne peut pas être modifiée. Afin de spécifier une version d'exécution différente pour une version de modèle, déployez une nouvelle version en utilisant les mêmes artefacts d'entraînement qu'au départ.

Régions et prédictions

Google Cloud Platform définit l'emplacement géographique des ressources de calcul physiques à l'aide de régions subdivisées en zones. Lorsque vous déployez un modèle pour la prédiction avec AI Platform, vous devez indiquer la région par défaut dans laquelle exécuter cette prédiction.

Lorsque vous démarrez une tâche de prédiction par lot, vous pouvez spécifier une région dans laquelle exécuter la tâche, en remplaçant la région par défaut. Les prédictions en ligne sont toujours diffusées à partir de la région par défaut spécifiée pour le modèle.

Pour consulter les régions disponibles pour les services AI Platform, y compris l'entraînement de modèles et la prédiction en ligne ou par lot, consultez le guide des régions.

Journalisation des prédictions

La prédiction par lot génère des journaux de tâche que vous pouvez afficher dans Stackdriver Logging. Vous pouvez également obtenir des journaux pour les requêtes de prédiction en ligne si vous configurez votre modèle de façon à les générer lorsque vous le créez. Notez que vous devez spécifier cette option lorsque vous créez votre ressource de modèle dans AI Platform. Soit toutes les versions d'un modèle génèrent des journaux pour les prédictions en ligne, soit aucune.

Vous pouvez définir la journalisation des prédictions en ligne pour un modèle en définissant onlinePredictionLogging sur vrai (True avec Python) dans la ressource de modèle que vous utilisez lors de la création de votre modèle, à l'aide de projects.models.create. Si vous utilisez l'outil de ligne de commande gcloud pour créer votre modèle, renseignez l'indicateur --enable-logging lorsque vous exécutez la commande gcloud ai-platform models create.

Obtenir des prédictions à partir de modèles non déployés

Vous pouvez demander une prédiction par lot à l'aide d'un modèle que vous n'avez pas déployé sur le service AI Platform. Au lieu de spécifier un nom de modèle ou de version, vous pouvez utiliser l'URI d'un emplacement Cloud Storage sur lequel est stocké le modèle à exécuter.

Étant donné qu'un modèle non déployé ne possède pas de version d'exécution par défaut établie, vous devez la définir explicitement dans votre requête de tâche. Sans cela, AI Platform utilisera la version d'exécution 1.0.

Dans tous les autres cas, une tâche de prédiction par lot utilisant un modèle non déployé se comporte comme n'importe quelle autre tâche par lot.

Tester des modèles

Vous pouvez utiliser le service de prédiction d'AI Platform non seulement pour héberger vos modèles en production, mais également pour tester vos modèles. Traditionnellement, le test du modèle est l'étape préalable à la préparation du déploiement d'une solution de machine learning. Une procédure de test a pour objectif de mettre à l'épreuve le modèle dans un environnement aussi proche que possible de celui où il sera utilisé en situation réelle.

N'oubliez pas que vous pouvez disposer de plusieurs versions d'un modèle déployées simultanément sur le service. Si besoin, vous pouvez donc mettre simultanément à l'épreuve plusieurs révisions de votre modèle. Il est ainsi facile de disposer d'une version de production du modèle déployée lors du test de la révision suivante. Comme souvent dans le cas du développement d'applications de machine learning, la disponibilité de nouvelles données est un facteur limitant. Il est alors nécessaire de développer des stratégies de division des données existantes et de collecte de nouvelles données à utiliser pour les tests.

Étapes suivantes