Introducción a la biblioteca de paralelismo de datos distribuidos de 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.

Introducción a la biblioteca de paralelismo de datos distribuidos de SageMaker AI

La biblioteca de paralelismo de datos distribuidos de SageMaker AI (SMDDP) es una biblioteca de comunicación colectiva que mejora el rendimiento de computación del entrenamiento de paralelismo de datos distribuidos. La biblioteca de SMDDP aborda la sobrecarga de comunicaciones de las principales operaciones de comunicación colectiva ofreciendo lo siguiente.

  1. La biblioteca ofrece AllReduce optimizado para AWS. AllReduce es una operación clave que se utiliza para sincronizar los gradientes entre las GPU al final de cada iteración de entrenamiento durante el entrenamiento de datos distribuidos.

  2. La biblioteca ofrece AllGather optimizado para AWS. AllGather es otra operación clave utilizada en el entrenamiento de paralelismo de datos particionados, que es una técnica de paralelismo de datos eficiente en términos de memoria que ofrecen bibliotecas muy utilizadas, como la biblioteca de paralelismo de modelos de SageMaker AI (SMP), optimizador de redundancia cero (ZeRO) de DeepSpeed y paralelismo de datos totalmente particionados (FSDP) de PyTorch.

  3. La biblioteca realiza una comunicación optimizada de nodo a nodo utilizando por completo la infraestructura de red de AWS y la topología de instancias de Amazon EC2.

La biblioteca de SMDDP puede aumentar la velocidad de entrenamiento ofreciendo una mejora del rendimiento a medida que escala el clúster de entrenamiento, con una eficiencia de escalado casi lineal.

nota

Las bibliotecas de entrenamiento distribuidas de SageMaker AI están disponibles a través de los contenedores de aprendizaje profundo de AWS para PyTorch y Hugging Face en la plataforma de entrenamiento de SageMaker. Para utilizar las bibliotecas, debe utilizar el SageMaker Python SDK o las API de SageMaker a través del SDK para Python (Boto3) o AWS Command Line Interface. En toda de la documentación, las instrucciones y los ejemplos se centran en cómo utilizar las bibliotecas de entrenamiento distribuido con el SageMaker Python SDK.

Operaciones de comunicación colectiva de SMDDP optimizadas para los recursos de computación y la infraestructura de red de AWS

La biblioteca de SMDDP proporciona implementaciones y operaciones colectivas AllReduce y AllGather optimizadas para los recursos de computación y la infraestructura de red de AWS.

Operación colectiva AllReduce de SMDDP

La biblioteca de SMDDP consigue una superposición óptima de la operación AllReduce con la transferencia hacia atrás, lo que mejora significativamente el uso de la GPU. Consigue una eficiencia de escalado casi lineal y una velocidad de entrenamiento más rápida optimizando las operaciones del kernel entre CPU y GPU. La biblioteca ejecuta AllReduce en paralelo mientras la GPU calcula gradientes sin quitar ciclos de GPU adicionales, lo que permite que la biblioteca consiga un entrenamiento más rápido.

  • Aprovecha las CPU: la biblioteca utiliza CPU para gradientes AllReduce, descargando esta tarea de las GPU.

  • Uso mejorado de la GPU: las GPU del clúster se centran en los gradientes informáticos, mejorando su utilización durante toda el entrenamiento.

Este es el flujo de trabajo de alto nivel de la operación AllReduce de SMDDP.

  1. La biblioteca asigna rangos a las GPU (trabajadores).

  2. En cada iteración, la biblioteca divide cada lote global entre el número total de trabajadores (tamaño mundial) y asigna pequeños lotes (fragmentos por lotes) a los trabajadores.

    • El tamaño del lote global es (number of nodes in a cluster) * (number of GPUs per node) * (per batch shard).

    • Un fragmento por lotes (lote pequeño) es un subconjunto de conjuntos de datos asignado a cada GPU (trabajador) por iteración.

  3. La biblioteca lanza un script de entrenamiento para cada trabajador.

  4. La biblioteca administra copias de los pesos y degradados del modelo de los trabajadores al final de cada iteración.

  5. La biblioteca sincroniza los pesos y degradados del modelo entre los trabajadores para agregar un solo modelo entrenado.

