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.
Formación distribuida en Amazon SageMaker
SageMaker proporciona bibliotecas de formación distribuidas y admite diversas opciones de formación distribuida para tareas de aprendizaje profundo, como la visión artificial (CV) y el procesamiento del lenguaje natural (NLP). Con las bibliotecas SageMaker de formación distribuidas, puede ejecutar en paralelo datos personalizados altamente escalables y rentables y modelar trabajos de formación en deep learning en paralelo. También puede utilizar otros marcos y paquetes de formación distribuidos, como PyTorch DistributedDataParallel (DDP),torchrun
, MPI (mpirun
) y el servidor de parámetros. A lo largo de la documentación, las instrucciones y los ejemplos se centran en cómo configurar las opciones de formación distribuidas para las tareas de aprendizaje profundo mediante SageMaker PythonSDK.
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 SageMaker mejores prácticas.
Antes de empezar
SageMaker La capacitación admite la capacitación distribuida en una sola instancia y en varias instancias, por lo que puede ejecutar capacitaciones de cualquier tamaño a escala. Le recomendamos que utilice las clases estimadoras del marco, como PyTorchCreateTrainingJob
API en el backend, encuentra la región en la que se está ejecutando la sesión actual y extrae uno de los contenedores de aprendizaje AWS profundo prediseñados y empaquetados con una serie de bibliotecas que incluyen marcos de aprendizaje profundo, marcos de entrenamiento distribuidos y el EFAcontrolador. Si desea montar un sistema de FSx archivos en las instancias de entrenamiento, debe pasar su ID de VPC subred y grupo de seguridad al estimador. Antes de ejecutar su trabajo de formación distribuida SageMaker, lea las siguientes instrucciones generales sobre la configuración básica de la infraestructura.
Zonas de disponibilidad y plano posterior de red
Cuando se utilizan varias instancias (también denominadas nodos), es importante entender la red que conecta las instancias, cómo leen los datos de entrenamiento y cómo comparten la información entre sí. Por ejemplo, cuando ejecuta un trabajo de formación en paralelo con datos distribuidos, varios factores, como la comunicación entre los nodos de un clúster de procesamiento para ejecutar la AllReduce
operación y la transferencia de datos entre los nodos y el almacenamiento de datos en Amazon Simple Storage Service o Amazon FSx for Lustre, desempeñan un papel crucial para lograr un uso óptimo de los recursos informáticos y una velocidad de entrenamiento más rápida. Para reducir la sobrecarga de comunicación, asegúrese de configurar las instancias, la VPC subred y el almacenamiento de datos en la misma zona Región de AWS y en la zona de disponibilidad.
GPUinstancias con una red más rápida y un almacenamiento de alto rendimiento
Técnicamente, puede utilizar cualquier instancia para un entrenamiento distribuido. Para los casos en los que necesite ejecutar trabajos de formación distribuidos en varios nodos para entrenar modelos grandes, como modelos de lenguaje grandes (LLMs) y modelos de difusión, que requieren una conmutación más rápida entre nodos, recomendamos EFA las instancias habilitadas compatibles con. GPU SageMaker
Comience con la formación distribuida en Amazon SageMaker
Si ya conoce el entrenamiento distribuido, seleccione una de las siguientes opciones que se adapte a su estrategia o marco preferido para empezar. Si desea obtener más información sobre el entrenamiento distribuido en general, consulte Conceptos básicos de entrenamiento distribuido.
Las bibliotecas de formación SageMaker distribuidas están optimizadas para el entorno de SageMaker formación, ayudan a adaptar sus tareas de formación distribuidas y a SageMaker mejorar la velocidad y el rendimiento de la formación. Las bibliotecas ofrecen estrategias de entrenamiento de paralelismo de datos y paralelismo de modelos. Combinan tecnologías de software y hardware para mejorar las comunicaciones entre nodos GPU y entre ellos, y amplían las capacidades SageMaker de formación con opciones integradas que requieren cambios mínimos en el código de los guiones de formación.
Utilice la biblioteca de paralelismo de datos SageMaker distribuido () SMDDP
La SMDDP biblioteca mejora la comunicación entre los nodos con implementaciones AllReduce
y operaciones de comunicación AllGather
colectiva optimizadas para la infraestructura de AWS red y la topología de instancias de Amazon SageMaker ML. Puede utilizar la SMDDPbiblioteca como backend de paquetes de formación distribuidos PyTorch basados en datos: PyTorch distributeddata parallel (DDP)PyTorch
estimador para lanzar un trabajo de formación distribuido en dos instancias. ml.p4d.24xlarge
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", # Activate distributed training with SMDDP distribution={ "pytorchddp": { "enabled": True } } # mpirun, activates SMDDP AllReduce OR AllGather # distribution={ "torch_distributed": { "enabled": True } } # torchrun, activates SMDDP AllGather # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } # mpirun, activates SMDDP AllReduce OR AllGather )
Para obtener información sobre cómo preparar el guion de formación y lanzar un trabajo de formación paralelo con datos distribuidos SageMaker, consulteRealice un entrenamiento distribuido con la biblioteca de paralelismo de datos SageMaker distribuidos.
Utilice la biblioteca de SageMaker modelos de paralelismo () SMP
SageMaker proporciona la SMP biblioteca y admite diversas técnicas de entrenamiento distribuidas, como el paralelismo de datos fragmentados, la canalización, el paralelismo tensorial, la fragmentación del estado del optimizador y más. Para obtener más información sobre lo que ofrece la biblioteca, consulte. SMP Características principales de la biblioteca de paralelismo de SageMaker modelos
Para usar SageMaker la biblioteca de paralelismo de modelos, configure el distribution
parámetro de los estimadores del SageMaker marco. Los estimadores de marco compatibles son y. PyTorchTensorFlowml.p4d.24xlarge
.
from sagemaker.
framework
importFramework
distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # enter parameter key-value pairs here } }, }, "mpi": { "enabled" : True, ... # enter parameter key-value pairs here } } estimator =Framework
( ..., instance_count=2
, instance_type="ml.p4d.24xlarge
", distribution=distribution )
Para aprender a adaptar su script de entrenamiento, configurar los parámetros de distribución en la estimator
clase e iniciar un trabajo de entrenamiento distribuido, consulte la biblioteca SageMaker de modelos de paralelismo (consulte también APIs el entrenamiento distribuido en la documentación
Utilice marcos de entrenamiento distribuido de código abierto
SageMaker también admite las siguientes opciones de funcionamiento mpirun
y torchrun
en el backend.
-
Para usar PyTorch DistributedDataParallel (DDP)
SageMaker con el mpirun
backend, añádelodistribution={"pytorchddp": {"enabled": True}}
a tu PyTorch estimador. Para obtener más información, consulte también PyTorch Distributed Trainingy el distribution
argumento de SageMaker PyTorch Estimatoren la documentación de SageMaker Python SDK. nota
Esta opción está disponible para la versión PyTorch 1.12.0 y versiones posteriores.
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", distribution={"pytorchddp": {"enabled": True}} # runs mpirun in the backend ) -
SageMaker admite el PyTorch
torchrun
lanzadorpara el entrenamiento distribuido en instancias de Amazon GPU basadas en EC2 instancias, como P3 y P4, así como Trn1 con tecnología del dispositivo Trainium.AWS Para usar PyTorch DistributedDataParallel (DDP)
con el backend, añádelo SageMaker al estimador torchrun
.distribution={"torch_distributed": {"enabled": True}}
PyTorchnota
Esta opción está disponible para la versión PyTorch 1.13.0 y versiones posteriores.
En el siguiente fragmento de código se muestra un ejemplo de creación de un SageMaker PyTorch estimador para ejecutar un entrenamiento distribuido en dos
ml.p4d.24xlarge
instancias con la opción de distribución.torch_distributed
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", distribution={"torch_distributed": {"enabled": True}} # runs torchrun in the backend )Para obtener más información, consulta el
distribution
argumento de Distributed PyTorch Trainingand SageMaker PyTorch Estimator en la documentación de SageMaker Python SDK. Notas para el entrenamiento distribuido en Trn1
Una instancia de Trn1 consta de un máximo de 16 dispositivos Trainium y cada dispositivo de Trainium consta de dos. NeuronCores
Para ver las especificaciones de los dispositivos Trainium, consulte la AWS arquitectura de Trainium en la documentación de Neuron.AWS Para aprender sobre las instancias con tecnología Trainium, solo necesita especificar el código de la instancia Trn1, en cadena con el argumento de la clase
ml.trn1.*
estimador.instance_type
SageMaker PyTorch Para encontrar los tipos de instancias Trn1 disponibles, consulte AWS Arquitectura de Trn1en la documentación de Neuron de AWS . nota
SageMaker Actualmente, la formación sobre las instancias EC2 Trn1 de Amazon solo está disponible para el PyTorch marco de AWS Deep Learning Containers for PyTorch Neuron a partir de la versión 1.11.0. Para obtener una lista completa de las versiones compatibles de PyTorch Neuron, consulte Neuron Containers
en el repositorio de AWS Deep Learning Containers GitHub . Al lanzar un trabajo de formación en instancias Trn1 con SageMaker PythonSDK, selecciona y ejecuta SageMaker automáticamente el contenedor correcto de los contenedores Neuron
proporcionados por AWS Deep Learning Containers. Los contenedores Neuron vienen preempaquetados con la configuración y las dependencias del entorno de formación para facilitar la adaptación del trabajo de formación a la plataforma de SageMaker formación y a las instancias Amazon EC2 Trn1. nota
Para ejecutar su trabajo de PyTorch formación en instancias Trn1 SageMaker, debe modificar el script de formación para inicializar los grupos de procesos con el backend y utilizar/.
xla
PyTorch XLAPara facilitar el proceso de XLA adopción, el AWS Neuron SDK proporciona PyTorch Neuron, que se utiliza XLA para convertir las operaciones en instrucciones de Trainium. PyTorch Para obtener información sobre cómo modificar el guion de entrenamiento, consulte la Guía para desarrolladores sobre el entrenamiento con PyTorch Neuron ( torch-neuronx
) en la documentación de Neuron.AWS Para obtener más información, consulte Entrenamiento distribuido con PyTorch Neuron en instancias Trn1
y el argumento de SageMaker PyTorch Estimator distribution
en la documentación de Python. SageMaker SDK -
Para usarlo, añádelo a MPI tu SageMaker estimador.
distribution={"mpi": {"enabled": True}}
La opción MPI de distribución está disponible para los siguientes marcos: MXNet PyTorch, y. TensorFlow -
Para usar un servidor de parámetros en SageMaker, agréguelo
distribution={"parameter_server": {"enabled": True}}
a su estimador. La opción de servidor de parámetros está disponible para los siguientes marcos: MXNet PyTorch, y. TensorFlowsugerencia
Para obtener más información sobre el uso de las opciones del servidor de parámetros MPI y del servidor de parámetros por marco, utilice los siguientes enlaces a la SDKdocumentación de SageMaker Python.
-
MXNetEntrenamiento distribuido
y argumento de SageMaker MXNetEstimator distribution
-
PyTorch Entrenamiento distribuido y argumento
de SageMaker PyTorch Estimator distribution
-
TensorFlow Entrenamiento distribuido y argumento
de SageMaker TensorFlow Estimator . distribution
-
Conceptos básicos de entrenamiento distribuido
SageMakerLas bibliotecas de formación distribuida utilizan los siguientes términos y funciones de formación distribuida.
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 GPUs al 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. Cuando utilizas SageMaker la biblioteca de paralelismo de modelos distribuidos, cada microlote se introduce en el proceso de entrenamiento one-by-one 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 GPUs
-
Instancias: una instancia de computación de aprendizaje AWS automático
. También se denominan nodos. -
Tamaño del clúster: cuando se utiliza SageMaker una biblioteca de formación distribuida, es el número de instancias multiplicado por el número GPUs de cada instancia. Por ejemplo, si utilizas dos instancias ml.p3.8xlarge en un trabajo de formación, que tienen 4 GPUs 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 formación SageMaker distribuida está diseñada para optimizar la comunicación entre las instancias informáticas de Amazon EC2 ML, lo que permite una mayor utilización de los dispositivos y 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 GPUs en varios en un clúster de cómputo, que consta de varias instancias de Amazon EC2 ML. Cada uno GPU contiene una réplica del modelo, recibe diferentes lotes de datos de entrenamiento, realiza un pase hacia adelante y hacia atrás y comparte las actualizaciones de peso 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 de ellas GPUs en un clúster de cómputo, que consta de varias instancias de Amazon ML. EC2 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 uno GPU incluye 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 GPU uso y tiempo de entrenamiento, depende en gran medida de cómo se divida el modelo y del programa de ejecución utilizado para realizar las 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 que permite lograr una verdadera paralelización en el paralelismo del modelo y superar la pérdida de rendimiento debida a la computación secuencial al realizar el procesamiento simultáneo en diferentes muestras de datos. GPUs Para obtener más información, consulte el programa de ejecución de canalización.
Conceptos avanzados
Los profesionales de Machine Learning (ML) suelen enfrentarse a dos desafíos de escalado cuando entrenan modelos: escalar el tamaño del modelo y escalar los datos de entrenamiento. Si bien el tamaño y la complejidad del modelo pueden mejorar la precisión, existe un límite en cuanto al tamaño del modelo que puede caber en una sola CPU oGPU. 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 es el Stochastic Gradient Descent () en minilotes. SGD En el caso de los minilotesSGD, 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 minilote SGD 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 SGD formación en paralelo mediante la distribución de los registros de un minilote en diferentes dispositivos informáticos se denomina entrenamiento distribuido en paralelo de datos y es el paradigma de distribución de DL 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.
Los datos paralelos SGD aún requieren que los desarrolladores puedan incluir al menos el modelo y un único registro en un dispositivo informático, como un único CPU oGPU. Al entrenar modelos muy grandes, como transformadores de gran tamaño 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.
Estrategias
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 al dividir ingenuamente las capas entre los dispositivos es una grave infrautilización. GPU El entrenamiento es intrínsecamente secuencial tanto en las fases de avance como de retroceso y, en un momento dado, solo una de ellas GPU puede realizar el cálculo de forma activa, 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 SageMaker de modelos distribuidos de Amazon 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 gradientes (FP16,INT8):
-
En el NVIDIA TensorCore hardware equipado, el uso de un entrenamiento de precisión mixto
aumenta la velocidad y reduce el consumo de memoria. -
SageMakerLa biblioteca de paralelismo de datos distribuidos es compatible con Automatic Mixed Precision (AMP) de forma inmediata. No es necesario realizar ninguna acción adicional para permitir que se realicen AMP modificaciones en el guion de entrenamiento a nivel de marco. Si los gradientes están dentroFP16, la biblioteca de paralelismo de SageMaker datos ejecuta su operación en ella.
AllReduce
FP16 Para obtener más información sobre la implementación AMP APIs en su script de entrenamiento, consulte los siguientes recursos:-
Marcos: PyTorch
en la documentación sobre el rendimiento del aprendizaje NVIDIA profundo -
Marcos: TensorFlow
en la documentación sobre el rendimiento del aprendizaje NVIDIA profundo -
Precisión mixta automática para el aprendizaje profundo
en los documentos para NVIDIA desarrolladores -
En el PyTorch blog presentamos la precisión mixta PyTorch automática nativa para un entrenamiento más rápido NVIDIA GPUs
-
TensorFlow precisión mixta APIs
en la TensorFlowdocumentación
-
Intente reducir el tamaño de la entrada:
-
Reduzca la longitud de la NLP secuencia 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 creó un prototipo de su red en una sola red GPU con un tamaño de lote de 64 y luego la amplió hasta utilizar cuatro p3dn.24xlarge, ahora tiene 32 GPUs y el tamaño por lote se reduce de 64 a 2. GPU 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, se enfrenta a 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 su GPU memoria y se ve obligado a elegir un tamaño de lote más pequeño y subóptimo.
Para obtener más información sobre las bibliotecas SageMaker distribuidas, consulte lo siguiente:
Optimizar el entrenamiento distribuido
Personalice los hiperparámetros para su caso de uso y sus datos para obtener la mejor eficiencia de escalado. En el siguiente análisis, destacamos algunas de las variables de formación más impactantes y proporcionamos referencias a state-of-the-art las implementaciones para que pueda obtener más información sobre sus opciones. Además, le recomendamos que consulte la documentación de entrenamiento distribuido de su marco preferido.
BatchSize
SageMaker Los kits de herramientas distribuidos generalmente te permiten entrenar en lotes más grandes. Por ejemplo, si un modelo cabe en un solo dispositivo pero solo se puede entrenar con un tamaño de lote pequeño, utilizar el entrenamiento de paralelismo de modelos o el entrenamiento de paralelismo de datos le permitirá experimentar con lotes más grandes.
Tenga en cuenta que el tamaño del lote influye directamente en la precisión del modelo al controlar la cantidad de ruido en la actualización del modelo en cada iteración. Al aumentar el tamaño del lote se reduce la cantidad de ruido en la estimación del gradiente, lo que puede resultar beneficioso cuando se trata de lotes de tamaños muy pequeños, pero puede reducir la precisión del modelo a medida que el tamaño del lote vaya aumentando hasta valores grandes.
sugerencia
Ajuste los hiperparámetros para garantizar que el modelo alcance una convergencia satisfactoria a medida que vaya aumentado el tamaño del lote.
Se han desarrollado varias técnicas para mantener una buena convergencia de modelos cuando se aumenta el lote.
Tamaño del minilote
EnSGD, el tamaño del minilote cuantifica la cantidad de ruido presente en la estimación del gradiente. Un minilote pequeño produce un gradiente de minilotes muy ruidoso, que no es representativo del gradiente real del conjunto de datos. Un minilote grande da como resultado un gradiente de minilotes cercano al gradiente real en todo el conjunto de datos y, potencialmente, no lo suficientemente ruidoso, por lo que es probable que permanezca atrapado en mínimos irrelevantes.
Para obtener más información acerca de estas técnicas, consulte los siguientes documentos:
-
Minilote grande y preciso: entrenamiento SGD en ImageNet 1
hora, Goya et al. -
PowerAI DDL
, Cho y col. -
Large Batch Training of Convolutional Networks
, You et al. -
Optimización de lotes grandes para el aprendizaje profundo: formación BERT en 76 minutos
, You et al. -
Optimización acelerada del BERT preentrenamiento por lotes grandes en 54 minutos
, Zheng et al. -
Deep Gradient Compression
, Lin et al.
Escenarios
En las siguientes secciones se describen los escenarios en los que es posible que desee ampliar la formación y cómo puede hacerlo utilizando AWS los recursos.
Pasar de uno GPU a varios GPUs
La cantidad de datos o el tamaño del modelo utilizado en el machine learning pueden crear situaciones en las que el tiempo de entrenamiento de un modelo sea mayor del que se esté dispuesto a esperar. A veces, el entrenamiento no funciona en absoluto porque el modelo o los datos de entrenamiento son demasiado grandes. Una solución es aumentar el número de los GPUs que se utilizan para la formación. En una instancia con variosGPUs, como una p3.16xlarge
que tiene ochoGPUs, los datos y el procesamiento se dividen entre los ochoGPUs. Cuando utiliza bibliotecas de entrenamiento distribuido, esto puede provocar una aceleración casi lineal del tiempo que se tarda en entrenar el modelo. Tarda un poco más de 1/8 del tiempo que habría tardado p3.2xlarge
con unoGPU.
Tipo de instancia | GPUs |
---|---|
p3.2xlarge | 1 |
p3.8xlarge | 4 |
p3.16xlarge | 8 |
p3dn.24xlarge | 8 |
nota
Los tipos de instancias ml que se utilizan en el SageMaker entrenamiento tienen el mismo número que GPUs los tipos de instancias p3 correspondientes. Por ejemplo, ml.p3.8xlarge
tiene el mismo número GPUs que p3.8xlarge
-4.
Escalar de una sola instancia a varias instancias
Si desea ampliar aún más su entrenamiento, puede utilizar más instancias. Sin embargo, debe elegir un tipo de instancia más grande antes de añadir más instancias. Revisa la tabla anterior para ver cuántas GPUs hay en cada tipo de instancia p3.
Si ha pasado de utilizar una sola instancia en p3.2xlarge
A cuatro GPU GPUs en unap3.8xlarge
, pero decide que necesita más potencia de procesamiento, es posible que obtenga un mejor rendimiento e incurra en costes más bajos si elige una p3.16xlarge
antes de intentar aumentar el número de instancias. Según las bibliotecas que utilice, cuando mantiene el entrenamiento en una única instancia, el rendimiento es mejor y los costes son inferiores a los de un escenario en el que se utilizan varias instancias.
Cuando esté listo para escalar el número de instancias, puede hacerlo con la SDK estimator
función SageMaker Python configurando suinstance_count
. Por ejemplo, puede establecer instance_type = p3.16xlarge
y instance_count =
2
. En lugar de ocho GPUs en una solap3.16xlarge
, tiene 16 GPUs en dos instancias idénticas. En el siguiente gráfico, se muestra el escalado y el rendimiento, empezando por ocho GPUs
Scripts de entrenamiento personalizados
Si bien SageMaker facilita la implementación y el escalado del número de instancias yGPUs, según el marco que se elija, administrar los datos y los resultados puede resultar muy difícil, por lo que a menudo se utilizan bibliotecas de soporte externas. Esta forma tan básica de formación distribuida requiere la modificación del guion de formación para gestionar la distribución de los datos.
SageMaker también es compatible con Horovod y con implementaciones de formación distribuida nativas de cada uno de los principales marcos de aprendizaje profundo. Si opta por utilizar ejemplos de estos marcos, puede seguir la guía SageMaker de contenedores de Deep Learning Containers y varios cuadernos de ejemplo