Vérifier les résultats de la prédiction - 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.

Vérifier les résultats de la prédiction

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.

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

Rubriques Amazon SNS

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. Amazon SageMaker Asynchronous Inference publie des notifications lorsque vous créez un point de terminaison avec une rubrique Amazon SNS CreateEndpointConfiget que vous la spécifiez.

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 Prérequis.

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, veuillez consulter Configuration d'Amazon SNS.

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

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 SageMaker session du SDK SageMaker Python pour vérifier par programmation la présence d'une sortie.

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, veuillez consulter Formats de données courants pour l'inférence.

Avec l'emplacement de sortie Amazon S3, vous pouvez ensuite utiliser une classe de SageMaker session du SDK SageMaker Python pour lire les 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}")