Déployez un modèle compilé à l'aide de SageMaker SDK - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déployez un modèle compilé à l'aide de SageMaker SDK

Vous devez satisfaire à la section des prérequis si le modèle a été compilé à l'aide de AWS SDK for Python (Boto3) AWS CLI, ou de la SageMaker console Amazon. Suivez l'un des cas d'utilisation suivants pour déployer un modèle compilé avec SageMaker Neo en fonction de la façon dont vous avez compilé votre modèle.

Si vous avez compilé votre modèle à l'aide du SageMaker SDK

Le gestionnaire d'objet sagemaker.Model pour le modèle compilé fournit la fonction deploy() pour vous aider à créer un point de terminaison pour servir des demandes d'inférence. La fonctionnalité vous permet de définir le nombre et le type d'instances utilisés pour le point de terminaison. Vous devez choisir une instance pour laquelle vous avez compilé votre modèle. Par exemple, dans le travail compilé dans la section Compile a Model (Amazon SageMaker SDK), c'estml_c5.

predictor = compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.c5.4xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)

Si vous avez compilé votre modèle en utilisant MXNet ou PyTorch

Créez le SageMaker modèle et déployez-le à l'aide de deploy () API dans le modèle spécifique au framework. APIs PourMXNet, c'est MXNetModelet pour PyTorch, ça l'est PyTorchModel. Lorsque vous créez et déployez un SageMaker modèle, vous devez définir la variable d'MMS_DEFAULT_RESPONSE_TIMEOUTenvironnement sur 500 et spécifier le entry_point paramètre en tant que script d'inférence (inference.py) et le source_dir paramètre en tant qu'emplacement du répertoire (code) du script d'inférence. Pour préparer le script d'inférence (inference.py) suivez l'étape Prérequis.

L'exemple suivant montre comment utiliser ces fonctions pour déployer un modèle compilé à l'aide de SageMaker SDK for Python :

MXNet
from sagemaker.mxnet import MXNetModel # Create SageMaker model and deploy an endpoint sm_mxnet_compiled_model = MXNetModel( model_data='insert S3 path of compiled MXNet model archive', role='AmazonSageMaker-ExecutionRole', entry_point='inference.py', source_dir='code', framework_version='1.8.0', py_version='py3', image_uri='insert appropriate ECR Image URI for MXNet', env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'}, ) # Replace the example instance_type below to your preferred instance_type predictor = sm_mxnet_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)
PyTorch 1.4 and Older
from sagemaker.pytorch import PyTorchModel # Create SageMaker model and deploy an endpoint sm_pytorch_compiled_model = PyTorchModel( model_data='insert S3 path of compiled PyTorch model archive', role='AmazonSageMaker-ExecutionRole', entry_point='inference.py', source_dir='code', framework_version='1.4.0', py_version='py3', image_uri='insert appropriate ECR Image URI for PyTorch', env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'}, ) # Replace the example instance_type below to your preferred instance_type predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)
PyTorch 1.5 and Newer
from sagemaker.pytorch import PyTorchModel # Create SageMaker model and deploy an endpoint sm_pytorch_compiled_model = PyTorchModel( model_data='insert S3 path of compiled PyTorch model archive', role='AmazonSageMaker-ExecutionRole', entry_point='inference.py', source_dir='code', framework_version='1.5', py_version='py3', image_uri='insert appropriate ECR Image URI for PyTorch', ) # Replace the example instance_type below to your preferred instance_type predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge') # Print the name of newly created endpoint print(predictor.endpoint_name)
Note

Les AmazonS3ReadOnlyAccess politiques AmazonSageMakerFullAccess et doivent être associées au AmazonSageMaker-ExecutionRole IAM rôle.

Si vous avez compilé votre modèle à l'aide de Boto3, de SageMaker la console ou du CLI TensorFlow

Créez un objet TensorFlowModel, puis appelez la fonction deploy :

role='AmazonSageMaker-ExecutionRole' model_path='S3 path for model file' framework_image='inference container arn' tf_model = TensorFlowModel(model_data=model_path, framework_version='1.15.3', role=role, image_uri=framework_image) instance_type='ml.c5.xlarge' predictor = tf_model.deploy(instance_type=instance_type, initial_instance_count=1)

Pour de plus amples informations, veuillez consulter Deploying directly from model artifacts (Déploiement direct à partir d'artefacts du modèle).

Vous pouvez sélectionner une image Docker Amazon ECR URI qui répond à vos besoins dans cette liste.

Pour plus d'informations sur la construction d'un TensorFlowModel objet, consultez le SageMaker SDK.

Note

Votre première demande d'inférence peut présenter une latence élevée si vous déployez votre modèle sur unGPU. Cela vient du fait qu'un noyau de calcul optimisé est créé sur la première demande d'inférence. Nous vous recommandons de créer un fichier de préchauffage contenant les demandes d'inférence et de le stocker à côté de votre fichier modèle avant de l'envoyer à un. TFX C'est ce que l'on appelle « préparer » le modèle.

L'extrait de code suivant montre comment produire le fichier de préparation pour l'exemple de classification d'image dans la section Prérequis :

import tensorflow as tf from tensorflow_serving.apis import classification_pb2 from tensorflow_serving.apis import inference_pb2 from tensorflow_serving.apis import model_pb2 from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_log_pb2 from tensorflow_serving.apis import regression_pb2 import numpy as np with tf.python_io.TFRecordWriter("tf_serving_warmup_requests") as writer: img = np.random.uniform(0, 1, size=[224, 224, 3]).astype(np.float32) img = np.expand_dims(img, axis=0) test_data = np.repeat(img, 1, axis=0) request = predict_pb2.PredictRequest() request.model_spec.name = 'compiled_models' request.model_spec.signature_name = 'serving_default' request.inputs['Placeholder:0'].CopyFrom(tf.compat.v1.make_tensor_proto(test_data, shape=test_data.shape, dtype=tf.float32)) log = prediction_log_pb2.PredictionLog( predict_log=prediction_log_pb2.PredictLog(request=request)) writer.write(log.SerializeToString())

Pour plus d'informations sur la façon de « réchauffer » votre modèle, consultez la TensorFlow TFXpage.