Opérations
mpmd.assign (mpmd::AssignOp)
Opération d'attribution
Syntaxe :
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
Attribue un Tensor local à un maillage en tant que répliqué dans ce maillage.
Il s'agit d'une opération temporaire introduite lors de la réduction des opérations JAX, pour passer des types locaux aux types de maillage. Ces opérations seront éliminées lors de l'importation, lorsque les entrées et les résultats de l'opération de fonction deviendront des tenseurs maillés.
Le nom de maillage du type de résultat doit correspondre à un maillage dans la topologie, et son type global doit être identique au type d'opérande.
L'origine de l'opération d'attribution est l'origine du maillage, par exemple named_computation, inférence de maillage, etc.
Traits : AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>
Interfaces : ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Effets : MemoryEffects::Effect{}
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
origin | ::mlir::StringAttr | attribut de chaîne |
Opérandes :
| Opérande | Description |
|---|---|
tensor |
Tensor de valeurs de type non jeton |
Résultats :
| Résultat | Description |
|---|---|
result |
type de tenseur de maillage |
mpmd.broadcast (mpmd::BroadcastOp)
Opération de diffusion
Syntaxe :
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
Permet de transférer (ou de répliquer) un Tensor dans n'importe quel maillage où il est utilisé. Chaque fois qu'un transfert est effectué, l'origine du transfert correspond à l'emplacement actuel de l'opérande.
Traits : AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Interfaces : ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Effets : MemoryEffects::Effect{}
Opérandes :
| Opérande | Description |
|---|---|
tensor |
Tensor de valeurs de type non jeton |
Résultats :
| Résultat | Description |
|---|---|
result |
Tensor de valeurs de type non jeton |
mpmd.call (mpmd::CallOp)
Fonction d'appel spécifique à MPMD
Syntaxe :
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
Opération d'appel de fonction. Utile pour encapsuler le corps des boucles dans des déclarations de fonctions afin de réduire la taille du code, par exemple.
Interfaces : ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | Attribut de référence du symbole de prix fixe |
Opérandes :
| Opérande | Description |
|---|---|
tensors |
variadique de Tensor de valeurs de type non jeton ou de type Tensor de maillage |
Résultats :
| Résultat | Description |
|---|---|
| "sans nom" | variadique de Tensor de valeurs de type non jeton ou de type Tensor de maillage |
mpmd.for (mpmd::ForOp)
Pour l'opérateur
Renvoie le résultat de l'exécution d'une fonction de corps pour un nombre fixe d'itérations, avec l'index d'itération disponible dans le corps.
Un facteur de déploiement facultatif, qui doit diviser le nombre d'itérations, peut être spécifié pour déployer le corps de l'opération par ce facteur, c'est-à-dire que pour un facteur de déploiement N, le corps est répliqué pour créer N copies et le nombre d'itérations est réduit d'un facteur 1/N. Chaque copie, à l'exception de la première, utilise les résultats de la copie précédente au lieu des arguments de bloc. L'index d'itération est multiplié par le facteur de déploiement et incrémenté après chaque copie.
Un opérateur for peut accepter et renvoyer n'importe quel type, mais le TypeID de ceux-ci doit être le même (par exemple, tous les types de Tensor ou tous les types de maillage MPMD, etc.). Cela nous permet d'utiliser l'opérateur à différents niveaux, en partageant l'implémentation et les transformations.
Traits : HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Interfaces : ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
iterations | ::mlir::IntegerAttr | Attribut entier non signé de 32 bits |
unroll_factor | ::mlir::IntegerAttr | Attribut entier non signé de 32 bits |
Opérandes :
| Opérande | Description |
|---|---|
tensors |
variadique de tout type non jeton |
Résultats :
| Résultat | Description |
|---|---|
results |
variadique de tout type non jeton |
mpmd.fragment (mpmd::FragmentOp)
Opération de fragment
Attribue un calcul, c'est-à-dire un bloc d'opérations, à un maillage spécifique dans une topologie MPMD, qui est destiné à être exécuté en tant que fragment de programme SPMD individuel.
Le fragment ne prend et ne renvoie que les Tensors de maillage qui sont attribués au même maillage que le fragment.
Le nom du maillage du fragment doit correspondre à un maillage de la topologie.
Le fragment inclut une liste d'origines, c'est-à-dire des métadonnées contenant des informations sur les named_computations d'origine qui ont formé ce fragment, et un staged_id défini iff s'il s'agit d'un fragment défini par l'utilisateur, c'est-à-dire s'il comporte une liste d'origines non vide. Le paramètre facultatif in_shardings spécifie le partitionnement des arguments de bloc d'un fragment, qui correspondent aux opérandes. Le paramètre facultatif out_shardings spécifie le partitionnement des résultats.
La région du fragment ne doit pas comporter de variables libres, et le type de chaque argument de bloc et des valeurs renvoyées dans la région correspond au type de Tensor global du Tensor de maillage correspondant.
Traits : HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Interfaces : ConditionallySpeculatable, ShardableDataFlowOpInterface
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
origin | ::mlir::ArrayAttr | Tableau d'informations sur l'origine |
mesh_name | ::mlir::StringAttr | attribut de chaîne |
stage_id | ::mlir::IntegerAttr | Attribut entier non signé de 64 bits |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Partitionnement de Tensor par opérande/résultat d'une opération |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Partitionnement de Tensor par opérande/résultat d'une opération |
Opérandes :
| Opérande | Description |
|---|---|
inputs |
variadique de type Tensor de maillage ou jeton |
Résultats :
| Résultat | Description |
|---|---|
results |
variadique de type Tensor de maillage ou jeton |
mpmd.fragment_call (mpmd::FragmentCallOp)
Opération d'appel de fragment
Représente un appel à une fonction qui contient un corps de fragment MPMD, c'est-à-dire un calcul attribué à un maillage spécifique dans une topologie MPMD, qui est destiné à être exécuté en tant que fragment de programme SPMD individuel.
Le nom du maillage du fragment doit correspondre à un maillage dans la topologie de la fonction englobante, et la forme de ce maillage doit correspondre à celle de l'appelé.
L'origine spécifie les calculs nommés par l'utilisateur qui ont contribué à cet appel de fragment, par exemple par fusion.
Les types d'entrée et de résultat de la fonction de l'appelé doivent être les types de tenseur locaux des tenseurs de maillage correspondants des opérandes et des résultats de cette opération, respectivement.
Exemple :
%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
(m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...
Traits : HasParent<::mlir::func::FuncOp>, MemRefsNormalizable
Interfaces : ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
origin | ::mlir::ArrayAttr | Tableau d'informations sur l'origine |
mesh_name | ::mlir::StringAttr | attribut de chaîne |
callee | ::mlir::FlatSymbolRefAttr | Attribut de référence du symbole de prix fixe |
Opérandes :
| Opérande | Description |
|---|---|
tensors |
variadique de type Tensor de maillage |
Résultats :
| Résultat | Description |
|---|---|
| "sans nom" | variadique de type Tensor de maillage |
mpmd.named_computation (mpmd::NamedComputationOp)
Opération de portée nommée
Regroupe un calcul (c'est-à-dire un bloc d'opérations), et lui attribue un nom et un nombre de transpositions via l'attribut UserOrigin. Cette NamedComputation peut être utilisée pour attribuer un maillage au calcul dans MPMD ou pour les optimisations.
Le nombre de transpositions (par défaut=0) indique si le calcul nommé a été produit par un certain nombre de transformations de transposition JAX AD.
La région de l'opération ne doit pas comporter de variables libres, et le type de chaque argument de bloc et des valeurs renvoyées dans la région doit être le même que le type des entrées et le type renvoyé de l'opération.
Traits : IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Interfaces : ConditionallySpeculatable
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | Origine du calcul spécifié par l'utilisateur. |
Opérandes :
| Opérande | Description |
|---|---|
tensors |
variadique de tenseur classé de type float ou booléen ou entier ou complexe de 4/6/8/16/32/64 bits avec des éléments float de 32/64 bits ou des valeurs quantifiées entières par tenseur ou un jeton |
Résultats :
| Résultat | Description |
|---|---|
results |
variadique de tenseur classé de type float ou booléen 4/6/8/16/32/64 bits, ou entier 2/4/8/16/32/64 bits, ou complexe avec des éléments float 32/64 bits, ou valeurs quantifiées entières par tenseur, ou jeton |
mpmd.named_tensor (mpmd::NamedTensorOp)
Attribuer un Tensor à un maillage
Syntaxe :
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
Op d'identité qui associe le résultat du Tensor à un nom donné. Ce NamedTensor peut être utilisé pour attribuer un maillage au Tensor dans MPMD.
Traits : AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Interfaces : ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Effets : MemoryEffects::Effect{}
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
name | ::mlir::StringAttr | attribut de chaîne |
Opérandes :
| Opérande | Description |
|---|---|
tensor |
Tensor de valeurs de type non jeton |
Résultats :
| Résultat | Description |
|---|---|
result |
Tensor de valeurs de type non jeton |
mpmd.reduce (mpmd::ReduceOp)
Opération de réduction cross-mesh
Syntaxe :
operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)
Permet de réduire un Tensor sur différents maillages, puis de le diffuser là où il doit être utilisé.
Traits : AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Interfaces : ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Effets : MemoryEffects::Effect{}
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | Indique une réduction. |
Opérandes :
| Opérande | Description |
|---|---|
tensors |
variadique de valeurs de Tensor de tout type non token |
Résultats :
| Résultat | Description |
|---|---|
result |
Tensor de valeurs de type non jeton |
mpmd.return (mpmd::ReturnOp)
L'opération mpmd.return met fin aux régions associées aux opérations basées sur les régions mpmd. Il est variadique : il prend comme arguments une liste de valeurs dont les types peuvent être quelconques (mais du même genre, par exemple AnyTensor) et peut donc être réutilisé à différents niveaux de la pile IR MPMD.
Syntaxe :
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
Traits : AlwaysSpeculatableImplTrait, Terminator
Interfaces : ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Effets : MemoryEffects::Effect{}
Opérandes :
| Opérande | Description |
|---|---|
results |
variadique de tout type non jeton |
mpmd.transfer (mpmd::TransferOp)
Opération de transfert
Syntaxe :
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
Transfère un Tensor distribué d'un maillage à un autre.
Les noms de maillage des types d'opérande et de résultat doivent correspondre aux maillages de la topologie, et leurs types globaux doivent être identiques.
Traits : AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>
Interfaces : ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface
Effets : MemoryEffects::Effect{}
Opérandes :
| Opérande | Description |
|---|---|
tensor |
type de tenseur de maillage |
Résultats :
| Résultat | Description |
|---|---|
result |
type de tenseur de maillage |
mpmd.unassign (mpmd::UnassignOp)
Opération de désattribution
Syntaxe :
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
Désattribue un tenseur entièrement répliqué d'un réseau maillé.
Il s'agit d'une opération temporaire introduite lors de la réduction des opérations JAX, pour passer des types locaux aux types de maillage. Ces opérations seront éliminées lors de l'importation, lorsque les entrées et les résultats de l'opération de fonction deviendront des tenseurs maillés.
Le nom de maillage du type d'opérande doit correspondre à un maillage dans la topologie, et son type global doit être identique au type de résultat.
Traits : AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType
Interfaces : ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Effets : MemoryEffects::Effect{}
Attributs :
| Attribut | Type MLIR | Description |
|---|---|---|
origin | ::mlir::StringAttr | attribut de chaîne |
Opérandes :
| Opérande | Description |
|---|---|
tensor |
type de tenseur de maillage |
Résultats :
| Résultat | Description |
|---|---|
result |
Tensor de valeurs de type non jeton |
Attributs
MeshWithOriginsAttr
Mesh avec ses origines.
Syntaxe :
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| mesh_name | ::llvm::StringRef |
mesh_name |
| origines | ::llvm::ArrayRef<OriginAttr> |
origines |
MeshesWithOriginsAttr
Liste des maillages et de leurs origines.
Syntaxe :
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| valeur | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
Une paire avec un nom et un maillage.
Syntaxe :
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| nom | ::llvm::StringRef |
nom |
| Grille | sdy::MeshAttr |
Grille |
OriginAttr
Origine de l'attribution du maillage.
Syntaxe :
#mpmd.origin<
::llvm::StringRef # origin_label
>
Origine d'une attribution de maillage.
origin_label est un libellé lisible pour l'origine.
Il est destiné à être utilisé à des fins de débogage.
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| origin_label | ::llvm::StringRef |
origin_label |
ReductionAttr
Indique une réduction.
Syntaxe :
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType |
Énumération de type ReductionType |
TopologyAttr
Topologie des maillages nommés.
Syntaxe :
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| mailles | ::llvm::ArrayRef<NamedMeshAttr> |
mailles de topologie |
UserOriginAttr
Origine du calcul spécifié par l'utilisateur.
Syntaxe :
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
Types
MeshTensorType
Type de tenseur de maillage
Attribue un RankedTensorType à un maillage SPMD spécifique dans la topologie MPMD des maillages du programme. Le type contient un sharding facultatif qui spécifie comment le Tensor est shardé par rapport au maillage SPMD. Si le partitionnement n'est pas présent, le Tensor est entièrement répliqué.
Paramètres :
| Paramètre | Type C++ | Description |
|---|---|---|
| mesh_name | ::llvm::StringRef |
nom du réseau maillé |
| ranked_tensor_type | ::mlir::RankedTensorType |
type de tenseur classé |
| segmentation | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
Enums
ReductionType
Attribut du type de réduction
Étuis :
| Symbole | Valeur | Chaîne |
|---|---|---|
| kNone | 0 |
aucun |
| kAdd | 1 |
add |
| kMax | 2 |
max |
| kMin | 3 |
min |
| kMul | 4 |
mul |
| kOr | 5 |
ou |
| kAnd | 6 |
et |
EdgeNodeType
Énumération du type de nœud Edge
Étuis :
| Symbole | Valeur | Chaîne |
|---|---|---|
| OPERAND | 0 |
opérande |
| RÉSULTAT | 1 |
résultat |
PropagationDirection
Énumération de la direction de propagation
Étuis :
| Symbole | Valeur | Chaîne |
|---|---|---|
| AUCUN | 0 |
AUCUN |
| FORWARD | 1 |
FORWARD |
| RETOUR | 2 |
RECULER |
| TOUS LES MODÈLES | 3 |
TOUS LES MODÈLES |
ReductionOp
Énumération de l'opération de réduction
Étuis :
| Symbole | Valeur | Chaîne |
|---|---|---|
| SUM | 0 |
somme |
| MAX | 1 |
max |
| MIN | 2 |
min |