

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
<a name="model-parallel-best-practices"></a>

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é
<a name="model-parallel-best-practices-configuration"></a>

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 grandes mémoires GPU pour gérer les surcharges liées aux opérations de parallélisme des modèles, telles que le partitionnement des modèles sur plusieurs. GPUs 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 de grande taille avec partitionnement de l'état de l'optimiseur qui s'adapte à un cluster de calcul de 16 GPUs (par exemple, deux instances P4d ou P4de) peut ne pas toujours s'adapter à un nœud de 8 GPUs (par exemple, une seule instance P4d ou P4de). En effet, la mémoire combinée de 8 GPUs est inférieure à la mémoire combinée de 16 GPUs, et la mémoire requise par GPU pour le sharding sur 8 GPUs est également supérieure à la mémoire par GPU pour le sharding 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 de plus amples informations, veuillez consulter [Partitionnement de l'état de l'optimiseur](model-parallel-extended-features-pytorch-optimizer-state-sharding.md).

**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](model-parallel-extended-features-pytorch-activation-checkpointing.md).

**Parallélisme de tenseur**
+ Le degré de parallélisme des tenseurs doit être une puissance de deux (2, 4, 8,..., 2 n), le degré maximum devant être égal au nombre de GPUs par nœud. Par exemple, si vous utilisez un nœud avec 8 GPUs, les nombres possibles pour le degré de parallélisme des tenseurs 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](model-parallel-extended-features-pytorch-tensor-parallelism.md).<a name="model-parallel-best-practices-configuration-pipeline-across-nodes"></a>

**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](model-parallel-extended-features-pytorch-tensor-parallelism-examples.md#model-parallel-extended-features-pytorch-tensor-and-pipeline-parallelism).
+ Pour obtenir une description des paramètres susmentionnés, consultez la section [Paramètres pour `smdistributed`](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#parameters-for-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 de plus amples informations, veuillez consulter [Déchargement de l'activation](model-parallel-extended-features-pytorch-activation-offloading.md).

### Référence de configurations
<a name="model-parallel-best-practices-configuration-reference"></a>

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
<a name="model-parallel-best-practices-modify-training-script"></a>
+ Avant d'utiliser les fonctionnalités de la bibliothèque SageMaker model parallel dans votre script d'entraînement, passez en revue[Conseils et pièges de configuration de la bibliothèque de parallélisme des modèles SageMaker distribués](model-parallel-customize-tips-pitfalls.md).
+ Pour lancer une tâche de formation plus rapidement, utilisez le [mode local de l'SageMaker IA](https://sagemaker.readthedocs.io/en/v2.199.0/overview.html?highlight=local%20mode#local-mode). 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. 

## Surveillance et enregistrement d'un travail de formation à l'aide de la console SageMaker AI et d'Amazon CloudWatch
<a name="model-parallel-best-practices-monitoring"></a>

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 par la console [SageMaker AI](https://console.aws.amazon.com/sagemaker/).

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

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

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

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

1. 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 de plus amples informations, veuillez consulter [Amazon CloudWatch Metrics pour le suivi et l'analyse des offres de formation](training-metrics.md).

## Permissions
<a name="model-parallel-best-practices-permissions"></a>

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](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/index.html), assurez-vous de disposer des autorisations appropriées pour votre rôle IAM, telles que les suivantes :
+ À utiliser [FSx pour Lustre](https://aws.amazon.com/fsx/), ajoutez [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess).
+ Pour utiliser Amazon S3 comme canal de données, ajoutez [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess).
+ Pour utiliser Docker, créez votre propre conteneur et le transférer vers Amazon ECR, ajoutez [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess).
+ Pour avoir un accès complet à l'utilisation de l'ensemble des fonctionnalités de l' SageMaker IA, ajoutez [https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess). 