

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Mecanismo de classificação ao usar uma combinação de paralelismo de pipeline e paralelismo de tensores
<a name="model-parallel-extended-features-pytorch-ranking-mechanism"></a>

Esta seção explica como o mecanismo de classificação do paralelismo do modelo funciona com o paralelismo de tensores. Isso foi estendido do [Ranking Basics](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#ranking-basics) for [Principais características da biblioteca de SageMaker paralelismo de modelos](model-parallel-core-features.md). Com o paralelismo de tensores, a biblioteca introduz três tipos de APIs de classificação e grupo de processos: `smp.tp_rank()` para classificação paralela do tensor, `smp.pp_rank()` para classificação paralela de pipeline e `smp.rdp_rank()` para classificação paralela de dados reduzidos. Os grupos de processos de comunicação correspondentes são tensor parallel group (`TP_GROUP`), pipeline parallel group (`PP_GROUP`) e reduced-data parallel group (`RDP_GROUP`). Esses grupos são definidos da seguinte maneira:
+ Um *grupo paralelo de tensores* (`TP_GROUP`) é um subconjunto uniformemente divisível do grupo paralelo de dados, sobre o qual ocorre a distribuição paralela de módulos por tensores. Quando o grau de paralelismo do pipeline é 1, `TP_GROUP` é o mesmo que model *parallel group* (`MP_GROUP`). 
+ Um *grupo paralelo de pipeline* (`PP_GROUP`) é o grupo de processos nos quais o paralelismo de pipeline ocorre. Quando o grau de paralelismo do tensor é 1, `PP_GROUP` é o mesmo que `MP_GROUP`. 
+ Um grupo *paralelo de dados reduzidos* (`RDP_GROUP`) é um conjunto de processos que mantêm as mesmas partições de paralelismo de pipeline e as mesmas partições paralelas de tensor e realizam paralelismo de dados entre si. Isso é chamado de grupo paralelo de dados reduzido porque é um subconjunto de todo o grupo de paralelismo de dados, `DP_GROUP`. Para os parâmetros do modelo que são distribuídos dentro do `TP_GROUP`, a operação de gradiente `allreduce` é executada somente para grupos paralelos de dados reduzidos, enquanto para os parâmetros que não são distribuídos, o gradiente `allreduce` ocorre em todo o grupo `DP_GROUP`. 
+ Um grupo paralelo de modelo (`MP_GROUP`) se refere a um grupo de processos que armazenam coletivamente o modelo inteiro. Consiste na união dos `PP_GROUP`s de todas as classificações que estão no processo atual `TP_GROUP`. Quando o grau de paralelismo do tensor é 1, `MP_GROUP` é equivalente a `PP_GROUP`. Também é consistente com a definição existente `MP_GROUP` de versões anteriores de `smdistributed`. Observe que a corrente `TP_GROUP` é um subconjunto da corrente `DP_GROUP` e da atual `MP_GROUP`. 

[https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html)

![Mecanismo de classificação, distribuição de parâmetros e AllReduce operações associadas do paralelismo tensorial.](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-ranking-mechanism.png)


Por exemplo, considere grupos de processos para um único nó com 8 GPUs, em que o grau de paralelismo do tensor é 2, o grau de paralelismo do pipeline é 2 e o grau de paralelismo dos dados é 4. A parte central superior da figura anterior mostra um exemplo de modelo com 4 camadas. As partes inferior esquerda e inferior direita da figura ilustram o modelo de 4 camadas distribuído em 4 GPUs usando paralelismo de pipeline e paralelismo de tensor, onde o paralelismo de tensor é usado para as duas camadas intermediárias. Essas duas figuras inferiores são cópias simples para ilustrar diferentes linhas de limite de grupos. O modelo particionado é replicado para paralelismo de dados nas GPUs 0-3 e 4-7. A figura inferior esquerda mostra as definições de `MP_GROUP`, `PP_GROUP` e `TP_GROUP`. A figura inferior direita mostra `RDP_GROUP`, `DP_GROUP`, e `WORLD` sobre o mesmo conjunto de GPUs. Os gradientes das camadas e das fatias da camada que têm a mesma cor são `allreduce` unidos para paralelismo de dados. Por exemplo, a primeira camada (azul claro) transmite as operações `allreduce` em `DP_GROUP`, enquanto a fatia laranja escura na segunda camada só obtém as operações `allreduce` dentro do processo `RDP_GROUP`. As setas vermelhas escuras em negrito representam tensores com o lote inteiro `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
```

Neste exemplo, o paralelismo do pipeline ocorre entre os pares de GPU (0,1), (2,3), (4,5) e (6,7). Além disso, o paralelismo de dados (`allreduce`) ocorre nas GPUs 0, 2, 4, 6 e de forma independente nas GPUs 1, 3, 5, 7. O paralelismo do tensor ocorre em subconjuntos de `DP_GROUP`s, nos pares de GPU (0,2); (1,3); (4,6) e (5,7).

  Para esse tipo de paralelismo híbrido de pipeline e tensor, a matemática para `data_parallel_degree` permanece a mesma de `data_parallel_degree = number_of_GPUs / pipeline_parallel_degree`. A biblioteca calcula ainda mais o grau paralelo de dados reduzido a partir da relação `reduced_data_parallel_degree * tensor_parallel_degree = data_parallel_degree` a seguir.  