Dialekt „mpmd“

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:

AttributMLIR-TypBeschreibung
origin::mlir::StringAttrString-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:

AttributMLIR-TypBeschreibung
callee::mlir::FlatSymbolRefAttrAttribut 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:

AttributMLIR-TypBeschreibung
iterations::mlir::IntegerAttrVorzeichenloses 32-Bit-Ganzzahlattribut
unroll_factor::mlir::IntegerAttrVorzeichenloses 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:

AttributMLIR-TypBeschreibung
origin::mlir::ArrayAttrArray von Ursprungsinformationen
mesh_name::mlir::StringAttrString-Attribut
stage_id::mlir::IntegerAttrVorzeichenloses 64-Bit-Ganzzahlattribut
in_shardings::mlir::sdy::TensorShardingPerValueAttrTensor-Sharding pro Operand/Ergebnis eines Vorgangs
out_shardings::mlir::sdy::TensorShardingPerValueAttrTensor-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:

AttributMLIR-TypBeschreibung
origin::mlir::ArrayAttrArray von Ursprungsinformationen
mesh_name::mlir::StringAttrString-Attribut
callee::mlir::FlatSymbolRefAttrAttribut 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:

AttributMLIR-TypBeschreibung
origin::mlir::mpmd::UserOriginAttrUrsprung 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:

AttributMLIR-TypBeschreibung
name::mlir::StringAttrString-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:

AttributMLIR-TypBeschreibung
reduction::mlir::mpmd::ReductionAttrGibt 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:

AttributMLIR-TypBeschreibung
origin::mlir::StringAttrString-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.