Patrones de diseño para la inferencia serial en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Patrones de diseño para inferencia serial en Amazon SageMaker

A medida que el aprendizaje automático (ML) se generaliza y gana una adopción más amplia, las aplicaciones basadas en ML se están volviendo cada vez más comunes para resolver una variedad de problemas comerciales complejos. La solución a estos problemas comerciales complejos a menudo requiere el uso de múltiples modelos ML. Estos modelos se pueden combinar secuencialmente para realizar diversas tareas, como preprocesamiento, transformación de datos, selección de modelos, generación de inferencias, consolidación de inferencias y posprocesamiento. Las organizaciones necesitan opciones flexibles para orquestar estos complejos flujos de trabajo de ML. Las canalizaciones de inferencia en serie son uno de esos patrones de diseño para organizar estos flujos de trabajo en una serie de pasos, con cada paso enriqueciendo o procesando más la salida generada por los pasos anteriores y pasando la salida al siguiente paso de la canalización.

Además, estas canalizaciones de inferencia en serie deben proporcionar lo siguiente:

  • Implementación flexible y personalizada (dependencias, algoritmos, lógica de negocios, etc.)
  • Repetible y consistente para la implementación de producción
  • Elevación de cargas pesadas indiferenciadas minimizando la gestión de infraestructuras

En esta publicación, observamos algunos casos de uso comunes para canalizaciones de inferencia en serie y repasamos algunas opciones de implementación para cada uno de estos casos de uso usando Amazon SageMaker. También discutimos las consideraciones para cada una de estas opciones de implementación.

La siguiente tabla resume los diferentes casos de uso para la inferencia en serie, las consideraciones de implementación y las opciones. Estos se discuten en esta publicación.

Caso de uso Descripción del caso de uso Consideraciones primarias Complejidad general de la implementación Opciones de implementación recomendadas Cuadernos y artefactos de código de muestra
Canalización de inferencia en serie (con pasos de preprocesamiento y posprocesamiento incluidos) La canalización de inferencia necesita preprocesar los datos entrantes antes de invocar un modelo entrenado para generar inferencias, y luego postprocesar las inferencias generadas, para que las aplicaciones posteriores puedan consumirlas fácilmente. Facilidad de implementación Baja Contenedor de inferencia con SageMaker Inference Toolkit Implementar un modelo PyTorch entrenado
Canalización de inferencia en serie (con pasos de preprocesamiento y posprocesamiento incluidos) La canalización de inferencia necesita preprocesar los datos entrantes antes de invocar un modelo entrenado para generar inferencias, y luego postprocesar las inferencias generadas, para que las aplicaciones posteriores puedan consumirlas fácilmente. Desacoplamiento, implementación simplificada y actualizaciones Medio Canalización de inferencia de SageMaker Canalización de inferencia con contenedores personalizados y xgBoost
Conjunto de modelos en serie La tubería de inferencia necesita hospedar y organizar varios modelos secuencialmente, de modo que cada modelo mejore la inferencia generada por el anterior, antes de generar la inferencia final. Desacoplamiento, implementación y actualizaciones simplificadas, flexibilidad en la selección del marco del modelo Medio Canalización de inferencia de SageMaker Canalización de inferencia con Scikit-learn y Linear Learner
Canalización de inferencia en serie (con invocación de modelo objetivo de un grupo) La canalización de inferencia necesita invocar un modelo personalizado específico de un grupo de modelos implementados, en función de las características de la solicitud o para la optimización de costos, además de las tareas de preprocesamiento y posprocesamiento. Optimización de costes y personalización Alta Canalización de inferencia de SageMaker con terminales multimodelo (MME) Puntos de enlace multimodelo de Amazon SageMaker con Linear Learner

En las siguientes secciones, analizamos cada caso de uso con más detalle.

Canalización de inferencia en serie mediante contenedores de inferencia

Los casos de uso de canalización de inferencia en serie tienen requisitos para preprocesar los datos entrantes antes de invocar un modelo de ML preentrenado para generar inferencias. Además, en algunos casos, es posible que las inferencias generadas deban procesarse aún más, de modo que las aplicaciones posteriores puedan consumirlas fácilmente. Este es un escenario común para casos de uso en los que una fuente de datos de transmisión debe procesarse en tiempo real antes de que se pueda ajustar un modelo en ella. Sin embargo, este caso de uso también puede manifestarse para la inferencia por lotes.

SageMaker ofrece una opción para personalizar contenedores de inferencia y usarlos para crear una canalización de inferencia en serie. Los contenedores de inferencia utilizan el Kit de herramientas de inferencia de SageMaker y están construidos sobre Servidor de modelos múltiples SageMaker (MMS), que proporciona un mecanismo flexible para servir modelos ML. El siguiente diagrama ilustra un patrón de referencia de cómo implementar una canalización de inferencia en serie mediante contenedores de inferencia.

SageMaker MMS espera una secuencia de comandos de Python que implemente las siguientes funciones para cargar el modelo, preprocesar los datos de entrada, obtener predicciones del modelo y posprocesar los datos de salida:

  • input_fn () – Responsable de deserializar y preprocesar los datos de entrada
  • model_fn () – Responsable de cargar el modelo entrenado de artefactos en Servicio de almacenamiento simple de Amazon (Amazon S3)
  • predic_fn () – Responsable de generar inferencias a partir del modelo
  • output_fn () – Responsable de serializar y postprocesar los datos de salida (inferencias)

Para conocer los pasos detallados para personalizar un contenedor de inferencia, consulte Adaptando su propio contenedor de inferencia.

Los contenedores de inferencia son un patrón de diseño ideal para casos de uso de canalización de inferencia en serie con las siguientes consideraciones principales:

  • Alta cohesión – La lógica de procesamiento y el modelo correspondiente impulsan la funcionalidad comercial única y deben ubicarse en el mismo lugar
  • Baja latencia general – El tiempo transcurrido entre el momento en que se realiza una solicitud de inferencia y se recibe la respuesta

En una canalización de inferencia en serie, la lógica de procesamiento y el modelo se encapsulan dentro del mismo contenedor único, por lo que gran parte de las llamadas de invocación permanecen dentro del contenedor. Esto ayuda a reducir la cantidad total de saltos, lo que resulta en una mejor latencia general y capacidad de respuesta de la canalización.

Además, para los casos de uso donde la facilidad de implementación es un criterio importante, los contenedores de inferencia pueden ayudar, con varios pasos de procesamiento de la canalización ubicados dentro del mismo contenedor.

Canalización de inferencia en serie mediante una canalización de inferencia de SageMaker

Otra variación del caso de uso de la canalización de inferencia en serie requiere un desacoplamiento más claro entre los diversos pasos de la canalización (como el preprocesamiento de datos, la generación de inferencias, el posprocesamiento de datos y el formateo y la serialización). Esto podría deberse a una variedad de razones:

  • El desacoplamiento – Varios pasos de la tubería tienen un propósito claramente definido y deben ejecutarse en contenedores separados debido a las dependencias subyacentes involucradas. Esto también ayuda a mantener la canalización bien estructurada.
  • Marcos – Varios pasos de la canalización utilizan marcos de trabajo específicos (como scikit o Spark ML) y, por lo tanto, deben ejecutarse en contenedores separados.
  • Aislamiento de recursos – Varios pasos de la tubería tienen diferentes requisitos de consumo de recursos y, por lo tanto, deben ejecutarse en contenedores separados para una mayor flexibilidad y control.

Además, para canalizaciones de inferencia en serie un poco más complejas, pueden estar involucrados varios pasos para procesar una solicitud y generar una inferencia. Por lo tanto, desde un punto de vista operativo, puede ser beneficioso albergar estos pasos en contenedores separados para un mejor aislamiento funcional y facilitar actualizaciones y mejoras más sencillas (cambiar un paso sin afectar otros modelos o pasos de procesamiento).

Si su caso de uso se alinea con algunas de estas consideraciones, un Canalización de inferencia de SageMaker proporciona una opción fácil y flexible para crear una canalización de inferencia en serie. El siguiente diagrama ilustra un patrón de referencia de cómo implementar una canalización de inferencia en serie mediante varios pasos alojados en contenedores dedicados mediante una canalización de inferencia de SageMaker.

Canalización de inferencia ml9154

Una canalización de inferencia de SageMaker consta de una secuencia lineal de 2 a 15 contenedores que procesan solicitudes de inferencias sobre datos. La canalización de inferencia brinda la opción de usar algoritmos integrados de SageMaker previamente entrenados o algoritmos personalizados empaquetados en contenedores de Docker. Los contenedores están alojados en la misma instancia subyacente, lo que ayuda a reducir la latencia general y minimizar los costos.

El siguiente fragmento de código muestra cómo se pueden combinar varios pasos y modelos de procesamiento para crear una canalización de inferencia en serie.

Comenzamos creando y especificando modelos basados ​​en Spark ML y XGBoost que pretendemos utilizar como parte de la canalización:

from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel
sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

Luego, los modelos se organizan secuencialmente dentro de la definición del modelo de canalización:

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])

Luego, la canalización de inferencia se implementa detrás de un punto final para la inferencia en tiempo real al especificar el tipo y la cantidad de instancias de ML del host:

sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

Toda la canalización de inferencia ensamblada puede considerarse un modelo de SageMaker que puede usar para hacer predicciones en tiempo real o procesar transformaciones por lotes directamente, sin ningún procesamiento previo externo. Dentro de un modelo de canalización de inferencia, SageMaker maneja las invocaciones como una secuencia de solicitudes HTTP que se originan en una aplicación externa. El primer contenedor de la canalización maneja la solicitud inicial, realiza algún procesamiento y luego envía la respuesta intermedia como una solicitud al segundo contenedor de la canalización. Esto sucede para cada contenedor en la canalización y, finalmente, devuelve la respuesta final a la aplicación cliente que realiza la llamada.

Las canalizaciones de inferencia de SageMaker están completamente administradas. Cuando se implementa la canalización, SageMaker instala y ejecuta todos los contenedores definidos en cada uno de los Nube informática elástica de Amazon (Amazon EC2) instancias aprovisionadas como parte del trabajo de transformación por lotes o punto final. Además, debido a que los contenedores se ubican y alojan en la misma instancia de EC2, se reduce la latencia general de la canalización.

Conjunto de modelos en serie mediante una canalización de inferencia de SageMaker

Un modelo de conjunto es un enfoque en ML en el que se combinan y utilizan varios modelos de ML como parte del proceso de inferencia para generar inferencias finales. Las motivaciones para los modelos de conjunto podrían incluir mejorar la precisión, reducir la sensibilidad del modelo a características de entrada específicas y reducir el sesgo del modelo único, entre otros. En esta publicación, nos enfocamos en los casos de uso relacionados con un conjunto de modelos en serie, donde múltiples modelos de ML se combinan secuencialmente como parte de una canalización de inferencia en serie.

Consideremos un ejemplo específico relacionado con un conjunto de modelos en serie donde necesitamos agrupar las imágenes cargadas de un usuario en función de ciertos temas o temas. Esta canalización podría consistir en tres modelos de ML:

  • modelo 1 – Acepta una imagen como entrada y evalúa la calidad de la imagen según la resolución de la imagen, la orientación y más. Luego, este modelo intenta aumentar la calidad de la imagen y envía las imágenes procesadas que cumplen con un cierto umbral de calidad al siguiente modelo (Modelo 2).
  • modelo 2 – Acepta imágenes validadas a través del Modelo 1 y realiza reconocimiento de imagen para identificar objetos, lugares, personas, texto y otras acciones y conceptos personalizados en imágenes. La salida del Modelo 2 que contiene objetos identificados se envía al Modelo 3.
  • modelo 3 – Acepta la salida del Modelo 2 y realiza tareas de procesamiento de lenguaje natural (NLP), como el modelado de temas para agrupar imágenes en función de temas. Por ejemplo, las imágenes se pueden agrupar según la ubicación o las personas identificadas. La salida (agrupaciones) se envía de vuelta a la aplicación cliente.

El siguiente diagrama ilustra un patrón de referencia sobre cómo implementar varios modelos de ML alojados en un conjunto de modelos en serie mediante una canalización de inferencia de SageMaker.

