SageMaker Async ahora acepta payloads inline: menos complejidad y menor latencia
Amazon SageMaker AI Async Inference introduce soporte para enviar la carga útil directamente en la llamada InvokeEndpointAsync mediante el parámetro Body (máx. 128,000 bytes). Esto elimina el paso de subida a S3 y reduce latencia, costos y complejidad operativa.
Resumen
Amazon SageMaker AI Async Inference ahora permite enviar payloads directamente en el cuerpo de la petición InvokeEndpointAsync mediante el nuevo parámetro Body. Para cargas de hasta 128,000 bytes (payload raw), ya no es necesario realizar un PUT a Amazon S3 antes de invocar el endpoint. Este cambio reduce una ida y vuelta de red, simplifica el código del cliente y disminuye la superficie operativa para patrones de inferencia asíncrona que manejan payloads pequeños.
Antecedentes: cómo funcionaba antes
Hasta este lanzamiento, el patrón requerido para cada invocación asíncrona incluía dos pasos obligatorios:
- Subir el payload de entrada a un bucket de S3.
- Invocar InvokeEndpointAsync pasando la URI del objeto S3 en InputLocation.
El endpoint procesaba la solicitud de forma asíncrona y escribía la respuesta en la ubicación de salida configurada en S3 (OutputLocation). Ese enfoque es ideal para payloads grandes (imágenes, audio, documentos multi-MB), pero añadía complejidad innecesaria para cargas pequeñas (KB) y para equipos que prefieren evitar la gestión continua de buckets, políticas de ciclo de vida y permisos s3:PutObject.
Qué cambia: el parámetro Body
Con la nueva opción, InvokeEndpointAsync acepta un parámetro Body que contiene los bytes crudos del payload. Puntos clave:
- Tamaño máximo inline: 128,000 bytes (raw payload).
- Body e InputLocation son mutuamente excluyentes: la API rechazará peticiones que incluyan ambos.
- El comportamiento de salida no cambia: la respuesta del endpoint sigue escribiéndose en el OutputLocation configurado en S3.
- Está diseñado para funcionar con endpoints asíncronos existentes: normalmente no se requieren cambios en los modelos o contenedores.
- Errores de validación por tamaño o exclusividad se devuelven de forma síncrona con ValidationError.
- Disponible en 31 regiones comerciales de AWS (incluye GRU, QRO, MXP, BKK, TPE, CPT, entre otras).
Experiencia del desarrollador: antes vs después
Antes, el flujo típico en Python requería un paso de subida a S3 y permisos asociados (ejemplo simplificado):
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. Subir a S3
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. Invocar
response = sagemaker_runtime.invoke_endpoint_async(
EndpointName='my-async-endpoint',
InputLocation=input_location,
ContentType='application/json',
)
print(response['OutputLocation'])
Ese flujo exige gestionar un bucket de entrada, permisos IAM para s3:PutObject, una convención de nombres para evitar colisiones y una estrategia de limpieza para objetos huérfanos.
Con Body, la misma invocación se reduce a una sola llamada:
import boto3, json
sagemaker_runtime = boto3.client('sagemaker-runtime')
payload = json.dumps({'inputs': 'your prompt here'}).encode('utf-8')
response = sagemaker_runtime.invoke_endpoint_async(
EndpointName='my-async-endpoint',
Body=payload,
ContentType='application/json',
)
print(response['OutputLocation'])
No se necesita cliente S3, ni bucket de entrada, ni permisos s3:PutObject en el caller, ni limpieza de objetos.
Beneficios para equipos y negocios
Enviar el payload inline elimina un salto de red y una dependencia operativa, con beneficios prácticos:
- Menor latencia: se elimina un PUT a S3 por cada invocación, lo que reduce la latencia total, especialmente en escenarios de fan-out donde el ahorro se multiplica.
- Arquitectura más simple: no es necesario aprovisionar un bucket de entrada, definir políticas de ciclo de vida o gestionar accesos cruzados entre cuentas.
- Menos rutas de error: una sola llamada API que encola la solicitud o falla de inmediato.
- Costo reducido: se elimina el cargo por S3 PUT en cada invocación inline.
- Validación inmediata: errores por tamaño o por uso combinado de Body e InputLocation se notifican de forma síncrona.
Para equipos en América Latina, estos beneficios pueden traducirse en despliegues operacionales más simples y menores fricciones con equipos legales y de seguridad que suelen pedir controles sobre los objetos almacenados en S3 y los accesos intercuenta.
Cuándo usar Body y cuándo seguir subiendo a S3
Body es la opción recomendada cuando el payload cabe en 128,000 bytes y busca simplicidad. Sin embargo, InputLocation sigue siendo relevante en varios escenarios:
- Payload <= 128,000 bytes (prompts JSON, datos estructurados): usar Body.
- Payload > 128,000 bytes (imágenes, audio, documentos grandes): seguir subiendo a S3 y usar InputLocation.
- Workloads mixtos: evaluar en el cliente y ramificar según el tamaño del payload (Body para pequeños, S3 para grandes).
- Necesidad de conservar entradas para auditoría o re-procesos: InputLocation mantiene los objetos en su bucket para replay o cumplimiento.
Consideraciones prácticas y de seguridad
- Asegúrese de que su SDK esté actualizado: el ejemplo y la experiencia mencionan el SDK de Python (Boto3). Verifique que la versión que usan soporte la llamada InvokeEndpointAsync con Body.
- Manejen validaciones en el cliente para evitar enviar cargas mayores a 128,000 bytes: la API devolverá ValidationError de forma síncrona cuando corresponda.
- Aunque la entrada puede enviarse inline, la salida sigue yendo a S3. Confirmen políticas de acceso y cifrado del OutputLocation según sus requisitos de cumplimiento.
Cómo empezar
- Verifiquen que tienen un endpoint de Amazon SageMaker AI Async Inference existente (por ejemplo, con aws sagemaker describe-endpoint —endpoint-name my-async-endpoint).
- Actualicen y configuren su SDK preferido (el ejemplo usa Boto3).
- En el cliente, construyan la lógica para usar Body cuando el payload sea menor o igual a 128,000 bytes y InputLocation en caso contrario.
- Prueben los flujos y validen la recepción de OutputLocation para procesar o recuperar resultados.
AWS publica un notebook de ejemplo con el flujo completo para ayudar en la migración.
Conclusión
El soporte de payload inline en SageMaker AI Async Inference reduce fricción operativa y latencia para workloads asíncronos con entradas pequeñas. Para equipos en Latinoamérica —donde a menudo se prioriza simplicidad operativa y control sobre accesos en la nube—, esta mejora facilita integraciones más limpias y menores dependencias con recursos adicionales en AWS. Mantengan InputLocation como alternativa para cargas grandes o cuando deban conservar entradas en S3 por auditoría o replay.
Fuente original: AWS ML Blog