Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Mejore el rendimiento de los precios del entrenamiento de su modelo con clústeres heterogéneos de Amazon SageMaker

Esta publicación está coescrita con Chaim Rand de Mobileye.

Ciertas cargas de trabajo de aprendizaje automático (ML), como el entrenamiento de modelos de visión por computadora o el aprendizaje por refuerzo, a menudo implican combinar la tarea intensiva de GPU o acelerador del entrenamiento del modelo de red neuronal con la tarea intensiva de CPU de preprocesamiento de datos, como el aumento de imágenes. Cuando ambos tipos de tareas se ejecutan en el mismo tipo de instancia, el preprocesamiento de datos se embotella en la CPU, lo que lleva a una menor utilización de la GPU. Este problema empeora con el tiempo, ya que el rendimiento de las nuevas generaciones de GPU crece a un ritmo más acelerado que el de las CPU.

Para abordar este problema, en julio de 2022, lanzado grupos heterogéneos para Amazon SageMaker entrenamiento de modelos, que le permite iniciar trabajos de entrenamiento que usan diferentes tipos de instancias en un solo trabajo. Esto permite descargar partes de la canalización de preprocesamiento de datos para optimizado para computación tipos de instancia, mientras que la tarea de red neuronal profunda (DNN) continúa ejecutándose en GPU o computación acelerada tipos de instancia. Nuestros puntos de referencia muestran una ventaja de rendimiento de precio de hasta un 46 % después de habilitar clústeres heterogéneos en un entrenamiento de modelo de visión artificial TensorFlow vinculado a la CPU.

Para un caso de uso similar, Mobileye, una empresa de desarrollo de tecnologías de vehículos autónomos, compartió lo siguiente:

“Al mover el entrenamiento del modelo de visión por computadora de aprendizaje profundo vinculado a la CPU para que se ejecute en múltiples tipos de instancias (aceleradores de CPU y GPU/ML), usando un tf.data.service basada en la solución que hemos creado, logramos reducir el tiempo de capacitación en un 40 % y al mismo tiempo reducir el costo de capacitación en un 30 %. Estamos entusiasmados con los clústeres heterogéneos que nos permiten ejecutar esta solución en Amazon SageMaker”.

— Ingeniería de IA, Mobileye

En esta publicación, tratamos los siguientes temas:

  • Cómo ayudan los clústeres heterogéneos a eliminar los cuellos de botella de la CPU
  • Cuándo usar clústeres heterogéneos y otras alternativas
  • Implementaciones de referencia en PyTorch y TensorFlow
  • Resultados de referencia de rendimiento
  • Clústeres heterogéneos en Mobileye

AWS instancia de computación acelerada La familia incluye aceleradores de chips personalizados de AWS (Inferencia de AWS, tren de AWS), NVIDIA (GPU), o Aceleradores Gaudí de Habana Labs (una empresa de Intel). Tenga en cuenta que en esta publicación, usamos los términos GPU y acelerador indistintamente.

Cómo los clústeres heterogéneos eliminan los cuellos de botella en el procesamiento de datos

Los científicos de datos que entrenan modelos de aprendizaje profundo tienen como objetivo maximizar la rentabilidad de la capacitación y minimizar el tiempo de capacitación. Para lograr esto, un objetivo de optimización básico es tener una alta utilización de GPU, el recurso más caro y escaso dentro de la Nube informática elástica de Amazon (Amazon EC2) instancia. Esto puede ser más desafiante con las cargas de trabajo de ML que combinan la propagación hacia adelante y hacia atrás del modelo clásico de red neuronal intensiva en GPU con tareas intensivas en CPU, como el procesamiento de datos y el aumento en la visión artificial o la ejecución de una simulación de entorno en el aprendizaje por refuerzo. Estas cargas de trabajo pueden terminar limitadas a la CPU, donde tener más CPU daría como resultado un mayor rendimiento y una capacitación más rápida y económica, ya que los aceleradores existentes están parcialmente inactivos. En algunos casos, los cuellos de botella de la CPU se pueden resolver cambiando a otro tipo de instancia con una relación CPU:GPU más alta. Sin embargo, hay situaciones en las que puede que no sea posible cambiar a otro tipo de instancia debido a la arquitectura, el almacenamiento o las dependencias de red de la familia de instancias.

