

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在合併使用管道平行處理與張量平行處理組時的排名機制
<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)延伸而來。借助張量平行處理，程式庫引入三種類型的排名及處理程序群組 API：`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 模型平行化程式庫的通訊處理程序 API，請參閱 *SageMaker Python SDK 文件*的[常見 API](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_common_api.html#) 與 [Python 特定 API](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_tw/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-ranking-mechanism.png)


例如，假設單一節點具 8 個 GPU 的處理程序群組，其中張量平行處理程度為 2，管道平行處理程度為 2，而資料平行處理程度為 4。上圖的上方中心部分顯示具 4 個圖層的模型範例。圖的左下與右下部分說明使用管道平行處理及張量平行處理分散在 4 個 GPU 的 4 層模型，其中張量平行處理用於中間兩層。這兩個下圖是簡便複本，用於說明不同群組範圍線。分割模型會跨 GPU 0-3 與 4-7 進行資料平行處理複寫。左下圖顯示 `MP_GROUP`、`PP_GROUP`、`TP_GROUP` 的定義。右下圖顯示同一組 GPU 的 `RDP_GROUP`、`DP_GROUP`、`WORLD`。具相同顏色圖層與圖層配量的漸層會一起 `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`) 會跨 GPU 0、2、4、6 進行，並透過 GPU 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` 計算縮減資料平行程度。  