Utiliser un conteneur personnalisé

Pour personnaliser la manière dont AI Platform Prediction diffuse les prédictions en ligne à partir de votre modèle de machine learning (ML) entraîné, vous pouvez spécifier un conteneur personnalisé au lieu d'une version d'environnement d'exécution lorsque vous créez une version de modèle. Lorsque vous utilisez un conteneur personnalisé, AI Platform Prediction exécute un conteneur Docker de votre choix sur chaque nœud de prédiction au lieu d'exécuter le code de version d'exécution standard pour diffuser les prédictions à partir d'artefacts de modèle compatibles.

Nous vous recommandons d'utiliser un conteneur personnalisé pour l'une des raisons suivantes :

  • Pour diffuser des prédictions à partir d'un modèle de ML entraîné à l'aide d'un framework autre que TensorFlow, scikit-learn ou XGBoost
  • Pour prétraiter les requêtes de prédiction ou post-traiter les prédictions générées par votre modèle
  • Pour exécuter un serveur de prédiction écrit dans le langage de programmation de votre choix
  • Pour installer des dépendances que vous souhaitez utiliser pour personnaliser la prédiction

Ce guide explique comment créer une version de modèle utilisant un conteneur personnalisé. Il ne fournit pas d'instructions détaillées concernant la conception et la création d'une image de conteneur Docker. Pour découvrir un exemple de création d'une image de conteneur et de son utilisation avec AI Platform Prediction, consultez la page Premiers pas : Diffuser des prédictions PyTorch avec un conteneur personnalisé.

Pour utiliser un conteneur personnalisé, vous devez utiliser un point de terminaison régional et un type de machine Compute Engine (N1) pour la version de votre modèle.

Préparer une image de conteneur

Pour créer une version de modèle utilisant un conteneur personnalisé, vous devez fournir une image de conteneur Docker comme base de ce conteneur. Cette image de conteneur doit répondre aux exigences décrites dans la section Exigences relatives aux conteneurs personnalisés.

Si vous envisagez d'utiliser une image de conteneur existante créée par un tiers de confiance, vous pouvez ignorer l'une des sections suivantes, ou les deux.

Créer une image de conteneur

Concevez et créez une image de conteneur Docker répondant aux exigences relatives aux images de conteneur.

Pour découvrir les bases de la conception et de la création d'une image de conteneur Docker, consultez le guide de démarrage rapide de la documentation Docker.

Transférer l'image de conteneur vers Artifact Registry

Transférez votre image de conteneur dans un dépôt Artifact Registry répondant aux exigences de publication d'images de conteneur.

Apprenez à transférer une image de conteneur vers Artifact Registry.

Créer un modèle et une version de modèle

Spécifiez plusieurs options de configuration lorsque vous créez un modèle pour vous assurer que les versions que vous créez ultérieurement sur le modèle sont compatibles avec votre conteneur personnalisé.

Ensuite, spécifiez la majorité de la configuration du conteneur lorsque vous créez une version de modèle.

Créer un modèle

Pour créer un modèle, suivez les instructions de création d'une ressource de modèle. Vous devez créer le modèle sur un point de terminaison régional qui correspond à la région du dépôt Artifact Registry dans lequel votre image de conteneur est stockée. Pour en savoir plus, consultez les conditions requises pour la publication d'images de conteneur.

Créer une version de modèle

Lorsque vous créez une version de modèle utilisant un conteneur personnalisé, configurez les champs d'API spécifiques au conteneur suivants en plus des autres champs que vous spécifiez pour une version de modèle :

Les sections suivantes expliquent comment configurer ces champs.

Notez également les différences suivantes spécifiques au conteneur lors de la configuration des autres champs d'API :

Configurer Version.container

Vous devez spécifier un message ContainerSpec dans le champ Version.container. Dans ce message, vous pouvez spécifier les sous-champs suivants. Si vous utilisez la commande gcloud beta ai-platform versions create pour créer la version de modèle, vous pouvez utiliser un indicateur de ligne de commande pour spécifier chaque sous-champ.

image (obligatoire)

URI de registre des artefacts de votre image de conteneur

Indicateur de la CLI gcloud : --image

command (facultatif)

