

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# So funktioniert die Tensor-Parallelität
<a name="model-parallel-extended-features-pytorch-tensor-parallelism-how-it-works"></a>

Die Tensor-Parallelität findet auf der Ebene von `nn.Modules` statt. Sie partitioniert bestimmte Module im Modell über tensorparallele Ränge hinweg. Dies erfolgt zusätzlich zur bestehenden Partition der *Module*, die bei der Pipeline-Parallelität verwendet werden.

Wenn ein Modul durch Tensor-Parallelität partitioniert wird, werden seine Vorwärts- und Rückwärtsverteilung verteilt. Die Bibliothek kümmert sich um die geräteübergreifende Kommunikation, um die verteilte Ausführung dieser Module zu implementieren. Die Module werden über mehrere datenparallele Ränge partitioniert. Im Gegensatz zur herkömmlichen Verteilung von Workloads verfügt **nicht** jeder datenparallele Rang über die vollständige Modellreplizierung, wenn die Tensor-Parallelität der Bibliothek verwendet wird. Stattdessen hat jeder datenparallele Rang ggf. nur eine Partition der verteilten Module, zusätzlich zu der Gesamtheit der nicht verteilten Module.

**Beispiel:** Stellen Sie sich die Tensor-Parallelität über datenparallele Ränge hinweg vor, wobei der Daten-Parallelitätsgrad 4 und der Grad der Tensor-Parallelität 2 beträgt. Gehen Sie davon aus, dass Sie nach der Partitionierung der Menge der Module eine datenparallele Gruppe haben, die den folgenden Modulbaum enthält.

```
A
├── B
|   ├── E
|   ├── F
├── C
└── D
    ├── G
    └── H
```

Gehen Sie davon aus, dass die Tensor-Parallelität für die Module B, G und H unterstützt wird. Ein mögliches Ergebnis der tensorparallelen Partition dieses Modells könnte sein:

```
dp_rank 0 (tensor parallel rank 0): A, B:0, C, D, G:0, H
dp_rank 1 (tensor parallel rank 1): A, B:1, C, D, G:1, H
dp_rank 2 (tensor parallel rank 0): A, B:0, C, D, G:0, H
dp_rank 3 (tensor parallel rank 1): A, B:1, C, D, G:1, H
```

Jede Zeile steht für die Menge der in diesem `dp_rank` gespeicherten Module, und die Notation `X:y` steht für den `y`. Bruchteil des Moduls `X`. Beachten Sie Folgendes:

1. Die Partitionierung erfolgt über Teilmengen von datenparallelen Rängen hinweg, die wir `TP_GROUP` nennen, nicht über die gesamte `DP_GROUP`, so dass die genaue Modellpartition über `dp_rank` 0 und `dp_rank` 2 und in ähnlicher Weise über `dp_rank` 1 und `dp_rank` 3 repliziert wird.

1. Die Module `E` und `F` gehören nicht mehr zum Modell, da ihr übergeordnetes Modul `B` partitioniert ist, und jede Ausführung, die normalerweise zu `E` und `F` gehört, findet innerhalb des (partitionierten) `B` Moduls statt.

1. Obwohl `H` für die Tensor-Parallelität unterstützt wird, wird es in diesem Beispiel nicht partitioniert. Das verdeutlicht, dass es von Benutzereingaben abhängt, ob ein Modul partitioniert werden soll oder nicht. Die Tatsache, dass ein Modul für Tensor-Parallelität unterstützt wird, bedeutet nicht unbedingt, dass es partitioniert wird.

## Wie die Bibliothek die Tensorparallelität an das Modul anpasst PyTorch `nn.Linear`
<a name="model-parallel-extended-for-pytorch-adapt-to-module"></a>

Wenn die Tensor-Parallelität über datenparallele Ränge ausgeführt wird, wird eine Teilmenge der Parameter, Steigungen und Optimierer-Zustände über die tensorparallelen Geräte *für die partitionierten Module* hinweg partitioniert. Für die übrigen Module arbeiten die tensorparallelen Geräte in der regulär datenparallelen Weise. Um das partitionierte Modul auszuführen, sammelt ein Gerät zunächst die erforderlichen Teile *aller Datenstichproben* auf Peer-Geräten in derselben Tensor-Parallelitätsgruppe. Das Gerät führt dann den lokalen Teil des Moduls für all diese Datenproben aus, gefolgt von einer weiteren Synchronisationsrunde, bei der sowohl die Teile der Ausgabe für jede Datenprobe kombiniert als auch die kombinierten Datenproben an die zurückgegeben werden, GPUs aus der die Datenprobe zuerst stammt. Die folgende Abbildung zeigt ein Beispiel für diesen Prozess in einem partitionierten `nn.Linear` Modul. 

![\[Zwei Abbildungen zeigen zwei Tensorparallelkonzepte.\]](http://docs.aws.amazon.com/de_de/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-concept.png)


Die erste Abbildung zeigt ein kleines Modell mit einem großen `nn.Linear` Modul mit Datenparallelität über die beiden Tensor-Parallelitätsränge. Das `nn.Linear` Modul wird in die beiden parallelen Ränge repliziert. 

Die zweite Abbildung zeigt die Anwendung der Tensor-Parallelität auf ein größeres Modell bei der Aufteilung des `nn.Linear` Moduls. Jedes `tp_rank` enthält die Hälfte des linearen Moduls und die Gesamtheit der übrigen Operationen. Während das lineare Modul läuft, sammelt jedes `tp_rank` die entsprechende Hälfte aller Datenstichproben und übergibt sie an die jeweils andere Hälfte des `nn.Linear` Moduls. Das Ergebnis muss mit reduzierter Streuung (mit Summierung als Reduktionsvorgang) berechnet werden, so dass jeder Rang die endgültige lineare Ausgabe für seine eigenen Datenstichproben erhält. Der Rest des Modells läuft in der typischen datenparallelen Weise.