Dialecte 'mpmd'

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 :

AttributType MLIRDescription
origin::mlir::StringAttrattribut 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 :

AttributType MLIRDescription
callee::mlir::FlatSymbolRefAttrAttribut 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 :

AttributType MLIRDescription
iterations::mlir::IntegerAttrAttribut entier non signé de 32 bits
unroll_factor::mlir::IntegerAttrAttribut 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 :

AttributType MLIRDescription
origin::mlir::ArrayAttrTableau d'informations sur l'origine
mesh_name::mlir::StringAttrattribut de chaîne
stage_id::mlir::IntegerAttrAttribut entier non signé de 64 bits
in_shardings::mlir::sdy::TensorShardingPerValueAttrPartitionnement de Tensor par opérande/résultat d'une opération
out_shardings::mlir::sdy::TensorShardingPerValueAttrPartitionnement 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 :

AttributType MLIRDescription
origin::mlir::ArrayAttrTableau d'informations sur l'origine
mesh_name::mlir::StringAttrattribut de chaîne
callee::mlir::FlatSymbolRefAttrAttribut 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 :

AttributType MLIRDescription
origin::mlir::mpmd::UserOriginAttrOrigine 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 :

AttributType MLIRDescription
name::mlir::StringAttrattribut 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 :

AttributType MLIRDescription
reduction::mlir::mpmd::ReductionAttrIndique 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 :

AttributType MLIRDescription
origin::mlir::StringAttrattribut 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