Tableau d'un fichier exécutable et d'arguments pour remplacer le ENTRYPOINT du conteneur. Pour en savoir plus sur la mise en forme de ce champ et son interaction avec le champ args, consultez la documentation de référence de l'API pour ContainerSpec.

Indicateur de la CLI gcloud : --command

args (facultatif)

Tableau d'un fichier exécutable et d'arguments pour remplacer le CMD du conteneur. Pour en savoir plus sur la mise en forme de ce champ et son interaction avec command, lisez la documentation de référence de l'API pour ContainerSpec.

Indicateur de la CLI gcloud : --args

ports (facultatif)

Tableau de ports : AI Platform Prediction envoie par défaut des vérifications de l'activité, des vérifications de l'état et des requêtes de prédiction à votre conteneur sur le premier port répertorié, ou 8080 par défaut. Spécifier des ports supplémentaires n'a aucun effet.

Indicateur de la CLI gcloud : --ports

env (facultatif)

Tableau de variables d'environnement que la commande entrypoint du conteneur, ainsi que les champs command et args, peuvent référencer. Pour en savoir plus sur la manière dont d'autres champs peuvent faire référence à ces variables d'environnement, consultez la documentation de référence de l'API pour ContainerSpec.

Indicateur de la CLI gcloud : --env-vars

Outre les variables que vous avez définies dans le champ Version.container.env, AI Platform Prediction définit plusieurs autres variables en fonction de votre configuration. Apprenez-en plus sur l'utilisation de ces variables d'environnement dans ces champs et dans la commande entrypoint du conteneur.

L'exemple suivant montre comment spécifier ces champs lorsque vous créez une version de modèle à l'aide de Google Cloud CLI :

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2'

Remplacez les éléments suivants :

Configurer Version.routes

Vous pouvez spécifier un message RouteMap dans le champ Version.routes. Dans ce message, vous pouvez spécifier les sous-champs suivants. Si vous utilisez la commande gcloud beta ai-platform versions create pour créer la version de modèle, vous pouvez utiliser un indicateur de ligne de commande pour spécifier chaque sous-champ.

health (facultatif)

Chemin du serveur HTTP de votre conteneur, vers lequel vous souhaitez qu'AI Platform Prediction envoie des vérifications de l'état.

Si vous ne spécifiez pas ce champ, il est défini par défaut sur /v1/models/MODEL/versions/VERSION, où MODEL et VERSION sont respectivement remplacés par les noms de votre modèle et version de modèle.

Indicateur de la CLI gcloud : --health-route

predict (facultatif)

Chemin du serveur HTTP de votre conteneur vers lequel vous souhaitez qu'AI Platform Prediction transfère les requêtes de prédiction.

Si vous ne spécifiez pas ce champ, il est défini par défaut sur /v1/models/MODEL/versions/VERSION:predict, où MODEL et VERSION sont respectivement remplacés par les noms de votre modèle et version de modèle.

Indicateur de la CLI gcloud : --predict-route

L'exemple suivant montre comment spécifier ces champs lorsque vous créez une version de modèle à l'aide de la CLI gcloud :

gcloud beta ai-platform versions create VERSION \
  --region=REGION \
  --model=MODEL \
  --machine-type=n1-standard-4 \
  --image=IMAGE_URI \
  --command=executable,param1,param2 \
  --args=param3,param4 \
  --ports=8081 \
  --env-vars \
    VAR1='value 1' \
    VAR2='value 2' \
  --health-route=/health \
  --predict-route=/predict

Remplacez les éléments suivants :

Envoyer des requêtes de prédiction

Pour envoyer une requête de prédiction en ligne à votre version de modèle, suivez le guide de prédiction en ligne. Ce processus fonctionne de la même manière que vous utilisez un conteneur personnalisé ou non.

Toutefois, lorsque vous utilisez un conteneur personnalisé, le corps de chaque requête de prédiction n'a pas besoin de respecter les exigences relatives au corps de la requête des versions de modèle utilisant une version d'environnement d'exécution. Toutefois, nous vous recommandons de concevoir votre conteneur pour qu'il attende des corps de requête au format standard si possible. Apprenez-en davantage sur les exigences concernant les requêtes et les réponses pour les conteneurs personnalisés.

Étapes suivantes