Ce tutoriel explique comment utiliser un conteneur personnalisé pour déployer un modèle de machine learning (ML) PyTorch qui diffuse des prédictions en ligne.
Dans ce tutoriel, vous allez déployer un conteneur exécutant l'outil TorchServe de PyTorch pour diffuser des prédictions à partir d'un modèle de reconnaissance des chiffres fourni par TorchServe, pré-entraîné sur l'ensemble de données MNIST. Vous pouvez ensuite utiliser AI Platform Prediction pour classer les images des chiffres.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Tout au long de ce tutoriel, nous vous recommandons d'utiliser Cloud Shell pour interagir avec Google Cloud. Si vous souhaitez utiliser une autre interface système Bash au lieu de Cloud Shell, exécutez la configuration supplémentaire suivante :
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Consultez la documentation de Artifact Registry pour installer Docker.
Créer et transférer l'image de conteneur
Pour utiliser un conteneur personnalisé, vous devez spécifier une image de conteneur Docker répondant aux exigences de conteneur personnalisé. Cette section explique comment créer l'image de conteneur et la transférer dans Artifact Registry.
Télécharger des artefacts de modèle
Les artefacts de modèle sont des fichiers créés par l'entraînement de ML que vous pouvez utiliser pour diffuser des prédictions. Ils contiennent, au minimum, la structure et les pondérations de votre modèle de ML entraîné. Le format des artefacts de modèle dépend du framework de ML que vous utilisez pour l'entraînement.
Pour ce tutoriel, au lieu d'entraîner à partir de zéro, téléchargez des exemples d'artefacts de modèle fournis par TorchServe.
Pour cloner le dépôt TorchServe et accéder au répertoire contenant les artefacts de modèle, exécutez les commandes suivantes dans votre interface système :
git clone https://github.com/pytorch/serve.git \
--branch=v0.3.0 \
--depth=1
cd serve/examples/image_classifier/mnist
Ce répertoire contient trois fichiers importants à intégrer dans l'image de votre conteneur :
mnist.py
: définit la structure du réseau de neurones entraînémnist_cnn.pt
: contient unstate_dict
avec des pondérations de caractéristiques et autres résultats de l'entraînementmnist_handler.py
: étend la manière dont TorchServe gère les requêtes de prédiction
Créer un dépôt Artifact Registry
Créez un dépôt Artifact Registry pour stocker l'image de conteneur que vous allez créer dans la section suivante. Exécutez la commande suivante dans votre interface système :
gcloud beta artifacts repositories create getting-started-pytorch \
--repository-format=docker \
--location=REGION
Remplacez REGION par la région où vous souhaitez qu'Artifact Registry stocke votre image de conteneur. Vous devez ensuite créer une ressource de modèle AI Platform Prediction sur un point de terminaison régional correspondant à cette région. Par conséquent, choisissez une région dans laquelle AI Platform Prediction possède un point de terminaison régional. Par exemple, us-central1
.
Une fois l'opération terminée, cette commande affiche l'entrée suivante :
Created repository [getting-started-pytorch].
Créer l'image de conteneur
TorchServe fournit un fichier Dockerfile pour créer une image de conteneur exécutant TorchServe. Toutefois, au lieu d'utiliser ce fichier Dockerfile pour installer toutes les dépendances de TorchServe, vous pouvez accélérer le processus de compilation en générant votre image de conteneur à partir d'une des images TorchServe transmises par l'équipe TorchServe à Docker Hub.
Dans le répertoire contenant les artefacts de modèle, créez un fichier Dockerfile en exécutant la commande suivante dans votre interface système :
cat > Dockerfile <<END FROM pytorch/torchserve:0.3.0-cpu COPY mnist.py mnist_cnn.pt mnist_handler.py /home/model-server/ USER root RUN printf "\nservice_envelope=json" >> /home/model-server/config.properties USER model-server RUN torch-model-archiver \ --model-name=mnist \ --version=1.0 \ --model-file=/home/model-server/mnist.py \ --serialized-file=/home/model-server/mnist_cnn.pt \ --handler=/home/model-server/mnist_handler.py \ --export-path=/home/model-server/model-store CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"] END
Ces instructions Docker effectuent les opérations suivantes :
L'instruction
FROM
extrait l'image de conteneur actuelle à partir d'une image TorchServe existante.L'instruction
COPY
copie les artefacts de modèle et le gestionnaire de prédiction de votre répertoire local dans le répertoire/home/model-server/
de l'image de conteneur.La première instruction
RUN
modifie le fichier de configuration de l'image parent afin de prendre en charge le format d'entrée préconisé par AI Platform Prediction pour les prédictions.Plus précisément, cette instruction configure TorchServe afin qu'il attende une enveloppe de services JSON pour les requêtes de prédiction.
La modification de ce fichier de configuration nécessite une autorisation dont l'utilisateur
model-server
(qui a été créé dans l'image parent) ne dispose pas. Les instructions indiquent à Docker de s'exécuter en tant qu'utilisateurroot
pour modifier le fichier de configuration, puis de suivre les instructions en tant qu'utilisateurmodel-server
.La deuxième instruction
RUN
utilise l'archiveur du modèle Torch, déjà installé sur l'image du conteneur, pour créer une archive de modèle à partir des fichiers que vous avez copiés dans l'image. L'archive de modèle est enregistré dans le répertoire/home/model-server/model-store/
avec le nom de fichiermnist.mar
.(Si vous souhaitez modifier l'image de conteneur, par exemple pour effectuer un prétraitement ou un post-traitement personnalisé dans le gestionnaire de requêtes, vous pouvez utiliser des instructions
RUN
supplémentaires pour installer des dépendances.)L'instruction
CMD
démarre le serveur HTTP TorchServe. Il référence le fichier de configuration à partir de l'image parent et active la diffusion pour un modèle nommémnist
. Ce modèle charge le fichiermnist.mar
créé par l'instructionRUN
.Cette instruction remplace l'instruction
CMD
de l'image parent. Il est important de remplacer l'instructionCMD
et non l'instructionENTRYPOINT
, car le scriptENTRYPOINT
de l'image parent exécute la commande transmise dansCMD
et ajoute une logique supplémentaire pour empêcher Docker de se fermer.
Pour créer l'image de conteneur basée sur votre nouveau fichier Dockerfile et lui ajouter un tag avec un nom compatible avec votre dépôt Artifact Registry, exécutez la commande suivante dans votre interface système :
docker build \ --tag=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \ .
Remplacez l'élément suivant :
- REGION : région de votre dépôt Artifact Registry, comme indiqué dans une section précédente
- PROJECT_ID : ID de votre projet Google Cloud
La commande peut s'exécuter pendant plusieurs minutes.
Exécuter le conteneur localement (facultatif)
Avant de transférer votre image de conteneur vers Artifact Registry afin de l'utiliser avec AI Platform Prediction, vous pouvez l'exécuter en tant que conteneur dans votre environnement local pour vérifier que le serveur fonctionne comme prévu :
Pour exécuter l'image de conteneur en tant que conteneur localement, exécutez la commande suivante dans votre interface système :
docker run -d -p 8080:8080 --name=local_mnist \ REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Remplacez les éléments suivants, comme vous l'avez fait dans la section précédente :
- REGION : région de votre dépôt Artifact Registry, comme indiqué dans une section précédente
- PROJECT_ID : ID de votre projet Google Cloud
Cette commande exécute un conteneur en mode dissocié, en mappant le port
8080
du conteneur avec le port8080
de l'environnement local. (L'image parent à partir de laquelle vous avez dérivé votre image de conteneur configure TorchServe pour utiliser le port8080
.)Pour envoyer une vérification d'état au serveur du conteneur, exécutez la commande suivante dans votre interface système :
curl localhost:8080/ping
Si l'opération réussit, le serveur affiche la réponse suivante :
{ "status": "Healthy" }
Pour envoyer une requête de prédiction au serveur du conteneur, exécutez les commandes suivantes dans votre interface système :
cat > instances.json <<END { "instances": [ { "data": { "b64": "$(base64 --wrap=0 test_data/3.png)" } } ] } END curl -X POST \ -H "Content-Type: application/json; charset=utf-8" \ -d @instances.json \ localhost:8080/predictions/mnist
Cette requête utilise l'une des images de test incluses dans l'exemple de TorchServe.
Si l'opération réussit, le serveur affiche la prédiction suivante :
{"predictions": [3]}
Pour arrêter le conteneur, exécutez la commande suivante dans votre interface système :
docker stop local_mnist
Transférer l'image de conteneur vers Artifact Registry
Configurer Docker pour accéder à Artifact Registry Transférez ensuite votre image de conteneur vers votre dépôt Artifact Registry.
Pour autoriser votre installation Docker locale à transférer vers Artifact Registry dans la région choisie, exécutez la commande suivante dans votre interface système :
gcloud auth configure-docker REGION-docker.pkg.dev
Remplacez REGION par la région dans laquelle vous avez créé votre dépôt dans une section précédente.
Pour transférer l'image de conteneur que vous venez de créer vers Artifact Registry, exécutez la commande suivante dans votre interface système :
docker push REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Remplacez les éléments suivants, comme vous l'avez fait dans la section précédente :
- REGION : région de votre dépôt Artifact Registry, comme indiqué dans une section précédente
- PROJECT_ID : ID de votre projet Google Cloud
Déployer le conteneur
Cette section explique comment créer un modèle et une version de modèle sur AI Platform Prediction afin de diffuser des prédictions. La version de modèle exécute votre image de conteneur en tant que conteneur afin de diffuser des prédictions.
Ce tutoriel fournit des options de configuration spécifiques à utiliser lorsque vous créez le modèle et la version de modèle. Si vous souhaitez en savoir plus sur les différentes options de configuration, consultez la section Déployer des modèles.
Créer un modèle
Pour créer une ressource de modèle, exécutez la commande suivante dans votre interface système :
gcloud beta ai-platform models create getting_started_pytorch \
--region=REGION \
--enable-logging \
--enable-console-logging
Remplacez REGION par la région dans laquelle vous avez créé votre dépôt Artifact Registry dans une section précédente.
Créer une version de modèle
Pour créer une ressource de version de modèle, exécutez la commande suivante dans votre interface système :
gcloud beta ai-platform versions create v1 \
--region=REGION \
--model=getting_started_pytorch \
--machine-type=n1-standard-4 \
--image=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \
--ports=8080 \
--health-route=/ping \
--predict-route=/predictions/mnist
Remplacez l'élément suivant :
- REGION : région dans laquelle vous avez créé votre dépôt Artifact Registry et votre modèle AI Platform Prediction dans les sections précédentes
- PROJECT_ID : ID de votre projet Google Cloud
Les options liées au conteneur de cette commande effectuent les opérations suivantes :
--image
: URI de votre image de conteneur--ports
: port sur lequel le serveur HTTP de votre conteneur écoute les requêtes. L'image parent à partir de laquelle vous avez dérivé votre image de conteneur configure TorchServe pour utiliser le port8080
.--health-route
: chemin d'accès sur lequel le serveur HTTP de votre conteneur écoute les vérifications d'état. TorchServe écoute toujours les vérifications d'état sur le chemin d'accès/ping
.--predict-route
: chemin d'accès sur lequel le serveur HTTP de votre conteneur écoute les requêtes de prédiction. TorchServe écoute toujours les requêtes de prédiction sur le chemin d'accès/predictions/MODEL
.MODEL est le nom du modèle que vous avez spécifié lors du démarrage de TorchServe. Dans ce cas, le nom est
mnist
, que vous avez défini dans cette instruction Docker d'une section précédente :CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"]
Obtenir une prédiction
Les exemples de fichiers TorchServe que vous avez téléchargés dans une section précédente incluent des images de test. La configuration TorchServe du conteneur s'attend à recevoir des requêtes de prédiction au format JSON, avec l'image sous forme de chaîne encodée en base64 dans le champ data.b64
de chaque instance.
Par exemple, pour classer test_data/3.png
, exécutez les commandes suivantes dans votre interface système :
cat > instances.json <<END
{
"instances": [
{
"data": {
"b64": "$(base64 --wrap=0 test_data/3.png)"
}
}
]
}
END
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @instances.json \
https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/getting_started_pytorch/versions/v1:predict
Remplacez l'élément suivant :
- REGION : région dans laquelle vous avez créé votre modèle AI Platform Prediction dans une section précédente
- PROJECT_ID : ID de votre projet Google Cloud
Si l'opération réussit, la version du modèle renvoie la prédiction suivante :
{"predictions": [3]}
Nettoyer
Pour éviter que des frais d'AI Platform Prediction et des frais d'Artifact Registry supplémentaires vous soient facturés, supprimez les ressources Google Cloud que vous avez créées au cours de ce tutoriel :
Pour supprimer votre version de modèle, exécutez la commande suivante dans votre interface système :
gcloud ai-platform versions delete v1 \ --region=REGION \ --model=getting_started_pytorch \ --quiet
Remplacez REGION par la région dans laquelle vous avez créé votre modèle dans une section précédente.
Pour supprimer votre modèle, exécutez la commande suivante dans votre interface système :
gcloud ai-platform models delete getting_started_pytorch \ --region=REGION \ --quiet
Remplacez REGION par la région dans laquelle vous avez créé votre modèle dans une section précédente.
Pour supprimer le dépôt Artifact Registry et l'image de conteneur, exécutez la commande suivante dans votre interface système :
gcloud beta artifacts repositories delete getting-started-pytorch \ --location=REGION \ --quiet
Remplacez REGION par la région dans laquelle vous avez créé votre dépôt Artifact Registry dans une section précédente.
Étape suivante
Si vous souhaitez concevoir votre propre image de conteneur, à partir de zéro ou en utilisant une image de conteneur tierce existante, lisez la section Exigences relatives aux conteneurs personnalisés.
Découvrez comment utiliser un conteneur personnalisé pour la prédiction, et apprenez à utiliser d'autres fonctionnalités et options de configuration d'AI Platform Prediction que vous pouvez spécifier pour votre conteneur lors du déploiement.