Vorgänge
mpmd.assign (mpmd::AssignOp)
Vorgang zuweisen
Syntax:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
Weist einem Mesh einen lokalen Tensor zu, der in diesem Mesh vollständig repliziert wird.
Dies ist ein temporärer Vorgang, der beim Reduzieren von JAX-Vorgängen eingeführt wird, um von lokalen Typen zu Mesh-Typen zu wechseln. Diese Vorgänge werden beim Import entfernt, wenn die Eingaben und Ergebnisse des Funktionsvorgangs zu Mesh-Tensoren werden.
Der Mesh-Name des Ergebnistyps sollte einem Mesh in der Topologie entsprechen und sein globaler Typ sollte mit dem Operandentyp identisch sein.
Der Ursprung des Zuweisungsvorgangs ist der Ursprung des Mesh, z.B. „named_computation“ oder „mesh inference“.
Merkmale: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>
Schnittstellen: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Auswirkungen: MemoryEffects::Effect{}
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
origin | ::mlir::StringAttr | String-Attribut |
Operanden:
| Operand | Beschreibung |
|---|---|
tensor |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
result |
Mesh-Tensor-Typ |
mpmd.broadcast (mpmd::BroadcastOp)
Broadcast-Vorgang
Syntax:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
Ermöglicht die Übertragung (oder Replikation) eines Tensors in jedem Mesh, in dem er verwendet wird. Bei jeder Übertragung ist der Ursprung der Übertragung der aktuelle Speicherort des Operanden.
Merkmale: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Schnittstellen: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Auswirkungen: MemoryEffects::Effect{}
Operanden:
| Operand | Beschreibung |
|---|---|
tensor |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
result |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
mpmd.call (mpmd::CallOp)
MPMD-spezifische Anruffunktion
Syntax:
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
Ein Funktionsaufruf. Nützlich, um den Hauptteil von Schleifen in Funktionsdeklarationen einzuschließen, um beispielsweise die Codegröße zu reduzieren.
Schnittstellen: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | Attribut für flache Symbolreferenz |
Operanden:
| Operand | Beschreibung |
|---|---|
tensors |
Variadic-Tensor mit Werten eines beliebigen Nicht-Token-Typs oder Mesh-Tensor-Typ |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
| „unnamed“ | Variadic-Tensor mit Werten eines beliebigen Nicht-Token-Typs oder Mesh-Tensor-Typ |
mpmd.for (mpmd::ForOp)
Für Operator
Gibt das Ergebnis der Ausführung einer Body-Funktion für eine feste Anzahl von Iterationen zurück, wobei der Iterationsindex im Body verfügbar ist.
Ein optionaler Unroll-Faktor, der die Anzahl der Iterationen teilen muss, kann angegeben werden, um den Rumpf des Vorgangs um diesen Faktor zu entrollen. Bei einem Unroll-Faktor N wird der Rumpf also repliziert, um N Kopien zu erstellen, und die Anzahl der Iterationen wird um den Faktor 1/N reduziert. Bei allen Kopien außer der ersten werden die Ergebnisse der vorherigen Kopie anstelle der Blockargumente verwendet. Der Iterationsindex wird mit dem Unroll-Faktor multipliziert und nach jeder Kopie inkrementiert.
Ein „for“-Operator kann beliebige Typen akzeptieren und zurückgeben, aber die TypeID dieser Typen muss dieselbe sein, z.B. alle Tensortypen oder alle MPMD-Mesh-Typen usw. So kann der Operator auf verschiedenen Ebenen verwendet werden und Implementierung und Transformationen können gemeinsam genutzt werden.
Merkmale: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Schnittstellen: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
iterations | ::mlir::IntegerAttr | Vorzeichenloses 32-Bit-Ganzzahlattribut |
unroll_factor | ::mlir::IntegerAttr | Vorzeichenloses 32-Bit-Ganzzahlattribut |
Operanden:
| Operand | Beschreibung |
|---|---|
tensors |
Variadic eines beliebigen Nicht-Token-Typs |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
results |
Variadic eines beliebigen Nicht-Token-Typs |
mpmd.fragment (mpmd::FragmentOp)
Fragmentvorgang
Weist einer Berechnung, d.h. einem Block von Vorgängen, ein bestimmtes Mesh in einer MPMD-Topologie zu, das als einzelnes SPMD-Programmfragment ausgeführt werden soll.
Das Fragment akzeptiert und gibt nur Mesh-Tensoren zurück, die demselben Mesh wie das Fragment zugewiesen sind.
Der Mesh-Name des Fragments muss einem Mesh in der Topologie entsprechen.
Das Fragment enthält eine Liste von Ursprüngen, d.h. Metadaten mit Informationen zu den ursprünglichen named_computations, aus denen dieses Fragment gebildet wurde, und eine staged_id, die iff definiert ist, wenn es sich um ein nutzerdefiniertes Fragment handelt, d.h. es eine nicht leere Liste von Ursprüngen hat. Mit dem optionalen in_shardings wird die Shardierung der Blockargumente eines Fragments angegeben, die den Operanden entsprechen. Mit dem optionalen out_shardings werden die Shardings der Ergebnisse angegeben.
Die Region des Fragments darf keine kostenlosen Variablen haben. Der Typ der einzelnen Blockargumente und zurückgegebenen Werte in der Region ist der globale Tensortyp des entsprechenden Mesh-Tensors.
Merkmale: HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Schnittstellen: ConditionallySpeculatable, ShardableDataFlowOpInterface
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
origin | ::mlir::ArrayAttr | Array von Ursprungsinformationen |
mesh_name | ::mlir::StringAttr | String-Attribut |
stage_id | ::mlir::IntegerAttr | Vorzeichenloses 64-Bit-Ganzzahlattribut |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Tensor-Sharding pro Operand/Ergebnis eines Vorgangs |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Tensor-Sharding pro Operand/Ergebnis eines Vorgangs |
Operanden:
| Operand | Beschreibung |
|---|---|
inputs |
Variadic vom Typ „Mesh-Tensor“ oder „Token“ |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
results |
Variadic vom Typ „Mesh-Tensor“ oder „Token“ |
mpmd.fragment_call (mpmd::FragmentCallOp)
Fragmentaufrufvorgang
Stellt einen Aufruf einer Funktion dar, die einen MPMD-Fragmentkörper enthält, d.h. eine Berechnung, die einem bestimmten Mesh in einer MPMD-Topologie zugewiesen ist und als einzelnes SPMD-Programmfragment ausgeführt werden soll.
Der Mesh-Name des Fragments muss einem Mesh in der Topologie der umschließenden Funktion entsprechen und die Mesh-Form muss mit der des aufgerufenen Elements übereinstimmen.
Der Ursprung gibt die benannten Berechnungen an, die durch Zusammenführen zu diesem Fragmentaufruf beigetragen haben.
Die Funktionseingabe- und Ergebnistypen des Aufgerufenen müssen die lokalen Tensortypen der entsprechenden Mesh-Tensoren der Operanden und Ergebnisse dieses Vorgangs sein.
Beispiel:
%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
(m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...
Merkmale: HasParent<::mlir::func::FuncOp>, MemRefsNormalizable
Schnittstellen: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
origin | ::mlir::ArrayAttr | Array von Ursprungsinformationen |
mesh_name | ::mlir::StringAttr | String-Attribut |
callee | ::mlir::FlatSymbolRefAttr | Attribut für flache Symbolreferenz |
Operanden:
| Operand | Beschreibung |
|---|---|
tensors |
variadisch vom Typ „Mesh-Tensor“ |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
| „unnamed“ | variadisch vom Typ „Mesh-Tensor“ |
mpmd.named_computation (mpmd::NamedComputationOp)
Vorgang mit benanntem Bereich
Gruppiert eine Berechnung, d.h. einen Block von Vorgängen, und gibt ihr einen Namen und eine Anzahl von Transponierungen über das Attribut „UserOrigin“. Mit dieser NamedComputation kann der Berechnung in MPMD oder für Optimierungen ein Mesh zugewiesen werden.
Die Transponierungsanzahl (Standardwert=0) gibt an, ob die benannte Berechnung durch eine bestimmte Anzahl von JAX AD-Transponierungstransformationen erzeugt wurde.
Die Region des Vorgangs darf keine kostenlosen Variablen haben und der Typ der einzelnen Blockargumente und zurückgegebenen Werte in der Region muss mit dem Typ der Eingaben und dem Rückgabetyp des Vorgangs übereinstimmen.
Merkmale: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Schnittstellen: ConditionallySpeculatable
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | Ursprung der benutzerdefinierten Berechnung. |
Operanden:
| Operand | Beschreibung |
|---|---|
tensors |
Variadic von Tensor mit Rangfolge von 4/6/8/16/32/64-Bit-Gleitkommazahl oder booleschem Wert oder 2/4/8/16/32/64-Bit-Ganzzahl oder komplexem Typ mit 32/64-Bit-Gleitkommaelementen oder per-Tensor-Ganzzahl-quantisierten Werten oder Token |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
results |
Variadic von Tensor mit Rangfolge von 4/6/8/16/32/64-Bit-Gleitkommazahl oder booleschem Wert oder 2/4/8/16/32/64-Bit-Ganzzahl oder komplexem Typ mit 32/64-Bit-Gleitkommaelementen oder per-Tensor-Ganzzahl-quantisierten Werten oder Token |
mpmd.named_tensor (mpmd::NamedTensorOp)
Tensor einem Mesh zuweisen
Syntax:
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
Ein Identitätsvorgang, der das Ergebnis des Tensors einem bestimmten Namen zuordnet. Mit diesem NamedTensor kann dem Tensor in MPMD ein Mesh zugewiesen werden.
Merkmale: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Schnittstellen: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Auswirkungen: MemoryEffects::Effect{}
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
name | ::mlir::StringAttr | String-Attribut |
Operanden:
| Operand | Beschreibung |
|---|---|
tensor |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
result |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
mpmd.reduce (mpmd::ReduceOp)
Vorgang zum Reduzieren von Mesh-Überschneidungen
Syntax:
operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)
Ermöglicht die Reduzierung eines Tensors über verschiedene Meshes hinweg und die anschließende Übertragung an den Ort, an dem er verwendet werden soll.
Merkmale: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Schnittstellen: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Auswirkungen: MemoryEffects::Effect{}
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | Gibt eine Reduzierung an. |
Operanden:
| Operand | Beschreibung |
|---|---|
tensors |
Variadic-Tensor mit Werten eines beliebigen Typs, der kein Token ist |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
result |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
mpmd.return (mpmd::ReturnOp)
Mit dem Vorgang mpmd.return werden die Regionen beendet, die an regionenbasierte Vorgänge für mpmd angehängt sind. Sie ist variadisch: Sie verwendet als Argumente eine Liste von Werten, deren Typen beliebig sein können (aber vom selben Typ, z.B. AnyTensor) und daher auf verschiedenen Ebenen des MPMD-IR-Stacks wiederverwendet werden können.
Syntax:
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
Merkmale: AlwaysSpeculatableImplTrait, Terminator
Schnittstellen: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Auswirkungen: MemoryEffects::Effect{}
Operanden:
| Operand | Beschreibung |
|---|---|
results |
Variadic eines beliebigen Nicht-Token-Typs |
mpmd.transfer (mpmd::TransferOp)
Übertragungsvorgang
Syntax:
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
Überträgt einen verteilten Tensor von einem Mesh in einen anderen.
Die Mesh-Namen der Operanden- und Ergebnistypen sollten den Meshes in der Topologie entsprechen und ihre globalen Typen sollten identisch sein.
Merkmale: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>
Schnittstellen: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface
Auswirkungen: MemoryEffects::Effect{}
Operanden:
| Operand | Beschreibung |
|---|---|
tensor |
Mesh-Tensor-Typ |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
result |
Mesh-Tensor-Typ |
mpmd.unassign (mpmd::UnassignOp)
Zuweisung aufheben
Syntax:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
Hebt die Zuweisung eines vollständig replizierten Tensors von einem Mesh auf.
Dies ist ein temporärer Vorgang, der beim Reduzieren von JAX-Vorgängen eingeführt wird, um von lokalen Typen zu Mesh-Typen zu wechseln. Diese Vorgänge werden beim Import entfernt, wenn die Eingaben und Ergebnisse des Funktionsvorgangs zu Mesh-Tensoren werden.
Der Mesh-Name des Operanden-Typs sollte einem Mesh in der Topologie entsprechen und sein globaler Typ sollte mit dem Ergebnistyp identisch sein.
Merkmale: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType
Schnittstellen: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Auswirkungen: MemoryEffects::Effect{}
Attribute:
| Attribut | MLIR-Typ | Beschreibung |
|---|---|---|
origin | ::mlir::StringAttr | String-Attribut |
Operanden:
| Operand | Beschreibung |
|---|---|
tensor |
Mesh-Tensor-Typ |
Ergebnisse:
| Ergebnis | Beschreibung |
|---|---|
result |
Tensor mit Werten eines beliebigen Typs, der kein Token ist |
Attribute
MeshWithOriginsAttr
Mesh mit seinem Ursprung.
Syntax:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| mesh_name | ::llvm::StringRef |
mesh_name |
| Ursprünge | ::llvm::ArrayRef<OriginAttr> |
Ursprünge |
MeshesWithOriginsAttr
Eine Liste von Meshes mit ihren Ursprüngen.
Syntax:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| Wert | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
Ein Paar mit einem Namen und einem Mesh.
Syntax:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| name | ::llvm::StringRef |
name |
| Mesh-Netzwerk | sdy::MeshAttr |
Mesh-Netzwerk |
OriginAttr
Ursprung der Mesh-Zuweisung.
Syntax:
#mpmd.origin<
::llvm::StringRef # origin_label
>
Der Ursprung einer Mesh-Zuweisung.
origin_label ist ein für Menschen lesbares Label für den Ursprung.
Sie ist für die Fehlerbehebung vorgesehen.
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| origin_label | ::llvm::StringRef |
origin_label |
ReductionAttr
Gibt eine Reduzierung an.
Syntax:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType |
ein Enum vom Typ ReductionType |
TopologyAttr
Topologie benannter Meshs.
Syntax:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| Mesh-Netzwerke | ::llvm::ArrayRef<NamedMeshAttr> |
Topologie-Meshes |
UserOriginAttr
Ursprung der vom Nutzer angegebenen Berechnung.
Syntax:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
Typen
MeshTensorType
Mesh-Tensor-Typ
Weist einem bestimmten SPMD-Mesh in der MPMD-Topologie von Meshes des Programms einen RankedTensorType zu. Der Typ enthält ein optionales Sharding, das angibt, wie der Tensor in Bezug auf das SPMD-Mesh aufgeteilt wird. Wenn das Sharding nicht vorhanden ist, wird der Tensor vollständig repliziert.
Parameter:
| Parameter | C++-Typ | Beschreibung |
|---|---|---|
| mesh_name | ::llvm::StringRef |
Mesh-Name |
| ranked_tensor_type | ::mlir::RankedTensorType |
Tensor-Typ mit Rang |
| Fragmentierung | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
Enums
ReductionType
Attribut „Rabatttyp“
Schutzhüllen:
| Symbol | Wert | String |
|---|---|---|
| kNone | 0 |
Keine |
| kAdd | 1 |
Hinzufügen |
| kMax | 2 |
max |
| kMin | 3 |
Min. |
| kMul | 4 |
mul |
| kOr | 5 |
oder |
| kAnd | 6 |
und |
EdgeNodeType
Enum für Edge-Knotentyp
Schutzhüllen:
| Symbol | Wert | String |
|---|---|---|
| OPERAND | 0 |
Operand |
| ERGEBNIS | 1 |
Ergebnis |
PropagationDirection
Enumeration für die Weitergaberichtung
Schutzhüllen:
| Symbol | Wert | String |
|---|---|---|
| KEINE | 0 |
KEINE |
| WEITERLEITEN | 1 |
WEITERLEITEN |
| RÜCKWÄRTS | 2 |
RÜCKWÄRTS |
| ALLE | 3 |
ALLE |
ReductionOp
Enum für die Reduzierung
Schutzhüllen:
| Symbol | Wert | String |
|---|---|---|
| SUM | 0 |
Summe |
| MAX | 1 |
max |
| MIN | 2 |
Min. |