Escale el entrenamiento y la inferencia de miles de modelos de ML con Amazon SageMaker | Servicios web de Amazon

Escale el entrenamiento y la inferencia de miles de modelos de ML con Amazon SageMaker | Servicios web de Amazon

A medida que el aprendizaje automático (ML) se vuelve cada vez más frecuente en una amplia gama de industrias, las organizaciones se encuentran con la necesidad de capacitar y atender una gran cantidad de modelos de ML para satisfacer las diversas necesidades de sus clientes. Para los proveedores de software como servicio (SaaS) en particular, la capacidad de entrenar y servir miles de modelos de manera eficiente y rentable es crucial para mantenerse competitivo en un mercado en rápida evolución.

La capacitación y el servicio de miles de modelos requiere una infraestructura robusta y escalable, que es donde Amazon SageMaker poder ayudar. SageMaker es una plataforma completamente administrada que permite a los desarrolladores y científicos de datos crear, entrenar e implementar modelos de ML rápidamente, al mismo tiempo que ofrece los beneficios de ahorro de costos del uso de la infraestructura de la nube de AWS.

En esta publicación, exploramos cómo puede usar las funciones de SageMaker, incluidas Procesamiento de Amazon SageMaker, trabajos de entrenamiento de SageMaker y terminales multimodelo (MME) de SageMaker, para entrenar y atender miles de modelos de manera rentable. Para comenzar con la solución descrita, puede consultar el cuaderno adjunto en GitHub.

Caso de uso: Pronóstico de energía

Para esta publicación, asumimos el papel de una empresa ISV que ayuda a sus clientes a ser más sostenibles mediante el seguimiento de su consumo de energía y proporcionando pronósticos. Nuestra empresa tiene 1,000 clientes que desean comprender mejor su uso de energía y tomar decisiones informadas sobre cómo reducir su impacto ambiental. Para hacer esto, usamos un conjunto de datos sintéticos y entrenamos un modelo ML basado en Profeta para que cada cliente realice previsiones de consumo de energía. Con SageMaker, podemos capacitar y brindar servicio de manera eficiente a estos 1,000 modelos, brindando a nuestros clientes información precisa y procesable sobre su uso de energía.

Hay tres características en el conjunto de datos generado:

  • customer_id – Este es un identificador entero para cada cliente, que va de 0 a 999.
  • fecha y hora – Este es un valor de fecha/hora que indica la hora a la que se midió el consumo de energía. Las marcas de tiempo se generan aleatoriamente entre las fechas de inicio y finalización especificadas en el código.
  • consumo – Este es un valor flotante que indica el consumo de energía, medido en alguna unidad arbitraria. Los valores de consumo se generan aleatoriamente entre 0 y 1,000 con estacionalidad sinusoidal.

Resumen de la solución

Para entrenar y servir eficientemente miles de modelos de ML, podemos usar las siguientes características de SageMaker:

  • Procesamiento SageMaker – SageMaker Processing es un servicio de preparación de datos completamente administrado que le permite realizar tareas de procesamiento de datos y evaluación de modelos en sus datos de entrada. Puede utilizar SageMaker Processing para transformar datos sin procesar en el formato necesario para el entrenamiento y la inferencia, así como para ejecutar evaluaciones por lotes y en línea de sus modelos.
  • Trabajos de capacitación de SageMaker – Puede usar trabajos de entrenamiento de SageMaker para entrenar modelos en una variedad de algoritmos y tipos de datos de entrada, y especificar los recursos informáticos necesarios para el entrenamiento.
  • MME de SageMaker – Los puntos finales de varios modelos le permiten alojar varios modelos en un único punto final, lo que facilita la entrega de predicciones de varios modelos con una única API. Los MME de SageMaker pueden ahorrar tiempo y recursos al reducir la cantidad de terminales necesarios para entregar predicciones de múltiples modelos. Los MME admiten el alojamiento de modelos respaldados por CPU y GPU. Tenga en cuenta que en nuestro escenario usamos 1,000 modelos, pero esto no es una limitación del servicio en sí.

El siguiente diagrama ilustra la arquitectura de la solución.

arquitectura que muestra el proceso descrito

El flujo de trabajo incluye los siguientes pasos:

  1. Usamos SageMaker Processing para preprocesar datos y crear un solo archivo CSV por cliente y almacenarlo en Servicio de almacenamiento simple de Amazon (Amazon S3).
  2. El trabajo de capacitación de SageMaker está configurado para leer el resultado del trabajo de procesamiento de SageMaker y distribuirlo de forma rotativa a las instancias de capacitación. Tenga en cuenta que esto también se puede lograr con Canalizaciones de Amazon SageMaker.
  3. Los artefactos del modelo se almacenan en Amazon S3 mediante el trabajo de entrenamiento y se entregan directamente desde SageMaker MME.

Escale el entrenamiento a miles de modelos

Es posible escalar el entrenamiento de miles de modelos a través de la distribution parámetro de la Entrada de entrenamiento class en SageMaker Python SDK, que le permite especificar cómo se distribuyen los datos en varias instancias de capacitación para un trabajo de capacitación. Hay tres opciones para el distribution parámetro: FullyReplicated, ShardedByS3Keyy ShardedByRecord. ShardedByS3Key La opción significa que los datos de entrenamiento están fragmentados por la clave de objeto de S3, y cada instancia de entrenamiento recibe un subconjunto único de los datos, evitando la duplicación. Después de que SageMaker copie los datos en los contenedores de capacitación, podemos leer la estructura de carpetas y archivos para entrenar un modelo único por archivo de cliente. El siguiente es un fragmento de código de ejemplo:

# Assume that the training data is in an S3 bucket already, pass the parent folder
s3_input_train = sagemaker.inputs.TrainingInput( s3_data='s3://my-bucket/customer_data', distribution='ShardedByS3Key'
) # Create a SageMaker estimator and set the training input
estimator = sagemaker.estimator.Estimator(...)
estimator.fit(inputs=s3_input_train)

Cada trabajo de entrenamiento de SageMaker almacena el modelo guardado en el /opt/ml/model carpeta del contenedor de formación antes de archivarlo en un model.tar.gz y luego lo carga en Amazon S3 al finalizar el trabajo de capacitación. Los usuarios avanzados también pueden automatizar este proceso con SageMaker Pipelines. Al almacenar varios modelos a través del mismo trabajo de entrenamiento, SageMaker crea un único model.tar.gz archivo que contiene todos los modelos entrenados. Esto significaría que, para servir el modelo, primero tendríamos que descomprimir el archivo. Para evitar esto, usamos puntos de control para guardar el estado de los modelos individuales. SageMaker proporciona la funcionalidad para copiar los puntos de control creados durante el trabajo de capacitación en Amazon S3. Aquí, los puntos de control deben guardarse en una ubicación preespecificada, siendo el valor predeterminado /opt/ml/checkpoints. Estos puntos de control se pueden usar para reanudar el entrenamiento en un momento posterior o como modelo para implementar en un punto final. Para obtener un resumen de alto nivel sobre cómo la plataforma de capacitación de SageMaker administra las rutas de almacenamiento para conjuntos de datos de capacitación, artefactos de modelos, puntos de control y resultados entre el almacenamiento en la nube de AWS y los trabajos de capacitación en SageMaker, consulte Carpetas de almacenamiento de capacitación de Amazon SageMaker para conjuntos de datos de capacitación, puntos de control, artefactos de modelos y resultados.

El siguiente código utiliza un ficticio model.save() función dentro del train.py script que contiene la lógica de entrenamiento:

import tarfile
import boto3
import os [ ... argument parsing ... ] for customer in os.list_dir(args.input_path): # Read data locally within the Training job df = pd.read_csv(os.path.join(args.input_path, customer, 'data.csv')) # Define and train the model model = MyModel() model.fit(df) # Save model to output directory with open(os.path.join(output_dir, 'model.json'), 'w') as fout: fout.write(model_to_json(model)) # Create the model.tar.gz archive containing the model and the training script with tarfile.open(os.path.join(output_dir, '{customer}.tar.gz'), "w:gz") as tar: tar.add(os.path.join(output_dir, 'model.json'), "model.json") tar.add(os.path.join(args.code_dir, "training.py"), "training.py")

Escale la inferencia a miles de modelos con SageMaker MME

Los MME de SageMaker le permiten servir varios modelos al mismo tiempo al crear una configuración de punto final que incluye una lista de todos los modelos para servir y luego crear un punto final usando esa configuración de punto final. No es necesario volver a implementar el punto final cada vez que agrega un nuevo modelo porque el punto final atenderá automáticamente todos los modelos almacenados en las rutas de S3 especificadas. Esto se logra con Servidor multimodelo (MMS), un marco de código abierto para servir modelos ML que se pueden instalar en contenedores para proporcionar el front-end que cumple con los requisitos para las nuevas API de contenedor MME. Además, puede usar otros servidores modelo, incluidos AntorchaServir y Tritón. MMS se puede instalar en su contenedor personalizado a través de la Kit de herramientas de inferencia de SageMaker. Para obtener más información sobre cómo configurar su Dockerfile para incluir MMS y usarlo para servir sus modelos, consulte Cree su propio contenedor para terminales multimodelo de SageMaker.

El siguiente fragmento de código muestra cómo crear un MME con el SDK de Python de SageMaker:

from sagemaker.multidatamodel import MultiDataModel # Create the MultiDataModel definition
multimodel = MultiDataModel( name='customer-models', model_data_prefix=f's3://{bucket}/scaling-thousand-models/models', model=your_model,
) # Deploy on a real-time endpoint
predictor = multimodel.deploy( initial_instance_count=1, instance_type='ml.c5.xlarge',
)

Cuando el MME está activo, podemos invocarlo para generar predicciones. Las invocaciones se pueden realizar en cualquier AWS SDK, así como con SageMaker Python SDK, como se muestra en el siguiente fragmento de código:

predictor.predict( data='{"period": 7}', # the payload, in this case JSON target_model='{customer}.tar.gz' # the name of the target model
)

Al llamar a un modelo, el modelo se carga inicialmente desde Amazon S3 en la instancia, lo que puede provocar un inicio en frío al llamar a un nuevo modelo. Los modelos de uso frecuente se almacenan en caché en la memoria y en el disco para proporcionar una inferencia de baja latencia.

Conclusión

SageMaker es una plataforma potente y rentable para entrenar y servir miles de modelos de ML. Sus características, incluido el procesamiento de SageMaker, los trabajos de capacitación y los MME, permiten a las organizaciones capacitar y atender de manera eficiente miles de modelos a escala, al mismo tiempo que se benefician de las ventajas de ahorro de costos del uso de la infraestructura de la nube de AWS. Para obtener más información sobre cómo usar SageMaker para entrenar y servir miles de modelos, consulte Procesar datos, Entrene a un modelo con Amazon SageMaker y Aloje múltiples modelos en un contenedor detrás de un punto final.


Acerca de los autores

Foto de Davidedavid gallitelli es Arquitecto de Soluciones Especializado en IA/ML en la región EMEA. Tiene su sede en Bruselas y trabaja en estrecha colaboración con los clientes en todo el Benelux. Ha sido desarrollador desde que era muy joven, comenzó a programar a la edad de 7 años. Comenzó a aprender AI/ML en la universidad y se enamoró de él desde entonces.

Foto de MauricioMauricio de Groot es arquitecto de soluciones en Amazon Web Services, con sede en Ámsterdam. Le gusta trabajar en temas relacionados con el aprendizaje automático y tiene predilección por las startups. En su tiempo libre, le gusta esquiar y jugar al squash.

Sello de tiempo:

Mas de Aprendizaje automático de AWS