Créer un point de terminaison d'inférence asynchrone - 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.

Créer un point de terminaison d'inférence asynchrone

Créez un point de terminaison asynchrone de la même manière que vous créeriez un point de terminaison à l'aide des services SageMaker d'hébergement :

  • Créez un modèle SageMaker avecCreateModel.

  • Créez une configuration de point de terminaison avec CreateEndpointConfig.

  • Créez un point de terminaison HTTPS avec CreateEndpoint.

Pour créer un point de terminaison, vous devez d'abord créer un modèle avec CreateModel, où vous pointez sur l'artefact du modèle et sur un chemin de registre Docker (Image). Vous créez ensuite une configuration CreateEndpointConfigdans laquelle vous spécifiez un ou plusieurs modèles créés à l'aide de l'CreateModelAPI pour le déploiement et les ressources que vous SageMaker souhaitez provisionner. Créez un point de terminaison avec CreateEndpoint à l'aide de la configuration de point de terminaison spécifiée dans la requête. Vous pouvez mettre à jour un point de terminaison asynchrone avec l'API UpdateEndpoint. Envoyez et recevez des requêtes d'inférence à partir du modèle hébergé sur le point de terminaison avec InvokeEndpointAsync. Vous pouvez supprimer vos points de terminaison avec l'API DeleteEndpoint.

Pour une liste complète des SageMaker images disponibles, consultez Available Deep Learning Containers Images. Veuillez consulter Utilisation de votre propre code d'inférence pour savoir comment créer votre image Docker.

Création d'un modèle

L'exemple suivant illustre la création d'un groupe de modèles à l'aide du kit AWS SDK for Python (Boto3). Les premières lignes définissent :

  • sagemaker_client: objet SageMaker client de bas niveau qui facilite l'envoi et la réception de demandes aux AWS services.

  • sagemaker_role: variable de chaîne avec le rôle SageMaker IAM Amazon Resource Name (ARN).

  • aws_region: variable de chaîne avec le nom de votre AWS région.

import boto3 # Specify your AWS Region aws_region='<aws_region>' # Create a low-level SageMaker service client. sagemaker_client = boto3.client('sagemaker', region_name=aws_region) # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<account>:role/*"

Ensuite, spécifiez l'emplacement du modèle pré-entraîné stocké dans Amazon S3. Dans cet exemple, nous utilisons un modèle XGBoost préentraîné nommé demo-xgboost-model.tar.gz. L'URI Amazon S3 complet est stocké dans une variable de chaîne model_url :

#Create a variable w/ the model S3 URI s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket bucket_prefix='saved_models' model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz" #Specify S3 bucket w/ model model_url = f"s3://{s3_bucket}/{model_s3_key}"

Spécifiez un conteneur principal. Pour les conteneurs primaires, vous spécifiez l'image Docker contenant le code d'inférence, les artefacts (des entraînements précédents) et une carte d'environnement personnalisée que le code d'inférence utilise lorsque vous déployez le modèle pour les prédictions.

Dans cet exemple, nous spécifions une image de conteneur d'algorithme intégré XGBoost :

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

