-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 oder ManualComputationOp 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 ShardingConstraintOps verwendet wird, die Folgendes erfüllt:

  • Der Tensor wird nicht von einem ShardingConstraintOp erstellt und hat keine anderen Nutzer vom Typ ShardingConstraintOp oder ManualComputationOp.
  • Mit Ausnahme der letzten werden alle ShardingConstraintOp in der Kette nur einmal verwendet.
  • Das letzte ShardingConstraintOp in der Kette hat keine Nutzer des Typs ShardingConstraintOp oder ManualComputationOp (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 MeshAttrs in Shardings als SymbolMeshOps.

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 ManualComputationOps 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.