

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Stratégies d’entraînement distribué
<a name="distributed-training-strategies"></a>

L'entraînement distribué est généralement divisé en deux approches : le parallélisme des données et le parallélisme des modèles. Le *parallélisme des données* est l'approche la plus courante de l'entraînement distribué : vous avez beaucoup de données, vous les regroupez en lots, et vous envoyez des blocs de données à plusieurs CPU ou GPU (nœuds) pour un traitement par le réseau neuronal ou l'algorithme ML, puis vous combinez les résultats. Le réseau neuronal est le même sur chaque nœud. L'approche de *parallélisme des modèles* est utilisée avec de grands modèles qui ne tiennent pas d'un seul tenant dans la mémoire d'un nœud. Elle décompose le modèle et en place les différentes parties sur différents nœuds. Dans ce cas, vous devez envoyer vos lots de données vers chaque nœud afin que les données de toutes les parties du modèle soient traitées. 

Les termes *réseau* et *modèle* sont souvent utilisés de façon interchangeable : un grand modèle est en fait un grand réseau comprenant une multitude de couches et de paramètres. L'entraînement avec un grand réseau produit un grand modèle, et le chargement du modèle sur le réseau avec tous vos paramètres préentraînés et leurs poids charge un grand modèle dans la mémoire. Lorsque vous décomposez un modèle pour le diviser entre les nœuds, vous décomposez également le réseau sous-jacent. Un réseau se compose de couches, et pour diviser le réseau, vous placez des couches sur différents périphériques de calcul.

Une erreur fréquente consiste à simplement diviser les couches entre les périphériques, ce qui conduit à une forte sous-utilisation du GPU. Comme l'entraînement est intrinsèquement séquentiel dans les transmissions vers l'avant et vers l'arrière, il arrive qu'à un moment donné, un seul GPU calcule de façon active, tandis que les autres attendent que les activations soient envoyées. Les bibliothèques parallèles de modèles modernes résolvent ce problème en utilisant des calendriers d'exécution de pipeline pour améliorer l'utilisation des périphériques. Cependant, seule la bibliothèque de modèles parallèles distribués d'Amazon SageMaker AI inclut le fractionnement automatique des modèles. Les deux principales caractéristiques de la bibliothèque, la division automatique des modèles et le calendrier d'exécution du pipeline, simplifient le processus de mise en œuvre du parallélisme des modèles en prenant des décisions automatisées conduisant à une utilisation efficace des périphériques.

## Entraînement avec le parallélisme de données et le parallélisme de modèles
<a name="distributed-training-data-model-parallel"></a>

Si vous entraînez avec un jeu de données volumineux, commencez par une approche de parallélisme des données. Si vous manquez de mémoire pendant l'entraînement, vous pouvez passer à une approche de parallélisme des modèles ou essayer un modèle hybride et un parallélisme des données. Vous pouvez également procéder comme suit pour améliorer vos performances avec le parallélisme des données :
+ Modifiez les hyperparamètres de votre modèle. 
+ Réduisez la taille du lot.
+ Continuez à réduire la taille du lot jusqu'à ce qu'il tienne. Si vous réduisez la taille du lot à 1 et que vous manquez toujours de mémoire, essayez l'entraînement pour le parallélisme des modèles. 

Essayez la compression de gradient (FP16, INT8) :
+ Sur le TensorCore-equipped matériel NVIDIA, l'utilisation d'un [entraînement à précision mixte](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html) permet à la fois d'accélérer et de réduire la consommation de mémoire.
+ SageMaker La bibliothèque de parallélisme de données distribué d'AI prend en charge la précision mixte automatique (AMP) prête à l'emploi. Pour activer l'AMP, il vous suffit de modifier le cadre de votre script d'entraînement. Si des dégradés se trouvent dans FP16, la bibliothèque de parallélisme de données SageMaker AI exécute ses `AllReduce` opérations dans FP16. Pour plus d'informations sur la mise en œuvre des API AMP dans votre script d'entraînement, consultez les ressources suivantes :
  + [Frameworks : PyTorch](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#pytorch) dans la *documentation sur les performances du Deep Learning de NVIDIA*
  + [Frameworks : TensorFlow](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow) dans la *documentation sur les performances du Deep Learning de NVIDIA*
  + [Précision mixte automatique pour deep learning](https://developer.nvidia.com/automatic-mixed-precision) dans les *Documents du développeur NVIDIA*
  + [Découvrez la précision mixte PyTorch automatique native pour un entraînement plus rapide sur les GPU NVIDIA](https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/) *dans le blog PyTorch *
  + [TensorFlow API de précision mixte](https://www.tensorflow.org/guide/mixed_precision) dans la *TensorFlowdocumentation*

Essayez de réduire la taille d'entrée :
+ Réduisez la longueur de la séquence NLP si vous augmentez le lien de séquence, que vous devez réduire la taille du lot ou que vous devez augmenter les GPU pour répartir le lot. 
+ Réduisez la résolution d'image. 

Vérifiez si vous utilisez la normalisation par lots, car cela peut affecter la convergence. Lorsque vous utilisez l'entraînement distribué, votre lot est divisé entre les GPU, de sorte que la réduction significative de la taille de lot peut accroître le taux d'erreur et perturber ainsi la convergence du modèle. Par exemple, si vous avez prototypé votre réseau sur un seul GPU avec une taille de lot de 64, puis réalisé une augmentation d'échelle à l'aide de quatre p3dn.24xlarge, le nombre de GPU passe à 32 et la taille de lot par GPU passe de 64 à 2. Cela va probablement affecter la convergence qui était possible avec un seul nœud. 

Commencez par un entraînement pour le parallélisme des modèles lorsque : 
+  votre modèle ne tient pas dans un seul périphérique ; 
+ les limitations dues à la taille de votre modèle vous conduisent à choisir des tailles de lot supérieures, par exemple si les poids de votre modèle occupent la majeure partie de votre mémoire GPU et que vous êtes obligé de choisir une taille de lot inférieure et sous-optimale.  

Pour en savoir plus sur les bibliothèques distribuées SageMaker basées sur l'IA, consultez les pages suivantes :
+  [Organisez une formation distribuée avec la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA](data-parallel.md) 
+  [(Archivé) bibliothèque de parallélisme de SageMaker modèles v1.x](model-parallel.md) 