Inferencia basada en la capacidad: respaldo automático de instancias para los puntos finales de SageMaker AI

A medida que las organizaciones escalan las cargas de trabajo de IA generativa en producción, asegurar una computación GPU confiable se ha convertido en uno de los desafíos operativos más persistentes. Los modelos de lenguajes grandes (LLM) y las arquitecturas multimodales exigen tipos de instancias específicos y, cuando esa capacidad no está disponible, los puntos finales fallan antes de atender una sola solicitud.

Crear un punto final de inferencia en tiempo real en Amazon SageMaker AI ha significado comprometerse con un único tipo de instancia en el momento de la creación. Cuando ese tipo tenía capacidad insuficiente, el punto final no lograba alcanzar el estado de ejecución. Actualizó su configuración, seleccionó un tipo de instancia diferente y volvió a intentar repetir el ciclo hasta que el intento de aprovisionamiento tuvo éxito.

Hoy, Amazon SageMaker AI presenta un grupo de instancias con reconocimiento de capacidad para puntos finales de inferencia nuevos y existentes. Usted define una lista priorizada de tipos de instancias y SageMaker AI trabaja automáticamente en su lista siempre que la capacidad esté restringida en la creación, durante el escalamiento horizontal y durante el escalamiento horizontal. Su terminal se aprovisiona sobre la infraestructura de IA disponible sin intervención manual. Esta capacidad está disponible para puntos finales de modelo único, puntos finales basados ​​en componentes de inferencia y puntos finales de inferencia asincrónica.

Esta publicación explica cómo funcionan los grupos de instancias y cómo comenzar, ya sea que esté creando un nuevo punto final o migrando uno existente.

el problema

Cuando implementa un modelo en un punto final de inferencia de SageMaker AI, ya sea en tiempo real o asíncrono, especifica un único tipo de instancia. Si ese tipo no tiene capacidad disponible, el punto final no se puede crear. Esta limitación aparece en cada etapa del ciclo de vida del endpoint.

La creación del punto final falla debido a la capacidad. Cuando su tipo de instancia preferido no está disponible, SageMaker AI devuelve un error de Capacidad insuficiente. Llegar a un punto final en ejecución requiere iterar manualmente a través de alternativas, y cada intento consume mucho tiempo antes de conocer el resultado.

El escalado automático no puede hacer crecer la flota. Cuando se activa un evento de escalamiento horizontal y su tipo de instancia no tiene capacidad suficiente, el escalador automático vuelve a intentar el mismo tipo indefinidamente. El tráfico continúa aumentando mientras su punto final permanece en su tamaño actual.

La reducción de escala no tiene conciencia de prioridad. Con un tipo de instancia única, no existe el concepto de hardware preferido en comparación con el de respaldo. Cada instancia es candidata a ser eliminada sin distinción.

La observabilidad es agregada, no procesable. Las métricas de Amazon CloudWatch se acumulan a nivel de punto final. Al investigar un problema de latencia o capacidad, las métricas indican que algo anda mal, pero no qué tipo de instancia es la causa.

Cómo funciona: grupos de instancias basados ​​en prioridades

Usted define una lista clasificada de tipos de instancias llamados grupos de instancias en la configuración de su punto final. SageMaker AI analiza esa lista automáticamente siempre que la capacidad está limitada.

Aparecen tus puntos finales. SageMaker AI prueba el tipo de instancia de su primera elección. Si no hay capacidad disponible, prueba inmediatamente con la segunda opción y luego con la tercera. No es necesario reintentar manualmente. Su punto final llega a InService en la primera infraestructura de IA disponible en minutos.

Sus puntos finales permanecen activos. Cuando se activa el escalado automático y su tipo de instancia preferido está restringido, SageMaker AI escala al siguiente tipo disponible en su lista de prioridades, para que el tráfico siga fluyendo.

Su flota tiende hacia el hardware preferido. Durante la ampliación horizontal, SageMaker AI elimina primero las instancias de menor prioridad (de reserva). En eventos de escalamiento horizontal posteriores, vuelve a probar primero el tipo de mayor prioridad. A medida que su hardware preferido esté disponible, su flota volverá naturalmente a utilizarlo con el tiempo y no se requiere intervención manual.

