

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.

# Vérifier les résultats de la prédiction
<a name="async-inference-check-predictions"></a>

Il existe plusieurs manières de vérifier les résultats des prédictions à partir de votre point de terminaison asynchrone. Voici quelques-unes d'entre elles :

1. Les rubriques Amazon SNS.

1. Vérifier les sorties dans votre compartiment Amazon S3.

## Rubriques Amazon SNS
<a name="async-inference-check-predictions-sns-topic"></a>

Amazon SNS est un service de notification destiné aux applications orientées messagerie. Plusieurs abonnés demandent et reçoivent des notifications « push » de messages critiques via un choix de protocoles de transport, y compris HTTP, Amazon SQS et les e-mails. L'inférence asynchrone d'Amazon SageMaker publie des notifications lorsque vous créez un point de terminaison avec [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) et spécifiez une rubrique Amazon SNS.

**Note**  
Pour recevoir des notifications Amazon SNS, votre rôle IAM doit avoir des autorisations `sns:Publish`. Pour en savoir plus sur les prérequis pour utiliser l'inférence asynchrone, suivez le [Remplir les conditions préalables](async-inference-create-endpoint-prerequisites.md).

Pour utiliser Amazon SNS afin de vérifier les résultats de prédiction à partir de votre point de terminaison asynchrone, vous devez d'abord créer une rubrique, vous abonner à la rubrique, confirmer votre abonnement à la rubrique et noter l'Amazon Resource Name (ARN) de cette rubrique. Pour obtenir des informations détaillées sur la création, l’abonnement et la recherche de l’Amazon ARN d’une rubrique Amazon SNS, consultez [Configuration d’Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html).

Indiquez le ou les ARN de rubrique Amazon SNS dans le champ `AsyncInferenceConfig` lorsque vous créez une configuration de point de terminaison avec `CreateEndpointConfig`. Vous pouvez spécifier à la fois une `ErrorTopic` et une `SuccessTopic` Amazon SNS.

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name=<aws_region>)

sagemaker_client.create_endpoint_config(
    EndpointConfigName=<endpoint_config_name>, # You 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": "s3://<bucket>/<output_directory>"
            "NotificationConfig": {
                "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name",
                "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name",
            }
        }
    }
)
```

Après avoir créé votre point de terminaison et l'avoir appelé, vous recevez une notification de votre rubrique Amazon SNS. Par exemple, si vous vous êtes abonné pour recevoir des notifications par e-mail de votre rubrique, vous recevez une notification par e-mail chaque fois que vous appelez votre point de terminaison. L'exemple suivant illustre le contenu JSON d'une notification par e-mail d'appel réussie.

```
{
   "awsRegion":"us-east-1",
   "eventTime":"2022-01-25T22:46:00.608Z",
   "receivedTime":"2022-01-25T22:46:00.455Z",
   "invocationStatus":"Completed",
   "requestParameters":{
      "contentType":"text/csv",
      "endpointName":"<example-endpoint>",
      "inputLocation":"s3://<bucket>/<input-directory>/input-data.csv"
   },
   "responseParameters":{
      "contentType":"text/csv; charset=utf-8",
      "outputLocation":"s3://<bucket>/<output_directory>/prediction.out"
   },
   "inferenceId":"11111111-2222-3333-4444-555555555555", 
   "eventVersion":"1.0",
   "eventSource":"aws:sagemaker",
   "eventName":"InferenceResult"
}
```

## Vérifier votre compartiment S3
<a name="async-inference-check-predictions-s3-bucket"></a>

Lorsque vous invoquez un point de terminaison avec `InvokeEndpointAsync`, il renvoie un objet de réponse. Vous pouvez utiliser l'objet de réponse pour obtenir l'URI Amazon S3 où votre sortie est stockée. Avec l’emplacement de sortie, vous pouvez utiliser une classe de session SageMaker AI du kit SageMaker Python SDK afin de vérifier une sortie par programmation.

Ce qui suit stocke le dictionnaire de sortie de `InvokeEndpointAsync` en tant que réponse nommée comme variable. Avec la variable de réponse, vous obtenez ensuite l'URI de sortie Amazon S3 et le stockez sous forme de variable de chaîne appelée `output_location`. 

```
import uuid
import boto3

sagemaker_runtime = boto3.client("sagemaker-runtime", region_name=<aws_region>)

# Specify the S3 URI of the input. Here, a single SVM sample
input_location = "s3://bucket-name/test_point_0.libsvm" 

response = sagemaker_runtime.invoke_endpoint_async(
    EndpointName='<endpoint-name>',
    InputLocation=input_location,
    InferenceId=str(uuid.uuid4()), 
    ContentType="text/libsvm" #Specify the content type of your data
)

output_location = response['OutputLocation']
print(f"OutputLocation: {output_location}")
```

Pour plus d’informations sur les types de contenu pris en charge, consultez [Formats de données courants pour l’inférence](cdf-inference.md).

Avec l’emplacement de sortie Amazon S3, vous pouvez ensuite utiliser une [classe de session SageMaker AI du kit SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/api/utility/session.html?highlight=session) pour lire dans des fichiers Amazon S3. L'exemple de code suivant montre comment créer une fonction (`get_ouput`) qui tente à plusieurs reprises de lire un fichier à partir de l'emplacement de sortie Amazon S3 :

```
import sagemaker
import urllib, time
from botocore.exceptions import ClientError

sagemaker_session = sagemaker.session.Session()

def get_output(output_location):
    output_url = urllib.parse.urlparse(output_location)
    bucket = output_url.netloc
    key = output_url.path[1:]
    while True:
        try:
            return sagemaker_session.read_s3_file(
                                        bucket=output_url.netloc, 
                                        key_prefix=output_url.path[1:])
        except ClientError as e:
            if e.response['Error']['Code'] == 'NoSuchKey':
                print("waiting for output...")
                time.sleep(2)
                continue
            raise
            
output = get_output(output_location)
print(f"Output: {output}")
```