

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.

# Organisez une formation distribuée avec la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA
<a name="data-parallel"></a>

La bibliothèque SMDDP ( SageMaker AI Distributed Data Parallelism) étend les capacités de SageMaker formation sur les modèles d'apprentissage profond avec une efficacité de mise à l'échelle quasi linéaire en fournissant des implémentations d'opérations de communication collective optimisées pour l'infrastructure. AWS 

Lorsqu’ils entraînent de grands modèles de machine learning (ML), comme les grands modèles de langage (LLM) et les modèles de diffusion, sur un vaste jeu de données d’entraînement, les professionnels du ML utilisent des clusters d’accélérateurs et des techniques d’entraînement distribué afin de réduire le temps d’entraînement ou de résoudre les contraintes de mémoire pour les modèles qui ne tiennent pas dans la mémoire de chaque GPU. Les professionnels du ML commencent souvent par utiliser plusieurs accélérateurs sur une seule instance, puis les mettent à l’échelle vers des clusters d’instances à mesure que leurs exigences en matière de charge de travail augmentent. Quand la taille des clusters augmente, la surcharge de communication entre les différents nœuds augmente elle aussi, ce qui entraîne une baisse globale des performances de calcul.

Pour résoudre ces problèmes de surcharge et de mémoire, la bibliothèque SMDDP propose les solutions suivantes.
+ La bibliothèque SMDDP optimise les tâches de formation pour l'infrastructure AWS réseau et la topologie des instances Amazon SageMaker AI ML.
+ La bibliothèque SMDDP améliore la communication entre les nœuds grâce à des implémentations `AllReduce` et à des opérations de communication `AllGather` collective optimisées pour l'infrastructure. AWS 

Pour plus de détails sur ce que proposent les bibliothèques SMDDP, consultez [Présentation de la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA](data-parallel-intro.md).

Pour plus d'informations sur l'entraînement avec la stratégie de modélisation parallèle proposée par l' SageMaker IA, voir également. [(Archivé) Bibliothèque SageMaker de parallélisme des modèles v1.x](model-parallel.md)