En tales situaciones, debe aumentar la cantidad de potencia de la CPU mezclando tipos de instancias: instancias con GPU junto con CPU. En conjunto, esto da como resultado una relación CPU:GPU más alta en general. Hasta hace poco, los trabajos de capacitación de SageMaker se limitaban a tener instancias de un solo tipo de instancia elegido. Con los clústeres heterogéneos de SageMaker, los científicos de datos pueden ejecutar fácilmente un trabajo de entrenamiento con varios tipos de instancias, lo que permite descargar algunas de las tareas de CPU existentes de las instancias de GPU a instancias de CPU optimizadas para computación dedicadas, lo que da como resultado una mayor utilización de GPU y una mayor rapidez y rentabilidad. entrenamiento eficiente. Además, con la potencia adicional de la CPU, puede hacer que las tareas de preprocesamiento que tradicionalmente se realizaban fuera de línea como un paso preliminar para la capacitación se conviertan en parte de su trabajo de capacitación. Esto hace que sea más rápido iterar y experimentar sobre el preprocesamiento de datos y las suposiciones e hiperparámetros de entrenamiento de DNN.

Por ejemplo, considere un tipo de instancia de GPU potente, ml.p4d.24xlarge (96 vCPU, 8 x NVIDIA A100 GPU), con una relación CPU:GPU de 12:1. Supongamos que su trabajo de capacitación necesita 20 vCPU para preprocesar suficientes datos para mantener una GPU utilizada al 100 %. Por lo tanto, para mantener las 8 GPU utilizadas al 100 %, necesita un tipo de instancia de 160 vCPU. Sin embargo, a ml.p4d.24xlarge le faltan 64 vCPU, o el 40 %, lo que limita el uso de la GPU al 60 %, como se muestra a la izquierda del siguiente diagrama. ¿Ayudaría agregar otra instancia ml.p4d.24xlarge? No, porque la relación CPU:GPU del trabajo seguiría siendo la misma.

Con clústeres heterogéneos, podemos agregar dos ml.c5.18xlarge (72 vCPU), como se muestra a la derecha del diagrama. El vCPU total neto en este clúster es 210 (96+2*72), lo que lleva a una relación CPU:GPU de 30:1. Cada una de estas instancias optimizadas para computación se descargará con una tarea de uso intensivo de CPU de preprocesamiento de datos y permitirá una utilización eficiente de GPU. A pesar del costo adicional del ml.c5.18xlarge, la mayor utilización de GPU permite un procesamiento más rápido y, por lo tanto, beneficios de rendimiento de precio más altos.

Cuándo usar clústeres heterogéneos y otras alternativas

En esta sección, explicamos cómo identificar un cuello de botella de CPU y analizamos cómo resolverlo mediante el escalado vertical del tipo de instancia frente a los clústeres heterogéneos.

La forma rápida de identificar un cuello de botella en la CPU es monitorear la CPU y la GPU métricas de utilización para trabajos de capacitación de SageMaker en Reloj en la nube de Amazon. Puede acceder a estas vistas desde el Consola de administración de AWS dentro del hipervínculo de métricas de instancia de la página de trabajo de capacitación. Elija las métricas relevantes y cambie de resolución de 5 minutos a 1 minuto. Tenga en cuenta que la escala es del 100 % por vCPU o GPU, por lo que la tasa de uso de una instancia con 4 vCPU/GPU podría llegar al 400 %. La siguiente figura es un ejemplo de las métricas de CloudWatch, donde la CPU se utiliza aproximadamente al 100 %, lo que indica un cuello de botella de la CPU, mientras que la GPU está infrautilizada.

Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Para un diagnóstico detallado, ejecute los trabajos de entrenamiento con Depurador de Amazon SageMaker para perfilar el estado de utilización de los recursos, las estadísticas y las operaciones del marco, agregando una configuración de generador de perfiles cuando construye un estimador de SageMaker utilizando SageMaker Python SDK. Después de enviar el trabajo de entrenamiento, revise el resultado informe del generador de perfiles para los cuellos de botella de la CPU.

