-sdy-add-data-flow-edges
Fügt für jede Dataflow-Kante DataFlowEdgeOp
ein.
Fügt DataFlowEdgeOp
für jeden Wert ein, der Inhaber einer Datenflusskante ist, d.h. für alle Werte, die von getDataFlowEdgeOwners
für jede Operation im Modul zurückgegeben werden.
Für das eingefügte DataFlowEdgeOp
wird das vorhandene Sharding des Eigentümerziels verwendet, falls vorhanden.
TODO(b/330339693): Dieses Dokument aktualisieren, wenn getDataFlowEdgeOwners
entfernt wird.
-sdy-apply-sharding-constraints
Werden Einschränkungen angewendet, die das Sharding der Eingaben vorschreiben?
Kopiert das Sharding einer ShardingConstraintOp
in die Eingabe, wenn alle folgenden Bedingungen erfüllt sind:
- Für die Eingabe gibt es kein Sharding.
- Die Eingabe wird nicht von einem
DataFlowEdgeOp
generiert, das das Sharding aller Ziele des Edge enthält. - Das Sharding der
ShardingConstraintOp
ist vollständig abgeschlossen. - Die Eingabe enthält keine anderen Nutzer vom Typ
ShardingConstraintOp
oderManualComputationOp
mit einer anderen Sharding-Methode.
Das bedeutet, dass das ShardingConstraintOp
das Sharding der Eingabe vorgibt.
Das Sharding einer ShardingConstraintOp
wird unabhängig von diesem Pass an die Eingabe oder die Nutzer weitergegeben. Da die Eigenschaft „Geschlossen“ einer Dimension jedoch nicht weitergegeben wird, ist es wichtig, das Sharding zu kopieren, um die Einschränkung in den oben genannten Fällen vollständig zu berücksichtigen.
Wenn außerdem ein Tensor von einer Kette von ShardingConstraintOp
s verwendet wird, die Folgendes erfüllt:
- Der Tensor wird nicht von einem
ShardingConstraintOp
erstellt und hat keine anderen Nutzer vom TypShardingConstraintOp
oderManualComputationOp
. - Mit Ausnahme der letzten werden alle
ShardingConstraintOp
in der Kette nur einmal verwendet. - Das letzte
ShardingConstraintOp
in der Kette hat keine Nutzer des TypsShardingConstraintOp
oderManualComputationOp
(andernfalls ist es nicht das letzte in der Kette).
Er ersetzt dann alle anderen Verwendungen der Eingabe der Kette, die nach der letzten ShardingConstraintOp
in der Kette (und innerhalb desselben Blocks) definiert sind, durch das Ergebnis der Kette, da es das Sharding dieser Verwendungen vorschreiben sollte.
-sdy-constant-splitter
Teilt konstante Teilberechnungen auf, sodass jede nur einmal verwendet wird.
Konstante Teilberechnungen werden so aufgeteilt, dass sie nur einen Nutzer haben.
So wird sichergestellt, dass ein Sharding nicht zwischen verschiedenen Verwendungen einer konstanten Teilberechnung weitergegeben wird, da dies als falsche Abhängigkeit betrachtet wird. Die Verwendungen einer Konstante sollten nicht auf dieselbe Weise gesplittet werden, nur weil sie dieselbe Konstante verwenden. Im Grunde kann jede Verwendung ein anderes Sharding haben, das sich unabhängig auf eine eigene Kopie der konstanten Teilberechnung auswirken kann.
Eine konstante Teilberechnung ist entweder:
- Konstante oder Iota-Operator (keine Operanden)
- ein Broadcast-, Slice- oder rein elementweiser Operator, dessen Operanden alle (rekursiv) durch konstante Teilberechnungen definiert werden, einschließlich der gesamten Teilberechnungen, die seine Operanden definieren.
Hinweis: Innerhalb einer konstanten Unterberechnung kann ein Wert mehrere Verwendungen haben.
-sdy-lift-inlined-meshes
Erhöht eingefügte MeshAttr
s in Shardings als SymbolMeshOp
s.
Ersetzt alle eingefügten MeshAttr
in einer TensorShardingAttr
durch den Namen eines Mesh-Symbols, das entweder auf eine vorhandene oder eine neue MeshOp
im Modul verweist, sodass keine zwei MeshOp
mit derselben MeshAttr
vorhanden sind (vorhandene MeshOp
werden ebenfalls dedupliziert).
Die Namen der neuen MeshOp
lauten entweder:
maximal_mesh_{device-id}
für ein maximales Mesh (d.h. leere Achsenliste und eine einzelne Geräte-ID).- Andernfalls der erste verfügbare Name in [
mesh
,mesh_0
,mesh_1
, ...]. ###-sdy-manual-axes-cleanup
Die Verwendung manueller Achsen in ManualComputationOp
s wurde optimiert.
1) Fügen Sie für jede Ein-/Aus-Fragmentierung, für die keine manuelle Achse angegeben ist, diese manuelle Achse zu ihren replizierten Achsen hinzu. So wird sichergestellt, dass manuelle Achsen immer vollständig angegeben sind.
2) Die manuellen Achsen werden in der Reihenfolge der Mesh-Achsendeklaration sortiert.
-sdy-sharding-group-import
Kanonisierung und Validierung für Sharding-Gruppen bestanden.
Beim Import werden die Sharding-Gruppen kanonisiert und validiert. Dazu gehören:
1) Sharding-Gruppenzusammenführung: Sharding-Gruppen werden mithilfe der übertragbaren Eigenschaft der Gruppenmitgliedschaft kombiniert. Wenn ein Tensor T in der Sharding-Gruppe G1 und der Sharding-Gruppe G2 ist, können wir daraus schließen, dass alle Mitglieder in G1 und G2 auf dieselbe Weise geSharded werden sollten. Daher können wir G1 und G2 zu einer Gruppe zusammenfassen. Die kanonischen Gruppen-IDs nach der Zusammenführung sind 0,1,…N-1 für die minimale Anzahl von Gruppen.
2) Sharding-Gruppenvalidierung: Prüft, ob Sharding-Gruppen korrekt formatiert sind und den Annahmen innerhalb der Implementierung entsprechen. Derzeit gilt, dass, wenn eine Sharding-Gruppe eine Value
enthält, die im Block einer ManualComputationOp
definiert ist, alle anderen Werte in dieser Gruppe sich im selben Block befinden müssen.