Bonnes pratiques concernant le parallélisme des modèles distribués SageMaker - Amazon SageMaker

Bonnes pratiques concernant le parallélisme des modèles distribués SageMaker

Suivez les consignes suivantes lorsque vous exécutez une tâche d'entraînement distribuée avec la bibliothèque de parallélisme de modèles SageMaker.

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 nœud doté de 16 GPU ne conviendra pas à un nœud doté de 8 GPU, car il n'y a tout simplement pas assez de GPU pour partitionner l'état de l'optimiseur.

    Pour de plus amples informations, veuillez consulter 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 de plus amples informations, veuillez consulter 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 de plus amples informations, veuillez consulter 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 trouver la description des paramètres susmentionnés, consultez Paramètres pour smdistributed dans la documentation relative au kit SDK Python SageMaker.

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 de plus amples informations, veuillez consulter Déchargement de l'activation.

Référence de configurations

L'équipe d'entraînement distribuée avec parallélisme de modèles SageMaker fournit les points de référence suivants basés sur des expériences avec le modèle GPT-2, la longueur de séquence de 512 et la taille du 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 Vrai Chaque couche de transformateur Vrai batch_size=40
30 milliards 16 ml.p4d.24xlarge 1 8 Vrai Chaque couche de transformateur Vrai batch_size=32
60 milliards 32 ml.p4d.24xlarge 2 8 Vrai Chaque couche de transformateur Vrai 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 parallélisme de modèles SageMaker dans votre script de formation, consultez Conseils et pièges relatifs à la configuration pour la bibliothèque de modèles parallèles distribués SageMaker.

  • Pour lancer une tâche d'entraînement plus rapidement, utilisez le Mode local SageMaker. Cela vous aide à exécuter rapidement une tâche d'entraînement localement sur une instance de bloc-notes SageMaker. Selon l'échelle de l'instance ML sur laquelle votre instance de bloc-notes SageMaker est exécutée, vous devrez peut-être ajuster la taille de votre modèle en modifiant les configurations du modèle, telles que la largeur masquée, le nombre de couches de transformateurs 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.

Surveillance et journalisation d'une tâche d'entraînement à l'aide de la console SageMaker et d'Amazon CloudWatch

Pour surveiller les mesures au niveau du système telles que l'utilisation de la mémoire CPU, l'utilisation de la mémoire GPU et l'utilisation du GPU, utilisez la visualisation fournie via la Console SageMaker.

  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 d'entraînement distribués de la tâche d'entraînement 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 de plus amples informations, veuillez consulter Surveillance et analyse des tâches d'entraînement à l'aide de métriques Amazon CloudWatch.

Autorisations

Pour exécuter une tâche d'entraînement SageMaker avec parallélisme des modèles ou les Exemples de bloc-notes d'entraînement distribué SageMaker, assurez-vous que vous disposez des autorisations appropriées dans votre rôle IAM, telles que les suivantes :