Si llega a la conclusión de que su trabajo podría beneficiarse de una relación de cómputo CPU:GPU más alta, primero considere escalar a otro tipo de instancia en la misma familia de instancias, si hay alguna disponible. Por ejemplo, si está entrenando su modelo en ml.g5.8xlarge (32 vCPU, 1 GPU), considere ampliarlo a ml.g5.16xlarge (64 vCPU, 1 GPU). O bien, si está entrenando su modelo con la instancia multi-GPU ml.g5.12xlarge (48 vCPU, 4 GPU), considere escalar hasta ml.g5.24xlarge (96 vCPU, 4 GPU). Referirse a G5 especificación de la familia de instancias para obtener más detalles.

A veces, la ampliación no es una opción, porque no hay ningún tipo de instancia con una proporción de vCPU:GPU más alta en la misma familia de instancias. Por ejemplo, si está entrenando el modelo en ml.trn1.32xlarge, ml.p4d.24xlarge o ml.g5.48xlarge, debe considerar los clústeres heterogéneos para el entrenamiento del modelo de SageMaker.

Además de la ampliación, nos gustaría señalar que existen alternativas adicionales a un clúster heterogéneo, como NVIDIA DALI, que descarga el preprocesamiento de imágenes a la GPU. Para obtener más información, consulte Superación de los cuellos de botella del preprocesamiento de datos con TensorFlow Data Service, NVIDIA DALI y otros métodos.

Para simplificar la toma de decisiones, consulte el siguiente diagrama de flujo.

Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Cómo utilizar los clústeres heterogéneos de SageMaker

Para comenzar rápidamente, puede saltar directamente a los ejemplos de TensorFlow o PyTorch proporcionados como parte de esta publicación.

En esta sección, lo explicamos cómo usar un clúster heterogéneo de SageMaker con un ejemplo simple. Suponemos que ya sabe cómo entrenar un modelo con SageMaker Python SDK y la clase Estimator. Si no, consulte Uso del SDK de Python de SageMaker Antes de continuar.

Antes de esta función, inicializaba la clase Estimator del trabajo de entrenamiento con el InstanceCount y los parámetros InstanceType, que suponen implícitamente que solo tiene un único tipo de instancia (un clúster homogéneo). Con el lanzamiento de clústeres heterogéneos, presentamos el nuevo sagemaker.instance_group.InstanceGroup clase. Esto representa un grupo de una o más instancias de un tipo de instancia específico, diseñado para cumplir una función lógica (como el procesamiento de datos o la optimización de redes neuronales). Puede tener dos o más grupos y especificar un nombre personalizado para cada grupo de instancias, la instancia tipo y el número de instancias para cada grupo de instancias. Para obtener más información, consulte Uso del SDK de Python de SageMaker y Uso de las API de SageMaker de bajo nivel.

Una vez que haya definido los grupos de instancias, debe modificar su secuencia de comandos de capacitación para leer SageMaker información del entorno de entrenamiento que incluye una configuración de clúster heterogénea. La configuración contiene información como los grupos de instancias actuales, los hosts actuales en cada grupo y en qué grupo reside el host actual con su clasificación. Puede crear lógica en su secuencia de comandos de entrenamiento para asignar los grupos de instancias a determinadas tareas de entrenamiento y procesamiento de datos. Además, su secuencia de comandos de capacitación debe cuidar la comunicación de grupos entre instancias o los mecanismos de carga de datos distribuidos (por ejemplo, tf.servicio.de.datos en TensorFlow o genérico cliente-servidor gRPC) o cualquier otro marco (por ejemplo, Apache Spark).