**Topics**
+ [Présentation de la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA](data-parallel-intro.md)
+ [Frameworks et types Régions AWS d'instances pris en charge](distributed-data-parallel-support.md)
+ [Formation distribuée avec la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA](data-parallel-modify-sdp.md)
+ [Exemples de bibliothèques de parallélisme de données Amazon SageMaker AI](distributed-data-parallel-v2-examples.md)
+ [Conseils de configuration pour la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA](data-parallel-config.md)
+ [Questions fréquentes concernant la bibliothèque Amazon SageMaker AI de parallélisme distribué des données](data-parallel-faq.md)
+ [Résolution des problèmes liés à la formation distribuée dans Amazon SageMaker AI](distributed-troubleshooting-data-parallel.md)
+ [SageMaker Notes de mise à jour de la bibliothèque de parallélisme des données AI](data-parallel-release-notes.md)

# Présentation de la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA
<a name="data-parallel-intro"></a>

La bibliothèque SageMaker AI Distributed Data Parallelism (SMDDP) est une bibliothèque de communication collective qui améliore les performances informatiques de l'entraînement parallèle aux données distribuées. La bibliothèque SMDDP permet de réduire la surcharge de communications liée aux principales opérations de communication collective en proposant les éléments suivants.

1. La bibliothèque propose des offres `AllReduce` optimisées pour AWS. `AllReduce`est une opération clé utilisée pour synchroniser les dégradés GPUs à la fin de chaque itération d'entraînement pendant l'entraînement aux données distribuées.

1. La bibliothèque propose des offres `AllGather` optimisées pour AWS. `AllGather`est une autre opération clé utilisée dans le cadre de l'apprentissage parallèle des données partagées, une technique de parallélisme de données économe en mémoire proposée par des bibliothèques populaires telles que la bibliothèque SageMaker AI model parallelism (SMP), DeepSpeed Zero Redundancy Optimizer (Zero) et Fully Sharded Data Parallelism (FSDP). PyTorch 

1. La bibliothèque optimise la node-to-node communication en utilisant pleinement l'infrastructure AWS réseau et la topologie d'instance Amazon EC2. 

La bibliothèque SMDDP peut augmenter la vitesse d’entraînement en améliorant les performances à mesure que vous faites évoluer votre cluster d’entraînement, avec une efficacité de mise à l’échelle quasi linéaire.

**Note**  
Les bibliothèques de formation distribuées par l' SageMaker IA sont disponibles via les conteneurs d'apprentissage AWS profond PyTorch et Hugging Face de SageMaker la plateforme de formation. Pour utiliser les bibliothèques, vous devez utiliser le SDK SageMaker Python ou le SageMaker APIs SDK direct pour Python (Boto3) ou. AWS Command Line Interface Tout au long de la documentation, les instructions et les exemples se concentrent sur l'utilisation des bibliothèques de formation distribuées avec le SDK SageMaker Python.

## Opérations de communication collective SMDDP optimisées pour les ressources AWS informatiques et l'infrastructure réseau
<a name="data-parallel-collective-operations"></a>

La bibliothèque SMDDP fournit des implémentations des `AllReduce` opérations `AllGather` collectives optimisées pour les ressources AWS informatiques et l'infrastructure réseau.

### Opération collective `AllReduce` de la bibliothèque SMDDP
<a name="data-parallel-allreduce"></a>

La bibliothèque SMDDP réalise un chevauchement optimal des opérations `AllReduce` avec la transmission vers l’arrière, ce qui améliore considérablement l’utilisation du GPU. Il atteint une efficacité de mise à l'échelle quasi linéaire et une vitesse d'apprentissage plus rapide en optimisant les opérations du noyau entre et CPUs. GPUs La bibliothèque effectue l’opération `AllReduce` en parallèle tandis que le GPU calcule les gradients, sans supprimer de cycles GPU, ce qui permet à la bibliothèque de réaliser les entraînements plus rapidement.
+  *Avantages CPUs* : La bibliothèque utilise deux CPUs `AllReduce` dégradés, déchargeant cette tâche du. GPUs 
+ *Utilisation améliorée du GPU* : le cluster GPUs se concentre sur le calcul des dégradés, en améliorant leur utilisation tout au long de la formation.

Le flux de travail de haut niveau de l’opération `AllReduce` de la bibliothèque SMDDP est le suivant.

1. La bibliothèque attribue des grades à GPUs (travailleurs).

1. À chaque itération, la bibliothèque divise chaque lot global par le nombre total d'employés (taille mondiale) et affecte de petits lots (partitions de lots) aux employés.
   + Le lot global a une taille de `(number of nodes in a cluster) * (number of GPUs per node) * (per batch shard)`. 
   + Une partition de lot (petit lot) est un sous-ensemble du jeu de données affecté à chaque GPU (employé) par itération. 

1. La bibliothèque lance un script d'entraînement sur chaque employé.

1. La bibliothèque gère les copies des poids et des gradients des modèles reçus des employés à la fin de chaque itération.

1. La bibliothèque synchronise les poids et les gradients des modèles entre les employés afin d'agréger un seul modèle entraîné.

Le diagramme d'architecture qui suit est un exemple de la façon dont la bibliothèque configure le parallélisme des données pour un cluster de 3 nœuds. 

 

![\[Schéma de l'architecture SMDDP AllReduce et du parallélisme des données\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/distributed/data-parallel/sdp-architecture.png)


### Opération collective `AllGather` de la bibliothèque SMDDP
<a name="data-parallel-allgather"></a>

`AllGather` est une opération collective dans laquelle chaque application de travail commence par un tampon d’entrée, puis concatène ou *rassemble* les tampons d’entrée de toutes les autres applications de travail dans un tampon de sortie.

**Note**  
L'opération `AllGather` collective SMDDP est disponible dans AWS Deep Learning Containers (DLC) pour les versions 2.0.1 `smdistributed-dataparallel>=2.0.1` et ultérieures PyTorch .

`AllGather` est largement utilisée dans les techniques de d’entraînement distribué telles que le parallélisme partitionné des données, où chaque application de travail détient une fraction d’un modèle, ou une couche partitionnée. Les applications de travail appellent `AllGather` avant les transmissions avant et arrière pour reconstruire les couches partitionnées. Les transmissions avant et arrière se poursuivent une fois que les paramètres sont *tous collectés*. Pendant la transmission arrière, chaque application de travail appelle également `ReduceScatter` pour collecter (réduire) les gradients et les répartir (disperser) en partitions de gradients afin de mettre à jour la couche partitionnée correspondante. [Pour plus de détails sur le rôle de ces opérations collectives dans le parallélisme des données fragmentées, consultez l'[implémentation du parallélisme des données partitionnées par la bibliothèque SMP, [Zero](https://deepspeed.readthedocs.io/en/latest/zero3.html#) dans la DeepSpeed documentation, et le blog sur le parallélisme des données](https://docs.aws.amazon.com/sagemaker/latest/dg/model-parallel-extended-features-pytorch-sharded-data-parallelism.html) entièrement partitionné. PyTorch ](https://engineering.fb.com/2021/07/15/open-source/fsdp/)

Comme AllGather les opérations collectives de ce type sont appelées à chaque itération, elles sont les principaux responsables de la surcharge de communication du GPU. L’accélération du calcul de ces opérations collectives se traduit directement par un temps d’entraînement plus court, sans aucun effet secondaire sur la convergence. Pour cela, la bibliothèque SMDDP propose des opérations `AllGather` optimisées pour les [instances P4d](https://aws.amazon.com/ec2/instance-types/p4/).

L’opération `AllGather` SMDDP utilise les techniques suivantes pour améliorer les performances de calcul sur les instances P4d.

1. Elle transfère les données entre les instances (inter-nœuds) via le réseau [Elastic Fabric Adapter (EFA)](https://aws.amazon.com/hpc/efa/) avec une topologie maillée. EFA est la solution AWS réseau à faible latence et à haut débit. Une topologie maillée pour la communication réseau entre nœuds est mieux adaptée aux caractéristiques de l'EFA et de l'infrastructure AWS réseau. Par rapport à la topologie en arborescence ou en anneau de NCCL qui implique plusieurs sauts de paquets, SMDDP évite d’accumuler la latence résultant de plusieurs sauts, car un seul est nécessaire. SMDDP implémente un algorithme de contrôle du débit réseau qui équilibre la charge de travail de chaque homologue de communication dans une topologie maillée, et permet d’obtenir un débit réseau global plus élevé.

1. Il adopte une [bibliothèque de copie de mémoire GPU à faible latence basée sur la technologie NVIDIA GPUDirect RDMA (GDRCopy)](https://github.com/NVIDIA/gdrcopy) pour coordonner le trafic réseau local NVLink et EFA. GDRCopy, une bibliothèque de copies de mémoire GPU à faible latence proposée par NVIDIA, fournit une communication à faible latence entre les processus du processeur et les noyaux CUDA du GPU. Grâce à cette technologie, la bibliothèque SMDDP est capable de canaliser le mouvement intra-nœud et inter-nœuds des données.

1. Cela réduit l’utilisation des multiprocesseurs de streaming GPU afin d’augmenter la puissance de calcul pour exécuter les noyaux des modèles. Les instances P4d et P4de sont équipées de la technologie NVIDIA A100 GPUs, qui possède chacune 108 multiprocesseurs de streaming. Alors que NCCL utilise jusqu’à 24 multiprocesseurs de streaming pour exécuter des opérations collectives, SMDDP en utilise moins de 9. Les noyaux de calcul du modèle récupèrent les multiprocesseurs de streaming enregistrés pour accélérer les calculs.

# Frameworks et types Régions AWS d'instances pris en charge
<a name="distributed-data-parallel-support"></a>

Avant d'utiliser la bibliothèque SMDDP ( SageMaker AI Distributed Data Parallelism), vérifiez quels sont les frameworks de machine learning et les types d'instances pris en charge et si les quotas sont suffisants dans votre compte et. AWS Région AWS

## Cadres pris en charge
<a name="distributed-data-parallel-supported-frameworks"></a>

Les tableaux suivants présentent les frameworks d'apprentissage profond et leurs versions pris en charge par l' SageMaker IA et le SMDDP. La bibliothèque SMDDP est disponible dans les conteneurs [SageMaker AI Framework, intégrée dans les conteneurs](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) [Docker distribués par la bibliothèque de parallélisme des SageMaker modèles (SMP) v2](distributed-model-parallel-support-v2.md#distributed-model-parallel-supported-frameworks-v2) ou téléchargeable sous forme de fichier binaire.

**Note**  
Pour vérifier les dernières mises à jour et notes de mises à jour de la bibliothèque SMDDP, consultez les [SageMaker Notes de mise à jour de la bibliothèque de parallélisme des données AI](data-parallel-release-notes.md).

**Topics**
+ [PyTorch](#distributed-data-parallel-supported-frameworks-pytorch)
+ [PyTorch Éclair](#distributed-data-parallel-supported-frameworks-lightning)
+ [Hugging Face Transformers](#distributed-data-parallel-supported-frameworks-transformers)
+ [TensorFlow (obsolète)](#distributed-data-parallel-supported-frameworks-tensorflow)

### PyTorch
<a name="distributed-data-parallel-supported-frameworks-pytorch"></a>


| PyTorch version | Version de la bibliothèque SMDDP | SageMaker Images du conteneur AI Framework préinstallées avec SMDDP | Images Docker SMP préinstallées avec SMDDP | URL du fichier binaire\$1\$1 | 
| --- | --- | --- | --- | --- | 
| v2.3.1 | smdistributed-dataparallel==v2.5.0 | Non disponible | 658645717510.dkr.ecr.<us-west-2>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.4.1/cu121/2024-10-09/smdistributed\$1dataparallel-2.5.0-cp311-cp311-linux\$1x86\$164.whl | 
| v2.3.0 | smdistributed-dataparallel==v2.3.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.3.0-gpu-py311-cu121-ubuntu20.04-sagemaker | Non disponible actuellement | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.3.0/cu121/2024-05-23/smdistributed\$1dataparallel-2.3.0-cp311-cp311-linux\$1x86\$164.whl | 
| v2.2.0 | smdistributed-dataparallel==v2.2.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.2.0/cu121/2024-03-04/smdistributed\$1dataparallel-2.2.0-cp310-cp310-linux\$1x86\$164.whl | 
| v2.1.0 | smdistributed-dataparallel==v2.1.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.1.2-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.1.0/cu121/2024-02-04/smdistributed\$1dataparallel-2.1.0-cp310-cp310-linux\$1x86\$164.whl | 
| v2.0.1 | smdistributed-dataparallel==v2.0.1 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/smdistributed\$1dataparallel-2.0.2-cp310-cp310-linux\$1x86\$164.whl | 
| v2.0.0 | smdistributed-dataparallel==v1.8.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.0-gpu-py310-cu118-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.0/cu118/2023-03-20/smdistributed\$1dataparallel-1.8.0-cp310-cp310-linux\$1x86\$164.whl | 
| v1.13.1 | smdistributed-dataparallel==v1.7.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.13.1-gpu-py39-cu117-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.13.1/cu117/2023-01-09/smdistributed\$1dataparallel-1.7.0-cp39-cp39-linux\$1x86\$164.whl | 
| v1.12.1 | smdistributed-dataparallel==v1.6.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.12.1-gpu-py38-cu113-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.12.1/cu113/2022-12-05/smdistributed\$1dataparallel-1.6.0-cp38-cp38-linux\$1x86\$164.whl | 
| v1.12.0 | smdistributed-dataparallel==v1.5.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.12.0-gpu-py38-cu113-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.12.0/cu113/2022-07-01/smdistributed\$1dataparallel-1.5.0-cp38-cp38-linux\$1x86\$164.whl | 
| v1.11.0 | smdistributed-dataparallel==v1.4.1 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.11.0-gpu-py38-cu113-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.11.0/cu113/2022-04-14/smdistributed\$1dataparallel-1.4.1-cp38-cp38-linux\$1x86\$164.whl | 

\$1\$1 Les URLs fichiers binaires sont destinés à installer la bibliothèque SMDDP dans des conteneurs personnalisés. Pour de plus amples informations, veuillez consulter [Créez votre propre conteneur Docker avec la bibliothèque SageMaker AI distributed data parallel library](data-parallel-bring-your-own-container.md).

**Note**  
La bibliothèque SMDDP est disponible Régions AWS là où les [conteneurs SageMaker AI Framework](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) et les [images Docker SMP](distributed-model-parallel-support-v2.md) sont en service.

**Note**  
La bibliothèque SMDDP v1.4.0 et versions ultérieures fonctionne comme un backend du parallélisme de données distribué ( PyTorch torch.distributed) (torch.parallel). DistributedDataParallel). Conformément à cette modification, les [smdistributed](https://sagemaker.readthedocs.io/en/stable/api/training/sdp_versions/latest/smd_data_parallel_pytorch.html#pytorch-api) suivants APIs pour le package PyTorch distribué sont devenus obsolètes.  
`smdistributed.dataparallel.torch.distributed` est obsolète Utilisez le package [torch.distributed](https://pytorch.org/docs/stable/distributed.html) à la place.
`smdistributed.dataparallel.torch.parallel.DistributedDataParallel` est obsolète Utilisez le [torch.nn.parallel. DistributedDataParallel](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html) API à la place.
Si vous devez utiliser les versions précédentes de la bibliothèque (v1.3.0 ou antérieure), consultez la documentation [archivée sur le parallélisme des données distribuées par l' SageMaker IA dans la documentation du](https://sagemaker.readthedocs.io/en/stable/api/training/sdp_versions/latest.html#documentation-archive) SDK AI *SageMaker Python*.

### PyTorch Éclair
<a name="distributed-data-parallel-supported-frameworks-lightning"></a>

La bibliothèque SMDDP est disponible pour PyTorch Lightning dans les conteneurs SageMaker AI Framework suivants PyTorch et dans les conteneurs Docker SMP.

**PyTorch Lightning v2**


| PyTorch Version Lightning | PyTorch version | Version de la bibliothèque SMDDP | SageMaker Images du conteneur AI Framework préinstallées avec SMDDP | Images Docker SMP préinstallées avec SMDDP | URL du fichier binaire\$1\$1 | 
| --- | --- | --- | --- | --- | --- | 
| 2.2.5 | 2.3.0 | smdistributed-dataparallel==v2.3.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.3.0-gpu-py311-cu121-ubuntu20.04-sagemaker | Non disponible actuellement | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.3.0/cu121/2024-05-23/smdistributed\$1dataparallel-2.3.0-cp311-cp311-linux\$1x86\$164.whl | 
| 2.2.0 | 2.2.0 | smdistributed-dataparallel==v2.2.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.2.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.2.0/cu121/2024-03-04/smdistributed\$1dataparallel-2.2.0-cp310-cp310-linux\$1x86\$164.whl | 
| 2.1.2 | 2.1.0 | smdistributed-dataparallel==v2.1.0 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker | 658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.1.2-gpu-py310-cu121 | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.1.0/cu121/2024-02-04/smdistributed\$1dataparallel-2.1.0-cp310-cp310-linux\$1x86\$164.whl | 
| 2.1.0 | 2.0.1 | smdistributed-dataparallel==v2.0.1 | 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker | Non disponible | https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/smdistributed\$1dataparallel-2.0.2-cp310-cp310-linux\$1x86\$164.whl | 

**PyTorch Lightning v1**


| PyTorch Version Lightning | PyTorch version | Version de la bibliothèque SMDDP | SageMaker Images du conteneur AI Framework préinstallées avec SMDDP | URL du fichier binaire\$1\$1 | 
| --- | --- | --- | --- | --- | 
|  1.7.2 1.7.0 1.6.4 1.6.3 1.5,10  | 1.12.0 | smdistributed-dataparallel==v1.5.0 | 763104351884.dkr.ecr. <region>.amazonaws.com/pytorch-training:1.12.0-gpu-py38-cu113-ubuntu20.04-sagemaker | https://smdataparallel.s3.amazonaws.com/binary/pytorch/1.12.0/cu113/05.07-01/smdistributed\$1dataparallel-1.5.0-cp38-cp38-linux\$1x86\$164.whl | 

\$1\$1 Les URLs fichiers binaires sont destinés à installer la bibliothèque SMDDP dans des conteneurs personnalisés. Pour de plus amples informations, veuillez consulter [Créez votre propre conteneur Docker avec la bibliothèque SageMaker AI distributed data parallel library](data-parallel-bring-your-own-container.md).

**Note**  
PyTorch Lightning et ses bibliothèques d'utilitaires, telles que Lightning Bolts, ne sont pas préinstallés dans le PyTorch DLCs. Lorsque vous créez un PyTorch estimateur d' SageMaker IA et que vous soumettez une demande de formation à l'[étape 2](https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-use-api.html#data-parallel-framework-estimator), vous devez fournir l'installation `pytorch-lightning` et l'`requirements.txt`insérer `lightning-bolts` dans le conteneur de PyTorch formation SageMaker AI.  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
Pour plus d'informations sur la spécification du répertoire source dans lequel placer le `requirements.txt` fichier avec votre script d'entraînement et la soumission d'une tâche, consultez la section [Utilisation de bibliothèques tierces](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12) dans la *documentation du SDK Amazon SageMaker AI Python*.

### Hugging Face Transformers
<a name="distributed-data-parallel-supported-frameworks-transformers"></a>

Les AWS Deep Learning Containers for Hugging Face utilisent SageMaker les Training Containers PyTorch pour TensorFlow et comme images de base. Pour consulter les versions et les versions PyTorch associées de la bibliothèque Hugging Face Transformers, consultez les dernières versions de [Hugging Face Containers TensorFlow et les versions précédentes de Hugging](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#huggingface-training-containers) [Face Container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#prior-hugging-face-container-versions).

### TensorFlow (obsolète)
<a name="distributed-data-parallel-supported-frameworks-tensorflow"></a>

**Important**  
La bibliothèque SMDDP a cessé de prendre en charge TensorFlow et n'est plus disponible DLCs depuis la TensorFlow version 2.11.0. Le tableau suivant répertorie les versions précédentes DLCs pour lesquelles TensorFlow la bibliothèque SMDDP est installée.


| TensorFlow version | Version de la bibliothèque SMDDP | 
| --- | --- | 
| 2.9.1, 2.10.1, 2.11.0 |  smdistributed-dataparallel==v1.4.1  | 
| 2.8.3 |  smdistributed-dataparallel==v1.3.0  | 

## Régions AWS
<a name="distributed-data-parallel-availablity-zone"></a>

La bibliothèque SMDDP est disponible partout Régions AWS où les [images [AWS Deep Learning Containers for SageMaker AI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) et SMP Docker](distributed-model-parallel-support-v2.md) sont en service.

## Types d’instance pris en charge
<a name="distributed-data-parallel-supported-instance-types"></a>

La bibliothèque SMDDP requiert l’un des types d’instances suivants.


| Type d’instance | 
| --- | 
| ml.p3dn.24xlarge\$1 | 
| ml.p4d.24xlarge | 
| ml.p4de.24xlarge | 

**Astuce**  
Pour que vous puissiez exécuter correctement un entraînement distribué sur les types d’instances compatibles EFA, vous devez activer le trafic entre les instances en configurant le groupe de sécurité de votre VPC afin d’autoriser tout le trafic entrant et sortant vers et depuis le groupe de sécurité proprement dit. Pour découvrir comment configurer les règles du groupe de sécurité, consultez [Étape 1 : Préparer un groupe de sécurité activé pour les EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security) dans le *Guide de l’utilisateur Amazon EC2*.

**Important**  
\$1 La bibliothèque SMDDP a cessé de prendre en charge l’optimisation de ses opérations de communication collective sur les instances P3. Bien que vous puissiez toujours utiliser l’opération collective optimisée `AllReduce` SMDDP sur les instances `ml.p3dn.24xlarge`, il n’y aura plus d’assistance au développement pour améliorer les performances sur ce type d’instance. Notez que l’opération collective optimisée `AllGather` SMDDP n’est disponible que pour les instances P4.

Pour les spécifications des types d’instances, consultez la section **Calcul accéléré** sur la page [Types d’instances Amazon EC2](https://aws.amazon.com/ec2/instance-types/). Pour plus d'informations sur la tarification des instances, consultez [Amazon SageMaker Pricing](https://aws.amazon.com/sagemaker/pricing/).

Si vous avez rencontré un message d'erreur similaire au suivant, suivez les instructions de la section [Demander une augmentation du quota de service pour les ressources d' SageMaker IA](https://docs.aws.amazon.com/sagemaker/latest/dg/regions-quotas.html#service-limit-increase-request-procedure).

```
ResourceLimitExceeded: An error occurred (ResourceLimitExceeded) when calling
the CreateTrainingJob operation: The account-level service limit 'ml.p3dn.24xlarge
for training job usage' is 0 Instances, with current utilization of 0 Instances
and a request delta of 1 Instances.
Please contact AWS support to request an increase for this limit.
```

# Formation distribuée avec la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA
<a name="data-parallel-modify-sdp"></a>

La bibliothèque de parallélisme distribué des données (SMDDP) basée sur l' SageMaker IA est conçue pour être facile à utiliser et pour permettre une intégration parfaite avec. PyTorch

Lorsque vous entraînez un modèle d'apprentissage profond à l'aide de la bibliothèque SMDDP sur l' SageMaker IA, vous pouvez vous concentrer sur la rédaction de votre script de formation et sur l'entraînement du modèle. 

Pour commencer, importez la bibliothèque SMDDP afin d’utiliser ses opérations collectives optimisées pour AWS. Les rubriques suivantes fournissent des instructions sur les éléments à ajouter à votre script d’entraînement en fonction de l’opération collective que vous souhaitez optimiser.

**Topics**
+ [Adaptation de votre script d’entraînement pour utiliser les opérations collectives SMDDP](data-parallel-modify-sdp-select-framework.md)
+ [Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker](data-parallel-use-api.md)

# Adaptation de votre script d’entraînement pour utiliser les opérations collectives SMDDP
<a name="data-parallel-modify-sdp-select-framework"></a>

Les exemples de scripts d'entraînement fournis dans cette section sont simplifiés et ne mettent en évidence que les modifications nécessaires pour activer la bibliothèque de parallélisme distribué des données (SMDDP) SageMaker AI dans votre script de formation. Pour des exemples de end-to-end blocs-notes Jupyter qui montrent comment exécuter une tâche de formation distribuée avec la bibliothèque SMDDP, voir. [Exemples de bibliothèques de parallélisme de données Amazon SageMaker AI](distributed-data-parallel-v2-examples.md)

**Topics**
+ [Utilisez la bibliothèque SMDDP dans votre script d'entraînement PyTorch](data-parallel-modify-sdp-pt.md)
+ [Utiliser la bibliothèque SMDDP dans votre script d'entraînement PyTorch Lightning](data-parallel-modify-sdp-pt-lightning.md)
+ [Utiliser la bibliothèque SMDDP dans votre script d' TensorFlow entraînement (obsolète)](data-parallel-modify-sdp-tf2.md)

# Utilisez la bibliothèque SMDDP dans votre script d'entraînement PyTorch
<a name="data-parallel-modify-sdp-pt"></a>

[À partir de la bibliothèque SageMaker AI Distributed Data Parallelism (SMDDP) v1.4.0, vous pouvez utiliser la bibliothèque comme option de backend pour le package distribué. PyTorch ](https://pytorch.org/tutorials/beginner/dist_overview.html) Pour utiliser le SMDDP `AllReduce` et les opérations `AllGather` collectives, il vous suffit d'importer la bibliothèque SMDDP au début de votre script de formation et de définir SMDDP comme serveur principal des modules distribués lors de l'initialisation du groupe de PyTorch processus. Avec une seule ligne de spécification du backend, vous pouvez conserver tous les modules PyTorch distribués natifs et l'intégralité du script de formation inchangés. [Les extraits de code suivants montrent comment utiliser la bibliothèque SMDDP comme backend de packages de formation distribués PyTorch basés sur la distribution : distributed [PyTorch data parallel (DDP), [PyTorch full sharded data parallelism](https://pytorch.org/docs/stable/fsdp.html) (FSDP)](https://pytorch.org/docs/stable/notes/ddp.html) et Megatron-. [DeepSpeed](https://github.com/microsoft/DeepSpeed)DeepSpeed](https://github.com/microsoft/Megatron-DeepSpeed)

## Pour PyTorch DDP ou FSDP
<a name="data-parallel-enable-for-ptddp-ptfsdp"></a>

Initialisez le groupe de processus comme suit.

```
import torch.distributed as dist
import smdistributed.dataparallel.torch.torch_smddp

dist.init_process_group(backend="smddp")
```

**Note**  
(Pour les tâches PyTorch DDP uniquement) Le `smddp` backend ne prend actuellement pas en charge la création de groupes de sous-processus avec l'API. `torch.distributed.new_group()` Vous ne pouvez pas utiliser le système dorsal `smddp` en même temps que d’autres systèmes dorsaux de groupes de processus tels que `NCCL` et `Gloo`.

## Pour DeepSpeed ou Megatron- DeepSpeed
<a name="data-parallel-enable-for-deepspeed"></a>

Initialisez le groupe de processus comme suit.

```
import deepspeed
import smdistributed.dataparallel.torch.torch_smddp

deepspeed.init_distributed(dist_backend="smddp")
```

**Note**  
Pour utiliser la fonction `AllGather` SMDDP avec les lanceurs basés sur `mpirun` (`smdistributed` et `pytorchddp`) dans [Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker](data-parallel-use-api.md), vous devez également définir la variable d’environnement suivante dans votre script d’entraînement.  

```
export SMDATAPARALLEL_OPTIMIZE_SDP=true
```

Pour obtenir des conseils généraux sur la rédaction d'un script de formation PyTorch FSDP, voir [Advanced Model Training with Fully Sharded Data Parallel (FSDP](https://pytorch.org/tutorials/intermediate/FSDP_adavnced_tutorial.html)) dans la documentation. PyTorch

Pour obtenir des conseils généraux sur la rédaction d'un script de formation PyTorch DDP, consultez [Getting started with distributed data parallel](https://pytorch.org/tutorials/intermediate/ddp_tutorial.html) dans la PyTorch documentation.

Une fois que vous avez terminé d’adapter votre scénario d’entraînement, passez à [Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker](data-parallel-use-api.md).

# Utiliser la bibliothèque SMDDP dans votre script d'entraînement PyTorch Lightning
<a name="data-parallel-modify-sdp-pt-lightning"></a>

Si vous souhaitez utiliser votre script d'entraînement [PyTorchLightning](https://pytorch-lightning.readthedocs.io/en/latest/starter/introduction.html) et exécuter une tâche de formation parallèle aux données distribuées dans SageMaker AI, vous pouvez exécuter la tâche de formation en modifiant le moins possible votre script de formation. Les modifications nécessaires sont les suivantes : importation des PyTorch modules de la `smdistributed.dataparallel` bibliothèque, configuration des variables d'environnement pour que PyTorch Lightning accepte les variables d'environnement SageMaker IA prédéfinies par le kit de SageMaker formation, et activation de la bibliothèque SMDDP en configurant le backend du groupe de processus sur. `"smddp"` Pour en savoir plus, suivez les instructions ci-dessous qui décomposent les étapes avec des exemples de code.

**Note**  
Le support PyTorch Lightning est disponible dans la bibliothèque SageMaker AI data parallel v1.5.0 et versions ultérieures.

## PyTorch Lightning == v2.1.0 et PyTorch == 2.0.1
<a name="smddp-pt-201-lightning-210"></a>

1. Importez la bibliothèque `pytorch_lightning` et les modules `smdistributed.dataparallel.torch`.

   ```
   import lightning as pl
   import smdistributed.dataparallel.torch.torch_smddp
   ```

1. Instanciez le. [LightningEnvironment](https://pytorch-lightning.readthedocs.io/en/stable/api/pytorch_lightning.plugins.environments.LightningEnvironment.html)

   ```
   from lightning.fabric.plugins.environments.lightning import LightningEnvironment
   
   env = LightningEnvironment()
   env.world_size = lambda: int(os.environ["WORLD_SIZE"])
   env.global_rank = lambda: int(os.environ["RANK"])
   ```

1. **Pour PyTorch DDP** : créez un objet de la [DDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.DDPStrategy.html)classe avec `"smddp"` pour `process_group_backend` et `"gpu"` pour`accelerator`, et transmettez-le à la classe [Trainer](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html).

   ```
   import lightning as pl
   from lightning.pytorch.strategies import DDPStrategy
   
   ddp = DDPStrategy(
       cluster_environment=env, 
       process_group_backend="smddp", 
       accelerator="gpu"
   )
   
   trainer = pl.Trainer(
       max_epochs=200, 
       strategy=ddp, 
       devices=num_gpus, 
       num_nodes=num_nodes
   )
   ```

   **Pour le PyTorch FSDP** : créez un objet de la [FSDPStrategy](https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.strategies.FSDPStrategy.html)classe (avec la [politique d'encapsulage](https://pytorch.org/docs/stable/fsdp.html) de votre choix) avec `"smddp"` for `process_group_backend` et `"gpu"` for`accelerator`, et transmettez-le à la classe [Trainer](https://pytorch-lightning.readthedocs.io/en/stable/common/trainer.html).

   ```
   import lightning as pl
   from lightning.pytorch.strategies import FSDPStrategy
   
   from functools import partial
   from torch.distributed.fsdp.wrap import size_based_auto_wrap_policy
   
   policy = partial(
       size_based_auto_wrap_policy, 
       min_num_params=10000
   )
   
   fsdp = FSDPStrategy(
       auto_wrap_policy=policy,
       process_group_backend="smddp", 
       cluster_environment=env
   )
   
   trainer = pl.Trainer(
       max_epochs=200, 
       strategy=fsdp, 
       devices=num_gpus, 
       num_nodes=num_nodes
   )
   ```

Une fois que vous avez terminé d’adapter votre scénario d’entraînement, passez à [Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker](data-parallel-use-api.md). 

**Note**  
Lorsque vous créez un PyTorch estimateur d' SageMaker IA et que vous soumettez une demande de formation dans[Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker](data-parallel-use-api.md), vous devez fournir l'installation `pytorch-lightning` et l'`requirements.txt`inclure `lightning-bolts` dans le conteneur de PyTorch formation SageMaker AI.  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
Pour plus d'informations sur la spécification du répertoire source dans lequel placer le `requirements.txt` fichier avec votre script d'entraînement et la soumission d'une tâche, consultez la section [Utilisation de bibliothèques tierces](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12) dans la *documentation du SDK Amazon SageMaker AI Python*.

# Utiliser la bibliothèque SMDDP dans votre script d' TensorFlow entraînement (obsolète)
<a name="data-parallel-modify-sdp-tf2"></a>

**Important**  
La bibliothèque SMDDP a cessé de prendre en charge TensorFlow et n'est plus disponible DLCs depuis la TensorFlow version 2.11.0. Pour trouver la version précédente TensorFlow DLCs avec la bibliothèque SMDDP installée, voir. [Cadres pris en charge](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks)

Les étapes suivantes vous montrent comment modifier un script d' TensorFlow entraînement pour utiliser la bibliothèque de données parallèles distribuées d' SageMaker AI.  

La bibliothèque APIs est conçue pour être similaire à Horovod APIs. Pour plus de détails sur chaque API proposée par la bibliothèque TensorFlow, consultez la [documentation de l' TensorFlow API SageMaker AI distributed data parallel](https://sagemaker.readthedocs.io/en/stable/api/training/smd_data_parallel.html#api-documentation).

**Note**  
SageMaker AI distributed data parallel est adaptable aux scripts de TensorFlow formation composés de modules de `tf` base, à l'exception `tf.keras` des modules. SageMaker AI distributed data parallel n'est pas compatible TensorFlow avec l'implémentation de Keras.

**Note**  
La bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA prend en charge la précision mixte automatique (AMP) prête à l'emploi. Pour activer l'AMP, il vous suffit de modifier le cadre de votre script d'entraînement. Si des dégradés sont présents FP16, la bibliothèque de parallélisme de données SageMaker AI exécute ses `AllReduce` opérations dans. FP16 Pour plus d'informations sur l'implémentation APIs de l'AMP dans votre script d'entraînement, consultez les ressources suivantes :  
[Frameworks : TensorFlow](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow) dans la *documentation sur les performances du Deep Learning de NVIDIA*
[Précision mixte automatique pour deep learning](https://developer.nvidia.com/automatic-mixed-precision) dans les *Documents du développeur NVIDIA*
[TensorFlow précision mitigée APIs](https://www.tensorflow.org/guide/mixed_precision) dans la *TensorFlowdocumentation*

1. Importez le TensorFlow client de la bibliothèque et initialisez-le.

   ```
   import smdistributed.dataparallel.tensorflow as sdp 
   sdp.init()
   ```

1. Épinglez chaque GPU à un processus `smdistributed.dataparallel` unique avec `local_rank` : cela fait référence au rang relatif du processus au sein d'un nœud donné. L’API `sdp.tensorflow.local_rank()` vous indique le rang local du dispositif. Le nœud principal est le rang 0, et les nœuds des employés sont les rangs 1, 2, 3, etc. Ceci est invoqué dans le bloc de code suivant en tant que`sdp.local_rank()`. `set_memory_growth`n'est pas directement lié à l' SageMaker IA distribuée, mais doit être configuré pour une formation distribuée avec TensorFlow. 

   ```
   gpus = tf.config.experimental.list_physical_devices('GPU')
   for gpu in gpus:
       tf.config.experimental.set_memory_growth(gpu, True)
   if gpus:
       tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')
   ```

1. Mettez à l'échelle le taux d'apprentissage en fonction du nombre d'employés. L'API `sdp.tensorflow.size()` vous indique le nombre d'employés dans le cluster. Cela est appelé sous `sdp.size()` dans le bloc de code suivant. 

   ```
   learning_rate = learning_rate * sdp.size()
   ```

1. Utilisez le `DistributedGradientTape` de la bibliothèque pour optimiser les opérations `AllReduce` pendant l'entraînement. Cela recouvre `tf.GradientTape`.  

   ```
   with tf.GradientTape() as tape:
         output = model(input)
         loss_value = loss(label, output)
       
   # SageMaker AI data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape
   tape = sdp.DistributedGradientTape(tape)
   ```

1. Diffusez les variables initiales du modèle, du nœud principal (rang 0) vers tous les nœuds d'employés (rangs 1 à n). Cela est indispensable pour garantir une initialisation cohérente dans tous les rangs des employés. Utilisez l'API `sdp.tensorflow.broadcast_variables` après l'initialisation des variables du modèle et de l'optimiseur. Ceci est invoqué dans le bloc de code suivant comme `sdp.broadcast_variables()`. 

   ```
   sdp.broadcast_variables(model.variables, root_rank=0)
   sdp.broadcast_variables(opt.variables(), root_rank=0)
   ```

1. Enfin, modifiez votre script de sorte à enregistrer les points de contrôle sur le nœud principal uniquement. Le nœud principal a un modèle synchronisé. Cela évite également que les nœuds d'employés écrasent les points de contrôle et les endommagent éventuellement. 

   ```
   if sdp.rank() == 0:
       checkpoint.save(checkpoint_dir)
   ```

Voici un exemple de script d' TensorFlow entraînement pour un entraînement distribué avec la bibliothèque.

```
import tensorflow as tf

# SageMaker AI data parallel: Import the library TF API
import smdistributed.dataparallel.tensorflow as sdp

# SageMaker AI data parallel: Initialize the library
sdp.init()

gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)
if gpus:
    # SageMaker AI data parallel: Pin GPUs to a single library process
    tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')

# Prepare Dataset
dataset = tf.data.Dataset.from_tensor_slices(...)

# Define Model
mnist_model = tf.keras.Sequential(...)
loss = tf.losses.SparseCategoricalCrossentropy()

# SageMaker AI data parallel: Scale Learning Rate
# LR for 8 node run : 0.000125
# LR for single node run : 0.001
opt = tf.optimizers.Adam(0.000125 * sdp.size())

@tf.function
def training_step(images, labels, first_batch):
    with tf.GradientTape() as tape:
        probs = mnist_model(images, training=True)
        loss_value = loss(labels, probs)

    # SageMaker AI data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape
    tape = sdp.DistributedGradientTape(tape)

    grads = tape.gradient(loss_value, mnist_model.trainable_variables)
    opt.apply_gradients(zip(grads, mnist_model.trainable_variables))

    if first_batch:
       # SageMaker AI data parallel: Broadcast model and optimizer variables
       sdp.broadcast_variables(mnist_model.variables, root_rank=0)
       sdp.broadcast_variables(opt.variables(), root_rank=0)

    return loss_value

...

# SageMaker AI data parallel: Save checkpoints only from master node.
if sdp.rank() == 0:
    checkpoint.save(checkpoint_dir)
```

Une fois que vous avez terminé d'adapter votre scénario d'entraînement, passez à [Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker](data-parallel-use-api.md). 

# Lancement de tâches de formation distribuées avec SMDDP à l'aide du SDK Python SageMaker
<a name="data-parallel-use-api"></a>

Pour exécuter une tâche de formation distribuée avec votre script adapté depuis[Adaptation de votre script d’entraînement pour utiliser les opérations collectives SMDDP](data-parallel-modify-sdp-select-framework.md), utilisez le framework du SDK SageMaker Python ou des estimateurs génériques en spécifiant le script d'entraînement préparé comme script de point d'entrée et la configuration d'entraînement distribuée.

Cette page explique comment utiliser le [SDK SageMaker AI Python](https://sagemaker.readthedocs.io/en/stable/api/training/index.html) de deux manières.
+ Si vous souhaitez adopter rapidement votre tâche de formation distribuée en SageMaker IA, configurez une classe d' SageMaker estimateurs d'IA [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#sagemaker.pytorch.estimator.PyTorch)ou de [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)framework. L'estimateur du framework sélectionne votre script d'entraînement et fait automatiquement correspondre l'URI d'image correcte des Deep Learning Containers (DLC) [prédéfinis PyTorch ou des TensorFlow Deep Learning Containers (DLC)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only), en fonction de la valeur spécifiée pour le paramètre. `framework_version`
+ Si vous souhaitez étendre l'un des conteneurs prédéfinis ou créer un conteneur personnalisé pour créer votre propre environnement ML avec l' SageMaker IA, utilisez la `Estimator` classe générique SageMaker AI et spécifiez l'URI de l'image du conteneur Docker personnalisé hébergé dans votre Amazon Elastic Container Registry (Amazon ECR).

Vos ensembles de données de formation doivent être stockés dans [Amazon S3 ou Amazon FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) Région AWS dans lequel vous lancez votre formation. Si vous utilisez des blocs-notes Jupyter, vous devez disposer d'une instance de SageMaker bloc-notes ou d'une application SageMaker Studio Classic exécutée dans le même bloc-notes. Région AWS Pour plus d'informations sur le stockage de vos données d'entraînement, consultez la documentation sur les [entrées de données du SDK SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#use-file-systems-as-training-input). 

**Astuce**  
Nous vous recommandons d'utiliser Amazon FSx for Lustre au lieu d'Amazon S3 afin d'améliorer les performances de formation. Amazon FSx offre un débit plus élevé et une latence plus faible qu'Amazon S3.

**Astuce**  
Pour que vous puissiez exécuter correctement un entraînement distribué sur les types d’instances compatibles EFA, vous devez activer le trafic entre les instances en configurant le groupe de sécurité de votre VPC afin d’autoriser tout le trafic entrant et sortant vers et depuis le groupe de sécurité proprement dit. Pour découvrir comment configurer les règles du groupe de sécurité, consultez [Étape 1 : Préparer un groupe de sécurité activé pour les EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security) dans le *Guide de l’utilisateur Amazon EC2*.

Sélectionnez l’une des rubriques suivantes pour obtenir des instructions sur la manière d’exécuter une tâche d’entraînement distribué de votre script d’entraînement. Après avoir lancé une tâche de formation, vous pouvez surveiller l'utilisation du système et les performances des modèles à l'aide [SageMaker Débogueur Amazon](train-debugger.md) d'Amazon CloudWatch.

En plus de suivre les instructions des rubriques suivantes pour en savoir plus sur les détails techniques, nous vous recommandons de consulter les [Exemples de bibliothèques de parallélisme de données Amazon SageMaker AI](distributed-data-parallel-v2-examples.md) pour démarrer.

**Topics**
+ [Utiliser les estimateurs du PyTorch framework dans le SDK Python SageMaker](data-parallel-framework-estimator.md)
+ [Utilisez l'estimateur générique basé sur l' SageMaker IA pour étendre les conteneurs DLC prédéfinis](data-parallel-use-python-skd-api.md)
+ [Créez votre propre conteneur Docker avec la bibliothèque SageMaker AI distributed data parallel library](data-parallel-bring-your-own-container.md)

# Utiliser les estimateurs du PyTorch framework dans le SDK Python SageMaker
<a name="data-parallel-framework-estimator"></a>

Vous pouvez lancer une formation distribuée en ajoutant l'`distribution`argument aux estimateurs du framework d' SageMaker IA, [https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#sagemaker.pytorch.estimator.PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html#sagemaker.pytorch.estimator.PyTorch)ou. [https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator) Pour plus de détails, choisissez l'un des frameworks pris en charge par la bibliothèque SageMaker AI Distributed Data Parallelism (SMDDP) parmi les sélections suivantes.

------
#### [ PyTorch ]

Les options de lancement suivantes sont disponibles pour lancer une formation PyTorch distribuée.
+ `pytorchddp`— Cette option exécute `mpirun` et configure les variables d'environnement nécessaires à l'exécution de formations PyTorch distribuées sur l' SageMaker IA. Pour utiliser cette option, transmettez le dictionnaire suivant au paramètre `distribution`.

  ```
  { "pytorchddp": { "enabled": True } }
  ```
+ `torch_distributed`— Cette option exécute `torchrun` et configure les variables d'environnement nécessaires à l'exécution de formations PyTorch distribuées sur l' SageMaker IA. Pour utiliser cette option, transmettez le dictionnaire suivant au paramètre `distribution`.

  ```
  { "torch_distributed": { "enabled": True } }
  ```
+ `smdistributed`— Cette option fonctionne également`mpirun`, mais elle permet de `smddprun` configurer les variables d'environnement nécessaires à l'exécution d'une formation PyTorch distribuée sur l' SageMaker IA.

  ```
  { "smdistributed": { "dataparallel": { "enabled": True } } }
  ```

Si vous avez choisi de remplacer la fonction `AllGather` NCCL par la fonction `AllGather` SMDDP, vous pouvez utiliser les trois options. Choisissez une option qui correspond à votre cas d’utilisation.

Si vous avez choisi de remplacer la fonction `AllReduce` NCCL par la fonction `AllReduce` SMDDP, vous devez choisir l’une des options basées sur `mpirun` suivantes : `smdistributed` ou `pytorchddp`. Vous pouvez également ajouter d’autres options MPI comme suit.

```
{ 
    "pytorchddp": {
        "enabled": True, 
        "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"
    }
}
```

```
{ 
    "smdistributed": { 
        "dataparallel": {
            "enabled": True, 
            "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"
        }
    }
}
```

L'exemple de code suivant montre la structure de base d'un PyTorch estimateur avec des options d'entraînement distribuées.

```
from sagemaker.pytorch import PyTorch

pt_estimator = PyTorch(
    base_job_name="training_job_name_prefix",
    source_dir="subdirectory-to-your-code",
    entry_point="adapted-training-script.py",
    role="SageMakerRole",
    py_version="py310",
    framework_version="2.0.1",

    # For running a multi-node distributed training job, specify a value greater than 1
    # Example: 2,3,4,..8
    instance_count=2,

    # Instance types supported by the SageMaker AI data parallel library: 
    # ml.p4d.24xlarge, ml.p4de.24xlarge
    instance_type="ml.p4d.24xlarge",

    # Activate distributed training with SMDDP
    distribution={ "pytorchddp": { "enabled": True } }  # mpirun, activates SMDDP AllReduce OR AllGather
    # distribution={ "torch_distributed": { "enabled": True } }  # torchrun, activates SMDDP AllGather
    # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }  # mpirun, activates SMDDP AllReduce OR AllGather
)

pt_estimator.fit("s3://bucket/path/to/training/data")
```

**Note**  
PyTorch Lightning et ses bibliothèques d'utilitaires, telles que Lightning Bolts, ne sont pas préinstallés dans l' SageMaker IA PyTorch DLCs. Créez le fichier `requirements.txt` suivant et enregistrez-le dans le répertoire source où vous enregistrez le script d’entraînement.  

```
# requirements.txt
pytorch-lightning
lightning-bolts
```
Par exemple, le répertoire de type arborescence doit être similaire à ce qui suit.  

```
├── pytorch_training_launcher_jupyter_notebook.ipynb
└── sub-folder-for-your-code
    ├──  adapted-training-script.py
    └──  requirements.txt
```
Pour plus d'informations sur la spécification du répertoire source dans lequel placer le `requirements.txt` fichier avec votre script d'entraînement et la soumission d'une tâche, consultez la section [Utilisation de bibliothèques tierces](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#id12) dans la *documentation du SDK Amazon SageMaker AI Python*.

**Considérations relatives à l’activation des opérations collectives SMDDP et à l’utilisation des bonnes options de lanceur d’entraînement distribué**
+ Les fonctions `AllReduce` et `AllGather` SMDDP ne sont actuellement pas compatibles entre elles.
+ La fonction `AllReduce` SMDDP est activée par défaut lors de l’utilisation de `smdistributed` ou de `pytorchddp`, qui sont des lanceurs basés sur `mpirun`, et la fonction `AllGather` NCCL est utilisée.
+ La fonction `AllGather` SMDDP est activée par défaut lors de l’utilisation du lanceur `torch_distributed` et `AllReduce` revient vers NCCL.
+ La fonction `AllGather` SMDDP peut également être activée lors de l’utilisation des lanceurs basés sur `mpirun` avec une variable d’environnement supplémentaire définie comme suit.

  ```
  export SMDATAPARALLEL_OPTIMIZE_SDP=true
  ```

------
#### [ TensorFlow ]

**Important**  
La bibliothèque SMDDP a cessé de prendre en charge TensorFlow et n'est plus disponible DLCs depuis la TensorFlow version 2.11.0. Pour trouver la version précédente TensorFlow DLCs avec la bibliothèque SMDDP installée, voir. [TensorFlow (obsolète)](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks-tensorflow)

```
from sagemaker.tensorflow import TensorFlow

tf_estimator = TensorFlow(
    base_job_name = "training_job_name_prefix",
    entry_point="adapted-training-script.py",
    role="SageMakerRole",
    framework_version="2.11.0",
    py_version="py38",

    # For running a multi-node distributed training job, specify a value greater than 1
    # Example: 2,3,4,..8
    instance_count=2,

    # Instance types supported by the SageMaker AI data parallel library: 
    # ml.p4d.24xlarge, ml.p3dn.24xlarge, and ml.p3.16xlarge
    instance_type="ml.p3.16xlarge",

    # Training using the SageMaker AI data parallel distributed training strategy
    distribution={ "smdistributed": { "dataparallel": { "enabled": True } } }
)

tf_estimator.fit("s3://bucket/path/to/training/data")
```

------

# Utilisez l'estimateur générique basé sur l' SageMaker IA pour étendre les conteneurs DLC prédéfinis
<a name="data-parallel-use-python-skd-api"></a>

Vous pouvez personnaliser les conteneurs SageMaker IA prédéfinis ou les étendre pour répondre aux exigences fonctionnelles supplémentaires de votre algorithme ou modèle que l'image SageMaker AI Docker prédéfinie ne prend pas en charge. Pour apprendre comment étendre un conteneur précréé, consultez [Étendre un conteneur précréé](https://docs.aws.amazon.com/sagemaker/latest/dg/prebuilt-containers-extend.html).

Pour étendre un conteneur prédéfini ou adapter votre propre conteneur à l’utilisation de la bibliothèque, vous devez utiliser l’une des images répertoriées dans [Cadres pris en charge](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks).

**Note**  
À partir des TensorFlow versions 2.4.1 et PyTorch 1.8.1, le framework SageMaker AI DLCs prend en charge les types d'instances compatibles EFA. Nous vous recommandons d'utiliser les images du DLC contenant la TensorFlow version 2.4.1 ou ultérieure et la version PyTorch 1.8.1 ou ultérieure. 

Par exemple, si vous utilisez PyTorch, votre Dockerfile doit contenir une `FROM` instruction similaire à la suivante :

```
# SageMaker AI PyTorch image
FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/pytorch-training:<image-tag>

ENV PATH="/opt/ml/code:${PATH}"

# this environment variable is used by the SageMaker AI PyTorch container to determine our user code directory.
ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code

# /opt/ml and all subdirectories are utilized by SageMaker AI, use the /code subdirectory to store your user code.
COPY train.py /opt/ml/code/train.py

# Defines cifar10.py as script entrypoint
ENV SAGEMAKER_PROGRAM train.py
```

Vous pouvez personnaliser davantage votre propre conteneur Docker pour qu'il fonctionne avec l' SageMaker IA à l'aide de la [boîte à outils de SageMaker formation](https://github.com/aws/sagemaker-training-toolkit) et du fichier binaire de la bibliothèque SageMaker AI distributed data parallel library. Pour plus d’informations, consultez les instructions de la section suivante.

# Créez votre propre conteneur Docker avec la bibliothèque SageMaker AI distributed data parallel library
<a name="data-parallel-bring-your-own-container"></a>

Pour créer votre propre conteneur Docker à des fins de formation et utiliser la bibliothèque parallèle de données SageMaker AI, vous devez inclure les dépendances correctes et les fichiers binaires des bibliothèques parallèles distribuées par SageMaker IA dans votre Dockerfile. Cette section fournit des instructions sur la façon de créer un Dockerfile complet avec le minimum de dépendances pour l'entraînement distribué en SageMaker IA à l'aide de la bibliothèque data parallel.

**Note**  
Cette option Docker personnalisée avec la bibliothèque SageMaker AI data parallel sous forme binaire n'est disponible que pour PyTorch.

**Pour créer un Dockerfile avec le kit de SageMaker formation et la bibliothèque Data Parallel**

1. Commencez par une image Docker à partir de [NVIDIA CUDA](https://hub.docker.com/r/nvidia/cuda). [Utilisez les versions pour développeurs de cuDNN qui contiennent les outils d'exécution et de développement CUDA (en-têtes et bibliothèques) pour créer à partir du code source. PyTorch ](https://github.com/pytorch/pytorch#from-source)

   ```
   FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
   ```
**Astuce**  
Les images officielles du AWS Deep Learning Container (DLC) sont créées à partir des images de [base NVIDIA CUDA](https://hub.docker.com/r/nvidia/cuda). Si vous souhaitez utiliser les images DLC prédéfinies comme références tout en suivant le reste des instructions, consultez les [AWS Deep Learning Containers for PyTorch ](https://github.com/aws/deep-learning-containers/tree/master/pytorch) Dockerfiles. 

1. Ajoutez les arguments suivants pour spécifier les versions de PyTorch et d'autres packages. Indiquez également les chemins des compartiments Amazon S3 menant à la bibliothèque SageMaker AI data parallel et à d'autres logiciels pour utiliser les AWS ressources, tels que le plug-in Amazon S3. 

   Pour utiliser des versions de bibliothèques tierces autres que celles fournies dans l'exemple de code suivant, nous vous recommandons de consulter les [Dockerfiles officiels de AWS Deep Learning Container PyTorch pour](https://github.com/aws/deep-learning-containers/tree/master/pytorch/training/docker) trouver les versions testées, compatibles et adaptées à votre application. 

    URLs Pour rechercher l'`SMDATAPARALLEL_BINARY`argument, consultez les tables de recherche à l'adresse[Cadres pris en charge](distributed-data-parallel-support.md#distributed-data-parallel-supported-frameworks).

   ```
   ARG PYTORCH_VERSION=1.10.2
   ARG PYTHON_SHORT_VERSION=3.8
   ARG EFA_VERSION=1.14.1
   ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
   ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl
   ARG CONDA_PREFIX="/opt/conda"
   ARG BRANCH_OFI=1.1.3-aws
   ```

1. Définissez les variables d'environnement suivantes pour créer correctement les composants d' SageMaker apprentissage et exécuter la bibliothèque Data Parallel. Vous utilisez ces variables pour les composants dans les étapes suivantes.

   ```
   # Set ENV variables required to build PyTorch
   ENV TORCH_CUDA_ARCH_LIST="7.0+PTX 8.0"
   ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
   ENV NCCL_VERSION=2.10.3
   
   # Add OpenMPI to the path.
   ENV PATH /opt/amazon/openmpi/bin:$PATH
   
   # Add Conda to path
   ENV PATH $CONDA_PREFIX/bin:$PATH
   
   # Set this enviroment variable for SageMaker AI to launch SMDDP correctly.
   ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main
   
   # Add enviroment variable for processes to be able to call fork()
   ENV RDMAV_FORK_SAFE=1
   
   # Indicate the container type
   ENV DLC_CONTAINER_TYPE=training
   
   # Add EFA and SMDDP to LD library path
   ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH"
   ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH
   ```

1. Installez ou mettez à jour `curl`, `wget` et `git` pour télécharger et créer des packages dans les étapes suivantes.

   ```
   RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
       apt-get update && apt-get install -y  --no-install-recommends \
           curl \
           wget \
           git \
       && rm -rf /var/lib/apt/lists/*
   ```

1. Installez le logiciel [Elastic Fabric Adapter (EFA)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) pour la communication réseau Amazon EC2.

   ```
   RUN DEBIAN_FRONTEND=noninteractive apt-get update
   RUN mkdir /tmp/efa \
       && cd /tmp/efa \
       && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \
       && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
       && cd aws-efa-installer \
       && ./efa_installer.sh -y --skip-kmod -g \
       && rm -rf /tmp/efa
   ```

1. Installez [Conda](https://docs.conda.io/en/latest/) pour traiter la gestion des paquets. 

   ```
   RUN curl -fsSL -v -o ~/miniconda.sh -O  https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
       chmod +x ~/miniconda.sh && \
       ~/miniconda.sh -b -p $CONDA_PREFIX && \
       rm ~/miniconda.sh && \
       $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \
       $CONDA_PREFIX/bin/conda clean -ya
   ```

1. Obtenez, compilez, installez PyTorch et ses dépendances. Nous construisons [PyTorch à partir du code source](https://github.com/pytorch/pytorch#from-source) car nous devons contrôler la version NCCL pour garantir la compatibilité avec le plug-in [AWS OFI NCCL](https://github.com/aws/aws-ofi-nccl).

   1. En suivant les étapes du [dockerfile PyTorch officiel](https://github.com/pytorch/pytorch/blob/master/Dockerfile), installez les dépendances de construction et configurez [ccache](https://ccache.dev/) pour accélérer la recompilation.

      ```
      RUN DEBIAN_FRONTEND=noninteractive \
          apt-get install -y --no-install-recommends \
              build-essential \
              ca-certificates \
              ccache \
              cmake \
              git \
              libjpeg-dev \
              libpng-dev \
          && rm -rf /var/lib/apt/lists/*
        
      # Setup ccache
      RUN /usr/sbin/update-ccache-symlinks
      RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache
      ```

   1. Dépendances [communes et dépendances Linux](https://github.com/pytorch/pytorch#install-dependencies) de l'installationPyTorch.

      ```
      # Common dependencies for PyTorch
      RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses
      
      # Linux specific dependency for PyTorch
      RUN conda install -c pytorch magma-cuda113
      ```

   1. Clonez le [PyTorch GitHubdépôt](https://github.com/pytorch/pytorch).

      ```
      RUN --mount=type=cache,target=/opt/ccache \
          cd / \
          && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION}
      ```

   1. Installez et créez une version spécifique de [NCCL](https://developer.nvidia.com/nccl). Pour ce faire, remplacez le contenu du dossier NCCL par défaut (`/pytorch/third_party/nccl`) par la version NCCL spécifique du référentiel NVIDIA. PyTorch La version NCCL a été définie à l’étape 3 de ce guide.

      ```
      RUN cd /pytorch/third_party/nccl \
          && rm -rf nccl \
          && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
          && cd nccl \
          && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \
          && make pkg.txz.build \
          && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1
      ```

   1. Construisez et installez PyTorch. Ce processus prend généralement un peu plus d’une heure. Il est créé en utilisant la version NCCL téléchargée à l’étape précédente.

      ```
      RUN cd /pytorch \
          && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \
          python setup.py install \
          && rm -rf /pytorch
      ```

1. Créez et installez le [Plugin NCCL OFI AWS](https://github.com/aws/aws-ofi-nccl). Cela permet le support de [libfabric](https://github.com/ofiwg/libfabric) pour la bibliothèque SageMaker AI data parallel.

   ```
   RUN DEBIAN_FRONTEND=noninteractive apt-get update \
       && apt-get install -y --no-install-recommends \
           autoconf \
           automake \
           libtool
   RUN mkdir /tmp/efa-ofi-nccl \
       && cd /tmp/efa-ofi-nccl \
       && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
       && cd aws-ofi-nccl \
       && ./autogen.sh \
       && ./configure --with-libfabric=/opt/amazon/efa \
       --with-mpi=/opt/amazon/openmpi \
       --with-cuda=/usr/local/cuda \
       --with-nccl=$CONDA_PREFIX \
       && make \
       && make install \
       && rm -rf /tmp/efa-ofi-nccl
   ```

1. Construisez et installez [TorchVision](https://github.com/pytorch/vision.git).

   ```
   RUN pip install --no-cache-dir -U \
       packaging \
       mpi4py==3.0.3
   RUN cd /tmp \
       && git clone https://github.com/pytorch/vision.git -b v0.9.1 \
       && cd vision \
       && BUILD_VERSION="0.9.1+cu111" python setup.py install \
       && cd /tmp \
       && rm -rf vision
   ```

1. Installez et configurer OpenSSH. OpenSSH est requis pour que MPI communique entre les conteneurs. Autorisez OpenSSH à parler aux conteneurs sans demander de confirmation.

   ```
   RUN apt-get update \
       && apt-get install -y  --allow-downgrades --allow-change-held-packages --no-install-recommends \
       && apt-get install -y --no-install-recommends openssh-client openssh-server \
       && mkdir -p /var/run/sshd \
       && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \
       && echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \
       && mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \
       && rm -rf /var/lib/apt/lists/*
   
   # Configure OpenSSH so that nodes can communicate with each other
   RUN mkdir -p /var/run/sshd && \
    sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
   RUN rm -rf /root/.ssh/ && \
    mkdir -p /root/.ssh/ && \
    ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \
    cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \
    && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config
   ```

1. Installez le plug-in PT S3 pour accéder efficacement aux jeux de données dans Amazon S3.

   ```
   RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU}
   RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
   ```

1. Installez la bibliothèque [libboost](https://www.boost.org/). Ce package est nécessaire pour mettre en réseau la fonctionnalité d'E/S asynchrone de la bibliothèque SageMaker AI data parallel.

   ```
   WORKDIR /
   RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \
       && tar -xzf boost_1_73_0.tar.gz \
       && cd boost_1_73_0 \
       && ./bootstrap.sh \
       && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \
       && cd .. \
       && rm -rf boost_1_73_0.tar.gz \
       && rm -rf boost_1_73_0 \
       && cd ${CONDA_PREFIX}/include/boost
   ```

1. Installez les outils d' SageMaker IA suivants pour la PyTorch formation.

   ```
   WORKDIR /root
   RUN pip install --no-cache-dir -U \
       smclarify \
       "sagemaker>=2,<3" \
       sagemaker-experiments==0.* \
       sagemaker-pytorch-training
   ```

1. Enfin, installez le binaire SageMaker AI data parallel et les dépendances restantes.

   ```
   RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
     apt-get update && apt-get install -y  --no-install-recommends \
     jq \
     libhwloc-dev \
     libnuma1 \
     libnuma-dev \
     libssl1.1 \
     libtool \
     hwloc \
     && rm -rf /var/lib/apt/lists/*
   
   RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
   ```

1. Après avoir créé le Dockerfile, consultez [Adapting Your Own Training Container](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html) pour savoir comment créer le conteneur Docker, l'héberger dans Amazon ECR et exécuter une tâche de formation à l'aide du SDK Python. SageMaker 

L’exemple de code suivant montre un Dockerfile complet après avoir combiné tous les blocs de code précédents.

```
# This file creates a docker image with minimum dependencies to run SageMaker AI data parallel training
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04

# Set appropiate versions and location for components
ARG PYTORCH_VERSION=1.10.2
ARG PYTHON_SHORT_VERSION=3.8
ARG EFA_VERSION=1.14.1
ARG SMDATAPARALLEL_BINARY=https://smdataparallel.s3.amazonaws.com/binary/pytorch/${PYTORCH_VERSION}/cu113/2022-02-18/smdistributed_dataparallel-1.4.0-cp38-cp38-linux_x86_64.whl
ARG PT_S3_WHL_GPU=https://aws-s3-plugin.s3.us-west-2.amazonaws.com/binaries/0.0.1/1c3e69e/awsio-0.0.1-cp38-cp38-manylinux1_x86_64.whl
ARG CONDA_PREFIX="/opt/conda"
ARG BRANCH_OFI=1.1.3-aws

# Set ENV variables required to build PyTorch
ENV TORCH_CUDA_ARCH_LIST="3.7 5.0 7.0+PTX 8.0"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV NCCL_VERSION=2.10.3

# Add OpenMPI to the path.
ENV PATH /opt/amazon/openmpi/bin:$PATH

# Add Conda to path
ENV PATH $CONDA_PREFIX/bin:$PATH

# Set this enviroment variable for SageMaker AI to launch SMDDP correctly.
ENV SAGEMAKER_TRAINING_MODULE=sagemaker_pytorch_container.training:main

# Add enviroment variable for processes to be able to call fork()
ENV RDMAV_FORK_SAFE=1

# Indicate the container type
ENV DLC_CONTAINER_TYPE=training

# Add EFA and SMDDP to LD library path
ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH"
ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH

# Install basic dependencies to download and build other dependencies
RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
  apt-get update && apt-get install -y  --no-install-recommends \
  curl \
  wget \
  git \
  && rm -rf /var/lib/apt/lists/*

# Install EFA.
# This is required for SMDDP backend communication
RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN mkdir /tmp/efa \
    && cd /tmp/efa \
    && curl --silent -O https://efa-installer.amazonaws.com/aws-efa-installer-${EFA_VERSION}.tar.gz \
    && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
    && cd aws-efa-installer \
    && ./efa_installer.sh -y --skip-kmod -g \
    && rm -rf /tmp/efa

# Install Conda
RUN curl -fsSL -v -o ~/miniconda.sh -O  https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
    chmod +x ~/miniconda.sh && \
    ~/miniconda.sh -b -p $CONDA_PREFIX && \
    rm ~/miniconda.sh && \
    $CONDA_PREFIX/bin/conda install -y python=${PYTHON_SHORT_VERSION} conda-build pyyaml numpy ipython && \
    $CONDA_PREFIX/bin/conda clean -ya

# Install PyTorch.
# Start with dependencies listed in official PyTorch dockerfile
# https://github.com/pytorch/pytorch/blob/master/Dockerfile
RUN DEBIAN_FRONTEND=noninteractive \
    apt-get install -y --no-install-recommends \
        build-essential \
        ca-certificates \
        ccache \
        cmake \
        git \
        libjpeg-dev \
        libpng-dev && \
    rm -rf /var/lib/apt/lists/*

# Setup ccache
RUN /usr/sbin/update-ccache-symlinks
RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache

# Common dependencies for PyTorch
RUN conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses

# Linux specific dependency for PyTorch
RUN conda install -c pytorch magma-cuda113

# Clone PyTorch
RUN --mount=type=cache,target=/opt/ccache \
    cd / \
    && git clone --recursive https://github.com/pytorch/pytorch -b v${PYTORCH_VERSION}
# Note that we need to use the same NCCL version for PyTorch and OFI plugin.
# To enforce that, install NCCL from source before building PT and OFI plugin.

# Install NCCL.
# Required for building OFI plugin (OFI requires NCCL's header files and library)
RUN cd /pytorch/third_party/nccl \
    && rm -rf nccl \
    && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
    && cd nccl \
    && make -j64 src.build CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_80,code=sm_80" \
    && make pkg.txz.build \
    && tar -xvf build/pkg/txz/nccl_*.txz -C $CONDA_PREFIX --strip-components=1

# Build and install PyTorch.
RUN cd /pytorch \
    && CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" \
    python setup.py install \
    && rm -rf /pytorch

RUN ccache -C

# Build and install OFI plugin. \
# It is required to use libfabric.
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
    && apt-get install -y --no-install-recommends \
        autoconf \
        automake \
        libtool
RUN mkdir /tmp/efa-ofi-nccl \
    && cd /tmp/efa-ofi-nccl \
    && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
    && cd aws-ofi-nccl \
    && ./autogen.sh \
    && ./configure --with-libfabric=/opt/amazon/efa \
        --with-mpi=/opt/amazon/openmpi \
        --with-cuda=/usr/local/cuda \
        --with-nccl=$CONDA_PREFIX \
    && make \
    && make install \
    && rm -rf /tmp/efa-ofi-nccl

# Build and install Torchvision
RUN pip install --no-cache-dir -U \
    packaging \
    mpi4py==3.0.3
RUN cd /tmp \
    && git clone https://github.com/pytorch/vision.git -b v0.9.1 \
    && cd vision \
    && BUILD_VERSION="0.9.1+cu111" python setup.py install \
    && cd /tmp \
    && rm -rf vision

# Install OpenSSH.
# Required for MPI to communicate between containers, allow OpenSSH to talk to containers without asking for confirmation
RUN apt-get update \
    && apt-get install -y  --allow-downgrades --allow-change-held-packages --no-install-recommends \
    && apt-get install -y --no-install-recommends openssh-client openssh-server \
    && mkdir -p /var/run/sshd \
    && cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new \
    && echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new \
    && mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config \
    && rm -rf /var/lib/apt/lists/*
# Configure OpenSSH so that nodes can communicate with each other
RUN mkdir -p /var/run/sshd && \
    sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN rm -rf /root/.ssh/ && \
    mkdir -p /root/.ssh/ && \
    ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa && \
    cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys \
    && printf "Host *\n StrictHostKeyChecking no\n" >> /root/.ssh/config

# Install PT S3 plugin.
# Required to efficiently access datasets in Amazon S3
RUN pip install --no-cache-dir -U ${PT_S3_WHL_GPU}
RUN mkdir -p /etc/pki/tls/certs && cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

# Install libboost from source.
# This package is needed for smdataparallel functionality (for networking asynchronous IO).
WORKDIR /
RUN wget https://sourceforge.net/projects/boost/files/boost/1.73.0/boost_1_73_0.tar.gz/download -O boost_1_73_0.tar.gz \
    && tar -xzf boost_1_73_0.tar.gz \
    && cd boost_1_73_0 \
    && ./bootstrap.sh \
    && ./b2 threading=multi --prefix=${CONDA_PREFIX} -j 64 cxxflags=-fPIC cflags=-fPIC install || true \
    && cd .. \
    && rm -rf boost_1_73_0.tar.gz \
    && rm -rf boost_1_73_0 \
    && cd ${CONDA_PREFIX}/include/boost

# Install SageMaker AI PyTorch training.
WORKDIR /root
RUN pip install --no-cache-dir -U \
    smclarify \
    "sagemaker>=2,<3" \
    sagemaker-experiments==0.* \
    sagemaker-pytorch-training

# Install SageMaker AI data parallel binary (SMDDP)
# Start with dependencies
RUN --mount=type=cache,id=apt-final,target=/var/cache/apt \
    apt-get update && apt-get install -y  --no-install-recommends \
        jq \
        libhwloc-dev \
        libnuma1 \
        libnuma-dev \
        libssl1.1 \
        libtool \
        hwloc \
    && rm -rf /var/lib/apt/lists/*

# Install SMDDP
RUN SMDATAPARALLEL_PT=1 pip install --no-cache-dir ${SMDATAPARALLEL_BINARY}
```

**Astuce**  
Pour des informations plus générales sur la création d'un Dockerfile personnalisé pour l'entraînement à l' SageMaker IA, consultez [Utiliser vos propres algorithmes d'entraînement](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo.html).

**Astuce**  
Si vous souhaitez étendre le Dockerfile personnalisé pour intégrer la bibliothèque parallèle de SageMaker modèles AI, consultez. [Créez votre propre conteneur Docker avec la bibliothèque parallèle de modèles SageMaker distribués](model-parallel-sm-sdk.md#model-parallel-bring-your-own-container)

# Exemples de bibliothèques de parallélisme de données Amazon SageMaker AI
<a name="distributed-data-parallel-v2-examples"></a>

Cette page fournit des blocs-notes Jupyter qui présentent des exemples de mise en œuvre de la bibliothèque de parallélisme de données distribué par l' SageMaker IA (SMDDP) pour exécuter des tâches de formation distribuées sur l'IA. SageMaker 

## Blogs et études de cas
<a name="distributed-data-parallel-v2-examples-blog"></a>

Les blogs suivants traitent d’études de cas sur l’utilisation de la bibliothèque SMDDP.

**Blogs SMDDP v2**
+ [Accélérez la formation grâce à la bibliothèque parallèle de données Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/enable-faster-training-with-amazon-sagemaker-data-parallel-library/), *AWS Machine Learning Blog* (5 décembre 2023)

**Blogs SMDDP v1**
+ [Comment j'ai entraîné 10 To pour une diffusion stable sur l' SageMaker IA](https://medium.com/@emilywebber/how-i-trained-10tb-for-stable-diffusion-on-sagemaker-39dcea49ce32) dans *Medium* (29 novembre 2022)
+ [Exécutez PyTorch Lightning et le PyTorch DDP natif sur Amazon SageMaker Training, avec Amazon Search](https://aws.amazon.com/blogs/machine-learning/run-pytorch-lightning-and-native-pytorch-ddp-on-amazon-sagemaker-training-featuring-amazon-search/), *AWS Machine Learning Blog* (18 août 2022)
+ [Formation YOLOv5 sur AWS l'utilisation PyTorch et la bibliothèque parallèle de données distribuées par l' SageMaker IA](https://medium.com/@sitecao/training-yolov5-on-aws-with-pytorch-and-sagemaker-distributed-data-parallel-library-a196ab01409b), *Medium* (6 mai 2022)
+ [Accélérez l'entraînement des EfficientNet modèles sur l' SageMaker SageMaker IA grâce PyTorch à la bibliothèque parallèle de données distribuées AI](https://medium.com/@dangmz/speed-up-efficientnet-model-training-on-amazon-sagemaker-with-pytorch-and-sagemaker-distributed-dae4b048c01a), *Medium* (21 mars 2022)
+ [Accélérez l' EfficientNet entraînement AWS grâce à la bibliothèque parallèle de données distribuées basée sur l' SageMaker IA](https://towardsdatascience.com/speed-up-efficientnet-training-on-aws-by-up-to-30-with-sagemaker-distributed-data-parallel-library-2dbf6d1e18e8), *Towards Data Science* (12 janvier 2022)
+ [Hyundai réduit le temps de formation des modèles ML pour les modèles de conduite autonome à l'aide d'Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/hyundai-reduces-training-time-for-autonomous-driving-models-using-amazon-sagemaker/), *AWS Machine Learning Blog* (25 juin 2021)
+ [Formation distribuée : apprenez à BART/T5 à la synthèse à l'aide de Transformers et d'Amazon AI, SageMaker le site](https://huggingface.co/blog/sagemaker-distributed-training-seq2seq) Web Hugging Face (*8 avril* 2021)

## Exemples de blocs-notes
<a name="distributed-data-parallel-v2-examples-pytorch"></a>

Des carnets d'exemples sont fournis dans le [ GitHub référentiel d'exemples d'SageMaker IA](https://github.com/aws/amazon-sagemaker-examples/tree/master/training/distributed_training/). Pour les télécharger, exécutez la commande suivante afin de cloner le référentiel et d’accéder à `training/distributed_training/pytorch/data_parallel`.

**Note**  
Clonez et exécutez les exemples de blocs-notes dans l' SageMaker AI ML IDEs suivant.  
[SageMaker AI JupyterLab](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-jl.html) (disponible dans [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) créé après décembre 2023)
[SageMaker Éditeur de code AI](https://docs.aws.amazon.com/sagemaker/latest/dg/code-editor.html) (disponible dans [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) créé après décembre 2023)
[Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) (disponible sous forme d’application dans [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html), créé après décembre 2023)
[SageMaker Instances d'ordinateurs portables](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html)

```
git clone https://github.com/aws/amazon-sagemaker-examples.git
cd amazon-sagemaker-examples/training/distributed_training/pytorch/data_parallel
```

**Exemples SMDDP v2**
+ [Entraînez Llama 2 à l'aide de la bibliothèque SageMaker AI Distributed Data Parallel Library (SMDDP) et DeepSpeed](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/deepspeed/llama2/smddp_deepspeed_example.ipynb)
+ [Entraînez Falçon à l'aide de la bibliothèque SageMaker AI Distributed Data Parallel Library (SMDDP) et du Fully Sharded Data PyTorch Parallelism (FSDP)](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/fully_sharded_data_parallel/falcon/smddp_fsdp_example.ipynb)

**Exemples SMDDP v1**
+ [CNN avec PyTorch et la bibliothèque de parallélisme de données SageMaker AI](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/mnist/pytorch_smdataparallel_mnist_demo.ipynb)
+ [BERT avec PyTorch et la bibliothèque de parallélisme de données SageMaker AI](https://github.com/aws/amazon-sagemaker-examples/blob/main/training/distributed_training/pytorch/data_parallel/bert/pytorch_smdataparallel_bert_demo.ipynb)
+ [CNN avec TensorFlow 2.3.1 et la bibliothèque de parallélisme de données SageMaker AI](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/tensorflow/data_parallel/mnist/tensorflow2_smdataparallel_mnist_demo.html)
+ [BERT avec TensorFlow 2.3.1 et la bibliothèque de parallélisme de données SageMaker AI](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/tensorflow/data_parallel/bert/tensorflow2_smdataparallel_bert_demo.html)
+ [HuggingFace Formation parallèle aux données distribuées PyTorch sur l' SageMaker IA - Réponses distribuées aux questions](https://github.com/huggingface/notebooks/blob/master/sagemaker/03_distributed_training_data_parallelism/sagemaker-notebook.ipynb)
+ [HuggingFace Formation parallèle aux données distribuées PyTorch sur l' SageMaker IA - Synthèse de texte distribuée](https://github.com/huggingface/notebooks/blob/master/sagemaker/08_distributed_summarization_bart_t5/sagemaker-notebook.ipynb)
+ [HuggingFace Formation parallèle aux données distribuées TensorFlow sur l' SageMaker IA](https://github.com/huggingface/notebooks/blob/master/sagemaker/07_tensorflow_distributed_training_data_parallelism/sagemaker-notebook.ipynb)

# Conseils de configuration pour la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA
<a name="data-parallel-config"></a>

Consultez les conseils suivants avant d'utiliser la bibliothèque SageMaker AI Distributed Data Parallelism (SMDDP). Cette liste contient des conseils qui s'appliquent à tous les cadres.

**Topics**
+ [Prétraitement des données](#data-parallel-config-dataprep)
+ [Nœud simple ou nœuds multiples](#data-parallel-config-multi-node)
+ [Déboguer l’efficacité de mise à l’échelle avec Debugger](#data-parallel-config-debug)
+ [Taille de lot](#data-parallel-config-batch-size)
+ [Options MPI personnalisées](#data-parallel-config-mpi-custom)
+ [Utilisez Amazon FSx et configurez une capacité de stockage et de débit optimale](#data-parallel-config-fxs)

## Prétraitement des données
<a name="data-parallel-config-dataprep"></a>

Si vous prétraitez des données pendant l'entraînement à l'aide d'une bibliothèque externe qui utilise le processeur, vous risquez de rencontrer un goulot d'étranglement car AI SageMaker distributed data parallel utilise le processeur pour les opérations. `AllReduce` Vous pouvez améliorer le temps de formation en déplaçant les étapes de prétraitement vers une bibliothèque qui les utilise GPUs ou en effectuant tous les prétraitements avant l'entraînement.

## Nœud simple ou nœuds multiples
<a name="data-parallel-config-multi-node"></a>

Nous vous recommandons d'utiliser cette bibliothèque avec des nœuds multiples. La bibliothèque peut être utilisée avec une configuration à hôte unique et à plusieurs appareils (par exemple, une seule instance de calcul ML avec plusieurs GPUs) ; toutefois, lorsque vous utilisez deux nœuds ou plus, le `AllReduce` fonctionnement de la bibliothèque améliore considérablement les performances. De plus, sur un seul hôte, cela contribue NVLink déjà à l'`AllReduce`efficacité du nœud.

## Déboguer l’efficacité de mise à l’échelle avec Debugger
<a name="data-parallel-config-debug"></a>

Vous pouvez utiliser Amazon SageMaker Debugger pour surveiller et visualiser l'utilisation du processeur et du GPU ainsi que d'autres indicateurs intéressants pendant l'entraînement. Vous pouvez utiliser les [règles intégrées](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html) de Debugger pour contrôler les problèmes liés à la performance de calcul, tels que `CPUBottleneck`, `LoadBalancing` et `LowGPUUtilization`. Vous pouvez spécifier ces règles avec les [configurations du débogueur](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configuration-for-debugging.html) lorsque vous définissez un estimateur du SDK Amazon SageMaker Python. Si vous utilisez AWS CLI et AWS SDK pour Python (Boto3) pour vous entraîner sur l' SageMaker IA, vous pouvez activer Debugger comme indiqué dans [Configurer le SageMaker débogueur à l'aide de l'API](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-createtrainingjob-api.html) Amazon. SageMaker 

Pour voir un exemple d'utilisation de Debugger dans le cadre d'une tâche de SageMaker formation, vous pouvez vous référer à l'un des exemples de blocs-notes du référentiel [SageMaker Notebook Examples](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger). GitHub Pour en savoir plus sur Debugger, consultez [Amazon SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html) Debugger.

## Taille de lot
<a name="data-parallel-config-batch-size"></a>

Dans l'entraînement distribué, la taille de lot augmente proportionnellement à l'ajout de nœuds. Pour améliorer la vitesse de convergence à mesure que vous ajoutez des nœuds à votre tâche d'entraînement et que vous augmentez la taille de lot globale, augmentez le taux d'apprentissage.

Pour cela, vous pouvez procéder à un échauffement progressif du taux d'apprentissage, le taux d'apprentissage passant d'une valeur faible à une valeur élevée à mesure que la tâche d'entraînement progresse. Cette élévation progressive évite une brusque augmentation du taux d'apprentissage et permet une convergence saine dès le début de l'entraînement. Par exemple, vous pouvez utiliser une *règle de mise à l'échelle linéaire* selon laquelle le taux d'apprentissage est également multiplié par k chaque fois que la taille du mini-lot est multipliée par k. Pour en savoir plus sur cette technique, consultez le document de recherche [Accurate, Large Minibatch SGD : Training ImageNet in 1 Hour](https://arxiv.org/pdf/1706.02677.pdf), Sections 2 and 3.

## Options MPI personnalisées
<a name="data-parallel-config-mpi-custom"></a>

La bibliothèque parallèle de données distribuées SageMaker AI utilise l'interface MPI (Message Passing Interface), une norme populaire pour gérer les communications entre les nœuds d'un cluster haute performance, et utilise la bibliothèque NCCL de NVIDIA pour les communications au niveau du GPU. Lorsque vous utilisez la bibliothèque data parallel avec a TensorFlow ou Pytorch`Estimator`, le conteneur correspondant configure l'environnement MPI et exécute la `mpirun` commande pour démarrer les tâches sur les nœuds du cluster.

Vous pouvez configurer des opérations MPI personnalisées à l'aide du paramètre `custom_mpi_options` dans l'`Estimator`. Tous `mpirun` les drapeaux transmis dans ce champ sont ajoutés à la `mpirun` commande et exécutés par l' SageMaker IA à des fins d'entraînement. Par exemple, pour définir le paramètre `distribution` d'un `Estimator`, vous pouvez exploiter la ressource suivante afin d'utiliser la variable [https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug](https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug) pour imprimer la version NCCL au début du programme :

```
distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}
```

## Utilisez Amazon FSx et configurez une capacité de stockage et de débit optimale
<a name="data-parallel-config-fxs"></a>

Lorsque vous entraînez un modèle sur plusieurs nœuds avec un parallélisme de données distribué, il est fortement recommandé de l'utiliser [FSx pour](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) Lustre. Amazon FSx est un service de stockage évolutif et performant qui prend en charge le stockage de fichiers partagés avec un débit plus rapide. En utilisant le FSx stockage Amazon à grande échelle, vous pouvez accélérer le chargement des données sur les nœuds de calcul.

En général, avec le parallélisme des données distribuées, on peut s'attendre à ce que le débit d'entraînement total augmente de manière quasi linéaire avec le nombre de. GPUs Toutefois, si vous utilisez un FSx stockage Amazon sous-optimal, les performances de formation risquent de ralentir en raison du faible FSx débit Amazon. 

Par exemple, si vous utilisez le type de [déploiement **SCRATCH\$12** du système de FSx fichiers Amazon](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) avec une capacité de stockage minimale de 1,2 TiB, la capacité de débit est de I/O 240. MB/s. Amazon FSx storage works in a way that you can assign physical storage devices, and the more devices assigned, the larger throughput you get. The smallest storage increment for the SRATCH\$12 type is 1.2 TiB, and the corresponding throughput gain is 240 MB/s

Supposons que vous ayez un modèle à entraîner sur un cluster à 4 nœuds sur un jeu de données de 100 Go. Avec une taille de lot donnée optimisée pour le cluster, supposons que le modèle peut terminer une époque en 30 secondes environ. Dans ce cas, la I/O vitesse minimale requise est d'environ 3 GB/s (100 Go/30 s). Il s'agit apparemment d'une exigence de débit bien supérieure à 240 problèmes de goulot d'MB/s. With such a limited Amazon FSx capacity, scaling your distributed training job up to larger clusters might aggravate I/Oétranglement ; le débit d'entraînement des modèles peut s'améliorer ultérieurement à mesure que le cache s'accumule, mais le FSx débit d'Amazon peut toujours constituer un goulot d'étranglement.

Pour atténuer ces problèmes de goulot d' I/O étranglement, vous devez augmenter la taille du FSx stockage Amazon afin d'obtenir une capacité de débit supérieure. Généralement, pour trouver un I/O débit optimal, vous pouvez tester différentes capacités de FSx débit Amazon, en attribuant un débit égal ou légèrement inférieur à votre estimation, jusqu'à ce que vous trouviez que cela est suffisant pour résoudre les problèmes liés au goulot d'étranglement. I/O Dans le cas de l'exemple susmentionné, un FSx stockage Amazon avec un GB/s débit de 2,4 et un cache de 67 Go de RAM serait suffisant. Si le système de fichiers a un débit optimal, le débit d'entraînement du modèle doit atteindre son maximum immédiatement ou après la première époque de création du cache.

Pour en savoir plus sur la manière d'augmenter le FSx stockage et les types de déploiement d'Amazon, consultez les pages suivantes de la *documentation Amazon FSx for Lustre* :
+  [Comment augmenter la capacité de stockage](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html#increase-storage-capacity) 
+  [Performance du système de fichiers agrégé](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) 

# Questions fréquentes concernant la bibliothèque Amazon SageMaker AI de parallélisme distribué des données
<a name="data-parallel-faq"></a>

Utilisez les éléments suivants pour trouver des réponses aux questions fréquemment posées sur la bibliothèque SMDDP.

**Q : Lors de l'utilisation de la bibliothèque, comment les instances CPU prenant en charge `allreduce` sont-elles gérées ? Dois-je créer des clusters CPU-GPU hétérogènes, ou le service SageMaker AI crée-t-il des instances C5 supplémentaires pour les tâches utilisant la bibliothèque SMDDP ?**

La bibliothèque SMDDP prend en charge les instances GPU, en particulier les instances P4d et P4de équipées de GPU NVIDIA A100 et d’un EFA. Aucune instance C5 ou CPU supplémentaire n’est lancée. Si votre tâche d’entraînement SageMaker AI utilise des clusters P4d de 8 nœuds, seules 8 instances `ml.p4d.24xlarge` sont utilisées. Aucune instance supplémentaire n'est allouée.

**Q : J'ai une tâche d'entraînement qui prend 5 jours sur une seule instance `ml.p3.24xlarge` avec un ensemble d'hyperparamètres H1 (taux d'apprentissage, taille de lot, optimiseur, etc.). L’utilisation de la bibliothèque SageMaker AI de parallélisme des données et d’un cluster cinq fois plus grand suffit-elle pour bénéficier d’une vitesse approximativement quintuplée ? Ou dois-je revoir les hyperparamètres d’entraînement après avoir activé la bibliothèque SMDDP ?**

La bibliothèque modifie la taille globale du lot. La nouvelle taille globale du lot est mise à l'échelle de façon linéaire avec le nombre d'instances d'entraînement utilisées. Il convient par conséquent de modifier des hyperparamètres, tels que le taux d'apprentissage, pour assurer la convergence. 

**Q : La bibliothèque SMDDP prend-elle en charge les instances Spot ?**

Oui. Vous pouvez utiliser l'entraînement d'instances Spot gérées. Vous spécifiez le chemin d'accès au fichier de point de contrôle dans la tâche d'entraînement SageMaker. Vous enregistrez et restaurez les points de contrôle dans leur script d'entraînement, comme indiqué dans les dernières étapes de [Utiliser la bibliothèque SMDDP dans votre script d' TensorFlow entraînement (obsolète)](data-parallel-modify-sdp-tf2.md) et de [Utilisez la bibliothèque SMDDP dans votre script d'entraînement PyTorch](data-parallel-modify-sdp-pt.md). 

**Q : La bibliothèque SMDDP est-elle pertinente dans une configuration à hôte unique et à dispositifs multiples ?**

La bibliothèque peut être utilisée pour l'entraînement à un seul hôte et avec plusieurs appareils, mais elle n'offre des améliorations de performance que pour l'entraînement à plusieurs hôtes.

**Q : Où le jeu de données d'entraînement doit-il être stocké ?**

Le jeu de données d'entraînement peut être stocké dans un compartiment Amazon S3 ou sur un lecteur Amazon FSx. Consultez ce [document relatif au différents systèmes de fichiers d’entrée pris en charge pour une tâche d’entraînement](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html#sagemaker.inputs.FileSystemInput). 

**Q : Lorsque la bibliothèque SMDDP est utilisée, les données d’entraînement doivent-elles être obligatoirement situées dans FSx pour Lustre ? Amazon EFS et Amazon S3 peuvent-ils être utilisés ?**

Nous vous recommandons généralement d'utiliser Amazon FSx en raison de sa faible latence et de son débit plus élevé. Si vous préférez, vous pouvez utiliser Amazon EFS ou Amazon S3.

**Q : La bibliothèque peut-elle être utilisée avec des nœuds CPU ?** 

Non. Pour connaître les types d’instances pris en charge par la bibliothèque SMDDP, consultez [Types d’instance pris en charge](distributed-data-parallel-support.md#distributed-data-parallel-supported-instance-types).

**Q : Quels cadres et versions de cadre sont actuellement pris en charge par la bibliothèque SMDDP au lancement ?** 

La bibliothèque SMDDP prend actuellement en charge PyTorch v1.6.0 ou versions ultérieures, et TensorFlow v2.3.0 ou versions ultérieures. Elle ne prend pas en charge TensorFlow 1.x. Pour plus d’informations sur la version de la bibliothèque SMDDP empaquetée dans les conteneurs de deep learning AWS, consultez les [notes de mise à jour de Deep Learning Containers](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/dlc-release-notes.html).

**Q : La bibliothèque prend-elle en charge l'AMP ?**

Oui. La bibliothèque SMDDP prend en charge la précision mixte automatique (AMP). Pour utiliser l'AMP, il vous suffit de modifier le cadre de votre script d'entraînement. Si les gradients sont en FP16, la bibliothèque SageMaker AI de parallélisme des données exécute son opération `AllReduce` en FP16. Pour plus d'informations sur la mise en œuvre des API AMP dans votre script d'entraînement, consultez les ressources suivantes :
+ [Cadres – PyTorch](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#pytorch) dans la *Documentation sur la performance deep learning NVIDIA*
+ [Cadres – TensorFlow](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow) dans la *Documentation sur la performance deep learning NVIDIA*
+ [Précision mixte automatique pour deep learning](https://developer.nvidia.com/automatic-mixed-precision) dans les *Documents du développeur NVIDIA*
+ [Présentation de la précision mixte automatique PyTorch pour un entraînement plus rapide sur les GPU NVIDIA](https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/) dans le *Blog PyTorch*
+ [API de précision mixte TensorFlow](https://www.tensorflow.org/guide/mixed_precision) dans la *Documentation TensorFlow*

**Q : Comment savoir si ma tâche d'entraînement distribuée est ralentie en raison d'un goulet d'étranglement des I/O ?**

Avec un cluster plus grand, la tâche d'entraînement nécessite un débit d'I/O plus important et, par conséquent, le débit d'entraînement peut prendre plus de temps (plus d'époques) pour atteindre les performances maximales. Cela indique que les I/O sont engorgées et que le cache est plus difficile à créer à mesure que vous faites évoluer les nœuds (exigence de débit plus élevée et topologie de réseau plus complexe). Pour plus d’informations sur la surveillance du débit d’Amazon FSx sur CloudWatch, consultez [Surveillance de FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring_overview.html) dans le *Guide de l’utilisateur FSx for Lustre*. 

**Q : Comment résoudre les goulets d'étranglement d'I/O lors de l'exécution d'une tâche d'entraînement distribuée avec parallélisme des données ?**

Nous vous recommandons vivement d'utiliser Amazon FSx comme canal de données si vous utilisez Amazon S3. Si vous utilisez déjà Amazon FSx, mais que vous rencontrez toujours des problèmes de goulet d'étranglement d'I/O, vous avez peut-être configuré votre système de fichiers Amazon FSx avec un faible débit d'I/O et une petite capacité de stockage. Pour plus d’informations sur l’estimation et le choix de la capacité de débit d’I/O appropriée, consultez [Utilisez Amazon FSx et configurez une capacité de stockage et de débit optimale](data-parallel-config.md#data-parallel-config-fxs).

**Q : (pour la bibliothèque v1.4.0 ou ultérieure) comment puis-je résoudre l'erreur lors de l'initialisation du groupe de processus.**

Si vous rencontrez le message d’erreur `ValueError: Invalid backend: 'smddp'` lors de l’appel à `init_process_group`, cela est dû à au changement critique apporté aux versions 1.4.0 et ultérieures de la bibliothèque. Vous devez importer le client PyTorch de la bibliothèque `smdistributed.dataparallel.torch.torch_smddp`, qui enregistre `smddp` comme un backend pour PyTorch. Pour en savoir plus, consultez [Utilisez la bibliothèque SMDDP dans votre script d'entraînement PyTorch](data-parallel-modify-sdp-pt.md).

**Q : (Pour la bibliothèque SMDDP v1.4.0 ou ultérieure) Je voudrais appeler les primitives collectives de l’interface [https://pytorch.org/docs/stable/distributed.html](https://pytorch.org/docs/stable/distributed.html). Quelles primitives le backend `smddp` prend-il en charge ?**

Dans la version 1.4.0, la bibliothèque SMDDP prend en charge `all_reduce`, `broadcast`, `reduce`, `all_gather` et `barrier` de l’interface `torch.distributed`.

**Q : (Pour la bibliothèque SMDDP v1.4.0 ou ultérieure) Cette nouvelle API fonctionne-t-elle avec d’autres bibliothèques ou classes DDP personnalisées comme Apex DDP ?**

La bibliothèque SMDDP est testée avec d’autres bibliothèques de parallélisme distribué des données et implémentations de cadres tierces qui utilisent les modules `torch.distribtued`. L’utilisation de la bibliothèque SMDDP avec des classes DDP personnalisées fonctionne tant que les opérations collectives utilisées par les classes DDP personnalisées sont prises en charge par la bibliothèque SMDDP. Reportez-vous à la question précédente pour obtenir une liste des collectifs pris en charge. Si vous êtes confronté à ces cas d’utilisation et que vous avez besoin d’une assistance supplémentaire, contactez l’équipe SageMaker AI via le [Centre de support AWS](https://console.aws.amazon.com/support/) ou les [forums de développeurs AWS pour Amazon SageMaker AI](https://forums.aws.amazon.com/forum.jspa?forumID=285).

**Q : La bibliothèque SMDDP prend-elle en charge l’option « apportez votre propre conteneur (BYOC) » ? Si c'est le cas, comment installer la bibliothèque et exécuter une tâche d'entraînement distribuée en écrivant un Dockerfile personnalisé ?**

Si vous souhaitez intégrer la bibliothèque SMDDP et ses dépendances minimales dans votre propre conteneur Docker, l’option BYOC est la bonne approche. Vous pouvez créer votre propre conteneur en utilisant le fichier binaire de la bibliothèque. Le processus recommandé consiste à écrire un Dockerfile personnalisé avec la bibliothèque et ses dépendances, à créer le conteneur Docker, à l’héberger dans Amazon ECR et à utiliser l’URI ECR de l’image pour lancer une tâche d’entraînement en utilisant la classe d’estimateur générique SageMaker AI. Pour obtenir plus d’instructions sur la préparation d’un Dockerfile personnalisé pour l’entraînement distribué dans SageMaker AI avec la bibliothèque SMDDP, consultez [Créez votre propre conteneur Docker avec la bibliothèque SageMaker AI distributed data parallel library](data-parallel-bring-your-own-container.md).

# Résolution des problèmes liés à la formation distribuée dans Amazon SageMaker AI
<a name="distributed-troubleshooting-data-parallel"></a>

Si vous rencontrez des problèmes pour exécuter une tâche d'entraînement lorsque vous utilisez la bibliothèque, utilisez la liste suivante pour tenter de résoudre le problème. Si vous avez besoin d'une assistance supplémentaire, contactez l'équipe SageMaker AI via le [centre de AWS support](https://console.aws.amazon.com/support/) ou [les forums de AWS développeurs pour Amazon Amazon SageMaker AI](https://forums.aws.amazon.com/forum.jspa?forumID=285).

**Topics**
+ [Utilisation de données distribuées par SageMaker IA en parallèle avec Amazon SageMaker Debugger et les points de contrôle](#distributed-ts-data-parallel-debugger)
+ [Préfixe inattendu attaché aux clés de paramètres de modèle](#distributed-ts-data-parallel-pytorch-prefix)
+ [SageMaker La tâche de formation distribuée basée sur l'IA est bloquée lors de l'initialisation](#distributed-ts-data-parallel-efa-sg)
+ [SageMaker Formation distribuée basée sur l'IA : le travail stagne à la fin de la formation](#distributed-ts-data-parallel-stall-at-the-end)
+ [Observation de la dégradation de l'efficacité du dimensionnement due aux goulots d'étranglement FSx du débit d'Amazon](#distributed-ts-data-parallel-fxs-bottleneck)
+ [SageMaker Tâche de formation distribuée par IA avec PyTorch retours et avertissements d'obsolescence](#distributed-ts-data-parallel-deprecation-warnings)

## Utilisation de données distribuées par SageMaker IA en parallèle avec Amazon SageMaker Debugger et les points de contrôle
<a name="distributed-ts-data-parallel-debugger"></a>

Pour surveiller les goulots d'étranglement du système, les opérations du framework de profilage et déboguer les tenseurs de sortie des modèles pour les tâches de formation avec AI SageMaker distributed data parallel, utilisez Amazon Debugger. SageMaker 

Toutefois, lorsque vous utilisez SageMaker Debugger, SageMaker AI distributed data parallel et SageMaker AI checkpoints, une erreur semblable à l'exemple suivant peut s'afficher. 

```
SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled
```

Cela est dû à une erreur interne entre le Debugger et les points de contrôle, qui se produit lorsque vous activez SageMaker AI distributed data parallel. 
+ Si vous activez les trois fonctionnalités, le SDK SageMaker Python désactive automatiquement Debugger en passant`debugger_hook_config=False`, ce qui est équivalent à l'exemple de framework suivant. `estimator`

  ```
  bucket=sagemaker.Session().default_bucket()
  base_job_name="sagemaker-checkpoint-test"
  checkpoint_in_bucket="checkpoints"
  
  # The S3 URI to store the checkpoints
  checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket)
  
  estimator = TensorFlow(
      ...
  
      distribution={"smdistributed": {"dataparallel": { "enabled": True }}},
      checkpoint_s3_uri=checkpoint_s3_bucket,
      checkpoint_local_path="/opt/ml/checkpoints",
      debugger_hook_config=False
  )
  ```
+ Si vous souhaitez continuer à utiliser à la fois SageMaker AI distributed data parallel et SageMaker Debugger, une solution consiste à ajouter manuellement des fonctions de point de contrôle à votre script d'entraînement au lieu de spécifier les `checkpoint_local_path` paramètres `checkpoint_s3_uri` et à partir de l'estimateur. Pour plus d'informations sur la configuration d'un pointage manuel dans un script d'entraînement, consultez [Sauvegarde des points de contrôle](distributed-troubleshooting-model-parallel.md#distributed-ts-model-parallel-checkpoints).

## Préfixe inattendu attaché aux clés de paramètres de modèle
<a name="distributed-ts-data-parallel-pytorch-prefix"></a>

Pour les tâches d'entraînement PyTorch distribuées, un préfixe inattendu (par `model` exemple) peut être attaché aux `state_dict` clés (paramètres du modèle). La bibliothèque SageMaker AI Data parallel ne modifie ni n'ajoute directement les noms des paramètres du modèle lorsque les tâches d' PyTorch entraînement enregistrent des artefacts du modèle. La PyTorch formation distribuée change les noms du `state_dict` pour passer sur le réseau, en préfixant le préfixe. Si vous rencontrez un problème de défaillance du modèle dû à des noms de paramètres différents lorsque vous utilisez la bibliothèque SageMaker AI Data parallel et que vous utilisez le point de contrôle pour l' PyTorch entraînement, adaptez l'exemple de code suivant pour supprimer le préfixe à l'étape où vous chargez les points de contrôle dans votre script d'entraînement.

```
state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}
```

Cela considère chaque clé `state_dict` comme une valeur de chaîne, sépare la chaîne lorsque `'model.'` est rencontré pour la première fois, et prend le troisième élément de liste (avec index 2) de la chaîne partitionnée.

Pour plus d'informations sur le problème des préfixes, consultez un fil de discussion sur [Noms des paramètres de préfixe dans le modèle enregistré s'il est entraîné par](https://discuss.pytorch.org/t/prefix-parameter-names-in-saved-model-if-trained-by-multi-gpu/494) plusieurs GPU ? dans le *forum de PyTorch discussion*.

Pour plus d'informations sur les PyTorch méthodes d'enregistrement et de chargement des modèles, consultez la section [Enregistrer et charger le modèle sur plusieurs appareils](https://pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-model-across-devices) dans la *PyTorchdocumentation*.

## SageMaker La tâche de formation distribuée basée sur l'IA est bloquée lors de l'initialisation
<a name="distributed-ts-data-parallel-efa-sg"></a>

Si votre tâche d'entraînement parallèle à SageMaker AI Distributed Data s'arrête pendant l'initialisation lorsque vous utilisez des instances compatibles EFA, cela peut être dû à une mauvaise configuration du groupe de sécurité du sous-réseau VPC utilisé pour la tâche de formation. EFA nécessite une configuration de groupe de sécurité appropriée pour permettre le trafic entre les nœuds.

**Pour configurer des règles entrantes et sortantes pour le groupe de sécurité**

1. Connectez-vous à la console Amazon VPC AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Dans le panneau de navigation de gauche, sélectionnez **Security Groups** (Groupes de sécurité).

1. Sélectionnez le groupe de sécurité lié au sous-réseau VPC que vous utilisez pour l'entraînement. 

1. Dans la section **Details** (Détails), copiez la section **Security group ID** (ID du groupe de sécurité).

1. Sous l’onglet **Inbound Rules (Règles entrantes)**, sélectionnez **Edit inbound rules (Modifier les règles entrantes)**.

1. Sur la page **Edit inbound rules (Modifier les règles entrantes)**, procédez comme suit : 

   1. Choisissez **Ajouter une règle**.

   1. Pour **Type**, sélectionnez **Tout le trafic**.

   1. Pour **Source**, sélectionnez **Custom** (Personnalisé), collez l'ID du groupe de sécurité dans la zone de recherche et sélectionnez le groupe de sécurité qui s'affiche.

1. Sélectionnez **Save rules** (Enregistrer les règles) pour terminer la configuration de la règle entrante pour le groupe de sécurité.

1. Sélectionnez **Outbound rules** (Modifier les règles sortantes) sous l'onglet **Outbound rules** (Règles sortantes).

1. Répétez les étapes 6 et 7 pour ajouter la même règle en tant que règle sortante.

Après avoir terminé les étapes précédentes de configuration du groupe de sécurité avec les règles entrantes et sortantes, exécutez de nouveau la tâche d’entraînement et vérifiez si le problème de blocage est résolu.

Pour plus d’informations sur la configuration des groupes de sécurité pour VPC et EFA, consultez [Groupes de sécurité pour votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) et [Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html).

## SageMaker Formation distribuée basée sur l'IA : le travail stagne à la fin de la formation
<a name="distributed-ts-data-parallel-stall-at-the-end"></a>

L'une des causes profondes des problèmes de blocage à la fin de l'entraînement est un décalage dans le nombre de lots traités par époque sur différents rangs. Tous les travailleurs (GPUs) synchronisent leurs dégradés locaux lors de la passe arrière pour s'assurer qu'ils disposent tous de la même copie du modèle à la fin de l'itération par lots. Si les tailles de lots sont attribuées de manière inégale à différents groupes d'employés au cours de la dernière période d'entraînement, la tâche d'entraînement se bloque. Par exemple, lorsqu'un groupe d'employés (groupe A) termine le traitement de tous les lots et quitte la boucle d'entraînement, un autre groupe de employés (groupe B) commence à traiter un autre lot et attend toujours la communication du groupe A pour synchroniser les gradients. Cela oblige le groupe B à attendre le groupe A, qui a déjà terminé l'entraînement et n'a aucun gradient à synchroniser. 

Par conséquent, lors de la configuration de votre jeu de données d'entraînement, il est important que chaque employé reçoive le même nombre d'échantillons de données afin de traiter le même nombre de lots pendant l'entraînement. Assurez-vous que chaque rang reçoit le même nombre de lots pour éviter ce problème de blocage.

## Observation de la dégradation de l'efficacité du dimensionnement due aux goulots d'étranglement FSx du débit d'Amazon
<a name="distributed-ts-data-parallel-fxs-bottleneck"></a>

La limite de FSx débit est l'une des causes potentielles de la baisse de l'efficacité de la mise à l'échelle. Si vous observez une baisse soudaine de l'efficacité de la mise à l'échelle lorsque vous passez à un cluster d'entraînement plus important, essayez d'utiliser un système de fichiers plus grand FSx pour Lustre avec une limite de débit plus élevée. Pour plus d'informations, consultez les sections [Performances agrégées du système de fichiers](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) et [Gestion du stockage et de la capacité de débit](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html) dans le *guide de l'utilisateur d'Amazon FSx for Lustre*.

## SageMaker Tâche de formation distribuée par IA avec PyTorch retours et avertissements d'obsolescence
<a name="distributed-ts-data-parallel-deprecation-warnings"></a>

Depuis la version 1.4.0, la bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA fonctionne comme un backend de distributed. PyTorch En raison du changement radical lié à l'utilisation de la bibliothèque avec PyTorch, vous pouvez recevoir un message d'avertissement indiquant que le `smdistributed` APIs package PyTorch distribué est obsolète. Le message d'avertissement doit ressembler au suivant :

```
smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI distributed data parallel library v1.4.0+.
Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows:
torch.distributed.init_process_group(backend='smddp')
For more information, see the library's API documentation at
https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html
```

Dans la version v1.4.0 et les versions ultérieures, la bibliothèque ne doit être importée qu'une seule fois en haut de votre script d'entraînement et définie comme backend lors de l'initialisation PyTorch distribuée. Avec une seule ligne de spécification du backend, vous pouvez conserver votre script de PyTorch formation inchangé et utiliser directement les modules PyTorch distribués. Consultez [Utilisez la bibliothèque SMDDP dans votre script d'entraînement PyTorch](data-parallel-modify-sdp-pt.md) pour en savoir plus sur les modifications majeures et la nouvelle façon d'utiliser la bibliothèque avec PyTorch.

# SageMaker Notes de mise à jour de la bibliothèque de parallélisme des données AI
<a name="data-parallel-release-notes"></a>

Consultez les notes de publication suivantes pour suivre les dernières mises à jour de la bibliothèque de parallélisme distribué des données (SMDDP) basé sur l' SageMaker IA.

## La bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA v2.5.0
<a name="data-parallel-release-notes-20241017"></a>

*Date : 17 octobre 2024*

**Nouvelles fonctionnalités**
+ Ajout du support pour la PyTorch version 2.4.1 avec CUDA v12.1.

**Intégration dans les conteneurs Docker distribués par la bibliothèque de parallélisme des modèles SageMaker AI (SMP)**

Cette version de la bibliothèque SMDDP est migrée vers [La bibliothèque de parallélisme des SageMaker modèles v2.6.0](model-parallel-release-notes.md#model-parallel-release-notes-20241017).

```
658645717510.dkr.ecr.<us-west-2>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121
```

Pour les régions dans lesquelles les images Docker SMP sont disponibles, consultez [Régions AWS](distributed-model-parallel-support-v2.md#distributed-model-parallel-availablity-zone-v2).

**Fichier binaire de cette version**

Vous pouvez télécharger ou installer la bibliothèque à l’aide de l’URL suivante.

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.4.1/cu121/2024-10-09/smdistributed_dataparallel-2.5.0-cp311-cp311-linux_x86_64.whl
```

## La bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA v2.3.0
<a name="data-parallel-release-notes-20240611"></a>

*Date : 11 juin 2024*

**Nouvelles fonctionnalités**
+ Ajout du support pour la PyTorch version 2.3.0 avec CUDA v12.1 et Python v3.11.
+ Ajout du support pour PyTorch Lightning v2.2.5. Ceci est intégré dans le conteneur du framework SageMaker AI pour la PyTorch version 2.3.0.
+ Ajout de la validation du type d’instance lors de l’importation pour empêcher le chargement de la bibliothèque SMDDP sur des types d’instance non pris en charge. Pour obtenir la liste des types d’instances compatibles avec la bibliothèque SMDDP, consultez [Frameworks et types Régions AWS d'instances pris en charge](distributed-data-parallel-support.md).

**Intégration dans les conteneurs SageMaker AI Framework**

Cette version de la bibliothèque SMDDP est migrée vers le conteneur [SageMaker AI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) Framework suivant.
+ PyTorch v2.3.0

  ```
  763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.3.0-gpu-py311-cu121-ubuntu20.04-sagemaker
  ```

Pour obtenir la liste complète des versions de la bibliothèque SMDDP et des conteneurs prédéfinis, consultez [Frameworks et types Régions AWS d'instances pris en charge](distributed-data-parallel-support.md).

**Fichier binaire de cette version**

Vous pouvez télécharger ou installer la bibliothèque à l’aide de l’URL suivante.

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.3.0/cu121/2024-05-23/smdistributed_dataparallel-2.3.0-cp311-cp311-linux_x86_64.whl
```

**Autres modifications**
+ La bibliothèque SMDDP v2.2.0 est intégrée au conteneur du framework SageMaker AI pour v2.2.0. PyTorch 

## La bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA v2.2.0
<a name="data-parallel-release-notes-20240304"></a>

*Date : 04 mars 2024*

**Nouvelles fonctionnalités**
+ Ajout du support pour la PyTorch version 2.2.0 avec CUDA v12.1.

**Intégration dans les conteneurs Docker distribués par la bibliothèque de parallélisme des modèles SageMaker AI (SMP)**

Cette version de la bibliothèque SMDDP est migrée vers [La bibliothèque de parallélisme des SageMaker modèles v2.2.0](model-parallel-release-notes.md#model-parallel-release-notes-20240307).

```
658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121
```

Pour les régions dans lesquelles les images Docker SMP sont disponibles, consultez [Régions AWS](distributed-model-parallel-support-v2.md#distributed-model-parallel-availablity-zone-v2).

**Fichier binaire de cette version**

Vous pouvez télécharger ou installer la bibliothèque à l’aide de l’URL suivante.

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.2.0/cu121/2024-03-04/smdistributed_dataparallel-2.2.0-cp310-cp310-linux_x86_64.whl
```

## La bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA v2.1.0
<a name="data-parallel-release-notes-20240301"></a>

*Date : 1er mars 2024*

**Nouvelles fonctionnalités**
+ Ajout du support pour la PyTorch version 2.1.0 avec CUDA v12.1.

**Corrections de bugs**
+ Correction du problème de fuite de mémoire du CPU dans [SMDDP v2.0.1](#data-parallel-release-notes-20231207).

**Intégration dans les conteneurs SageMaker AI Framework**

Cette version de la bibliothèque SMDDP a passé avec succès les tests de référence et a été migrée vers le conteneur [SageMaker AI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) Framework suivant.
+ PyTorch v2.1.0

  ```
  763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.1.0-gpu-py310-cu121-ubuntu20.04-sagemaker
  ```

**Intégration dans les conteneurs Docker distribués par la bibliothèque de parallélisme des modèles SageMaker AI (SMP)**

Cette version de la bibliothèque SMDDP est migrée vers [La bibliothèque de parallélisme des SageMaker modèles v2.1.0](model-parallel-release-notes.md#model-parallel-release-notes-20240206).

```
658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.1.2-gpu-py310-cu121
```

Pour les régions dans lesquelles les images Docker SMP sont disponibles, consultez [Régions AWS](distributed-model-parallel-support-v2.md#distributed-model-parallel-availablity-zone-v2).

**Fichier binaire de cette version**

Vous pouvez télécharger ou installer la bibliothèque à l’aide de l’URL suivante.

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.1.0/cu121/2024-02-04/smdistributed_dataparallel-2.1.0-cp310-cp310-linux_x86_64.whl
```

## La bibliothèque de parallélisme de données distribué basée sur l' SageMaker IA v2.0.1
<a name="data-parallel-release-notes-20231207"></a>

*Date : 7 décembre 2023*

**Nouvelles fonctionnalités**
+ Ajout d'une nouvelle implémentation SMDDP d'un fonctionnement `AllGather` collectif optimisé pour les ressources AWS informatiques et l'infrastructure réseau. Pour en savoir plus, veuillez consulter la section [Opération collective `AllGather` de la bibliothèque SMDDP](data-parallel-intro.md#data-parallel-allgather).
+ L'opération `AllGather` collective SMDDP est compatible avec PyTorch FSDP et. DeepSpeed Pour en savoir plus, veuillez consulter la section [Utilisez la bibliothèque SMDDP dans votre script d'entraînement PyTorch](data-parallel-modify-sdp-pt.md).
+ Ajout du support pour la PyTorch version 2.0.1

**Problèmes connus**
+ Problème de fuite de mémoire du CPU dû à une augmentation progressive de la mémoire du CPU pendant l’entraînement avec l’opération `AllReduce` SMDDP en mode DDP.

**Intégration dans les conteneurs SageMaker AI Framework**

Cette version de la bibliothèque SMDDP a passé avec succès les tests de référence et a été migrée vers le conteneur [SageMaker AI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) Framework suivant.
+ PyTorch v2.0.1

  ```
  763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker
  ```

**Fichier binaire de cette version**

Vous pouvez télécharger ou installer la bibliothèque à l’aide de l’URL suivante.

```
https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/smdistributed_dataparallel-2.0.2-cp310-cp310-linux_x86_64.whl
```

**Autres modifications**
+ À partir de cette version, la documentation de la bibliothèque SMDDP est entièrement disponible dans ce guide du *développeur Amazon SageMaker AI*. Au profit du guide du développeur complet pour SMDDP v2 contenu dans le guide du *développeur Amazon SageMaker AI, la documentation contenant* la [référence supplémentaire pour SMDDP v1.x dans](https://sagemaker.readthedocs.io/en/stable/api/training/smd_data_parallel.html) la documentation du *SDK AI SageMaker Python* n'est plus prise en charge. Si vous avez toujours besoin de la documentation SMP v1.x, consultez l'instantané suivant de la documentation dans la documentation du [SDK SageMaker Python v2.212.0](https://sagemaker.readthedocs.io/en/v2.212.0/api/training/distributed.html#the-sagemaker-distributed-data-parallel-library).