O que mudou no SageMaker AI Async Inference
A AWS anunciou suporte a payloads inline para o Amazon SageMaker AI Async Inference. A partir de agora, é possível enviar os dados de entrada diretamente no corpo da requisição da API InvokeEndpointAsync, sem precisar fazer upload do payload no Amazon Simple Storage Service (S3) antes de cada chamada. Para payloads de até 128.000 bytes, isso elimina uma viagem de rede completa, simplifica o código do lado do cliente e reduz a superfície operacional das cargas de trabalho de inferência assíncrona.
Como funcionava antes
O Amazon SageMaker AI Async Inference é indicado para enfileirar requisições de inferência e processá-las de forma assíncrona. É uma boa escolha para cargas de trabalho com payloads grandes, tráfego variável ou tolerância a latências de segundos a minutos. O serviço suporta escalonamento automático até zero, tornando-o eficiente em custo para workloads intermitentes ou em estilo batch.
Até então, o fluxo de trabalho exigia duas etapas a cada invocação:
- Fazer upload do payload de entrada em um bucket do Amazon S3.
- Invocar o endpoint passando o URI do objeto S3 como
InputLocation.
O endpoint processava a requisição de forma assíncrona e gravava o resultado em um local de saída S3 configurado, que o cliente monitorava por polling ou recebia via notificação do Amazon Simple Notification Service (SNS).
Esse padrão de duas etapas funciona bem para payloads grandes — imagens, áudios, documentos com vários megabytes. Mas para quem trabalhava com payloads pequenos (em kilobytes) e precisava de tempos de processamento maiores do que a inferência em tempo real permite, a dependência obrigatória do S3 adicionava complexidade desnecessária.
O que é novo: payload inline via parâmetro Body
Com o lançamento, a API InvokeEndpointAsync passa a aceitar um novo parâmetro chamado Body. Quando presente, o payload é enviado inline na própria requisição da API, sem necessidade de upload no S3. Veja os detalhes principais:
- Novo parâmetro:
Body, em bytes brutos, limitado a 128.000 bytes. - Tamanho máximo inline: 128.000 bytes (payload bruto).
- Exclusividade mútua:
BodyeInputLocationsão mutuamente exclusivos. A API rejeita requisições que definam os dois ao mesmo tempo. - Comportamento de saída: sem alteração. A saída continua sendo gravada no
OutputLocationno S3. - Compatibilidade com endpoints: projetado para funcionar com endpoints assíncronos existentes, sem necessidade de alterações no modelo ou no container.
- Tratamento de erros: violações de tamanho e de exclusividade mútua retornam respostas síncronas de
ValidationError. - Disponibilidade: disponível em 31 regiões comerciais da AWS, incluindo GRU (São Paulo).
Antes e depois: a experiência na prática
A mudança fica mais clara no código. Os dois exemplos a seguir realizam a mesma invocação assíncrona contra o mesmo endpoint. O primeiro usa o passo de upload no S3 que era obrigatório até então; o segundo usa o parâmetro inline Body que o substitui.
Antes: upload no S3 primeiro, depois invocação
import boto3, json, uuid
s3 = boto3.client("s3")
sagemaker_runtime = boto3.client("sagemaker-runtime")
payload = json.dumps({"inputs": "your prompt here"}).encode("utf-8")
# 1. Upload the request payload to S3 (extra latency + cost)
input_key = f"async-input/{uuid.uuid4()}.json"
s3.put_object(Bucket="my-async-bucket", Key=input_key, Body=payload)
input_location = f"s3://my-async-bucket/{input_key}"
# 2. Invoke the endpoint
response = sagemaker_runtime.invoke_endpoint_async(
EndpointName="my-async-endpoint",
InputLocation=input_location,
ContentType="application/json",
)
print(response["OutputLocation"])
Essa abordagem exige:
- Um cliente S3 e um bucket de entrada provisionados.
- Permissão IAM (Gerenciamento de Identidade e Acesso)
s3:PutObjectpara o chamador. - Um esquema de nomenclatura (UUID ou similar) para evitar colisões de chave.
- Uma estratégia de limpeza para objetos de entrada obsoletos.
Depois: envio do payload inline
import boto3, json
sagemaker_runtime = boto3.client("sagemaker-runtime")
payload = json.dumps({"inputs": "your prompt here"}).encode("utf-8")
# One call, no S3 upload, no input bucket needed
response = sagemaker_runtime.invoke_endpoint_async(
EndpointName="my-async-endpoint",
Body=payload,
ContentType="application/json",
)
print(response["OutputLocation"])
Sem cliente S3, sem UUID, sem bucket de entrada, sem permissões IAM no caminho de entrada e sem limpeza de objetos obsoletos.
Benefícios concretos para quem usa o serviço
Enviar o payload inline remove uma viagem de rede e uma dependência de cada requisição. Isso se traduz em cinco benefícios práticos:
- Latência reduzida: uma viagem de rede e um S3 PUT a menos por requisição. Para workloads com alta paralelização, essa economia de latência se multiplica de forma significativa.
- Arquitetura mais simples: elimina o provisionamento do bucket de entrada, políticas de ciclo de vida, padrões de acesso entre contas e a permissão IAM
s3:PutObjectno caminho de entrada do chamador. - Menos caminhos de erro: a requisição é uma única chamada de API. Ou ela entra na fila, ou não entra.
- Custo menor: remove a cobrança do S3 PUT para o upload de entrada em cada invocação inline.
- Validação imediata: erros de tamanho e de exclusividade mútua são retornados de forma síncrona.
Quando usar cada abordagem
Payloads inline são geralmente a escolha mais simples para entradas pequenas, mas o InputLocation ainda tem seu lugar. A tabela abaixo ajuda a decidir qual caminho se encaixa melhor em cada cenário:
- Payload ≤ 128.000 bytes (prompts JSON, dados estruturados): use
Bodyinline. Mais simples, evita uma viagem de rede e as cobranças de S3 PUT. - Payload > 128.000 bytes (imagens, áudios, documentos grandes): use
InputLocation. Faça upload no S3 primeiro. - Workload misto com tamanhos variáveis de payload: ramifique por tamanho. Use
Bodypara os pequenos eInputLocationpara os grandes. - Necessidade de manter os dados de entrada no S3 para auditoria ou replay: use
InputLocation. Mantém as entradas no seu bucket.
Como começar a usar
Consulte o notebook de exemplo com o passo a passo completo. Antes de começar, certifique-se de ter:
- Um endpoint Amazon SageMaker AI Async Inference existente (verifique com
aws sagemaker describe-endpoint --endpoint-name my-async-endpoint). - A versão mais recente do AWS SDK para Python (Boto3) instalada e configurada com credenciais.
- Permissões IAM para
sagemaker:InvokeEndpointAsync. - Um bucket S3 de saída configurado para o seu endpoint assíncrono (por exemplo,
my-output-bucket).
Atenção: seguir este guia utiliza recursos AWS faturáveis. Endpoints de inferência assíncrona do SageMaker AI geram cobranças por horas de instância, e buckets S3 geram cobranças por armazenamento e requisições. Siga os passos de limpeza após concluir o tutorial para evitar cobranças contínuas.
Passos para ativar o suporte a payload inline
O suporte a payload inline já está disponível. Para utilizá-lo:
- Atualize o AWS SDK. Instale ou atualize o Boto3 para a versão mais recente:
pip install --upgrade boto3. Verifique a instalação compip show boto3. - Substitua o código de invocação. Na sua aplicação, troque o padrão de upload no S3 +
InputLocationpelo parâmetro diretoBody, conforme o exemplo de código acima. - Teste a invocação chamando a API
InvokeEndpointAsynccom o parâmetroBody. Verifique se a resposta contém o campoOutputLocation. - Monitore o OutputLocation no S3 para confirmar que o resultado da inferência foi gravado com sucesso.
Nenhuma alteração é necessária na configuração do endpoint, no container do modelo ou na configuração do S3 de saída.
Limpeza dos recursos
Para evitar cobranças contínuas, exclua os recursos utilizados:
- Exclua o endpoint SageMaker AI se foi criado apenas para testes:
aws sagemaker delete-endpoint --endpoint-name my-async-endpoint - Exclua o bucket S3 de saída (se não for mais necessário). Atenção: excluir um bucket S3 remove permanentemente os objetos dentro dele. Certifique-se de ter feito backup dos resultados de inferência que precisar manter:
aws s3 rb s3://my-output-bucket --force - Remova quaisquer políticas IAM criadas especificamente para este tutorial.
Conclusão
O suporte a payloads inline no SageMaker AI Async Inference remove um ponto de atrito comum nos fluxos de trabalho de inferência assíncrona: o upload obrigatório no S3 para cada requisição. Para a maioria dos payloads de inferência que cabem dentro de 128.000 bytes, agora é possível fazer uma única chamada de API e deixar o SageMaker AI cuidar do resto.
O recurso foi projetado para ser compatível com versões anteriores. Os fluxos de trabalho existentes com InputLocation continuam funcionando sem alterações. Tanto as entradas inline quanto as entradas via S3 são processadas de forma idêntica após a aceitação da requisição, e os modelos recebem requisições idênticas independentemente da origem da entrada.
Para começar, basta atualizar o AWS SDK e usar o parâmetro Body na API SageMaker AI InvokeEndpointAsync. Para saber mais sobre inferência assíncrona, consulte a documentação do Amazon SageMaker AI Async Inference.
Fonte
Amazon SageMaker AI Async Inference now supports inline request payloads (https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-ai-async-inference-now-supports-inline-request-payloads/)
Leave a Reply