Veamos un ejemplo simple de iniciar un trabajo de entrenamiento heterogéneo y leer la configuración del entorno en tiempo de ejecución.

  1. Al definir y lanzar el trabajo de entrenamiento, configuramos dos grupos de instancias que se usan como argumentos para el estimador de SageMaker:
    from sagemaker.instance_group import InstanceGroup
    data_group = InstanceGroup("data_group", "ml.c5.18xlarge", 2)
    dnn_group = InstanceGroup("dnn_group", "ml.p4d.24xlarge", 1)
    
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(...,
        entry_point='launcher.py',
        instance_groups=[data_group, dnn_group]
    )
  2. En el script de entrenamiento del punto de entrada (llamado launcher.py), leemos la configuración heterogénea del clúster para determinar si la instancia ejecutará el preprocesamiento o el código DNN:
    from sagemaker_training import environment
    env = environment.Environment()
    if env.current_instance_group == 'data_group': ...;

Con esto, resumamos las tareas que SageMaker realiza en su nombre y las tareas de las que es responsable.

SageMaker realiza las siguientes tareas:

  1. Aprovisione diferentes tipos de instancias según la definición del grupo de instancias.
  2. Aprovisiona canales de entrada en todos los grupos de instancias o en grupos específicos.
  3. Distribuya scripts de entrenamiento y dependencias a las instancias.
  4. Configura un clúster de MPI en un grupo de instancias específico, si está definido.

Usted es responsable de las siguientes tareas:

  1. Modifique su script de trabajo de inicio de entrenamiento para especificar grupos de instancias.
  2. Implementar una canalización de datos distribuidos (por ejemplo, tf.data.service).
  3. Modifique su script de punto de entrada (ver launcher.py en el cuaderno de ejemplo) para que sea un único punto de entrada que se ejecutará en todas las instancias, detectará en qué grupo de instancias se está ejecutando y activará el comportamiento relevante (como el procesamiento de datos o la optimización de DNN).
  4. Cuando termine el ciclo de entrenamiento, debe asegurarse de que su proceso de punto de entrada finalice en todas las instancias en todos los grupos de instancias. Esto es importante porque SageMaker espera a que todas las instancias terminen de procesarse antes de marcar el trabajo como completo y dejar de facturar. los launcher.py La secuencia de comandos en los cuadernos de ejemplo de TensorFlow y PyTorch proporciona una implementación de referencia de instancias de grupos de datos de señalización para salir cuando las instancias de grupos de DNN terminan su trabajo.

Blocs de notas de ejemplo para clústeres heterogéneos de SageMaker

En esta sección ofrecemos un resumen de los ejemplo cuadernos para los marcos TensorFlow y PyTorch ML. En los cuadernos, puede encontrar los detalles de implementación, tutoriales sobre cómo funciona el código, fragmentos de código que podría reutilizar en sus scripts de capacitación, diagramas de flujo y análisis de comparación de costos.

Tenga en cuenta que en ambos ejemplos, no debe esperar que el modelo converja de manera significativa. Nuestra intención es solo medir la canalización de datos y el rendimiento de optimización de la red neuronal expresado en época/tiempo de paso. Debe comparar con su propio modelo y conjunto de datos para producir beneficios de rendimiento de precio que coincidan con su carga de trabajo.

Clúster heterogéneo que utiliza un cargador de datos distribuido basado en tf.data.service (TensorFlow)

Este cuaderno demuestra cómo implementar un clúster heterogéneo para el entrenamiento de SageMaker usando TensorFlow tf.data.service tubería de datos distribuida basada. Entrenamos un modelo de visión artificial de aprendizaje profundo Resnet50 que requiere un aumento de datos con uso intensivo de la CPU. Usa Horvod para paralelismo de datos distribuidos multi-GPU.

Ejecutamos la carga de trabajo en dos configuraciones: primero como un clúster homogéneo, instancia única ml.p4d.24xlarge, usando un estándar tf.data canalización que muestra los cuellos de botella de la CPU que conducen a una menor utilización de la GPU. En la segunda ejecución, cambiamos de un tipo de instancia única a dos grupos de instancias mediante un clúster heterogéneo de SageMaker. Esta ejecución descarga parte del procesamiento de datos a instancias de CPU adicionales (usando tf.data.service).

