Revisar los resultados de predicciones - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Revisar los resultados de predicciones

Hay varias formas de comprobar resultados de predicciones desde su punto de conexión asíncrono. Estas son las opciones:

  1. Temas de Amazon SNS.

  2. Comprobar si hay salidas en el bucket de Amazon S3.

Temas de Amazon SNS

Amazon SNS es un servicio de notificaciones para aplicaciones orientadas a la mensajería; los suscriptores solicitan y reciben notificaciones “push” de mensajes urgentes a través de distintos protocolos de transporte, como HTTP, Amazon SQS y el correo electrónico. Amazon SageMaker Asynchronous Inference publica notificaciones cuando crea un punto de enlace con un tema de Amazon SNS CreateEndpointConfigy lo especifica.

nota

Para recibir notificaciones de Amazon SNS, su rol de IAM debe tener permisos sns:Publish. Consulte Requisitos previos para obtener información sobre los requisitos que debe cumplir para utilizar la inferencia asíncrona.

Para utilizar Amazon SNS a fin de revisar los resultados de las predicciones de su punto de conexión asíncrono, primero debe crear un tema, suscribirse a este, confirmar la suscripción y anotar el nombre de recurso de Amazon (ARN) de ese tema. Para obtener información detallada sobre cómo crear un tema de Amazon SNS, suscribirse a este y buscar su ARN de Amazon, consulte Configuración de Amazon SNS.

Proporcione los ARN del tema de Amazon SNS en el campo AsyncInferenceConfig cuando cree una configuración de punto de conexión con CreateEndpointConfig. Puede especificar un ErrorTopic o un SuccessTopic de 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", } } } )

Tras crear el punto de conexión e invocarlo, recibirá una notificación del tema de Amazon SNS. Por ejemplo, si se ha suscrito para recibir notificaciones por correo electrónico de su tema, recibirá una notificación por correo electrónico cada vez que invoque a su punto de conexión. En el siguiente ejemplo, se muestra el contenido JSON de una notificación de correo electrónico de invocación correcta.

{ "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" }

Comprobar el bucket de S3

Al invocar un punto de conexión con InvokeEndpointAsync, este devuelve un objeto de respuesta. Puede usar el objeto de respuesta para obtener el URI de Amazon S3 en el que se almacena el resultado. Con la ubicación de salida, puedes usar una clase de SageMaker sesión del SDK de SageMaker Python para comprobar mediante programación una salida.

El siguiente ejemplo permite almacenar el diccionario de resultados de InvokeEndpointAsync como una variable denominada response. Con la variable response, obtiene el URI de salida de Amazon S3 y lo almacena como una variable de cadena denominada 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}")

Para obtener información sobre los tipos de contenido compatibles, consulte Formatos de datos comunes para inferencias.

Con la ubicación de salida de Amazon S3, puede utilizar una clase de SageMaker sesión del SDK de SageMaker Python para leer los archivos de Amazon S3. El siguiente ejemplo de código muestra cómo crear una función (get_ouput) que intente leer repetidamente un archivo desde la ubicación de salida de 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}")