SageMaker Meilleures pratiques en matière de parallélisme des modèles distribués - Amazon SageMaker

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 ou ml.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 fonction smp.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, et prescaled_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. Avec prescaled_batch activé, la taille du lot définie dans le script d'entraînement devient tp_size fois la taille du lot définie pour chaque rang sans prescaled_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, augmenter active_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

Pour surveiller les indicateurs au niveau du système tels que l'utilisation de la mémoire du processeur, l'utilisation de la mémoire du processeur graphique et l'utilisation du processeur graphique, utilisez la visualisation fournie via la SageMaker console.

  1. Dans le panneau de navigation de gauche, choisissez Training (Entraînement).

  2. Choisissez Training jobs (Tâches d'entraînement).

  3. Dans le volet principal, sélectionnez le nom de la tâche d'entraînement dont vous voulez afficher plus de détails.

  4. Parcourez le volet principal et trouvez la section Monitor (Contrôler) pour voir la visualisation automatisée.

  5. 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, assurez-vous de disposer des autorisations appropriées pour votre rôle IAM, telles que les suivantes :