Entrenamiento distribuido en Amazon SageMaker AI - Amazon SageMaker AI

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.

Entrenamiento distribuido en Amazon SageMaker AI

SageMaker AI proporciona bibliotecas de entrenamiento distribuido y admite diversas opciones de entrenamiento distribuido para tareas de aprendizaje profundo, como la visión artificial (CV) y el procesamiento de lenguaje natural (NLP). Con las bibliotecas de entrenamiento distribuido de SageMaker AI, puede ejecutar trabajos de entrenamiento de aprendizaje profundo personalizados sumamente escalables y eficaces de paralelismo de datos y paralelismo de modelos. También puede usar otros marcos y paquetes de entrenamiento distribuido, como PyTorch DistributedDataParallel (DDP), torchrun, MPI (mpirun) y el servidor de parámetros. La siguiente sección proporciona información sobre los conceptos fundamentales del entrenamiento distribuido. En toda la documentación, las instrucciones y los ejemplos se centran en cómo configurar las opciones de entrenamiento distribuido para las tareas de aprendizaje profundo con SageMaker Python SDK.

sugerencia

Para obtener información sobre las prácticas recomendadas para la computación distribuida de los trabajos de entrenamiento y procesamiento de machine learning (ML) en general, consulte Computación distribuida con las prácticas recomendadas de SageMaker AI.

Conceptos de entrenamiento distribuido

Las bibliotecas de entrenamiento distribuido de SageMaker AI utilizan los siguientes términos y características de entrenamiento distribuido.

Conjuntos de datos y lotes

  • Conjunto de datos de entrenamiento: todos los datos utilizados para entrenar el modelo.

  • Tamaño del lote global: el número de registros seleccionados del conjunto de datos de entrenamiento en cada iteración para enviarlos a las GPU del clúster. Es el número de registros sobre los que se calcula el gradiente en cada iteración. Si se utiliza el paralelismo de datos, es igual al número total de réplicas del modelo multiplicado por el tamaño del lote por réplica: global batch size = (the number of model replicas) * (per-replica batch size). En la literatura sobre machine learning, a un solo lote del tamaño de un lote global se le suele denominar minilote.

  • Tamaño de lote por réplica: cuando se utiliza el paralelismo de datos, es el número de registros que se envían a cada réplica del modelo. Cada réplica del modelo realiza una pasada hacia adelante y hacia atrás con este lote para calcular las actualizaciones de las ponderaciones. Las actualizaciones de ponderaciones resultantes se sincronizan (se promedian) en todas las réplicas antes de procesar el siguiente conjunto de lotes por réplica.

  • Microlote: un subconjunto del minilote o, si se utiliza un modelo híbrido y un paralelismo de datos, es un subconjunto del lote del tamaño de cada réplica. Al utilizar la biblioteca de paralelismo de modelos distribuidos de SageMaker AI, cada microlote se introduce en la canalización de entrenamiento uno por uno y sigue un programa de ejecución definido por el tiempo de ejecución de la biblioteca.

Entrenamiento

  • Época: un ciclo de entrenamiento que recorre todo el conjunto de datos. Es común tener varias iteraciones por época. El número de épocas que utilice en el entrenamiento es único en su modelo y caso de uso.

  • Iteración: una única pasada hacia adelante y hacia atrás realizada con un lote global (un minilote) de datos de entrenamiento. El número de iteraciones realizadas durante el entrenamiento viene determinado por el tamaño del lote global y el número de épocas utilizadas para el entrenamiento. Por ejemplo, si un conjunto de datos incluye 5000 muestras y utiliza un tamaño de lote global de 500, se necesitarán 10 iteraciones para completar una sola época.

  • Tasa de aprendizaje: variable que influye en la cantidad en que se cambian las ponderaciones en respuesta al error calculado del modelo. La tasa de aprendizaje desempeña un papel importante en la capacidad del modelo para converger, así como en la velocidad y la optimización de la convergencia.

Instancias y GPU

  • Instancias: una instancia de computación de machine learningAWS. También se denominan nodos.

  • Tamaño del clúster: cuando se utiliza la biblioteca de entrenamiento distribuido de SageMaker AI, se trata del número de instancias multiplicado por el número de GPU de cada instancia. Por ejemplo, si utiliza dos instancias ml.p3.8xlarge en un trabajo de entrenamiento, que tienen 4 GPU cada una, el tamaño del clúster es 8. Si bien aumentar el tamaño del clúster puede reducir los tiempos de entrenamiento, la comunicación entre las instancias debe optimizarse; de lo contrario, la comunicación entre los nodos puede aumentar la sobrecarga y reducir los tiempos de entrenamiento. La biblioteca de entrenamiento distribuido de SageMaker AI está diseñada para optimizar la comunicación entre las instancias de computación de Amazon EC2 ML, lo que permite una mayor utilización de los dispositivos, así como tiempos de entrenamiento más rápidos.

