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

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.

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

Suivez les consignes suivantes lorsque vous exécutez une tâche d’entraînement distribué avec la bibliothèque SageMaker de parallélisme des modèles v2 (SMP v2).

Configuration de la bonne configuration pour l’entraînement distribué

Pour estimer et trouver le meilleur point de départ pour appliquer les techniques d’entraînement distribué proposées par SMP v2, consultez la liste suivante. Chaque élément de la liste explique l’avantage d’utiliser les Principales fonctionnalités de la bibliothèque de parallélisme de SageMaker modèles v2 ainsi que les compromis potentiels.

Conseils de configuration

Cette section fournit des directives sur la manière de choisir les meilleures configurations de modèle pour un débit optimal tout en respectant les exigences globales relatives à la taille des lots.

Tout d’abord, nous recommandons les configurations suivantes, quelle que soit la taille de votre modèle.

  1. Utilisez le type d’instance le plus puissant possible.

  2. Activez la précision mixte en permanence, car elle offre des avantages considérables en termes de performances et de réduction de la mémoire. Nous vous recommandons d’utiliser bfloat16, car il est plus précis que float16.

  3. Activez la bibliothèque SageMaker de parallélisme distribué des données (au lieu d’utiliser NCCL) chaque fois que cela est applicable, comme indiqué dans Compatibilité avec la bibliothèque SMDDP optimisée pour l'infrastructure AWS. Une exception concerne les cas d’utilisation du parallélisme de tenseur uniquement (hybrid_shard_degree = 1 et tensor_paralle_degree > 1).

  4. Si votre modèle comporte plus de 60 milliards de paramètres, nous vous recommandons d’utiliser Initialisation différée des paramètres. Vous pouvez aussi utiliser l’initialisation différée des paramètres pour accélérer l’initialisation de n’importe quel modèle.

  5. Nous vous recommandons d’activer les Points de contrôle d'activation.

Selon la taille de votre modèle, nous vous recommandons de commencer par les conseils suivants.

  1. Utilisez le parallélisme partitionné des données.

    1. En fonction de la taille du lot que vous souhaitez placer dans la mémoire du GPU, choisissez le degré de parallélisme partitionné des données. Normalement, vous devez commencer par le degré le plus faible pour adapter votre modèle à la mémoire du GPU tout en minimisant la surcharge liée aux communications réseau. Si vous voyez un avertissement indiquant des vidages du cache, nous vous recommandons d’augmenter le degré de partitionnement.

    2. Déterminez world_size en fonction de la taille de lot locale maximale et de la taille globale de lot requise, le cas échéant.

    3. Vous pouvez expérimenter le déchargement d’activation. Selon les scénarios, il peut répondre à vos besoins en mémoire sans avoir à augmenter le degré de partitionnement, ce qui se traduit par une diminution des communications.

  2. Utilisez simultanément le parallélisme partitionné des données PyTorch FSDP et le parallélisme de tenseur SMP v2, comme indiqué dans Parallélisme de tenseur.

    1. Lors de l’entraînement sur de grands clusters, avec FSDP uniquement, la taille globale de lot peut devenir trop importante, ce qui entraîne des problèmes de convergence pour le modèle. Généralement, la plupart des travaux de recherche maintiennent la taille de lot sous les 4 millions de jetons. Dans ce cas, vous pouvez résoudre le problème en combinant PyTorch FSDP avec le parallélisme de tenseur SMP v2 afin de réduire la taille du lot.

      Par exemple, avec 256 nœuds et une longueur de séquence de 4 096, même une taille de lot de 1 par GPU entraîne une taille globale de lot de 8 millions de jetons. Toutefois, lorsque vous utilisez le parallélisme de tenseur avec un degré 2 et une taille de lot de 1 par groupe de parallélisme de tenseur, cela devient une demi-taille de lot par GPU, ce qui se traduit par 4 millions de jetons.

    2. Lorsque vous entraînez avec d’importantes longueurs de contexte, telles que 8 000 ou 16 000, la mémoire d’activation peut devenir très élevée. FSDP ne partitionne pas les activations, et celles-ci peuvent entraîner un épuisement de la mémoire des GPU. Dans de tels scénarios, vous pouvez entraîner efficacement en combinant PyTorch FSDP avec le parallélisme de tenseur SMP v2.

Référence de configurations

L’équipe d’entraînement de parallélisme des modèles SageMaker fournit les points de référence suivants basés sur des expériences avec le modèle Llama 2 transformé en modèle de transformeur SMP à l’aide de torch.sagemaker.transform et entraîné sur des instances ml.p4d.24xlarge d’une longueur de séquence de 4 096 avec précision mixte (FP16 ou BF16).

Modèle Taille du modèle (nombre de paramètres du modèle) Nombre d’instances Degré de parallélisation des données partitionnées Degré de parallélisation du tenseur Points de contrôle d'activation Déchargement de l'activation Taille de lot
Llama 2 7B 1 8 1 TRUE FALSE 4
70B 32 256 1 TRUE FALSE 2
175B 64 128 4 TRUE TRUE 6

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.

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

Pour surveiller les métriques de niveau système telles que l’utilisation de la mémoire CPU et du GPU, et l’utilisation du GPU, utilisez la visualisation fournie via la console SageMaker AI.

  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 plus d’informations, consultez Métriques Amazon CloudWatch pour la surveillance et l’analyse des tâches d’entraînement.

Autorisations

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