El siguiente diagrama de arquitectura muestra un ejemplo de cómo la biblioteca configura el paralelismo de datos para un clúster de 3 nodos.

Diagrama de la arquitectura de paralelismo de datos y AllReduce de SMDDP

Operación colectiva AllGather de SMDDP

AllGather es una operación colectiva en la que cada trabajador comienza con un búfer de entrada y, a continuación, concatena o reúne los búferes de entrada de todos los demás trabajadores en un búfer de salida.

nota

La operación colectiva AllGather de SMDDP está disponible en contenedores de aprendizaje profundo (DLC) de smdistributed-dataparallel>=2.0.1 y AWS para PyTorch v2.0.1 y versiones posteriores.

AllGather se utiliza mucho en técnicas de entrenamiento distribuido, como el paralelismo de datos particionados, en el que cada trabajador individual tiene una fracción de un modelo o una capa particionada. Los trabajadores llaman a AllGather antes de las transferencias hacia delante y hacia atrás para reconstruir las capas particionadas. Las transferencias hacia adelante y hacia atrás continúan hacia delante una vez recopilados todos los parámetros. Durante la transferencia hacia atrás, cada trabajador también llama a ReduceScatter para recolectar (reducir) los gradientes y dividirlos (dispersarlos) en particiones de gradiente para actualizar la capa particionada correspondiente. Para obtener más detalles sobre el papel de estas operaciones colectivas en el paralelismo de datos particionados, consulte la Implementación de la biblioteca de SMP de paralelismo de datos particionados, ZeRO en la documentación de DeepSpeed y el blog sobre paralelismo de datos totalmente particionados de PyTorch.

Dado que se llama a operaciones colectivas como AllGather en todas las iteraciones, son las que más contribuyen a la sobrecarga de comunicación de la GPU. Un cálculo más rápido de estas operaciones colectivas se traduce directamente en un tiempo de entrenamiento más corto sin efectos secundarios sobre la convergencia. Para lograrlo, la biblioteca de SMDDP ofrece AllGather optimizado para instancias P4d.

AllGather de SMDDP utiliza las siguientes técnicas para mejorar el rendimiento de computación en las instancias P4d.

  1. Transfiere datos entre instancias (entre nodos) a través de la red Elastic Fabric Adapter (EFA) con topología de malla. EFA es la solución de red de baja latencia y alto rendimiento de AWS. Una topología en malla para la comunicación de red entre nodos se adapta mejor a las características de EFA y de la infraestructura de red de AWS. En comparación con la topología en anillo o árbol de NCCL, que implica varios saltos de paquetes, SMDDP evita la acumulación de latencia con varios saltos, ya que solo necesita un salto. SMDDP implementa un algoritmo de control de velocidad de red que equilibra la carga de trabajo de cada nivel de comunicación en una topología de malla y consigue un mayor rendimiento de la red global.

  2. Adopta una biblioteca de copias en memoria de GPU de baja latencia basada en tecnología NVIDIA GPUDirect RDMA (GDRCopy) para coordinar el tráfico de red local de NVLink y EFA. GDRCopy, una biblioteca de copias de memoria de GPU de baja latencia que ofrece NVIDIA, proporciona comunicación de baja latencia entre procesos de CPU y kernels CUDA de GPU. Con esta tecnología, la biblioteca de SMDDP puede canalizar el movimiento de datos entre nodos y dentro de ellos.

  3. Reduce el uso de multiprocesadores de streaming de GPU para aumentar la potencia de cómputo necesaria para ejecutar kernels de modelo. Las instancias P4d y P4de están equipadas con GPU NVIDIA A100, cada una de las cuales tiene 108 multiprocesadores de streaming. Mientras que el NCCL utiliza hasta 24 multiprocesadores de streaming para ejecutar operaciones colectivas, SMDDP utiliza menos de 9 multiprocesadores de streaming. Los kernels de cómputo de modelos recogen los multiprocesadores de streaming guardados para agilizar la computación.