Lo ves todo. Cada métrica de CloudWatch existente ahora incluye una dimensión InstanceType, por lo que puede realizar un seguimiento de la latencia, el rendimiento, la utilización de GPU y el recuento de instancias por tipo de instancia dentro de un único punto final.

Para obtener más información, consulte la documentación de Amazon SageMaker AI y explore el cuaderno de muestra en GitHub.

El modelo adecuado para cada tipo de instancia

Los tipos de instancias alternativas a menudo difieren en la memoria de la GPU, la capacidad informática y la arquitectura. Un modelo optimizado para una instancia de múltiples GPU con alta memoria no necesariamente se ejecutará en una alternativa más pequeña de una sola GPU. Hay dos formas de hacer coincidir cada tipo de instancia en su lista de grupos con un modelo configurado correctamente.

Opción 1: trae tus propios modelos optimizados

Si ya conoce los objetivos de su tipo de instancia, prepare artefactos modelo para cada uno. Para su instancia principal de gama alta, puede utilizar el paralelismo tensorial en varias GPU. Para una alternativa de nivel medio, puede aplicar decodificación especulativa para acelerar la inferencia. Para su respaldo de menor prioridad, puede usar la cuantificación INT4 para ajustarse a un presupuesto de memoria más pequeño.

Cree un modelo de SageMaker AI separado para cada configuración y haga referencia a él usando ModelNameOverride en cada entrada de InstancePools (para puntos finales de modelo único) o en especificaciones por tipo de instancia (para puntos finales basados ​​en InferenceComponent). Cuando SageMaker AI recurre a un grupo de menor prioridad, implementa el modelo que preparó para ese hardware.

Opción 2: utilizar las recomendaciones de inferencia de SageMaker AI

Si prefiere no optimizar cada objetivo de hardware manualmente, las recomendaciones de inferencia de SageMaker AI pueden generar configuraciones específicas de hardware para usted. Proporcione su modelo base y SageMaker AI producirá configuraciones optimizadas en sus tipos de instancias de destino utilizando técnicas como decodificación especulativa y cuantificación.

El trabajo de recomendación devuelve un resultado por tipo de instancia de destino. Cada resultado incluye un ModelPackageArn y un InferenceSpecificationName en la respuesta AIRecommendationModelDetails, que identifica la configuración para ese hardware específico. Usted crea un modelo de SageMaker AI por resultado usando ambos campos, luego hace referencia a cada uno usando ModelNameOverride en su entrada de grupo correspondiente: el mismo patrón que la Opción 1, con el servicio manejando el trabajo de optimización.

MODEL_PACKAGE_ARN = "arn:aws:sagemaker:us-west-2:123456789012:model-package/MyModelPkgGroup/1" # Cree un modelo por tipo de instancia utilizando ambos campos de AIRecommendationModelDetails. sm.create_model( ModelName="my-llm-for-p5", PrimaryContainer={ "ModelPackageName": MODEL_PACKAGE_ARN, "InferenceSpecificationName": "p5-48xlarge-optimized", }, ExecutionRoleArn="arn:aws:iam::123456789012:role/SageMakerRole", ) sm.create_model( ModelName="my-llm-for-g6", PrimaryContainer={ "ModelPackageName": MODEL_PACKAGE_ARN, "InferenceSpecificationName": "g6-48xlarge-optimized", }, ExecutionRoleArn="arn:aws:iam::123456789012:role/SageMakerRole", ) # Luego haga referencia a cada uno a través de ModelNameOverride por entrada de grupo: consulte Configuración a continuación.

Auto escalado en una flota mixta

El escalado automático sigue la misma lógica de prioridad que usted define en el momento de la creación. El escalamiento horizontal prueba primero su grupo de mayor prioridad y recurre al siguiente grupo si la capacidad no está disponible. La escalabilidad elimina primero las instancias de menor prioridad, preservando su hardware preferido a medida que la flota se contrae.

Construyendo una métrica de escala ponderada