Créez un modèle sur Amazon SageMaker avecCreateModel. Spécifiez les paramètres suivants :

  • ModelName : nom de votre modèle (dans cet exemple, il est stocké sous la forme d'une variable de chaîne appelée model_name).

  • ExecutionRoleArn: le nom de ressource Amazon (ARN) du rôle IAM qu'Amazon SageMaker peut assumer pour accéder aux artefacts du modèle et aux images Docker à des fins de déploiement sur des instances de calcul ML ou pour des tâches de transformation par lots.

  • PrimaryContainer : l'emplacement de l'image Docker principale contenant le code d'inférence, les artefacts associés et les cartes d'environnement personnalisées que le code d'inférence utilise lorsque le modèle est déployé pour les prédictions.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, })

Consultez la CreateModeldescription dans le guide de référence des SageMaker API pour obtenir la liste complète des paramètres de l'API.

Si vous utilisez un conteneur SageMaker fourni, vous pouvez augmenter le délai d'expiration du serveur de modèles et la taille de la charge utile des valeurs par défaut aux maximums pris en charge par le framework en définissant des variables d'environnement au cours de cette étape. Il se peut que vous ne puissiez pas tirer parti du délai d'expiration maximal et des tailles de charge utile maximales pris en charge par l'inférence asynchrone si vous ne définissez pas explicitement ces variables. L'exemple suivant montre comment définir les variables d'environnement d'un conteneur d' PyTorch inférence en fonction TorchServe de.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

Une fois que vous avez terminé de créer votre point de terminaison, vous devez vérifier que vous avez correctement défini les variables d'environnement en les imprimant depuis votre script inference.py. Le tableau suivant répertorie les variables d'environnement pour plusieurs frameworks, que vous pouvez définir pour modifier les valeurs par défaut.

Framework Variables d’environnement

PyTorch 1,8 (basé sur TorchServe)

'TS_MAX_REQUEST_SIZE' : '100000000'

'TS_MAX_RESPONSE_SIZE' : '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT' : '1000'

PyTorch 1.4 (basé sur le MMS)

'MMS_MAX_REQUEST_SIZE' : '1000000000'

'MMS_MAX_RESPONSE_SIZE' : '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT' : '900'

HuggingFace Conteneur d'inférence (basé sur le MMS)

'MMS_MAX_REQUEST_SIZE' : '2000000000'

'MMS_MAX_RESPONSE_SIZE' : '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT' : '900'

Création d'une configuration de point de terminaison

Une fois que vous avez un modèle, créez une configuration de point de terminaison avec CreateEndpointConfig. Les services SageMaker d'hébergement Amazon utilisent cette configuration pour déployer des modèles. Dans la configuration, vous identifiez un ou plusieurs modèles, créés à l'aide de with CreateModel, pour déployer les ressources que vous souhaitez qu'Amazon SageMaker fournisse. Spécifiez l'objet AsyncInferenceConfig et fournissez un emplacement Amazon S3 de sortie pour OutputConfig. Vous pouvez éventuellement spécifier des rubriques Amazon SNS sur lesquelles envoyer des notifications concernant les résultats de prédiction. Pour de plus amples informations sur les rubriques Amazon SNS, veuillez consulter Configuration d'Amazon SNS.

L'exemple suivant montre comment créer une configuration de point de terminaison à l'aide du kit AWS SDK for Python (Boto3) :

import datetime from time import gmtime, strftime # Create an endpoint config name. Here we create one based on the date # so it we can search endpoints based on creation time. endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}" # The name of the model that you want to host. This is the name that you specified when creating the model. model_name='<The_name_of_your_model>' create_endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request. # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.m5.xlarge", # Specify the compute instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ], AsyncInferenceConfig={ "OutputConfig": { # Location to upload response outputs when no location is provided in the request. "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output" # (Optional) specify Amazon SNS topics "NotificationConfig": { "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name", "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name", } }, "ClientConfig": { # (Optional) Specify the max number of inflight invocations per instance # If no value is provided, Amazon SageMaker will choose an optimal value for you "MaxConcurrentInvocationsPerInstance": 4 } } ) print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

Dans l'exemple susmentionné, vous spécifiez les clés suivantes pour OutputConfig pour le champ AsyncInferenceConfig :

  • S3OutputPath : l'emplacement pour charger les sorties de réponse lorsqu'aucun emplacement n'est fourni dans la requête.

  • NotificationConfig : (facultatif) les rubriques SNS qui vous envoient des notifications lorsqu'une requête d'inférence réussit (SuccessTopic) ou échoue (ErrorTopic).

Vous pouvez également spécifier l'argument facultatif suivant pour ClientConfig dans le champ AsyncInferenceConfig :

  • MaxConcurrentInvocationsPerInstance: (Facultatif) Le nombre maximum de demandes simultanées envoyées par le SageMaker client au conteneur modèle.

Créez un point de terminaison

Une fois que vous avez votre configuration de modèle et de point de terminaison, utilisez l'API CreateEndpoint pour créer votre point de terminaison. Le nom du point de terminaison doit être unique dans une AWS région de votre AWS compte.

L'exemple suivant crée un point de terminaison à l'aide de la configuration de point de terminaison spécifiée dans la requête. Amazon SageMaker utilise le point de terminaison pour provisionner des ressources et déployer des modèles.

# The name of the endpoint.The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

Lorsque vous appelez l'CreateEndpointAPI, Amazon SageMaker Asynchronous Inference envoie une notification de test pour vérifier que vous avez configuré une rubrique Amazon SNS. Amazon SageMaker Asynchronous Inference envoie également des notifications de test après les appels vers et. UpdateEndpoint UpdateEndpointWeightsAndCapacities Cela permet de SageMaker vérifier que vous disposez des autorisations requises. La notification peut simplement être ignorée. La notification de test a la forme suivante :

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }