Optimice los flujos de trabajo de aprendizaje automático desde el desarrollo local hasta los experimentos escalables mediante el uso de SageMaker IA e Hydra - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Optimice los flujos de trabajo de aprendizaje automático desde el desarrollo local hasta los experimentos escalables mediante el uso de SageMaker IA e Hydra

David Sauerwein, Marco Geiger y Julian Ferdinand Grueber, Amazon Web Services

Resumen

Este patrón proporciona un enfoque unificado para configurar y ejecutar algoritmos de aprendizaje automático (ML) desde las pruebas locales hasta la producción en Amazon SageMaker AI. Este patrón se centra en los algoritmos de ML, pero su enfoque se extiende a la ingeniería de características, la inferencia y canalizaciones completas de ML. Este patrón demuestra la transición del desarrollo de guiones locales a los trabajos de formación en SageMaker IA a través de un ejemplo de caso de uso.

Un flujo de trabajo de ML típico consiste en desarrollar y probar soluciones en una máquina local, ejecutar experimentos a gran escala (por ejemplo, con distintos parámetros) en la nube e implementar la solución aprobada en la nube. A continuación, se debe supervisar y mantener la solución implementada. Sin un enfoque unificado de este flujo de trabajo, los desarrolladores a menudo tienen que refactorizar su código en cada etapa. Si la solución depende de una gran cantidad de parámetros que pueden cambiar en cualquier etapa de este flujo de trabajo, puede resultar cada vez más difícil mantener la organización y la coherencia.

Este patrón resuelve estos desafíos. En primer lugar, elimina la necesidad de refactorizar el código entre entornos al proporcionar un flujo de trabajo unificado que mantiene la coherencia tanto si se ejecuta en máquinas locales, en contenedores o en SageMaker IA. En segundo lugar, simplifica la administración de parámetros mediante el sistema de configuración de Hydra, en el que los parámetros se definen en archivos de configuración independientes que se pueden modificar y combinar fácilmente, con un registro automático de la configuración de cada ejecución. Para más detalles acerca de cómo este patrón resuelve estos desafíos, consulte la sección Información adicional.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Actualmente, el código solo se dirige a los trabajos de formación en SageMaker IA. Extenderlo a los trabajos de procesamiento y a toda la cartera de SageMaker IA es sencillo.

  • Para una configuración de SageMaker IA totalmente productiva, es necesario contar con detalles adicionales. Algunos ejemplos podrían ser las claves personalizadas AWS Key Management Service (AWS KMS) para el procesamiento y el almacenamiento, o las configuraciones de red. También puede configurar estas opciones adicionales con Hydra en una subcarpeta específica de la carpeta config.

  • Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte AWS Services by Region. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.

Arquitectura

En el diagrama siguiente se muestra la arquitectura de la solución.

Flujo de trabajo para crear y ejecutar cursos de SageMaker IA o trabajos de HPO.

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. El científico de datos puede iterar el algoritmo a pequeña escala en un entorno local, ajustar los parámetros y probar el guion de entrenamiento rápidamente sin necesidad de usar Docker o IA. SageMaker (Para más información, consulte la tarea “Run locally for quick testing” en Epics).

  2. Una vez satisfecho con el algoritmo, el científico de datos crea y envía la imagen de Docker al repositorio de Amazon Elastic Container Registry (Amazon ECR) denominado hydra-sm-artifact. (Para obtener más información, consulta la sección «Ejecutar flujos de trabajo con SageMaker IA» en Epics).

  3. El científico de datos inicia trabajos de capacitación en SageMaker IA o trabajos de optimización de hiperparámetros (HPO) mediante scripts de Python. Para los trabajos de entrenamiento habituales, la configuración ajustada se escribe en el bucket de Amazon Simple Storage Service (Amazon S3) denominado hydra-sample-config. En el caso de los trabajos de HPO, se aplica el conjunto de configuraciones predeterminadas que se encuentra en la carpeta config.

  4. El trabajo de entrenamiento de SageMaker IA extrae la imagen de Docker, lee los datos de entrada del bucket hydra-sample-data de Amazon S3 y obtiene la configuración del bucket de Amazon S3 hydra-sample-config o utiliza la configuración predeterminada. Tras el entrenamiento, el trabajo guarda los datos de salida en el bucket hydra-sample-data de Amazon S3.

Automatización y escala

Tools (Herramientas)

