

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 파이프라인 병렬 처리와 텐서 병렬 처리를 조합하여 사용할 때의 랭킹 매커니즘
<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)에서 확장되었습니다. 텐서 병렬 처리를 통해 라이브러리는 텐서 병렬 랭크용 `smp.tp_rank()`, 파이프라인 병렬 랭크용 `smp.pp_rank()`, 축소 데이터 병렬 랭크용 `smp.rdp_rank()`라는 세 가지 유형의 랭킹 및 프로세스 그룹 API를 도입합니다. 해당 통신 프로세스 그룹은 텐서 병렬 그룹(`TP_GROUP`), 파이프라인 병렬 그룹(`PP_GROUP`) 및 축소 데이터 병렬 그룹(`RDP_GROUP`)입니다. 이 그룹은 다음과 같이 정의됩니다.
+ *텐서 병렬 그룹*(`TP_GROUP`)은 모듈의 텐서 병렬 분산이 발생하는 데이터 병렬 그룹의 균등 분할 가능한 서브셋입니다. 파이프라인 병렬도가 1인 경우 `TP_GROUP`은 *모델 병렬 그룹*(`MP_GROUP`)과 동일합니다.
+ *파이프라인 병렬 그룹*(`PP_GROUP`)은 파이프라인 병렬 처리가 발생하는 프로세스 그룹입니다. 텐서 병렬도가 1인 경우 `PP_GROUP`은 `MP_GROUP`과 동일합니다.
+ *reduced-data parallel 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#) 및 [PyTorch별 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/ko_kr/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-ranking-mechanism.png)


예를 들어 텐서 병렬도가 2, 파이프라인 병렬도가 2, 데이터 병렬도가 4이고 GPU가 8개인 단일 노드 프로세스 그룹을 생각해 봅시다. 이전 그림의 가운데 위쪽 부분은 계층이 4개인 모델의 예를 보여줍니다. 그림 왼쪽 하단 및 오른쪽 하단은 파이프라인 병렬 처리와 텐서 병렬 처리를 모두 사용해 GPU 4개에 분산된 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`를 통해 감소된 데이터 병렬도를 추가로 계산합니다.  