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 com
CreateModel
.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 CreateEndpointConfig
qual 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
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 chamadamodel_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 CreateModel
descriçã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" }