Servicios de AWS

  • AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en Cuentas de AWS todo el mundo. Regiones de AWS

  • AWS Command Line Interface (AWS CLI) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante los comandos de tu consola de línea de comandos. Para este patrón, AWS CLI es útil tanto para la configuración inicial de los recursos como para las pruebas.

  • Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.

  • Amazon SageMaker AI es un servicio de aprendizaje automático (ML) gestionado que le ayuda a crear y entrenar modelos de aprendizaje automático para luego implementarlos en un entorno hospedado listo para la producción. SageMaker AI Training es un servicio de aprendizaje automático totalmente gestionado dentro de la SageMaker IA que permite el entrenamiento de modelos de aprendizaje automático a escala. La herramienta puede gestionar las demandas computacionales de los modelos de entrenamiento de manera eficiente, haciendo uso de la escalabilidad incorporada y la integración con otros Servicios de AWS modelos. SageMaker AI Training también es compatible con algoritmos y contenedores personalizados, lo que la hace flexible para una amplia gama de flujos de trabajo de aprendizaje automático.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

Otras herramientas

  • Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores. Se utilizó en este patrón para garantizar entornos coherentes en varias etapas, desde el desarrollo hasta la implementación, y para empaquetar las dependencias y el código de manera fiable. La contenedorización de Docker permitió un escalado y control de versiones fáciles en el flujo de trabajo.

  • Hydra es una herramienta de administración de la configuración que proporciona flexibilidad para gestionar varias configuraciones y una administración dinámica de los recursos. Es fundamental para administrar las configuraciones del entorno, ya que permite una implementación perfecta en entornos distintos. Para más información acerca de Hydra, consulte Información adicional.

  • Python es un lenguaje de programación informático de uso general. Se utilizó Python para escribir el código de ML y el flujo de trabajo de implementación.

  • Poetry es una herramienta de empaquetado y administración de dependencias de Python.

Repositorio de código

El código de este patrón está disponible en el repositorio GitHub configuring-sagemaker-training-jobs-with-hydra.

Prácticas recomendadas

  • Elija una función de IAM para implementar e iniciar los trabajos de formación en SageMaker IA que siga el principio de privilegios mínimos y conceda los permisos mínimos necesarios para realizar una tarea. Para obtener más información, consulte Otorgar privilegio mínimo y Prácticas recomendadas de seguridad en la documentación de IAM.

  • Utilice credenciales temporales para acceder al rol de IAM en la terminal.

Epics

TareaDescripciónHabilidades requeridas

Cree y active un entorno virtual.

Para crear y activar el entorno virtual, ejecute los comandos siguientes en la raíz del repositorio:

poetry install poetry shell
AWS general

Implemente la infraestructura.

Para implementar la infraestructura mediante CloudFormation, ejecute el siguiente comando:

aws cloudformation deploy --template-file infra/hydra-sagemaker-setup.yaml --stack-name hydra-sagemaker-setup --capabilities CAPABILITY_NAMED_IAM
General AWS, DevOps ingeniero

Descargue de los datos de muestra.

Para descargar los datos de entrada de openml a su equipo local, ejecute el comando siguiente:

python scripts/download_data.py
AWS general

Ejecute localmente para hacer pruebas rápidas.

Para ejecutar el código de entrenamiento de manera local para la prueba, ejecute el comando siguiente:

python mypackage/train.py data.train_data_path=data/train.csv evaluation.base_dir_path=data

Los registros de todas las ejecuciones se almacenan por tiempo de ejecución en una carpeta llamada outputs. Para obtener más información, consulte la sección «Resultados» del GitHub repositorio.

También puede hacer varios entrenamientos en paralelo, con parámetros distintos, mediante la funcionalidad --multirun. Para más detalles, consulte la documentación de Hydra.

Científico de datos
TareaDescripciónHabilidades requeridas

Establezca las variables de entorno.

Para ejecutar tu trabajo con SageMaker IA, establece las siguientes variables de entorno, proporcionando tu ID Región de AWS y tu Cuenta de AWS ID:

export ECR_REPO_NAME=hydra-sm-artifact export image_tag=latest export AWS_REGION="<your_aws_region>" # for instance, us-east-1 export ACCOUNT_ID="<your_account_id>" export BUCKET_NAME_DATA=hydra-sample-data-$ACCOUNT_ID export BUCKET_NAME_CONFIG=hydra-sample-config-$ACCOUNT_ID export AWS_DEFAULT_REGION=$AWS_REGION export ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/hydra-sample-sagemaker export INPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/input/ export OUTPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/output/
AWS general

Cree y envíe la imagen de Docker.