Luego comparamos las configuraciones homogéneas y heterogéneas y encontramos beneficios clave de rendimiento de precio. Como se muestra en la siguiente tabla, el trabajo heterogéneo (86 ms/paso) es 2.2 veces más rápido de entrenar que el trabajo homogéneo (192 ms/paso), lo que hace que entrenar un modelo sea un 46 % más económico.

Ejemplo 1 (TF) ml.p4d.24xl ml.c5.18xl Precio por Hora* Tiempo de paso promedio Costo por paso Mejora del rendimiento de precios
Homogéneo 1 0 $37.688 192 ms $0.201 .
Heterogéneo 1 2 $45.032 86 ms $0.108 46%

* El precio por hora se basa en us-east-1 Precios bajo demanda de SageMaker

Esta aceleración es posible gracias a la utilización de la vCPU adicional, proporcionada por el grupo de datos, y un preprocesamiento más rápido. Ver el cuaderno para más detalles y gráficos.

Clúster heterogéneo que usa un cargador de datos distribuidos (PyTorch) basado en cliente-servidor de gRPC

Este cuaderno muestra una carga de trabajo de muestra usando un clúster heterogéneo para el entrenamiento de SageMaker usando un cargador de datos distribuidos basado en cliente-servidor de gRPC. Este ejemplo utiliza una sola GPU. Usamos el modelo PyTorch basado en lo siguiente ejemplo oficial del MNIST. El código de entrenamiento ha sido modificado para ser pesado en el preprocesamiento de datos. Entrenamos este modelo en modos de clúster tanto homogéneos como heterogéneos, y comparamos el rendimiento del precio.

En este ejemplo, asumimos que la carga de trabajo no puede beneficiarse de varias GPU y depende de una arquitectura de GPU específica (NVIDIA V100). Ejecutamos trabajos de capacitación tanto homogéneos como heterogéneos, y encontramos beneficios clave de rendimiento de precios, como se muestra en la siguiente tabla. El trabajo heterogéneo (1.19 s/paso) es 6.5 veces más rápido de entrenar que el trabajo homogéneo (0.18 s/paso), lo que hace que sea un 77 % más barato entrenar un modelo.

Ejemplo 2 (PT) ml.p3.2xl ml.c5.9xl Precio por Hora* Tiempo de paso promedio Costo por paso Mejora del rendimiento de precios
Homogéneo 1 0 $3.825 1193 ms $0.127 .
Heterogéneo 1 1 $5.661 184 ms $0.029 77%

* El precio por hora se basa en us-east-1 Precios bajo demanda de SageMaker

Esto es posible porque con una mayor cantidad de CPU, podríamos usar 32 trabajadores del cargador de datos (en comparación con 8 con ml.p3.2xlarge) para preprocesar los datos y mantener la GPU cerca del 100 % utilizada en intervalos frecuentes. Ver el cuaderno para más detalles y gráficos.

Clústeres heterogéneos en Mobileye

Mobileye, una empresa de Intel, desarrolla sistemas avanzados de asistencia al conductor (ADAS) y tecnologías de vehículos autónomos con el objetivo de revolucionar la industria del transporte, hacer que las carreteras sean más seguras y salvar vidas. Estas tecnologías se habilitan mediante modelos sofisticados de visión artificial (CV) que se entrenan mediante SageMaker en grandes cantidades de datos almacenados en Servicio de almacenamiento simple de Amazon (Amazon S3). Estos modelos utilizan técnicas de redes neuronales de aprendizaje profundo de última generación.

Nos dimos cuenta de que, para uno de nuestros modelos de CV, el cuello de botella de la CPU se debía principalmente a un gran procesamiento previo de datos que generaba GPU infrautilizadas. Para esta carga de trabajo específica, comenzamos a buscar soluciones alternativas, evaluamos tecnologías de canalización de datos distribuidos con clústeres heterogéneos basados ​​en instancias EC2 y obtuvimos implementaciones de referencia para ambos TensorFlow y PyTorch. El lanzamiento del clúster heterogéneo de SageMaker nos permite ejecutar esta y otras cargas de trabajo similares en SageMaker para lograr mejores beneficios de rendimiento de precio.

