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.
SageMaker Meilleures pratiques en matière de parallélisme des modèles distribués
Suivez les instructions suivantes lorsque vous exécutez une tâche de formation distribuée avec la bibliothèque SageMaker model parallel.
Installation de la bonne configuration pour un modèle donné
Lors de la mise à l'échelle d'un modèle, nous vous recommandons de passer en revue la liste suivante dans l'ordre. Chaque élément de la liste explique l'avantage d'utiliser les techniques de la bibliothèque ainsi que les compromis qui pourraient survenir.
Astuce
Si un modèle peut bien s'adapter à l'aide d'un sous-ensemble des fonctionnalités de la bibliothèque, l'ajout d'autres fonctionnalités de parallélisme de modèle ou d'économie de mémoire n'améliore généralement pas les performances.
Utilisation de types d'instance GPU volumineux
-
Dans le domaine du parallélisme des modèles, il est préférable d'utiliser des instances puissantes dotées de mémoires GPU volumineuses pour gérer les frais généraux liés aux opérations de parallélisme de modèle telles que le partitionnement de modèles sur plusieurs GPU. Nous vous recommandons d'utiliser les instances
ml.p4d
ouml.p3dn
pour former des modèles DL volumineux. Ces instances sont également équipées d'un adaptateur Elastic Fabric Adapter (EFA), qui fournit une bande passante réseau plus élevée et permet une formation à grande échelle avec le parallélisme des modèles.
Partitionnement de l'état de l'optimiseur
-
L'impact du partitionnement de l'état de l'optimiseur dépend du nombre de rangs parallèles de données. En règle générale, un degré plus élevé de parallélisme des données (proportionnel à la taille du nœud de calcul) peut améliorer l'efficacité de l'utilisation de la mémoire.
Lorsque vous souhaitez réduire la taille d'un cluster, assurez-vous de vérifier la configuration du partition de l'état de l'optimiseur. Par exemple, un modèle DL volumineux avec partition de l'état de l'optimiseur qui s'adapte à un cluster de calcul doté de 16 GPU (par exemple, deux instances P4d ou P4de) ne conviendra pas toujours à un nœud doté de 8 GPU (par exemple, une seule instance P4d ou P4de). Cela est dû au fait que la mémoire combinée de 8 GPU est inférieure à la mémoire combinée de 16 GPU et la mémoire requise par GPU pour le partitionnement sur 8 GPU est également supérieure à la mémoire par GPU pour le partitionnement sur le scénario de 16 GPU. Par conséquent, l'augmentation de la quantité de mémoire requise risque de ne pas être adaptée au plus petit cluster.
Pour plus d’informations, consultez Partitionnement de l'état de l'optimiseur.
Points de contrôle d'activation
-
L'efficacité de la mémoire peut être améliorée en utilisant le point de contrôle d'activation pour un groupe de modules. Plus vous regroupez les modules, plus l'utilisation de la mémoire est efficace. Lorsque vous effectuez un pointage de modules séquentiels pour des couches, l'argument
strategy
de la fonctionsmp.set_activation_checkpointing
regroupe les couches ensemble pour le point de contrôle. Par exemple, le regroupement de deux couches ou plus pour un point de contrôle est plus efficace en mémoire que le point de contrôle une couche à la fois, ce qui permet d'échanger un temps de calcul supplémentaire pour réduire l'utilisation de la mémoire.Pour plus d’informations, consultez Points de contrôle d'activation.
Parallélisme de tenseur
-
Le degré de parallélisme de tenseur doit être d'une puissance de deux (2, 4, 8,..., 2n), où le degré maximum doit être égal au nombre de GPU par nœud. Par exemple, si vous utilisez un nœud avec 8 GPU, les nombres possibles pour le degré de parallélisme de tenseur sont 2, 4 et 8. Nous ne recommandons pas de nombres arbitraires (tels que 3, 5, 6 et 7) pour le degré de parallélisme de tenseur. Lorsque vous utilisez plusieurs nœuds, une mauvaise configuration du degré de parallélisme de tenseur peut entraîner l'exécution du parallélisme de tenseur entre les nœuds. Cela entraîne une surcharge importante due à la communication des activations entre les nœuds et peut devenir coûteuse sur le plan informatique.
Pour plus d’informations, consultez Parallélisme de tenseur.
Parallélisme de pipeline entre nœuds
-
Vous pouvez exécuter le parallélisme de pipeline à la fois au sein d'un seul nœud et sur plusieurs nœuds. Lorsque vous utilisez le parallélisme de pipeline en combinaison avec le parallélisme de tenseur, nous vous recommandons d'exécuter le parallélisme de pipeline sur plusieurs nœuds et de conserver le parallélisme de tenseur au sein de nœuds individuels.
-
Le parallélisme de pipeline comprend les trois boutons suivants :
microbatches
,active_microbatches
, etprescaled_batch
.-
Lorsque vous utilisez le parallélisme de tenseur et le parallélisme de pipeline, nous vous recommandons d'activer
prescaled_batch
afin que la taille des lots par groupe parallèle de modèles puisse être augmentée pour un pipelining efficace. Avecprescaled_batch
activé, la taille du lot définie dans le script d'entraînement devienttp_size
fois la taille du lot définie pour chaque rang sansprescaled_batch
. -
Augmentation du nombre de
microbatches
permet d'atteindre un pipelining efficace et de meilleures performances. Notez que la taille effective des microlots correspond à la taille du lot divisée par le nombre de microlots. Si vous augmentez le nombre de microlots tout en gardant la taille du lot constante, chaque microlot traite moins d'échantillons. -
Le nombre de
active_microbatches
est le nombre maximal de microlots qui sont simultanément en cours de traitement pendant le pipelining. Pour chaque microlot actif en cours de traitement, ses activations et ses dégradés occupent la mémoire GPU. Par conséquent, augmenteractive_microbatches
consomme plus de mémoire GPU.
-
-
Si la mémoire GPU et GPU sont sous-utilisées, augmentez
active_microbatches
pour une meilleure parallélisation pendant le pipelining. -
Pour plus d'informations sur l'utilisation du parallélisme de tenseur et du parallélisme de pipeline, consultez Parallélisme de tenseur associé au parallélisme de pipeline.
-
Pour obtenir une description des paramètres susmentionnés, consultez la section Paramètres pour
smdistributed
dans la documentation du SDK SageMaker Python.
Déchargement des activations vers le CPU
-
Assurez-vous que cela est utilisé en combinaison avec le point de contrôle d'activation et le parallélisme de pipeline. Pour garantir que le déchargement et le préchargement se produisent en arrière-plan, spécifiez une valeur supérieure à 1 pour le paramètre de microlots.
-
Lors du déchargement des activations, vous pouvez augmenter
active_microbatches
et parfois faire correspondre au nombre total de microlots. Cela dépend des modules qui sont contrôlés et de la façon dont le modèle est partitionné.Pour plus d’informations, consultez Déchargement de l'activation.
Référence de configurations
L'équipe de formation au parallélisme des SageMaker modèles fournit les points de référence suivants sur la base d'expériences avec le modèle GPT-2, d'une longueur de séquence de 512 et d'une taille de vocabulaire de 50 000.
Le nombre de paramètres de modèle | Type d’instance | Parallélisme de pipeline | Parallélisme de tenseur | Partitionnement de l'état de l'optimiseur | Points de contrôle d'activation | Lot précadré | Taille de lot |
---|---|---|---|---|---|---|---|
10 milliards | 16 ml.p4d.24xlarge |
1 | 4 | True | Chaque couche de transformateur | True | batch_size=40 |
30 milliards | 16 ml.p4d.24xlarge |
1 | 8 | True | Chaque couche de transformateur | True | batch_size=32 |
60 milliards | 32 ml.p4d.24xlarge |
2 | 8 | True | Chaque couche de transformateur | True | batch_size=56 , microbatches=4 ,
active_microbatches=2 |
Vous pouvez extrapoler à partir des configurations précédentes pour estimer l'utilisation de la mémoire GPU pour la configuration de votre modèle. Par exemple, si vous augmentez la longueur de séquence d'un modèle de 10 milliards de paramètres ou si vous augmentez la taille du modèle à 20 milliards, vous pouvez commencer par réduire la taille du lot. Si le modèle ne convient toujours pas, essayez d'augmenter le degré de parallélisme de tenseur.
Modification de votre script d'entraînement
-
Avant d'utiliser les fonctionnalités de la bibliothèque SageMaker model parallel dans votre script d'entraînement, passez en revueConseils et pièges de configuration de la bibliothèque de parallélisme des modèles SageMaker distribués.
-
Pour lancer une tâche de formation plus rapidement, utilisez le mode SageMaker local
. Cela vous permet d'exécuter rapidement une tâche de formation en local sur une instance de SageMaker bloc-notes. En fonction de l'échelle de l'instance ML sur laquelle s'exécute votre instance de SageMaker bloc-notes, vous devrez peut-être ajuster la taille de votre modèle en modifiant les configurations du modèle, telles que la largeur cachée, le nombre de couches de transformation et les têtes d'attention. Vérifiez si le modèle réduit fonctionne correctement sur l'instance de bloc-notes avant d'utiliser un cluster volumineux pour former le modèle complet.
Supervision et journalisation d'un travail de formation à l'aide de la SageMaker console et d'Amazon CloudWatch
-
Dans le panneau de navigation de gauche, choisissez Training (Entraînement).
-
Choisissez Training jobs (Tâches d'entraînement).
-
Dans le volet principal, sélectionnez le nom de la tâche d'entraînement dont vous voulez afficher plus de détails.
-
Parcourez le volet principal et trouvez la section Monitor (Contrôler) pour voir la visualisation automatisée.
-
Pour voir les journaux des tâches d'entraînement, choisissez View logs (Afficher des journaux)dans la section Monitor (Contrôler). Vous pouvez accéder aux journaux de tâches de formation distribués de la tâche de formation dans CloudWatch. Si vous avez lancé un entraînement distribué à plusieurs nœuds, vous devriez voir plusieurs flux de journaux avec des balises au format de algo-n-1234567890. Leflux de journaux algo-1 suit les journaux d'entraînement à partir du nœud principal (0e).
Pour plus d’informations, consultez Amazon CloudWatch Metrics pour le suivi et l'analyse des offres de formation.
Autorisations
Pour exécuter une tâche de SageMaker formation avec le parallélisme des modèles ou les carnets d'exemples de formation SageMaker distribués
-
Pour utiliser FSx for Lustre
, ajoutez AmazonFSxFullAccess
. -
Pour utiliser Amazon S3 comme canal de données, ajoutez
AmazonS3FullAccess
. -
Pour utiliser Docker, créez votre propre conteneur et le transférer vers Amazon ECR, ajoutez
AmazonEC2ContainerRegistryFullAccess
. -
Pour avoir un accès complet à l'ensemble des SageMaker fonctionnalités, ajoutez
AmazonSageMakerFullAccess
.