Para crear la imagen de Docker y enviarla al repositorio de Amazon ECR, ejecute los comandos siguientes:

chmod +x scripts/create_and_push_image.sh scripts/create_and_push_image.sh $ECR_REPO_NAME $image_tag $AWS_REGION $ACCOUNT_ID

Esta tarea supone que tiene credenciales válidas en su entorno. La imagen de Docker se envía al repositorio de Amazon ECR especificado en la variable de entorno de la tarea anterior y se utiliza para activar el contenedor de SageMaker IA en el que se ejecutará el trabajo de formación.

Ingeniero de ML, AWS general

Copie los datos de entrada en Amazon S3.

El trabajo de formación en SageMaker IA debe recoger los datos de entrada. Para copiar los datos de entrada al bucket de Amazon S3 para datos, ejecute el comando siguiente:

aws s3 cp data/train.csv "${INPUT_DATA_S3_PATH}train.csv"
Ingeniero de datos, AWS general

Envíe trabajos de formación en SageMaker IA.

Para simplificar la ejecución de sus scripts, especifique los parámetros de configuración predeterminados en el archivo default.yaml. Además de garantizar la coherencia en las ejecuciones, este enfoque también ofrece la flexibilidad de anular fácilmente la configuración predeterminada según sea necesario. Vea el siguiente ejemplo:

python scripts/start_sagemaker_training_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH
AWS general, ingeniero de ML, científico de datos

Ejecute el ajuste de hiperparámetros de la SageMaker IA.

Ejecutar el ajuste de los hiperparámetros de la SageMaker IA es similar a enviar un trabajo de entrenamiento SageMaker de IA. Sin embargo, el script de ejecución difiere en algunos aspectos importantes, como puede ver en el archivo start_sagemaker_hpo_job.py. Los hiperparámetros que se van a ajustar deben pasar por la carga útil del boto3, no por un canal hacia el trabajo de entrenamiento.

Para iniciar el trabajo de optimización de hiperparámetros (HPO), ejecute los comandos siguientes:

python scripts/start_sagemaker_hpo_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH
Científico de datos

Resolución de problemas

ProblemaSolución

Token vencido

Exporte AWS credenciales nuevas.

Falta de permisos de IAM

Asegúrese de exportar las credenciales de un rol de IAM que tenga todos los permisos de IAM necesarios para implementar la CloudFormation plantilla e iniciar los trabajos de formación en SageMaker IA.

Recursos relacionados

Información adicional

Este patrón resuelve los desafíos siguientes:

Coherencia desde el desarrollo local hasta la implementación a escala: con este patrón, los desarrolladores pueden usar el mismo flujo de trabajo, independientemente de si utilizan scripts de Python locales, ejecutan contenedores Docker locales, realizan grandes experimentos con SageMaker IA o despliegan en SageMaker producción con IA. Esta coherencia es importante por los motivos siguientes:

  • Iteración más rápida: permite una experimentación local rápida sin necesidad de hacer ajustes importantes al escalar verticalmente.

  • Sin necesidad de refactorizar: la transición a experimentos de SageMaker IA de mayor envergadura es sencilla y no requiere una revisión de la configuración existente.

  • Mejora continua: desarrollar características nuevas y mejorar de manera continua el algoritmo es sencillo, ya que el código sigue siendo el mismo en todos los entornos.

Administración de la configuración: este patrón utiliza Hydra, una herramienta de administración de la configuración, para ofrecer las ventajas siguientes:

  • Los parámetros se definen en los archivos de configuración, independientes del código.

  • Los conjuntos de parámetros distintos se pueden intercambiar o combinar con facilidad.

  • El seguimiento de los experimentos se simplifica porque la configuración de cada ejecución se registra de manera automática.

  • Los experimentos en la nube pueden utilizar la misma estructura de configuración que las ejecuciones locales, lo que garantiza la coherencia.

Con Hydra, puede administrar la configuración de manera eficaz; para ello, habilite las funciones siguientes:

  • Divida las configuraciones: divida las configuraciones de su proyecto en partes más pequeñas y manejables que se puedan modificar de manera independiente. Este enfoque facilita la gestión de proyectos complejos.

  • Ajuste los valores predeterminados con facilidad: cambie de manera rápida las configuraciones de referencia para que sea más fácil probar nuevas ideas.

  • Alinee las entradas de la CLI y los archivos de configuración: combine las entradas de la línea de comandos con sus archivos de configuración sin problemas. Este enfoque reduce el desorden y la confusión, lo que hace que el proyecto sea más manejable con el tiempo.