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

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éez un point de terminaison à l'aide des services d'hébergement SageMaker :

  • Créez un modèle dans SageMaker avec CreateModel.

  • 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 à l'aide de CreateEndpointConfig où vous spécifiez un ou plusieurs modèles créés à l'aide de l'API CreateModel pour le déploiement et les ressources que vous souhaitez que SageMaker alloue. 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 obtenir la liste complète des images SageMaker disponibles, veuillez consulter Available Deep Learning Containers Images (Images de Deep Learning Containers disponibles). 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 : un objet client SageMaker de bas niveau qui facilite l'envoi et la réception de requêtes à des services AWS.

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

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

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ée un modèle dans Amazon SageMaker avec CreateModel. 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 : l'Amazon Resource Name (ARN) du rôle IAM qu'Amazon SageMaker peut endosser pour accéder aux artefacts de modèle et aux images Docker pour le déploiement sur les instances de calcul ML ou pour les 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, })

Veuillez consulter la description CreateModel dans le Guide de références d'API SageMaker pour obtenir la liste complète des paramètres API.

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 d'hébergement Amazon SageMaker utilisent cette configuration pour déployer des modèles. Dans la configuration, vous identifiez un ou plusieurs modèles à déployer créés avec CreateModel pour déployer les ressources que vous souhaitez qu'Amazon SageMaker alloue. 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 maximal de requêtes simultanées envoyées par le client SageMaker au conteneur de modèles.

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 région AWS de votre compte AWS.

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 mettre en service 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'API CreateEndpoint, l'inférence asynchrone Amazon SageMaker envoie une notification de test pour vérifier que vous avez configuré une rubrique Amazon SNS. Cela permet à SageMaker de 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" }