

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.

# Mécanisme de classement lors de l'utilisation d'une combinaison de parallélisme de pipelines et de parallélisme de tenseurs
<a name="model-parallel-extended-features-pytorch-ranking-mechanism"></a>

Cette section explique comment le mécanisme de classement du parallélisme de modèles fonctionne avec le parallélisme de tenseurs. C'est une extension des [notions de base du classement](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#ranking-basics) pour [Principales fonctionnalités de la bibliothèque de parallélisme des SageMaker modèles](model-parallel-core-features.md). Avec le parallélisme des tenseurs, la bibliothèque introduit trois types de classement et de groupe de processus APIs : pour le rang parallèle des `smp.tp_rank()` tenseurs, pour le rang parallèle du `smp.pp_rank()` pipeline et pour le rang parallèle des données `smp.rdp_rank()` réduites. Les groupes de processus de communication correspondants sont le groupe de tenseurs parallèles (`TP_GROUP`), le groupe de pipelines parallèles (`PP_GROUP`) et le groupe de données réduites parallèles (`RDP_GROUP`). Ces groupes sont définis comme suit :
+ Un *groupe de tenseurs parallèles* (`TP_GROUP`) est un sous-ensemble divisible de manière égale du groupe de données parallèles, sur lequel s'exerce la distribution en tenseurs parallèles des modules. Lorsque le degré de parallélisme de pipelines est de 1, `TP_GROUP` est identique au *groupe parallèle au modèle* (`MP_GROUP`). 
+ Un *groupe de pipelines parallèles* (`PP_GROUP`) est le groupe de processus sur lequel s'exerce le parallélisme des pipelines. Lorsque le degré de parallélisme de tenseur est de 1, `PP_GROUP` est identique à `MP_GROUP`. 
+ Un *groupe de données réduites parallèles* (`RDP_GROUP`) est un ensemble de processus qui contiennent les mêmes partitions de parallélisme des pipelines et les mêmes partitions de parallélisme des tenseurs, et qui réalisent un parallélisme des données entre eux. C'est ce que l'on appelle le groupe parallèle aux données réduites, car il s'agit d'un sous-ensemble de l'ensemble du groupe de parallélisme de données, `DP_GROUP`. Pour les paramètres du modèle distribués dans le `TP_GROUP`, l'opération `allreduce` de gradient est effectuée uniquement pour le groupe parallèle aux données réduites, tandis que pour les paramètres non distribués, l'opération `allreduce` de gradient a lieu sur l'ensemble du `DP_GROUP`. 
+ Un groupe parallèle au modèle (`MP_GROUP`) désigne un groupe de processus qui stockent collectivement l'ensemble du modèle. Il s'agit de l'union des `PP_GROUP` de tous les rangs qui se trouvent dans le `TP_GROUP` du processus actuel. Lorsque le degré de parallélisme de tenseur est de 1, `MP_GROUP` est équivalent à `PP_GROUP`. Il est également cohérent avec la définition existante du `MP_GROUP` des versions `smdistributed` précédentes. Veuillez noter que le `TP_GROUP` actuel est un sous-ensemble du `DP_GROUP` et du `MP_GROUP` actuels. 

Pour en savoir plus sur le processus de communication APIs dans la bibliothèque de parallélisme des SageMaker modèles, consultez l'[API commune et l'API PyTorch](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_common_api.html#) [spécifique dans la documentation APIs](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html) du SDK *SageMaker Python*.

![\[Mécanisme de classement, distribution des paramètres et AllReduce opérations associées du parallélisme tensoriel.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-ranking-mechanism.png)


Par exemple, considérez les groupes de processus pour un seul nœud avec 8 GPUs, où le degré de parallélisme des tenseurs est de 2, le degré de parallélisme du pipeline est de 2 et le degré de parallélisme des données est de 4. La partie centrale supérieure de la figure précédente montre un exemple de modèle à 4 couches. Les parties inférieure gauche et inférieure droite de la figure illustrent le modèle à 4 couches réparti sur 4 GPUs utilisant à la fois le parallélisme des pipelines et le parallélisme des tenseurs, le parallélisme des tenseurs étant utilisé pour les deux couches du milieu. Les deux figures du bas sont de simples copies permettant d'illustrer des lignes de limites de groupe différentes. Le modèle partitionné est répliqué pour le parallélisme des données entre 0-3 et 4-7. GPUs La figure en bas à gauche montre les définitions de `MP_GROUP`, de `PP_GROUP` et de `TP_GROUP`. La figure en bas à droite montre `RDP_GROUP``DP_GROUP`, et `WORLD` sur le même ensemble de GPUs. Les opérations `allreduce` sont effectuées pour tous les gradients des couches et des tranches de couche de la même couleur dans le cadre du parallélisme des données. Par exemple, les opérations `allreduce` sont effectuées sur la première couche (bleu clair) dans `DP_GROUP`, alors que ces opérations `allreduce` ne sont effectuées sur la tranche orange foncé de la deuxième couche qu'au sein du `RDP_GROUP` de son processus. Les flèches rouge foncé en gras représentent des tenseurs avec le lot de tout le `TP_GROUP`.

```
GPU0: pp_rank 0, tp_rank 0, rdp_rank 0, dp_rank 0, mp_rank 0
GPU1: pp_rank 1, tp_rank 0, rdp_rank 0, dp_rank 0, mp_rank 1
GPU2: pp_rank 0, tp_rank 1, rdp_rank 0, dp_rank 1, mp_rank 2
GPU3: pp_rank 1, tp_rank 1, rdp_rank 0, dp_rank 1, mp_rank 3
GPU4: pp_rank 0, tp_rank 0, rdp_rank 1, dp_rank 2, mp_rank 0
GPU5: pp_rank 1, tp_rank 0, rdp_rank 1, dp_rank 2, mp_rank 1
GPU6: pp_rank 0, tp_rank 1, rdp_rank 1, dp_rank 3, mp_rank 2
GPU7: pp_rank 1, tp_rank 1, rdp_rank 1, dp_rank 3, mp_rank 3
```

Dans cet exemple, le parallélisme de pipeline se produit entre les paires de GPU (0,1) ; (2,3) ; (4,5) et (6,7). En outre, le parallélisme des données (`allreduce`) s'effectue sur GPUs 0, 2, 4, 6 et indépendamment sur GPUs 1, 3, 5, 7. Le parallélisme de tenseur se produit sur des sous-ensembles de `DP_GROUP`, sur les paires de GPU (0,2) ; (1,3) ; (4,6) et (5,7).

  Pour ce type de parallélisme hybride de pipeline et de tenseur, le calcul de `data_parallel_degree` reste `data_parallel_degree = number_of_GPUs / pipeline_parallel_degree`. La bibliothèque calcule encore le degré de parallélisme de données réduit à partir de la relation `reduced_data_parallel_degree * tensor_parallel_degree = data_parallel_degree`.  