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.
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 data parallel est l'approche la plus courante en matière de formation distribuée : vous disposez d'un grand nombre de données, vous les regroupez et vous envoyez des blocs de données à plusieurs CPUs ou GPUs (nœuds) pour qu'ils soient traités 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
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 en dégradé (FP16, INT8) :
-
Sur le matériel TensorCore équipé de NVIDIA, l'utilisation d'un entraînement de précision mixte
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 sont présents 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 l'implémentation APIs de l'AMP dans votre script d'entraînement, consultez les ressources suivantes :-
Frameworks : PyTorch
dans la documentation sur les performances du Deep Learning de NVIDIA -
Frameworks : TensorFlow
dans la documentation sur les performances du Deep Learning de NVIDIA -
Précision mixte automatique pour deep learning
dans les Documents du développeur NVIDIA -
Présentation de la précision mixte PyTorch automatique native pour un entraînement plus rapide sur NVIDIA GPUs
dans le PyTorch blog -
TensorFlow précision mitigée APIs
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, si vous devez ajuster la taille du lot à la baisse ou GPUs augmenter 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 la formation distribuée, votre lot est divisé GPUs et une taille de lot beaucoup plus faible peut entraîner un taux d'erreur plus élevé, empêchant ainsi le modèle de converger. Par exemple, si vous avez prototypé votre réseau sur un seul GPU avec une taille de lot de 64, puis que vous l'avez étendu à quatre p3dn.24xlarge, vous en avez désormais 32 GPUs 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 par l' SageMaker IA, consultez les pages suivantes :