ml9154-modelo-conjunto

Como se mencionó anteriormente, se administra la canalización de inferencia de SageMaker, lo que le permite concentrarse en la selección y el desarrollo del modelo ML, al tiempo que reduce el trabajo pesado no diferenciado asociado con la construcción de la canalización de conjuntos en serie.

Además, algunas de las consideraciones discutidas anteriormente sobre el desacoplamiento, el algoritmo y la elección del marco para el desarrollo y la implementación del modelo también son relevantes aquí. Por ejemplo, debido a que cada modelo está alojado en un contenedor separado, tiene flexibilidad para seleccionar el marco de ML que mejor se adapte a cada modelo y su caso de uso general. Además, desde un punto de vista operativo y de desacoplamiento, puede continuar actualizando o modificando pasos individuales mucho más fácilmente, sin afectar a otros modelos.

La canalización de inferencia de SageMaker también está integrada con el Registro de modelos de SageMaker para la catalogación de modelos, el control de versiones, la gestión de metadatos y la implementación gobernada en entornos de producción para respaldar las mejores prácticas operativas consistentes. La canalización de inferencia de SageMaker también está integrada con Reloj en la nube de Amazon para habilitar el monitoreo de modelos de múltiples contenedores en canalizaciones de inferencia. También puede obtener visibilidad de métricas en tiempo real para comprender mejor las invocaciones y la latencia de cada contenedor en la canalización, lo que ayuda con la resolución de problemas y la optimización de recursos.

Canalización de inferencia en serie (con invocación de modelo objetivo de un grupo) mediante una canalización de inferencia de SageMaker

Puntos finales de varios modelos de SageMaker (MMEs) proporcionan una solución rentable para implementar una gran cantidad de modelos ML detrás de un único punto final. Las motivaciones para usar terminales multimodelo podrían incluir la invocación de un modelo personalizado específico basado en las características de la solicitud (como el origen, la ubicación geográfica, la personalización del usuario, etc.) o simplemente hospedar varios modelos detrás del mismo terminal para lograr la optimización de costos.

Cuando implementa varios modelos en un único punto final habilitado para varios modelos, todos los modelos comparten los recursos informáticos y el contenedor de servicio de modelos. La canalización de inferencia de SageMaker se puede implementar en un MME, donde uno de los contenedores de la canalización puede atender solicitudes de forma dinámica en función del modelo específico que se invoque. Desde la perspectiva de la canalización, los modelos tienen requisitos de preprocesamiento idénticos y esperan el mismo conjunto de funciones, pero están capacitados para alinearse con un comportamiento específico. El siguiente diagrama ilustra un patrón de referencia de cómo funcionaría esta canalización integrada.

ml9154-mme

Con MME, la solicitud de inferencia que se origina en la aplicación del cliente debe especificar el modelo de destino que debe invocarse. El primer contenedor de la canalización maneja la solicitud inicial, realiza algún procesamiento y luego envía la respuesta intermedia como una solicitud al segundo contenedor de la canalización, que aloja varios modelos. Según el modelo de destino especificado en la solicitud de inferencia, se invoca el modelo para generar una inferencia. La inferencia generada se envía al siguiente contenedor de la canalización para su posterior procesamiento. Esto sucede para cada contenedor subsiguiente en la canalización y, finalmente, SageMaker devuelve la respuesta final a la aplicación cliente que realiza la llamada.

Los artefactos de varios modelos se conservan en un depósito de S3. Cuando se invoca un modelo específico, SageMaker lo carga dinámicamente en el contenedor que aloja el punto final. Si el modelo ya está cargado en la memoria del contenedor, la invocación es más rápida porque SageMaker no necesita descargar el modelo de Amazon S3. Si la utilización de la memoria de la instancia es alta y se invoca un nuevo modelo y, por lo tanto, es necesario cargarlo, los modelos no utilizados se descargan de la memoria. Sin embargo, los modelos descargados permanecen en el volumen de almacenamiento de la instancia y se pueden volver a cargar en la memoria del contenedor más tarde, sin tener que volver a descargarlos del depósito S3.

