Prérequis
Suivez les instructions de cette section si vous avez compilé votre modèle à l'aide du AWS SDK for Python (Boto3), de la AWS CLI ou de la console SageMaker.
Pour créer un modèle SageMaker Neo-compilé, vous avez besoin des éléments suivants :
-
Un URI Amazon ECR d'image Docker. Vous pouvez en sélectionner un répondant à vos besoins dans cette liste.
-
Un fichier de script de point d'entrée :
-
Pour les modèles PyTorch et MXNet :
Si vous avez entraîné votre modèle à l'aide de SageMaker, le script d'entraînement doit mettre en œuvre les fonctions décrites ci-dessous. Le script d'entraînement sert de script de point d'entrée pendant l'inférence. Dans l'exemple détaillé dans MNIST Training, Compilation and Deployment with MXNet Module and SageMaker Neo (Entraînement, compilation et déploiement MNIST avec le module MXNet et SageMaker Neo)
, le script d'entraînement ( mnist.py
) met en œuvre les fonctions requises.Si vous n'avez pas entraîné votre modèle à l'aide de SageMaker, vous devez fournir un fichier script de point d'entrée (
inference.py
) utilisable au moment de l'inférence. En fonction du cadre (MXNet ou Pytorch) : l'emplacement du script d'inférence doit respecter la structure de répertoire de modèles pour MxNetou la structure de répertoire de modèles pour PyTorch du SDK SageMaker Python. Lorsque vous utilisez des images de conteneur optimisé pour l'inférence Neo avec PyTorch et MXNet sur les types d'instances CPU et GPU, le script d'inférence doit mettre en œuvre les fonctions suivantes :
-
model_fn
: charge le modèle. (Facultatif) -
input_fn
: convertit la charge utile de demande entrante en un tableau numpy. -
predict_fn
: réalise la prédiction. -
output_fn
: convertit la sortie de la prédiction en charge utile de réponse. -
En variante, vous pouvez définir
transform_fn
de sorte à combinerinput_fn
,predict_fn
etoutput_fn
.
Voici quelques exemples de script
inference.py
dans un répertoire nommécode
(code/inference.py
) pour PyTorch et MXNet (Gluon et Module). Les exemples chargent d'abord le modèle, puis le servent sur des données d'image sur un GPU : -
-
Pour les instances inf1 ou les images de conteneur onnx, xgboost, keras
Pour toutes les autres images de conteneur optimisées pour l'inférence Neo, ou les types d'instances Inferentia, le script de point d'entrée doit mettre en œuvre les fonctions suivantes pour le Runtime Deep Learning Neo :
-
neo_preprocess
: convertit la charge utile de demande entrante en un tableau numpy. -
neo_postprocess
: convertit la sortie de la prédiction du Runtime Deep Learning Neo dans le corps de la réponse.Note Aucune de ces deux fonctions précédentes n'utilise des fonctionnalités de MXNet, PyTorch ou TensorFlow.
Pour obtenir des exemples d'utilisation de ces fonctions, veuillez consulter Neo Model Compilation Sample Notebooks (Exemples de blocs-notes de compilation de modèles Neo).
-
-
Pour les modèles TensorFlow
Si votre modèle nécessite une logique de pré- et de post-traitement personnalisée avant l'envoi des données au modèle, vous devez spécifier un fichier script de point d'entrée
inference.py
utilisable au moment de l'inférence. Le script doit mettre en œuvre une paire de fonctionsinput_handler
etoutput_handler
ou une seule fonction de gestionnaire.Note Veuillez noter que si la fonction de gestionnaire est mise en œuvre,
input_handler
etoutput_handler
sont ignorées.Voici un exemple de code de script
inference.py
que vous pouvez assembler avec le modèle de compilation pour effectuer un pré- et un post-traitement personnalisé sur un modèle de classification d'image. Le client SageMaker envoie le fichier image sous forme de type de contenuapplication/x-image
à la fonctioninput_handler
, où il est converti au format JSON. Le fichier image converti est ensuite envoyé au serveur de modèles Tensorflow (TFX)à l'aide de l'API REST. import json import numpy as np import json import io from PIL import Image def input_handler(data, context): """ Pre-process request input before it is sent to TensorFlow Serving REST API Args: data (obj): the request data, in format of dict or string context (Context): an object containing request and configuration details Returns: (dict): a JSON-serializable dict that contains request body and headers """ f = data.read() f = io.BytesIO(f) image = Image.open(f).convert('RGB') batch_size = 1 image = np.asarray(image.resize((512, 512))) image = np.concatenate([image[np.newaxis, :, :]] * batch_size) body = json.dumps({"signature_name": "serving_default", "instances": image.tolist()}) return body def output_handler(data, context): """Post-process TensorFlow Serving output before it is returned to the client. Args: data (obj): the TensorFlow serving response context (Context): an object containing request and configuration details Returns: (bytes, string): data to return to client, response content type """ if data.status_code != 200: raise ValueError(data.content.decode('utf-8')) response_content_type = context.accept_header prediction = data.content return prediction, response_content_type
En l'absence de pré- ou de post-traitement personnalisé, le client SageMaker convertit le fichier image au format JSON de la même manière avant de l'envoyer au point de terminaison SageMaker.
Pour de plus amples informations, veuillez consulter Deploying to TensorFlow Serving Endpoints in the SageMaker Python SDK (Déploiement sur des points de terminaison de service TensorFlow dans le SDK SageMaker Python)
.
-
-
L'URI du compartiment Amazon S3 qui contient les artefacts du modèle compilé.