

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将管道并行性与张量并行性结合使用时的秩评定机制
<a name="model-parallel-extended-features-pytorch-ranking-mechanism"></a>

此部分解释了模型并行性的秩评定机制如何与张量并行性结合使用。这是从 [SageMaker 模型并行度库的核心功能](model-parallel-core-features.md) 的[秩评定基础知识](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#ranking-basics)中扩展而来的。在张量并行度中，该库引入了三种类型的排名和处理组 APIs：用于`smp.tp_rank()`张量并行等级，用于`smp.pp_rank()`流水线并行等级，以及用于`smp.rdp_rank()`简化数据的并行等级。对应的通信进程组是张量并行组 (`TP_GROUP`)、管道并行组 (`PP_GROUP`) 和缩减数据并行组 (`RDP_GROUP`)。这些组的定义如下：
+ *张量并行组* (`TP_GROUP`) 是数据并行组中一个可均匀分割的子集，在其中完成模块的张量并行分布。当管道并行度为 1 时，`TP_GROUP` 与*模型并行组* (`MP_GROUP`) 相同。
+ *管道并行组* (`PP_GROUP`) 是完成管道并行性的进程组。当张量并行度为 1 时，`PP_GROUP` 与 `MP_GROUP` 相同。
+ *缩减数据并行组* (`RDP_GROUP`) 是一组进程，同时容纳相同的管道并行性分区和相同的张量并行分区，并在它们自身中执行数据并行性。之所以将其称为缩减数据并行组，是因为它是整个数据并行性组 `DP_GROUP` 的子集。对于分布在 `TP_GROUP` 中的模型参数，梯度 `allreduce` 运算仅对缩减数据并行组执行，而对于未分布的参数，梯度 `allreduce` 在整个 `DP_GROUP` 上进行。
+ 模型并行组 (`MP_GROUP`) 是指一组共同存储整个模型的进程。它由当前进程的 `TP_GROUP` 中，所有秩的 `PP_GROUP` 并集组成。当张量并行度为 1 时，`MP_GROUP` 等于 `PP_GROUP`。它也与先前 `smdistributed` 版本中的 `MP_GROUP` 现有定义一致。请注意，当前 `TP_GROUP` 是当前 `DP_GROUP` 和当前 `MP_GROUP` 的子集。

要详细了解 SageMaker 模型并行度库 APIs 中的通信过程，请参阅 Pyth *SageMaker on* SDK 文档中的[通用 API](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_common_api.html#) 和[PyTorch特定 APIs](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html)的。

![\[张量并行性的排名机制、参数分布和关联 AllReduce 运算。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-ranking-mechanism.png)


例如，考虑具有8的单个节点的处理组 GPUs，其中张量并行度为2，流水线并行度为2，数据并行度为4。上图的顶部居中部分显示了一个包含 4 层的模型的示例。图的左下角和右下部分说明了 GPUs 使用流水线并行性和张量并行度分布在 4 层的 4 层模型，其中中间的两层使用张量并行性。下方的两个图是简单的副本，用于说明不同的组边界线。在 GPUs 0-3 和 4-7 之间复制分区模型以实现数据并行性。左下图显示了`MP_GROUP`、`PP_GROUP` 和 `TP_GROUP` 的定义。右下角的图显示`WORLD`了`RDP_GROUP``DP_GROUP`、和在同一组上 GPUs。为了实现数据并行性，具有相同颜色的层和层切片的梯度通过 `allreduce` 分在一起。例如，第一层（浅蓝色）获取 `DP_GROUP` 上的 `allreduce` 运算，而第二层中的深橙色切片只能获取其进程的 `RDP_GROUP` 中的 `allreduce` 运算。加粗深红色箭头表示张量及其完整 `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
```

在此示例中，管道并行性跨 GPU 对 (0,1)、(2,3)、(4,5) 和 (6,7) 进行。此外，数据并行度 (`allreduce`) 在 GPUs 0、2、4、6 之间进行，并在 GPUs 1、3、5、7 上独立进行。张量并行性发生在 `DP_GROUP` 的子集上，跨 GPU 对 (0,2)、(1,3)、(4,6) 和 (5,7)。

  对于这种管道和张量并行性的混合，`data_parallel_degree` 的算术仍然是 `data_parallel_degree = number_of_GPUs / pipeline_parallel_degree`。该库根据关系 `reduced_data_parallel_degree * tensor_parallel_degree = data_parallel_degree`，进一步计算缩减数据并行度。  