Debido a que su flota contiene tipos de instancias con diferentes capacidades de rendimiento, las métricas agregadas predeterminadas pueden tergiversar el uso real. Considere una instancia p5 que maneja 18 solicitudes simultáneas junto con una g6 que maneja 7 y que promedia esos números brutos a 12,5 no refleja con precisión la carga en ninguno de los tipos.

Ahora puede utilizar las matemáticas de métricas de CloudWatch para crear una métrica ponderada basada en índices de utilización por tipo. Cada término divide la simultaneidad observada de un tipo por su capacidad máxima, lo que produce un valor entre 0,0 y 1,0. Promediar esas proporciones proporciona una señal de uso a nivel de flota en la misma escala de 0,0 a 1,0 que TargetValue. Establecer TargetValue en 0,7 significa: escalamiento horizontal cuando el promedio ponderado supere el 70 por ciento de la capacidad en todos los tipos de instancias de la flota.

aas = boto3.client("application-autoscaling") aas.put_scaling_policy( PolicyName="weighted-utilization-scaling", ServiceNamespace="sagemaker", ResourceId="endpoint/my-heterog-endpoint/variant/primary", ScalableDimension="sagemaker:variant:DesiredInstanceCount", PolicyType="TargetTrackingScaling", TargetTrackingScalingPolicyConfiguration={ "TargetValue": 0.7, # escalamiento horizontal por encima del 70 % de utilización ponderada de la flota "CustomizedMetricSpecification": { "Metrics": [ { "Id": "p5_concurrency", "MetricStat": { "Metric": { "Namespace": "AWS/SageMaker", "MetricName": "ConcurrentRequestsPerModel", "Dimensions": [ {"Name": "EndpointName", "Value": "my-heterog-endpoint"}, {"Name": "VariantName", "Value": "primary"}, {"Name": "InstanceType", "Value": "ml.p5.48xlarge"}, ], }, "Stat": "Average", }, "ReturnData": False, }, { "Id": "g6_concurrency", "MetricStat": { "Metric": { "Namespace": "AWS/SageMaker", "MetricName": "ConcurrentRequestsPerModel", "Dimensions": [ {"Name": "EndpointName", "Value": "my-heterog-endpoint"}, {"Name": "VariantName", "Value": "primary"}, {"Name": "InstanceType", "Value": "ml.g6.48xlarge"}, ], }, "Stat": "Average", }, "ReturnData": False, }, { "Id": "weighted_utilization", # Ratio de utilización por tipo: observado / max_capacity, luego promediado "Expression": "(p5_concurrency / 20 + g6_concurrency / 8) / 2", "ReturnData": True, }, ], }, }, )

En esta expresión, 20 y 8 son los valores máximos de simultaneidad medidos para cada tipo de instancia. Un p5 maneja hasta 20 solicitudes y un g6 maneja hasta 8 en este ejemplo. Reemplace estos valores con los máximos que mida para su modelo durante las pruebas de carga. La siguiente tabla muestra cómo responde la métrica en diferentes niveles de tráfico:

Nivel de tráfico Solicitudes p5 Solicitudes g6 Utilización ponderada Acción Baja 5 2 (0,25 + 0,25) / 2 = 0,25 Escalar en Moderado 12 5 (0,60 + 0,63) / 2 = 0,61 Mantener alto 18 7 (0,90 + 0,88) / 2 = 0,89 Escalar horizontalmente En el objetivo 14 6 (0,70 + 0,75) / 2 = 0,73 Cerca del objetivo: mantener

Nota: Para cargas de trabajo donde todos los tipos de instancias tienen una capacidad de rendimiento similar, su política de escalamiento existente funciona sin modificaciones. La métrica de uso ponderado es más valiosa cuando los miembros del grupo difieren significativamente en la capacidad de GPU.

Seguimiento de su flota

Todas las métricas de CloudWatch existentes ahora incluyen una nueva dimensión InstanceType: ModelLatency, ConcurrentRequestsPerModel, GPUUtilization, InstanceCount e InvocationsPerInstance, desglosadas por tipo de hardware dentro de un único punto final. Puede crear paneles y alarmas que realicen un seguimiento de cada tipo de instancia de forma independiente.

DescribeEndpoint devuelve el recuento de instancias actual por grupo, para que siempre conozca la composición de su flota:

respuesta = sm.describe_endpoint(EndpointName="my-heterog-endpoint") grupos = respuesta["ProductionVariants"][0]["InstancePools"] Ejemplo de salida: [ {"InstanceType": "ml.p5.48xlarge", "CurrentInstanceCount": 4}, {"InstanceType": "ml.g6.48xlarge", "CurrentInstanceCount": 2}, ]

Enrutamiento del tráfico

Para puntos finales con grupos de instancias, recomendamos habilitar el enrutamiento de solicitudes menos pendientes (LOR) configurando RoutingConfig en su ProductionVariant. LOR enruta cada solicitud entrante a la instancia con la menor cantidad de solicitudes en curso por copia de modelo. Debido a que las instancias de mayor capacidad procesan las solicitudes más rápido, agotan sus colas más rápidamente y mantienen recuentos en tránsito más bajos en estado estable. Esto significa que, naturalmente, reciben proporcionalmente más tráfico sin ninguna configuración de peso manual:

"RoutingConfig": {"RoutingStrategy": "LEAST_OUTSTANDING_REQUESTS"}

Sin esta configuración, el punto final utiliza de forma predeterminada el enrutamiento RANDOM, que distribuye las solicitudes de manera uniforme independientemente de la carga de la instancia. Esto es menos óptimo cuando los miembros del grupo difieren significativamente en su capacidad de rendimiento. Para obtener detalles completos, consulte RoutingConfig en la referencia de la API ProductionVariant.

Actualizaciones y reversiones

Se admiten implementaciones tanto azules/verdes como continuas.

Las implementaciones azul/verde proporcionan una flota completamente nueva (verde) utilizando la misma lógica alternativa basada en prioridades antes de cambiar el tráfico. Si se pasan los controles sanitarios, el tráfico se corta. Si fallan, la reversión automática preserva su flota azul y su terminal permanece en servicio en todo momento.

Las implementaciones continuas actualizan su flota en lotes configurables (5 a 50 por ciento de las instancias a la vez), lo que requiere menos capacidad adicional que una flota azul/verde completa, lo que es particularmente valioso para modelos grandes o tipos de instancias de GPU con alta demanda. SageMaker AI aplica la lógica alternativa basada en prioridades al aprovisionar cada nuevo lote. Si se activa una alarma de CloudWatch durante un período de horneado, el tráfico se revierte automáticamente. Consulte Usar implementaciones continuas para obtener detalles de configuración.

Requisitos previos

Antes de comenzar, asegúrese de tener:

Una cuenta de AWS con permisos de IAM sagemaker:CreateEndpointConfig, sagemaker:CreateEndpoint y sagemaker:UpdateEndpoint Al menos un modelo de SageMaker con artefactos en Amazon S3 Boto3 versión 1.43.1 o posterior (para compatibilidad con InstancePools en el SDK de Python) (Opcional) Separe los artefactos del modelo optimizado por tipo de instancia de destino o un ModelPackage de las recomendaciones de inferencia de IA de SageMaker

La compatibilidad con grupos de instancias para los puntos finales de inferencia de IA de SageMaker está disponible en todas las regiones comerciales de AWS. Puede comenzar a través de la Consola de administración de AWS, la Interfaz de línea de comandos de AWS (AWS CLI) o el SDK de AWS.

Flujo de trabajo para configurar puntos finales con grupo de instancias

Hay dos formas de configurar el grupo de instancias: para un nuevo punto final de Amazon SageMaker AI o con su punto final de Amazon SageMaker AI existente.

Si está creando un nuevo punto final, el siguiente diagrama explica el flujo de trabajo:
Elija sus tipos de instancia y asigne prioridades (1 es la más alta). Prepare un modelo optimizado para cada tipo de instancia o ejecute recomendaciones de inferencia de SageMaker AI para generarlas. Cree una configuración de punto final con InstancePools que enumere sus prioridades. Cree el punto final. SageMaker AI maneja la resolución de capacidad automáticamente. Configure la supervisión de CloudWatch por tipo utilizando la nueva dimensión InstanceType. Si está migrando un punto final existente, el siguiente diagrama explica el flujo de trabajo:
Cree una nueva configuración de punto final: reemplace InstanceType con InstancePools, manteniendo su tipo de instancia actual en Prioridad: 1. Llame a UpdateEndpoint, su punto final permanece en servicio durante la transición azul/verde. Opcionalmente, agregue una métrica de escalamiento de utilización ponderada si sus tipos de instancias alternativas difieren significativamente en la capacidad de rendimiento.

Configurando

La adopción de grupos de instancias requiere un cambio de campo en la configuración de su punto final: reemplace el único campo InstanceType en su ProductionVariant con una lista de InstancePools. Su modelo, políticas de escalado y paneles de monitoreo continúan funcionando sin modificaciones.

Migrar un punto final existente

Antes: tipo de instancia única:

import boto3 sm = boto3.client("sagemaker") sm.create_endpoint_config( EndpointConfigName="my-config", ProductionVariants=[{ "VariantName": "primary", "ModelName": "my-llm", "InitialInstanceCount": 2, "InstanceType": "ml.g6e.48xlarge", # tipo único: sin respaldo de capacidad }],)

Después: grupos de instancias ordenados por prioridad:

sm.create_endpoint_config( EndpointConfigName="my-config-v2", ProductionVariants=[{ "VariantName": "primary", "ModelName": "my-llm", "InitialInstanceCount": 2, "VariantInstanceProvisionTimeoutInSeconds": 1200, # consulte la nota a continuación "InstancePools": [ {"InstanceType": "ml.g6e.48xlarge", "Priority": 1}, # su tipo actual {"InstanceType": "ml.g6.48xlarge", "Priority": 2}, # misma familia, primer respaldo {"InstanceType": "ml.p4d.24xlarge", "Priority": 3}, # respaldo más amplio ], }],)

Su terminal permanece en servicio durante la transición azul/verde.

sm.update_endpoint( EndpointName="mi-punto final", EndpointConfigName="mi-config-v2", )

Nota: VariantInstanceProvisionTimeoutInSeconds es un nuevo campo introducido con soporte para grupos de instancias. Establece la ventana total para adquirir instancias de un grupo: SageMaker AI continúa reintentando errores de capacidad insuficiente dentro de esta ventana y pasa al siguiente grupo después de que expira el tiempo de espera. El rango válido es de 300 a 3600 segundos. 1200 segundos es un valor inicial razonable para tipos de instancias de GPU grandes. Este temporizador cubre solo la adquisición de instancias, la descarga del modelo y el tiempo de inicio del contenedor se rigen por separado por los campos ModelDataDownloadTimeoutInSeconds y ContainerStartupHealthCheckTimeoutInSeconds existentes. Para implementar un modelo optimizado diferente por tipo de instancia, agregue ModelNameOverride a cualquier entrada del grupo. Puedes ver las opciones de configuración del modelo en el apartado anterior.

Puntos finales basados ​​en componentes de inferencia

sm.create_inference_component( InferenceComponentName="my-ic", EndpointName="my-heterogeneous-endpoint", VariantName="primary", Especificaciones=[ { "InstanceType": "ml.p5.48xlarge", "ModelName": "my-model-p5-optimized", "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 8, "MinMemoryRequiredInMb": 65536, }, }, { "InstanceType": "ml.g6.48xlarge", "ModelName": "my-model-g6-optimized", "ComputeResourceRequirements": { "NumberOfAcceleratorDevicesRequired": 8, "MinMemoryRequiredInMb": 32768, }, }, ], RuntimeConfig={"CopyCount": 4},)

Puntos finales de inferencia asincrónica

Los grupos de instancias funcionan de la misma manera para los puntos finales de inferencia asincrónica. Agregue un bloque AsyncInferenceConfig a su llamada CreateEndpointConfig junto con su definición de InstancePools; el aprovisionamiento basado en prioridades y la lógica alternativa se aplican de manera idéntica. Esto es particularmente útil para cargas de trabajo asincrónicas que se reducen a cero instancias: cuando el punto final se vuelve a escalar para procesar solicitudes en cola, SageMaker AI aprovisiona utilizando primero su grupo disponible de mayor prioridad, lo que le brinda un comportamiento de arranque en frío resistente sin intervención manual.

Conclusión

Los grupos de instancias de Amazon SageMaker AI le permiten definir una lista priorizada de tipos de instancias para sus puntos finales de inferencia, y SageMaker AI administra automáticamente la capacidad según ese orden.

Durante la creación, ampliación y ampliación de endpoints, SageMaker AI trabaja con sus tipos de instancias preferidos para que no tenga que volver a intentar las implementaciones manualmente cuando el hardware de su primera elección no esté disponible. Comenzar es simple: reemplace InstanceType con InstancePools en la configuración de su punto final y llame a UpdateEndpoint. Sus modelos existentes, políticas de escalado automático y paneles de control continúan funcionando sin cambios importantes.

Con las métricas de CloudWatch por tipo de instancia y los recuentos detallados de grupos de DescribeEndpoint, también obtiene una vista clara y en tiempo real de qué tipos de instancias impulsan su flota. Ya sea que esté optimizando costos, manejando limitaciones de capacidad de GPU o creando canalizaciones asincrónicas resistentes que puedan arrancar en frío desde cero, los grupos de instancias le brindan la flexibilidad y la automatización para mantener la inferencia de aprendizaje automático funcionando sin problemas con menos gastos operativos.

Esta capacidad está disponible hoy sin costo adicional. Incurre en cargos por los tipos de instancias reales aprovisionados a las mismas tarifas que un punto final estándar de un solo tipo. Para obtener más información, consulte la documentación de Amazon SageMaker AI y explore el cuaderno de muestra en GitHub.

Sobre los autores

Kareem Syed-Mohammed

Kareem Syed-Mohammed es gerente de productos en AWS. Se centra en permitir el desarrollo y la gobernanza del modelo Gen AI en SageMaker HyperPod. Antes de esto, en Amazon Quick Sight, dirigió análisis integrados y experiencia de desarrollador. Además de Quick Sight, ha trabajado en AWS Marketplace y Amazon Retail como gerente de producto. Kareem comenzó su carrera como desarrollador de tecnologías de centros de llamadas, experto local y anuncios para Expedia y consultor de gestión en McKinsey.

Dmitry Soldatkin

Dmitry Soldatkin es líder mundial en arquitectura de soluciones especializadas, SageMaker Inference en AWS. Lidera los esfuerzos para ayudar a los clientes a diseñar, construir y optimizar soluciones GenAI y AI/ML en toda la empresa. Su trabajo abarca una amplia gama de casos de uso de ML, con un enfoque principal en la IA generativa, el aprendizaje profundo y la implementación de ML a escala. Se ha asociado con empresas de todos los sectores, incluidos servicios financieros, seguros y telecomunicaciones. Puedes conectarte con Dmitry en LinkedIn.

Juana Liu

Johna Liu es ingeniera de desarrollo de software en el equipo de Amazon SageMaker, donde crea y explora herramientas basadas en IA/LLM que mejoran la eficiencia y habilitan nuevas capacidades. Fuera del trabajo, le gusta el tenis, el baloncesto y el béisbol.

Xu Deng

Xu Dengi es gerente de ingeniería de software del equipo de SageMaker. Se centra en ayudar a los clientes a crear y optimizar su experiencia de inferencia de IA/ML en Amazon SageMaker. En su tiempo libre le encanta viajar y hacer snowboard.

Mona Mona

Mona Mona trabaja actualmente como arquitecta de soluciones especialista sénior en IA/ML en Amazon. Anteriormente trabajó en Google como especialista líder en IA generativa. Es autora publicada de dos libros: Procesamiento del lenguaje natural con servicios de IA de AWS: derivación de conocimientos estratégicos a partir de datos no estructurados con Amazon Textract y Amazon Comprehend y Guía de estudio de aprendizaje automático profesional certificado por Google Cloud. Es autora de 19 blogs sobre IA/ML y tecnología en la nube y coautora de un artículo de investigación sobre CORD19 Neural Search que ganó un premio al Mejor artículo de investigación en la prestigiosa conferencia AAAI (Asociación para el Avance de la Inteligencia Artificial).