Soluciones de entrenamiento distribuido

  • Paralelismo de datos: estrategia de entrenamiento distribuido en la que un conjunto de datos de entrenamiento se divide en varias GPU de un clúster de cómputo, que consta de varias instancias de Amazon EC2 ML. Cada GPU contiene una réplica del modelo, recibe diferentes lotes de datos de entrenamiento, realiza una pasada hacia adelante y hacia atrás y comparte las actualizaciones de ponderaciones con los demás nodos para sincronizarlas antes de pasar al siguiente lote y, finalmente, a otra época.

  • Paralelismo de modelos: estrategia de entrenamiento distribuido en la que el modelo se divide en varias GPU de un clúster de procesamiento, que consta de varias instancias de Amazon EC2 ML. El modelo puede ser complejo y tener un gran número de capas y ponderaciones ocultas, por lo que no cabe en la memoria de una sola instancia. Cada GPU contiene un subconjunto del modelo, a través del cual los datos fluyen y las transformaciones se comparten y compilan. La eficiencia del paralelismo del modelo, en términos de uso de la GPU y tiempo de entrenamiento, depende en gran medida de cómo se parta el modelo y del programa de ejecución utilizado para realizar pasadas hacia adelante y hacia atrás.

  • Programa de ejecución de canalización (canalización): el programa de ejecución de canalización determina el orden en que se realizan los cálculos (microlotes) y se procesan los datos en todos los dispositivos durante el entrenamiento de modelos. La canalización es una técnica para lograr una auténtica paralelización en el paralelismo de modelos y superar la pérdida de rendimiento debida a la computación secuencial, haciendo que las GPU procesen simultáneamente en diferentes muestras de datos. Para obtener más información, consulte el programa de ejecución de canalización.

Conceptos avanzados

Los profesionales del machine learning (ML) suelen enfrentar dos desafíos de escalado a la hora de entrenar modelos:escalando el tamaño del modelo y escalando los datos de entrenamiento. Si bien el tamaño y la complejidad del modelo pueden dar lugar a una mayor precisión, existe un límite en el tamaño del modelo que puede encajar en una única CPU o GPU. Además, escalar el tamaño del modelo puede resultar en más cálculos y tiempos de entrenamiento más largos.

No todos los modelos gestionan el escalado de los datos de entrenamiento igual de bien, ya que necesitan ingerir todos los datos de entrenamiento en memoria para el entrenamiento. Solo se escalan verticalmente y se adaptan a tipos de instancias cada vez más grandes. En la mayoría de los casos, escalar los datos de entrenamiento da como resultado tiempos de entrenamiento más largos.

El aprendizaje profundo (DL) es una familia específica de algoritmos de machine learning que consta de varias capas de redes neuronales artificiales. El método de entrenamiento más común se lleva a cabo con Stochastic Gradient Descent (SGD) en minilotes. En el SGD de minilotes, el modelo se entrena realizando pequeños cambios iterativos de sus coeficientes en la dirección que reduce su error. Dichas iteraciones se llevan a cabo en submuestras del mismo tamaño del conjunto de datos de entrenamiento, denominadas minilotes. Para cada minilote, el modelo se ejecuta en cada registro del minilote, se mide su error y se estima el gradiente del error. A continuación, se mide el gradiente medio en todos los registros del minilote y se proporciona una dirección de actualización para cada coeficiente del modelo. Una revisión completa del conjunto de datos de entrenamiento se denomina época. Los entrenamientos con modelos suelen constar de docenas a cientos de épocas. El SGD en minilotes tiene varias ventajas: en primer lugar, su diseño iterativo hace que el tiempo de entrenamiento sea teóricamente lineal en relación con el tamaño del conjunto de datos. En segundo lugar, en un minilote dado, el modelo procesa cada registro de forma individual sin necesidad de ninguna comunicación entre registros que no sea la media del gradiente final. Por lo tanto, el procesamiento de un minilote es especialmente adecuado para la paralelización y la distribución. 

La paralelización del entrenamiento de SGD mediante la distribución de los registros de un minilote en diferentes dispositivos informáticos se denomina entrenamiento distribuido de paralelismo de datos y es el paradigma de distribución de aprendizaje profundo más utilizado. El entrenamiento de paralelismo de datos es una estrategia de distribución relevante para escalar el tamaño del minilote y procesar cada minilote más rápido. Sin embargo, el entrenamiento de paralelismo de datos conlleva la complejidad adicional de tener que calcular el promedio de gradiente en minillotes con gradientes procedentes de todos los trabajadores y comunicárselo a todos los trabajadores, un paso llamado allreduce que puede representar una sobrecarga creciente, a medida que se escala el grupo de entrenamiento, y que también puede penalizar drásticamente el tiempo de entrenamiento si se implementa o implementa incorrectamente sobre sustracciones de hardware inadecuadas. 

El SGD de paralelismo de datos aún requiere que los desarrolladores puedan colocar al menos el modelo y un único registro en un dispositivo informático, como una sola CPU o GPU. Al entrenar modelos muy grandes, como transformadores grandes en el procesamiento del lenguaje natural (NLP) o modelos de segmentación sobre imágenes de alta resolución, puede haber situaciones en las que esto no sea posible. Una forma alternativa de dividir la carga de trabajo es partir el modelo en varios dispositivos informáticos, un enfoque denominado entrenamiento distribuido con una estrategia paralela modelo.