Consideraciones

Con el lanzamiento de la función de clúster heterogéneo, SageMaker ofrece mucha más flexibilidad para mezclar y combinar tipos de instancias dentro de su trabajo de capacitación. Sin embargo, tenga en cuenta lo siguiente cuando utilice esta función:

  • La función de clúster heterogéneo está disponible a través de SageMaker PyTorch y TensorFlow clases de estimador marco. Los marcos compatibles son PyTorch v1.10 o posterior y TensorFlow v2.6 o posterior.
  • Todos los grupos de instancias comparten la misma imagen de Docker.
  • Todos los grupos de instancias comparten el mismo script de entrenamiento. Por lo tanto, su secuencia de comandos de entrenamiento debe modificarse para detectar a qué grupo de instancias pertenece y la bifurcación se ejecuta en consecuencia.
  • Los nombres de host de las instancias de entrenamiento (por ejemplo, alog-1, algo-2, etc.) se asignan aleatoriamente y no indican a qué grupo de instancias pertenecen. Para obtener la función de la instancia, recomendamos obtener su membresía del grupo de instancias durante el tiempo de ejecución. Esto también es relevante al revisar los registros en Vigilancia de la nube, porque el nombre del flujo de registro [training-job-name]/algo-[instance-number-in-cluster]-[epoch_timestamp] tiene el nombre de host.
  • Una estrategia de capacitación distribuida (por lo general, un clúster de MPI) solo se puede aplicar a un grupo de instancias.
  • SageMaker Piscinas templadas gestionadas y SageMaker Modo local actualmente no se puede usar con entrenamiento de grupos heterogéneos.

Conclusión

En esta publicación, discutimos cuándo y cómo usar la función de clúster heterogéneo de la capacitación de SageMaker. Demostramos una mejora del rendimiento del precio del 46 % en un caso de uso del mundo real y lo ayudamos a comenzar rápidamente con el cargador de datos distribuidos (tf.data.service y gRPC cliente-servidor) implementaciones. Puede usar estas implementaciones con cambios mínimos de código en sus scripts de entrenamiento existentes.

Para empezar, pruebe nuestro ejemplo cuadernos. Para obtener más información sobre esta función, consulte Entrenar usando un clúster heterogéneo.


Sobre los autores

Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.gili nachum es un arquitecto sénior de soluciones especializado en inteligencia artificial y aprendizaje automático que trabaja como parte del equipo de Amazon Machine Learning de EMEA. A Gili le apasionan los desafíos de entrenar modelos de aprendizaje profundo y cómo el aprendizaje automático está cambiando el mundo tal como lo conocemos. En su tiempo libre, a Gili le gusta jugar al tenis de mesa.

Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Hrushikesh Gangur es un arquitecto principal de soluciones para startups de IA/ML con experiencia tanto en formación de ML como en redes de AWS. Ayuda a las empresas emergentes en tecnologías de automatización de procesos de robótica, robótica, vehículos autónomos, CV, NLP, MLOps, plataforma ML y robótica para ejecutar su negocio de manera eficiente y efectiva en AWS. Antes de unirse a AWS, Hrushikesh adquirió más de 20 años de experiencia en la industria, principalmente en plataformas de datos y nube.

Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.gal oshri es gerente sénior de productos en el equipo de Amazon SageMaker. Tiene 7 años de experiencia trabajando en herramientas, marcos y servicios de Machine Learning.

Mejore el rendimiento de los precios del entrenamiento de su modelo con los clústeres heterogéneos de Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Chaim Rand es un desarrollador de algoritmos de aprendizaje automático que trabaja en tecnologías de aprendizaje profundo y visión artificial para soluciones de vehículos autónomos en Mobileye, una empresa de Intel. echa un vistazo a su Blogs.

Sello de tiempo:

Mas de Aprendizaje automático de AWS