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.
El entrenamiento distribuido suele dividirse en dos enfoques: paralelismo de datos y paralelismo de modelos. Los datos paralelos son el enfoque más común para el entrenamiento distribuido: se tienen muchos datos, se agrupan y se envían bloques de datos a varios CPUs o GPUs (nodos) para que los procese la red neuronal o el algoritmo de aprendizaje automático y, a continuación, se combinan los resultados. La red neuronal es la misma en todos los nodos. El enfoque de paralelismo de modelos se utiliza con modelos grandes que no caben en la memoria de un nodo de una sola pieza; divide el modelo y coloca diferentes partes en diferentes nodos. En esta situación, es necesario enviar los lotes de datos a cada nodo para que los datos se procesen en todas las partes del modelo.
Los términos red y modelo suelen usarse indistintamente: un modelo grande es en realidad una red grande con muchas capas y parámetros. El entrenamiento con una red grande produce un modelo grande, y la carga del modelo de nuevo en la red con todos sus parámetros preentrenados y sus ponderaciones carga un modelo grande en la memoria. Cuando divide un modelo en nodos, también divide la red subyacente. Una red se compone de capas y, para dividirla, se colocan capas en diferentes dispositivos de procesamiento.
Un error común de dividir las capas entre los dispositivos de forma ingenua es la grave infrautilización de la GPU. El entrenamiento es inherentemente secuencial tanto en las pasadas hacia adelante como hacia atrás y, en un momento dado, solo una GPU puede realizar el procesamiento activo, mientras que las demás esperan a que se envíen las activaciones. Las bibliotecas paralelas de modelos modernos resuelven este problema mediante el uso de programas de ejecución de canalizaciones para mejorar la utilización de los dispositivos. Sin embargo, solo la biblioteca paralela de modelos distribuidos de Amazon SageMaker AI incluye la división automática de modelos. Las dos características principales de la biblioteca, la división automática de modelos y la programación de ejecución de canalización, simplifican el proceso de implementación del paralelismo de modelos al tomar decisiones automatizadas que conducen a una utilización eficiente del dispositivo.
Entrenamiento con paralelismo de datos y paralelismo de modelos
Si está entrenando con un conjunto de datos grande, comience con un enfoque de paralelismo de datos. Si se queda sin memoria durante el entrenamiento, es posible que quiera cambiar a un enfoque de paralelismo de modelos o probar el paralelismo híbrido de datos y modelos. También puede intentar lo siguiente para mejorar el rendimiento con el paralelismo de datos.
-
Cambiar los hiperparámetros de su modelo.
-
Reducir el tamaño del lote.
-
Seguir reduciendo el tamaño del lote hasta que tenga suficiente memoria. Si reduce el tamaño del lote a 1 y aun así se queda sin memoria, debería intentar el entrenamiento de paralelismo de modelos.
Pruebe la compresión de gradiente (FP16, INT8):
-
En el TensorCore hardware equipado con NVIDIA, el uso de un entrenamiento de precisión mixto
acelera y reduce el consumo de memoria. -
SageMaker La biblioteca de paralelismo de datos distribuidos de AI es compatible con la precisión mixta automática (AMP) desde el primer momento. No se necesita ninguna acción adicional para habilitar AMP que no sean las modificaciones a nivel de marco de su script de entrenamiento. Si los gradientes están activados FP16, la biblioteca de paralelismo de datos de SageMaker IA ejecuta su operación en ella.
AllReduce
FP16 Para obtener más información sobre cómo implementar AMP APIs en tu guion de entrenamiento, consulta los siguientes recursos:-
Marcos: PyTorch
en la documentación de rendimiento del aprendizaje profundo de NVIDIA -
Marcos: TensorFlow
en la documentación sobre el rendimiento del aprendizaje profundo de NVIDIA -
Precisión mixta automática para aprendizaje profundo
en los Documentos para desarrolladores de NVIDIA -
En el PyTorch blog presentamos la precisión mixta PyTorch automática nativa para un entrenamiento más rápido con NVIDIA GPUs
-
TensorFlow precisión mixta APIs
en la TensorFlowdocumentación
-
Intente reducir el tamaño de la entrada:
-
Reduzca la longitud de la secuencia de PNL si aumenta el enlace de la secuencia, si necesita ajustar el tamaño del lote hacia abajo o ajustarlo hacia GPUs arriba para repartir el lote.
-
Reduzca la resolución de la imagen.
Compruebe si utiliza la normalización por lotes, ya que esto puede afectar a la convergencia. Al utilizar la formación distribuida, el lote se divide GPUs y el efecto de un tamaño de lote mucho menor puede provocar una mayor tasa de error, lo que impide la convergencia del modelo. Por ejemplo, si creaste un prototipo de tu red en una sola GPU con un tamaño de lote de 64 y luego la ampliaste hasta usar cuatro p3dn.24xlarge, ahora tienes 32 GPUs y el tamaño del lote por GPU se reduce de 64 a 2. Es probable que esto rompa la convergencia que pudo observar con un solo nodo.
Comience con el entrenamiento de paralelismo de modelos cuando:
-
Su modelo no quepa en un solo dispositivo.
-
Debido al tamaño del modelo, experimentará limitaciones a la hora de elegir tamaños de lote más grandes, por ejemplo, si el peso del modelo ocupa la mayor parte de la memoria de la GPU y tiene que elegir un tamaño de lote más pequeño y subóptimo.
Para obtener más información sobre las bibliotecas distribuidas de IA, consulta lo siguiente: SageMaker