Hoy anunciamos compatibilidad con carga útil en línea para Amazon SageMaker AI Async Inference. Los clientes ahora pueden enviar cargas útiles de inferencia directamente en el cuerpo de la solicitud de la API InvokeEndpointAsync, eliminando la necesidad de cargar datos de entrada en Amazon Simple Storage Service (Amazon S3) antes de cada invocación.
Para cargas útiles de hasta 128 000 bytes, esto elimina un viaje de ida y vuelta completo de la red, simplifica el código del lado del cliente y reduce el área de superficie operativa de las cargas de trabajo de inferencia asíncrona.
En esta publicación, explicamos la motivación detrás de esta característica, repasamos la experiencia del cliente antes y después y le mostramos cómo comenzar a usar cargas útiles en línea hoy.
Antecedentes: cómo funcionaba la inferencia asíncrona antes
Puede utilizar Amazon SageMaker AI Async Inference para poner en cola las solicitudes de inferencia y procesarlas de forma asincrónica. Es una buena opción para cargas de trabajo con cargas útiles grandes, tráfico variable o tolerancia a una latencia de segundos a minutos. Admite el escalado automático a cero, lo que lo hace rentable para cargas de trabajo en ráfagas o por lotes.
Hasta ahora, el flujo de trabajo requería dos pasos en cada invocación:
Cargue la carga útil de entrada en un depósito de Amazon S3. Invoque el punto final y pase el URI del objeto S3 como InputLocation.
El punto final procesa la solicitud de forma asincrónica y escribe la salida en una ubicación de salida configurada de S3, que el cliente sondea o recibe a través de una notificación de Amazon Simple Notification Service (Amazon SNS).
Este patrón de dos pasos funciona bien para cargas grandes (imágenes, audio, documentos de varios MB). Pero para los clientes con cargas útiles de entrada pequeñas (en KB) que necesitan tiempos de procesamiento más prolongados de lo que permite la inferencia en tiempo real, la dependencia obligatoria de S3 agregó una complejidad innecesaria.
Novedades: carga útil en línea a través del parámetro Cuerpo
Con el lanzamiento de hoy, InvokeEndpointAsync acepta un nuevo parámetro Body. Cuando está presente, la carga útil se envía en línea en la solicitud API, sin necesidad de cargar S3.
Detalles clave:
Detalles de aspecto Nuevo parámetro Cuerpo, bytes sin formato, con un límite de 128 000 bytes. Tamaño máximo en línea 128.000 bytes (carga útil sin formato). Exclusividad mutua Body y InputLocation se excluyen mutuamente. La API rechaza las solicitudes que establecen ambos. Comportamiento de salida Sin cambios. La salida se escribe en S3 OutputLocation. Compatibilidad de terminales Diseñado para funcionar con terminales asíncronos existentes; No se esperan cambios de modelo o contenedor. Manejo de errores Las violaciones de tamaño y exclusividad mutua devuelven respuestas ValidationError sincrónicas. Disponibilidad Disponible en 31 regiones comerciales de AWS (BOM, PDX, YUL, IAD, CMH, SFO, LHR, ICN, SYD, HKG, YYC, GRU, QRO, DUB, CDG, FRA, ZRH, ARN, ZAZ, NRT, KIX, SIN, CGK, MEL, KUL, BKK, HYD, TPE, CPT, MXP, TLV).
Antes y después: la experiencia del cliente
El cambio es más claro en el código. Los dos ejemplos siguientes realizan la misma invocación asíncrona en el mismo punto final. El primero usa el paso de carga de S3 que se requería hasta ahora y el segundo usa el parámetro Body en línea que lo reemplaza.
Antes: cargar primero en S3 y luego invocar
Este enfoque requiere:
Un cliente S3 y un depósito de entrada aprovisionados. AWS Identity and Access Management (IAM) s3: permiso PutObject en la persona que llama. Un esquema de nomenclatura (UUID o similar) para evitar colisiones de claves. Una estrategia de limpieza para objetos de entrada obsoletos.
Después: enviar la carga útil en línea
Sin cliente S3, sin uuid, sin depósito de entrada, sin concesiones de IAM en la ruta de entrada, sin limpieza de objetos obsoletos.
Beneficios para el cliente
El envío de la carga útil en línea elimina un salto de red y una dependencia de cada solicitud. Esto se traduce en cinco beneficios concretos:
Latencia reducida. Se elimina un viaje de ida y vuelta de red y un PUT de S3 por solicitud. Para cargas de trabajo distribuidas, este ahorro de latencia aumenta significativamente. Arquitectura más sencilla. Evita el aprovisionamiento del depósito de entrada, las políticas de ciclo de vida, los patrones de acceso entre cuentas y el permiso IAM s3:PutObject de la persona que llama en la ruta de entrada. Menos rutas de error. La solicitud es una única llamada API. Se pone en cola o no. Menor costo. Elimina el cargo PUT de S3 por la carga de entrada en cada invocación en línea. Comentarios de validación inmediatos. Los errores de tamaño y de exclusividad mutua se devuelven de forma sincrónica.
Cuándo utilizar cada enfoque
Las cargas útiles en línea suelen ser la opción más sencilla para cargas pequeñas, pero InputLocation todavía tiene su lugar. Utilice la siguiente tabla para decidir qué ruta se adapta a una carga de trabajo determinada:
Escenario Enfoque recomendado Carga útil <= 128 000 bytes (solicitudes JSON, datos estructurados) Cuerpo en línea. Más simple. Evita cargos de ida y vuelta de red y S3 PUT. Carga útil > 128.000 bytes (imágenes, audio, documentos grandes) InputLocation. Sube a S3 primero. Carga de trabajo mixta con tamaños de carga variables. Ramificación según el tamaño. Utilice Body para tamaños pequeños y InputLocation para tamaños grandes. Es necesario conservar los datos de entrada en S3 para auditarlos o reproducirlos. Mantiene las entradas en su depósito.
Empezando
Consulte el cuaderno de códigos de ejemplo para obtener un tutorial completo.
Antes de comenzar, asegúrese de tener:
Un punto final de inferencia asincrónica de IA de Amazon SageMaker existente (verifique con aws sagemaker describe-endpoint –endpoint-name my-async-endpoint). El último AWS SDK para Python (Boto3) instalado y configurado con credenciales. Permisos de IAM para sagemaker: InvokeEndpointAsync. Un depósito de salida de S3 configurado para su punto final asíncrono (por ejemplo, mi-depósito-de-salida).
Nota: Seguir esta guía utiliza recursos de AWS facturables. Los puntos finales de inferencia asíncrona de SageMaker AI generan cargos, por ejemplo, por horas, y los depósitos de S3 generan cargos por almacenamiento y solicitudes. Siga los pasos de limpieza después de completar el tutorial para evitar cargos continuos.
Pasos
El soporte de carga útil en línea está disponible hoy. Para usarlo:
Actualice su SDK de AWS. Instale o actualice Boto3 a la última versión: pip install –upgrade boto3. Verifique la instalación: pip show boto3. Reemplace su código de invocación. En su aplicación, sustituya el patrón S3 upload + InputLocation con un parámetro Body directo, como se muestra en el ejemplo de código anterior. Pruebe su invocación llamando a la API InvokeEndpointAsync con el parámetro Body. Verifique que la respuesta contenga un campo OutputLocation. Sondee o supervise S3 OutputLocation para confirmar que el resultado de su inferencia se escribió correctamente.
No se necesitan cambios en la configuración de su punto final, el contenedor de modelo o la configuración de salida de S3.
Limpiar
Para evitar cargos continuos, elimine los recursos utilizados en este tutorial:
Elimine el punto final de SageMaker AI si se creó para realizar pruebas:
Elimine el depósito S3 de salida (si ya no es necesario). Advertencia: Al eliminar un depósito de S3, se eliminan permanentemente los objetos que contiene. Verifique que haya realizado una copia de seguridad de los resultados de inferencia que necesite conservar.
Elimine cualquier política de IAM creada específicamente para este tutorial.
Conclusión
La compatibilidad con la carga útil en línea para SageMaker AI Async Inference elimina un punto de fricción común en los flujos de trabajo de inferencia asincrónica: la carga obligatoria de S3 para cada solicitud. Para la mayoría de las cargas útiles de inferencia que caben dentro de 128 000 bytes, ahora puede realizar una única llamada API y dejar que SageMaker AI se encargue del resto.
La función está diseñada para ser compatible con versiones anteriores. Los flujos de trabajo existentes de InputLocation continúan sin cambios. Tanto las entradas en línea como las de S3 se procesan de manera idéntica una vez que se acepta la solicitud, y los modelos reciben solicitudes idénticas independientemente de la fuente de entrada.
Comience hoy actualizando su SDK de AWS y utilizando el parámetro Body en la API InvokeEndpointAsync de SageMaker AI. Para obtener más información sobre la inferencia asincrónica, consulte la documentación de Amazon SageMaker AI Async Inference.