

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Verifique dos resultados da previsão
<a name="async-inference-check-predictions"></a>

Há várias maneiras de verificar resultados das previsões do endpoint assíncrono. Algumas opções são:

1. Tópicos do Amazon SNS.

1. Verifique se há saídas em seu bucket do Amazon S3.

## Tópicos do Amazon SNS
<a name="async-inference-check-predictions-sns-topic"></a>

O Amazon SNS é um serviço de notificação para aplicativos orientados a mensagens, em que vários assinantes solicitam e recebem notificações “push” de mensagens urgentes de uma variedade de protocolos de transporte, incluindo HTTP, Amazon SQS e e-mail. O Amazon SageMaker Asynchronous Inference publica notificações quando você cria um endpoint com e especifica um tópico do Amazon [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)SNS.

**nota**  
Para receber notificações do Amazon SNS, sua Função do IAM deve ter permissões `sns:Publish`. Consulte o [Concluir os pré-requisitos do .](async-inference-create-endpoint-prerequisites.md) para obter informações sobre os requisitos que você deve satisfazer para usar a inferência assíncrona.

Para usar o Amazon SNS para verificar os resultados de previsão do seu endpoint assíncrono, primeiro você precisa criar um tópico, assinar o tópico, confirmar sua assinatura no tópico e anotar o nome do recurso da Amazon (ARN) desse tópico. Para obter informações detalhadas sobre como criar, assinar e encontrar o Amazon ARN de um tópico do Amazon SNS, consulte [Configurando o Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html).

Forneça o(s) ARN(s) do tópico do Amazon SNS no campo `AsyncInferenceConfig` ao criar uma configuração de endpoint com `CreateEndpointConfig`. Você pode especificar um Amazon SNS `ErrorTopic` e um `SuccessTopic`.

```
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}}",
            }
        }
    }
)
```

Depois de criar seu endpoint e invocá-lo, você recebe uma notificação do seu tópico do Amazon SNS. Por exemplo, se você se inscreveu para receber notificações por e-mail do seu tópico, receberá uma notificação por e-mail toda vez que invocar seu endpoint. O exemplo a seguir mostra o conteúdo JSON de uma notificação por e-mail de invocação bem-sucedida.

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

## Verifique seu bucket S3
<a name="async-inference-check-predictions-s3-bucket"></a>

Quando você invoca um endpoint com `InvokeEndpointAsync`, ele retorna um objeto de resposta. Você pode usar o objeto de resposta para obter o URI do Amazon S3 em que sua saída foi armazenada. Com o local de saída, você pode usar uma classe de sessão de SageMaker IA do SageMaker Python SDK para verificar programaticamente uma saída.

O seguinte armazena o dicionário de saída de `InvokeEndpointAsync` como uma variável chamada resposta. Com a variável de resposta, você obtém o URI de saída do Amazon S3 e o armazena como uma variável de string chamada `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 obter informações sobre os tipos de conteúdo compatíveis, consulte [Formatos de dados comuns para inferência](cdf-inference.md).

Com o local de saída do Amazon S3, você pode então usar uma [classe de sessão de SageMaker IA do SDK do SageMaker Python](https://sagemaker.readthedocs.io/en/stable/api/utility/session.html?highlight=session) para ler os arquivos do Amazon S3. O exemplo de código a seguir mostra como criar uma função (`get_ouput`) que tentativas repetidas de ler um arquivo do local de saída do 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}")
```