Una de las consideraciones clave al usar MME es comprender el comportamiento de latencia de invocación del modelo. Como se discutió anteriormente, los modelos se cargan dinámicamente en la memoria del contenedor de la instancia que aloja el punto final cuando se invoca. Por lo tanto, la invocación del modelo puede tardar más cuando se invoca por primera vez. Cuando el modelo ya está en la memoria del contenedor de instancias, las invocaciones posteriores son más rápidas. Si la utilización de la memoria de una instancia es alta y es necesario cargar un nuevo modelo, los modelos no utilizados se descargan. Si el volumen de almacenamiento de la instancia está lleno, los modelos no utilizados se eliminan del volumen de almacenamiento. SageMaker gestiona completamente la carga y descarga de los modelos, sin que tengas que realizar ninguna acción específica. Sin embargo, es importante comprender este comportamiento porque tiene implicaciones en la latencia de invocación del modelo y, por lo tanto, en la latencia general de un extremo a otro.

Opciones de alojamiento de canalización

SageMaker proporciona múltiples tipo de instancia opciones para seleccionar para implementar modelos ML y construir canalizaciones de inferencia, según su caso de uso, rendimiento y requisitos de costo. Por ejemplo, puede elegir instancias optimizadas para CPU o GPU para crear canalizaciones de inferencia en serie, en un solo contenedor o en varios contenedores. Sin embargo, a veces hay requisitos en los que se desea tener flexibilidad y soporte para ejecutar modelos en instancias basadas en CPU o GPU dentro de la misma canalización para una mayor flexibilidad.

Ahora puede utilizar el servidor de inferencia NVIDIA Triton para ofrecer modelos de inferencia en SageMaker para requisitos informáticos heterogéneos. Verificar Implemente IA rápida y escalable con NVIDIA Triton Inference Server en Amazon SageMaker para obtener detalles adicionales.

Conclusión

A medida que las organizaciones descubren y crean nuevas soluciones impulsadas por ML, las herramientas necesarias para orquestar estas canalizaciones deben ser lo suficientemente flexibles para admitir un caso de uso determinado, al tiempo que simplifican y reducen los gastos generales operativos continuos. SageMaker ofrece varias opciones para diseñar y crear estos flujos de trabajo de inferencia en serie, según sus requisitos.

Esperamos saber de usted sobre los casos de uso que está creando mediante canalizaciones de inferencia en serie. Si tiene preguntas o comentarios, por favor compártalos en los comentarios.


Sobre los autores

Patrones de diseño para la inferencia serial en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai. Rahul Sharma es arquitecto sénior de soluciones en AWS Data Lab y ayuda a los clientes de AWS a diseñar y crear soluciones de inteligencia artificial y aprendizaje automático. Antes de unirse a AWS, Rahul pasó varios años en el sector de finanzas y seguros, ayudando a los clientes a crear plataformas analíticas y de datos.

Patrones de diseño para la inferencia serial en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai. Anand Prakash es arquitecto sénior de soluciones en AWS Data Lab. Anand se centra en ayudar a los clientes a diseñar y crear soluciones de base de datos, análisis de datos y AI/ML para acelerar su camino hacia la producción.

Patrones de diseño para la inferencia serial en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai. Patel Dhawal es Arquitecto Principal de Aprendizaje Automático en AWS. Ha trabajado con organizaciones que van desde grandes empresas hasta empresas emergentes medianas en problemas relacionados con la computación distribuida y la inteligencia artificial. Se enfoca en el aprendizaje profundo, incluidos los dominios de NLP y Computer Vision. Ayuda a los clientes a lograr una inferencia de modelos de alto rendimiento en SageMaker.

Patrones de diseño para la inferencia serial en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai. Saurabh Trikande es gerente sénior de productos para Amazon SageMaker Inference. Le apasiona trabajar con clientes y hacer que el aprendizaje automático sea más accesible. En su tiempo libre, a Saurabh le gusta caminar, aprender sobre tecnologías innovadoras, seguir TechCrunch y pasar tiempo con su familia.

Sello de tiempo:

Mas de Aprendizaje automático de AWS