-mpmd-copy-topology-from-main
Kopiert die Topologie aus der Hauptfunktion in Funktionen, auf die von mpmd.call verwiesen wird.
Kopiert das Topologieattribut aus der Hauptfunktion in jede Funktion, auf die von einem mpmd.call verwiesen wird. Außerdem wird der Aufgerufene von mpmd.call auf „privat“ gesetzt, damit er nicht mit einer Einstiegspunktfunktion verwechselt wird.
-mpmd-enforce-input-output-equisharding
Erzwingt Einschränkungen für die gleichmäßige Shard-Verteilung für MPMD-Funktionen.
Erzwingt Einschränkungen für die gleichmäßige Shard-Verteilung für Ein- und Ausgaben für MPMD-Funktionen, indem bei Bedarf TransferOps eingeführt werden.
Optionen
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-generate-sdy-meshes-from-topology
Generiert Shard-Netze basierend auf der MPMD-Topologie.
Bei diesem Durchlauf werden alle vorhandenen Shard-Netz-Ops entfernt und durch Ops ersetzt, die auf der MPMD-Topologie basieren. Außerdem werden die Tensor-Shard-Verteilungen aktualisiert, um auf die neuen Netz-Ops zu verweisen.
-mpmd-infer-mesh-assign-mesh-func-leaves
_Weist jeder nicht verwendeten Berechnung, Funktionsausgabe und Funktionseingabe ein Netz zu, indem die Analysen use_set und srcset analysis. verwendet werden._
Bei diesem Durchlauf werden Netze den Blättern des Funktionskörpers zugewiesen (d. h. den Ergebnissen nicht verwendeter Berechnungen, nicht verwendeter Funktionsargumente und Funktionsausgaben), indem AssignOps erstellt oder der Typ geändert wird. Dabei werden die Informationen aus use_set und src_set verwendet.
Bestimmte Zwischenwerte werden aus Analysezwecken ebenfalls als Blätter behandelt. Konkret werden die Operanden von mpmd.reduce und mpmd.broadcast als Blätter behandelt und ein Paar aus Zuweisung und Aufhebung der Zuweisung wird für sie erstellt.
Durch diese Zuweisung wird use_set für alle Nicht-Blatt-Ops gelöscht, da die zuvor mit Anmerkungen versehenen Verwendungen veraltet sind. Die Ableitung von Reduce-Ops ändert use_set für einige Werte. Bei der anfänglichen Weitergabe von use_set werden Reduce-Ops nicht berücksichtigt, aber jetzt, da wir Reduce-Ops abgeleitet haben, ist die Weitergabe anders.
Dieser Durchlauf schlägt fehl und gibt Fehler aus, wenn use_set und src_set für Blatt-Ops nicht korrekt gefüllt sind.
Voraussetzung: Jede Op hat ein nicht leeres src_set oder wir leiten Übertragungen ab.
Optionen
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-assign-using-input-output-constraints
Weist den Ein- und Ausgaben ein Netz gemäß den Einschränkungen für die Zuweisung von Ein- und Ausgaben zu.
Bei diesem Durchlauf werden die Einschränkungen für die gleichmäßige Zuweisung von Ein- und Ausgaben verwendet, um sowohl die Eingabe als auch die Ausgabe demselben Netz zuzuweisen.
Dadurch wird garantiert, dass sich die Eingabe im selben Netz befindet, unabhängig davon, ob sie später in andere Netze übertragen wird. Das bedeutet aber, dass wir populate-src-set nach diesem Durchlauf nicht ausführen sollten.
Erforderlich:
- Für jede Eingabe
ider Einstiegspunktfunktion, die Teil einer Einschränkung für die gleichmäßige Zuweisung sein kann:ihat einen MeshTensorType ODER ein genau definiertes use_set. - Für jede Ausgabe
oder Einstiegspunktfunktion, die Teil einer Einschränkung für die gleichmäßige Zuweisung sein kann:ohat den Typ MeshTensorType ODER genau definierte src_set und use_set.
Ein genau definiertes use_set eines Werts umfasst alle Netze, denen der Wert (transitiv) über mpmd.assign-Ops zugewiesen ist, und kein anderes Netz. Ein genau definiertes src_set umfasst alle Netze, in denen sich der Tensor befinden darf, und kein anderes Netz.
Obwohl dies nur für Einstiegspunktfunktionen ausgeführt wird, machen wir daraus einen Modul-Op-Durchlauf, da alle Durchläufe für vorhandene Funktionen abgeschlossen sein müssen, bevor er ausgeführt wird. Wenn wir dies beispielsweise zu einem EntryPointFunctionPass machen, führt der Pass-Manager diesen Durchlauf möglicherweise aus, bevor die Validierung für die Nicht-Einstiegspunktfunktionen abgeschlossen ist.
Optionen
-verbose-logging : Whether to enable verbose logging
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-infer-mesh-convert-reduce-ops
Konvertiert mit Anmerkungen versehene Reduce-Ops in mpmd.reduce-Ops und vereinfacht Ketten von Reduce-Ops.
Konvertiert die mit Anmerkungen versehenen Reduce-Ops in mpmd.reduce-Ops und vereinfacht auch Ketten dieser Reduce-Ops.
In Symbolen:
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
Optionen
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
Führt die endgültige Bereinigung nach der Ableitung des Netzes für Muster durch.
Optionen
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_Initialisiert src_set für UnassignOps und Funktionsargumente und gibt srcset. weiter._
Bei diesem Durchlauf wird src_set initialisiert und weitergegeben. Dabei wird der Graph mit den src_set-Informationen gefüllt.
Voraussetzung: Damit Funktionsargumente src_set haben, muss use_set gefüllt sein.
Initialisierung: src_set eines UnassignOp wird auf das Netz gesetzt, dem es zugewiesen wird. src_set eines Funktionsarguments wird auf use_set gesetzt.
Weitergabe: src_set wird von Operanden an die Op selbst weitergegeben, wobei der Schnittpunkt der Operanden verwendet wird. Weitere Informationen finden Sie unter PropagateSrcSet.
-mpmd-infer-mesh-populate-use-set
_Initialisiert use_set für AssignOps und gibt useset. weiter._
Bei diesem Durchlauf wird use_set initialisiert und rückwärts weitergegeben. Dabei wird der Graph mit den use_set-Informationen gefüllt.
Initialisierung: use_set eines AssignOp wird auf das Netz gesetzt, dem es zugewiesen wird.
Weitergabe: use_set wird von Nutzern an die Op selbst weitergegeben, wobei die Vereinigung der Nutzer verwendet wird. use_set einer Op ist per Definition die Vereinigung der use_set ihrer Nutzer, da use_set die Menge der transitiven Verwendungen ist.
-mpmd-infer-mesh-rewrite-using-analysis
_Schreibt Ops gemäß useset.
Bei diesem Durchlauf werden Ops ohne Netz zugewiesen, indem sie in Fragmente eingeschlossen werden. Dabei werden die Analysen use_set und src_set verwendet.
Außerdem werden die Attribute use_set und src_set im Rahmen der Bereinigung entfernt, da die Analysen danach nicht mehr benötigt werden.
Voraussetzung: Jede Op hat ein use_set, d.h. die Analyse ist abgeschlossen. Voraussetzung: Jedes Argument einer Nicht-Einstiegspunktfunktion wird mindestens von einem Nicht-Terminator-Vorgang verwendet.
TODO: jupvfranco – Überlegen Sie, ob Sie diesen Durchlauf umbenennen sollten, da er nicht mehr so stark von der Analyse abhängt.
Optionen
-max-clones : How many copies of a meshless operation we allow. Setting it to 1 means we never clone the op.
-mpmd-infer-mesh-validate-no-additional-transfers-needed
Prüft, ob für die Zuweisung des Netzes keine zusätzlichen Übertragungen erforderlich sind.
Bei diesem Durchlauf wird geprüft, ob die Zuweisung des Netzes für alle Ops ohne Netz möglich ist, ohne dass zusätzliche Übertragungen erforderlich sind.
Für Ops ohne Netz, die keine Funktions-Ops sind, tritt ein Fehler auf, wenn:
- use_set nicht in src_set für eine bestimmte Op enthalten ist, d.h. eine Übertragung ist erforderlich.
Für Funktions-Ops reicht es aus, die oben genannten Bedingungen für die Funktionsargumente zu prüfen, da die Funktion entweder Ops ohne Netz oder Blockargumente zurückgibt.
Optionen
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-validate-src-set-not-empty
_Prüft, ob jede Op ohne Netz ein nicht leeres srcset.
Bei diesem Durchlauf werden alle Ops ohne Netz geprüft, um sicherzustellen, dass die Op zugewiesen werden kann. Für Ops ohne Netz, die keine Funktions-Ops sind, tritt ein Fehler auf, wenn src_set für eine Op leer ist oder wenn abgeleitet wurde, dass es sich um eine netzübergreifende Reduzierung handelt, sie aber nicht konvertiert wurde. Dies ist eine Voraussetzung für die Zuweisung von Funktionsblättern.
Für Funktions-Ops reicht es aus, die oben genannten Bedingungen für die Funktionsargumente zu prüfen, da die Funktion entweder Ops ohne Netz oder Blockargumente zurückgibt.
Dies muss ein Durchlauf auf Modulebene sein, da wir im Fall eines Fehlers beim Aufgerufenen die Aufrufer ausgeben möchten.
Voraussetzung: Netzübergreifende Reduzierungen müssen in Reduce-Ops konvertiert werden, bevor dieser Durchlauf ausgeführt wird.
Optionen
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_Fügt alle für Nutzer sichtbaren mpmd-Vorgänge ein, die in einer benanntenBerechnung verschachtelt sind.
Fügt alle benannten_Berechnungen, benannten_Tensoren, Broadcast- und Reduce-Ops ein, die in einer benannten_Berechnung verschachtelt sind. Dabei wird geprüft, ob die Zuweisung des Netzes (falls definiert) mit der des übergeordneten Elements übereinstimmt.
Optionen
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-insert-nameless-clone-of-negligible-ops
Kloniert vernachlässigbare Ops außerhalb benannter Berechnungen.
Kloniert vernachlässigbare Operationen (d. h. Operationen mit einem einzelnen Ergebnis und ohne Operanden) außerhalb benannter Berechnungen, wenn sie von der Rückgabe-Op der Berechnung verwendet werden. Dabei wird das Ergebnis der benannten_Berechnung durch den Klon ersetzt. Das ist erforderlich, da es zu einem Konflikt bei der Ableitung des Netzes kommen kann, wenn solche Ergebnisse von benannten Berechnungen verwendet werden, die verschiedenen Netzen zugewiesen sind. Durch die Anwendung dieses Durchlaufs können diese vernachlässigbaren Ops bei der Ableitung des Netzes geklont werden.
Bei diesem Durchlauf wird die benannte Berechnung NICHT geändert.
-mpmd-introduce-transfers
Erstellt Datenübertragungen basierend auf den Zuweisungen des Netzes durch den Nutzer.
Erstellt einen Durchlauf, der Übertragungsvorgänge basierend auf den Zuweisungen des Netzes durch den Nutzer einführt. Dazu gehören:
- Push in UnassignOp in mpmd-Aufrufe, wenn das Ergebnis von UnassignOp später im Aufgerufenen zugewiesen wird.
- Ersetzt AssignOp eines UnassignOp durch ein TransferOp.
- Weist die Addition dem verbrauchenden Netz zu und führt eine Übertragung ein, wenn zwischen Fragmenten eine Addition ohne Netz vorhanden ist.
-mpmd-map-input-output-to-mesh
Weist Funktions-Ein- und ‑Ausgaben Netze zu.
Erstellt einen Durchlauf, der Funktions-Ein- und ‑Ausgaben Netzen zuordnet, wenn eine nutzerdefinierte Zuweisung des Netzes vorhanden ist.
Für die Eingabeargumente führt dieser Durchlauf Folgendes aus:
- Wandelt die Eingabetensoren, die in ein Netz eingefügt werden sollen, in einen Netz-Tensor um.
- Aktualisiert die Funktionssignatur.
- Fügt mpmd.unassign ein, bevor der Tensor verwendet wird.
Für die Ausgabeargumente fügt dieser Durchlauf mpmd.assign ein, bevor der Tensor zurückgegeben wird, und aktualisiert die Funktionssignatur.
Voraussetzung: Jeder Ein-/Ausgabeindex ist gültig und jedes zugeordnete Netz ist ein gültiges Netz in der Topologie.
Optionen
-input-assignment : Mapping between function input indices and assigned mesh names.E.g., '0@m0,1@m1' defines that input with index 0 will be assigned to mesh m0 and input with index 1 will be assigned to mesh m1.
-output-assignment : Mapping between function output indices and assigned mesh names.E.g., '0@m0,1@m1' defines that output with index 0 will be assigned to mesh m0 and output with index 1 will be assigned to mesh m1.
-mpmd-map-named-ops-to-mpmd-ops
Weist nutzerdefinierten Operationen Netze zu.
Erstellt einen Durchlauf, der optional mpmd.named_tensor Assign(Unassign(%v)) zuweist (abhängig davon, ob ein Eintrag in assignment vorhanden ist) und jede benannte_Berechnung einem Netz zuordnet. Dabei wird eine nutzerdefinierte Zuordnung zwischen benannten_Berechnungen und Netznamen verwendet. Das bedeutet, dass jede benannte_Berechnung durch ein Fragment ersetzt wird und AssignOps für die Operanden und UnassignOps für die Ergebnisse dieser Fragmente erstellt werden. Das neu eingeführte Muster Assign(Unassign(%v)) wird in Transfer(%v) umgeschrieben.
Nach diesem Durchlauf sind keine benannten_Berechnungs-/benannten_Tensor-Ops mehr vorhanden.
Voraussetzung: Alle benannten_Berechnungen und benannten_Tensoren müssen sich auf der obersten Ebene der Funktion befinden.
Optionen
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-simplify-named-computations
Vereinfacht die Ein- und Ausgaben von benannten Berechnungs-Ops.
Vereinfacht jede benannte Berechnung unabhängig. Insbesondere:
- Entfernt doppelte Ergebnisse und die entsprechenden Rückgabewerte.
- Entfernt doppelte Operanden und die entsprechenden Blockargumente.
- Entfernt Ergebnisse, deren entsprechender Rückgabeoperand ein Blockargument der Op ist.
- Entfernt Operanden, deren entsprechendes Blockargument keine Verwendungen mehr hat (oder von Anfang an keine hatte).
- Entfernt nicht verwendete Ergebnisse.
- Ersetzt das Muster
arg -> stablehlo.optimization_barrier -> returnin einer benannten Berechnung durch das Musterarg -> return, um eine weitere Vereinfachung zu ermöglichen.
-mpmd-validate-named-ops-in-mpmd-func
Prüft, ob benannte Ops nur in mpmd-Funktionen verschachtelt sind.
Prüft, ob NamedComputationOp und NamedTensorOp nur in mpmd-Funktionen verschachtelt sind, d.h. in Funktionen mit einem Topologieattribut.