Crie um endpoint de inferência assíncrona - Amazon SageMaker

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á.

Crie um endpoint de inferência assíncrona

Crie um endpoint assíncrono da mesma forma que você criaria um endpoint usando serviços de hospedagem: SageMaker

  • Crie um modelo SageMaker comCreateModel.

  • Criar uma configuração de endpoint com CreateEndpointConfig.

  • Crie um endpoint HTTPS com CreateEndpoint.

Para criar um endpoint, primeiro você cria um modelo com CreateModel, onde aponta para o artefato do modelo e um caminho de registro do Docker (Imagem). Em seguida, você cria uma configuração usando a CreateEndpointConfigqual especifica um ou mais modelos que foram criados usando a CreateModel API para implantação e os recursos que você deseja SageMaker provisionar. Crie um endpoint com CreateEndpoint usando a configuração de endpoint especificada na solicitação. Você pode atualizar um endpoint assíncrono com a API UpdateEndpoint. Envie e receba solicitações de inferência do modelo hospedado no endpoint com InvokeEndpointAsync. Você pode excluir seus endpoints com a API DeleteEndpoint.

Para obter uma lista completa das SageMaker imagens disponíveis, consulte Imagens disponíveis de contêineres de Deep Learning. Consulte Usar o próprio código de inferência para obter informações sobre como criar sua imagem do Docker.

Criar um modelo

O exemplo a seguir mostra como criar um usando o AWS SDK for Python (Boto3). As primeiras linhas definem:

  • sagemaker_client: um objeto SageMaker cliente de baixo nível que facilita o envio e o recebimento de solicitações de AWS serviços.

  • sagemaker_role: uma variável de string com a função SageMaker do IAM Amazon Resource Name (ARN).

  • aws_region: uma variável de string com o nome da sua AWS região.

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/*"

Em seguida, especifique a localização do modelo pré-treinado armazenado no Amazon S3. Neste exemplo, usamos um modelo pré-treinado do XGBoost chamado demo-xgboost-model.tar.gz. O URI completo do Amazon S3 é armazenado em uma variável de string 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}"

Especifique um contêiner primário. Para o contêiner principal, você especifica a imagem do Docker que contém o código de inferência, os artefatos (do treinamento anterior) e um mapa do ambiente personalizado que o código de inferência usa quando você implanta o modelo para previsões.

Neste exemplo, especificamos uma imagem de contêiner do algoritmo integrado do XGBoost:

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

Crie um modelo na Amazon SageMaker comCreateModel. Especifique o seguinte:

  • ModelName: um nome para seu modelo (neste exemplo, ele é armazenado como uma variável de string chamada model_name).

  • ExecutionRoleArn: O Amazon Resource Name (ARN) da função do IAM que a Amazon SageMaker pode assumir para acessar artefatos de modelo e imagens do Docker para implantação em instâncias de computação de ML ou para trabalhos de transformação em lote.

  • PrimaryContainer: A localização da imagem do Docker primária que contém código de inferência, artefatos associados e mapas de ambiente personalizado usado pelo código de inferência quando o modelo é implantado para previsões.

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

Consulte a CreateModeldescrição no Guia de referência SageMaker da API para obter uma lista completa dos parâmetros da API.

Se você estiver usando um contêiner SageMaker fornecido, poderá aumentar o tempo limite do servidor modelo e os tamanhos da carga útil dos valores padrão para os máximos suportados pela estrutura definindo variáveis de ambiente nesta etapa. Talvez você não consiga aproveitar o tempo limite máximo e os tamanhos de carga que a inferência assíncrona suporta se não definir explicitamente essas variáveis. O exemplo a seguir mostra como você pode definir as variáveis de ambiente para um contêiner de PyTorch inferência com base em TorchServe.

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, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

Quando terminar de criar seu endpoint, verifique se definiu as variáveis de ambiente corretamente imprimindo-as do seu script inference.py. A tabela a seguir lista as variáveis de ambiente de uma série de estruturas que você pode definir para alterar os valores padrão.

Framework Variáveis de ambiente

PyTorch 1.8 (baseado em TorchServe)

'TS_MAX_REQUEST_SIZE': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (baseado em MMS)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace Contêiner de inferência (baseado em MMS)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

Criar uma configuração de endpoint

Quando tiver um modelo, crie uma configuração de endpoint com CreateEndpointConfig. Os serviços SageMaker de hospedagem da Amazon usam essa configuração para implantar modelos. Na configuração, você identifica um ou mais modelos, criados usando com CreateModel, para implantar os recursos que você deseja que SageMaker a Amazon provisione. Especifique o objeto AsyncInferenceConfig e forneça uma localização de saída do Amazon S3 para OutputConfig. Opcionalmente, você pode especificar tópicos do Amazon SNS sobre os quais enviar notificações sobre os resultados da previsão. Para obter mais informações sobre tópicos do Amazon SNS, consulte o Configurando o Amazon SNS.

O exemplo a seguir mostra como criar uma configuração de endpoint usando 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']}")

No exemplo acima mencionado, você especifica as seguintes chaves para OutputConfig no campo AsyncInferenceConfig:

  • S3OutputPath: Local para fazer upload das saídas de resposta quando nenhum local é fornecido na solicitação.

  • NotificationConfig: (Opcional) Tópicos do SNS que publicam notificações para você quando uma solicitação de inferência é bem-sucedida (SuccessTopic) ou falha (ErrorTopic).

Você também pode especificar o seguinte argumento opcional para ClientConfig no campo AsyncInferenceConfig:

  • MaxConcurrentInvocationsPerInstance: (Opcional) O número máximo de solicitações simultâneas enviadas pelo SageMaker cliente ao contêiner do modelo.

Criar endpoint

Quando tiver seu modelo e configuração de endpoint, use a API CreateEndpoint para criar seu endpoint. O nome do endpoint deve ser exclusivo em uma AWS região da sua AWS conta.

O recurso abaixo cria um endpoint usando a configuração de endpoint especificada na solicitação. A Amazon SageMaker usa o endpoint para provisionar recursos e implantar modelos.

# 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)

Quando você chama a CreateEndpoint API, o Amazon SageMaker Asynchronous Inference envia uma notificação de teste para verificar se você configurou um tópico do Amazon SNS. O Amazon SageMaker Asynchronous Inference também envia notificações de teste após chamadas para e. UpdateEndpoint UpdateEndpointWeightsAndCapacities Isso permite SageMaker verificar se você tem as permissões necessárias. A notificação pode simplesmente ser ignorada. A notificação do teste tem o seguinte formato:

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }