'mpmd' 言語

運用

mpmd.assign(mpmd::AssignOp)

割り当てオペレーション

構文:

operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)

ローカル テンソルをメッシュ内の完全なレプリケートとしてメッシュに割り当てます。

これは、jax ops を削減するときに導入される一時的な op で、ローカル型からメッシュ型に移行するために使用されます。これらのオペレーションは、func オペレーションの入力と結果がメッシュ テンソルになると、インポート時に削除されます。

結果タイプのメッシュ名はトポロジ内のメッシュに対応し、そのグローバル タイプはオペランド タイプと同じである必要があります。

割り当てオペレーションの送信元は、メッシュの送信元です(named_computation、メッシュ推論など)。

トレイト: AlwaysSpeculatableImplTraitHasParent<::mlir::func::FuncOp, ForOp>

インターフェース: ConditionallySpeculatableNoMemoryEffect (MemoryEffectOpInterface)

影響: MemoryEffects::Effect{}

属性:

属性MLIR 型説明
origin::mlir::StringAttr文字列属性

オペランド:

オペランド 説明
tensor トークン以外の型の値のテンソル

結果:

結果 説明
result メッシュ テンソル型

mpmd.broadcast(mpmd::BroadcastOp)

ブロードキャスト オペレーション

構文:

operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)

テンソルが使用される任意のメッシュで、テンソルを転送(または複製)できます。転送されるたびに、転送元はオペランドの現在のロケーションになります。

トレイト: AlwaysSpeculatableImplTraitSameOperandsAndResultType

インターフェース: ConditionallySpeculatableInferTypeOpInterfaceNoMemoryEffect (MemoryEffectOpInterface)

影響: MemoryEffects::Effect{}

オペランド:

オペランド 説明
tensor トークン以外の型の値のテンソル

結果:

結果 説明
result トークン以外の型の値のテンソル

mpmd.call(mpmd::CallOp)

MPMD 固有の呼び出し関数

構文:

operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)

関数呼び出しオペレーション。たとえば、ループの本体を関数宣言でラップしてコードサイズを小さくする場合に便利です。

インターフェース: ArgAndResultAttrsOpInterfaceCallOpInterfaceSymbolUserOpInterface

属性:

属性MLIR 型説明
callee::mlir::FlatSymbolRefAttrフラット記号参照属性

オペランド:

オペランド 説明
tensors トークン以外の型の値またはメッシュ テンソル型のテンソルの可変長引数

結果:

結果 説明
«unnamed» トークン以外の型の値またはメッシュ テンソル型のテンソルの可変長引数

mpmd.for(mpmd::ForOp)

オペレーター向け

固定回数の反復で本体関数を実行した結果を返します。本体では反復インデックスを使用できます。

オプションのアンロール ファクタ(反復回数を分割する必要があります)を指定して、そのファクタで op の本体をアンロールできます。つまり、アンロール ファクタ N の場合、本体が複製されて N 個のコピーが作成され、反復回数が 1/N に減少します。最初のコピーを除く各コピーでは、ブロック引数ではなく前のコピーの結果が使用されます。また、反復インデックスはアンロール係数で乗算され、コピーごとにインクリメントされます。

for 演算子は任意の型を受け入れて返すことができますが、これらの TypeID は同じである必要があります(すべてのテンソル型、すべての MPMD メッシュ型など)。これにより、さまざまなレベルで op を使用し、実装と変換を共有できます。

トレイト: HLO_PairwiseSameOperandAndResultTypeRecursiveMemoryEffectsRecursivelySpeculatableImplTraitSingleBlockImplicitTerminator<ReturnOp>SingleBlock

インターフェース: ConditionallySpeculatableLoopLikeOpInterfaceOpAsmOpInterfaceShardableDataFlowOpInterface

属性:

属性MLIR 型説明
iterations::mlir::IntegerAttr32 ビット符号なし整数属性
unroll_factor::mlir::IntegerAttr32 ビット符号なし整数属性

オペランド:

オペランド 説明
tensors トークン以外の型の可変長引数

結果:

結果 説明
results トークン以外の型の可変長引数

mpmd.fragment(mpmd::FragmentOp)

フラグメント オペレーション

MPMD トポロジの特定のメッシュに計算(オペレーションのブロック)を割り当てます。これは、個々の SPMD プログラム フラグメントとして実行されることを目的としています。

フラグメントは、フラグメントと同じメッシュに割り当てられたメッシュ テンソルのみを受け取って返します。

フラグメントのメッシュ名は、トポロジのメッシュに対応している必要があります。

フラグメントには、オリジン(このフラグメントを形成した元の名前付き計算に関する情報を含むメタデータ)のリストと、ユーザー定義フラグメント(オリジンの空でないリストを含む)の場合に定義される staged_id が含まれます。オプションの in_shardings は、オペランドに対応するフラグメントのブロック引数のシャーディングを指定します。省略可能な out_shardings は、結果のシャーディングを指定します。

フラグメントのリージョンに自由変数があってはなりません。リージョン内の各ブロック引数と戻り値の型は、対応するメッシュ テンソルのグローバル テンソル型です。

トレイト: HasParent<::mlir::func::FuncOp, ForOp>IsolatedFromAboveRecursiveMemoryEffectsRecursivelySpeculatableImplTraitSingleBlockImplicitTerminator<ReturnOp>SingleBlock

インターフェース: ConditionallySpeculatableShardableDataFlowOpInterface

属性:

属性MLIR 型説明
origin::mlir::ArrayAttrオリジン情報の配列
mesh_name::mlir::StringAttr文字列属性
stage_id::mlir::IntegerAttr64 ビット符号なし整数属性
in_shardings::mlir::sdy::TensorShardingPerValueAttrオペランド/オペレーションの結果ごとのテンソル シャーディング
out_shardings::mlir::sdy::TensorShardingPerValueAttrオペランド/オペレーションの結果ごとのテンソル シャーディング

オペランド:

オペランド 説明
inputs メッシュ テンソル型またはトークンの可変長引数

結果:

結果 説明
results メッシュ テンソル型またはトークンの可変長引数

mpmd.fragment_call(mpmd::FragmentCallOp)

フラグメント呼び出しオペレーション

MPMD フラグメント本体(MPMD トポロジの特定のメッシュに割り当てられた計算)を保持する関数呼び出しを表します。これは、個々の SPMD プログラム フラグメントとして実行されることを目的としています。

フラグメントのメッシュ名は、囲み関数のトポロジのメッシュに対応している必要があります。また、そのメッシュの形状は呼び出し先のメッシュの形状と一致している必要があります。

オリジンは、このフラグメント呼び出しに貢献したユーザー指定の計算(マージなど)を指定します。

呼び出し先の関数の入力型と結果型は、このオペレーションのオペランドと結果の対応するメッシュ テンソルのローカル テンソル型である必要があります。

例:

%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
  (m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...

トレイト: HasParent<::mlir::func::FuncOp>MemRefsNormalizable

インターフェース: ArgAndResultAttrsOpInterfaceCallOpInterfaceSymbolUserOpInterface

属性:

属性MLIR 型説明
origin::mlir::ArrayAttrオリジン情報の配列
mesh_name::mlir::StringAttr文字列属性
callee::mlir::FlatSymbolRefAttrフラット記号参照属性

オペランド:

オペランド 説明
tensors メッシュ テンソル型の可変長引数

結果:

結果 説明
«unnamed» メッシュ テンソル型の可変長引数

mpmd.named_computation(mpmd::NamedComputationOp)

名前付きスコープ オペレーション

計算(一連のオペレーション)をグループ化し、UserOrigin 属性を介して名前と転置カウントを付与します。この NamedComputation は、MPMD で計算にメッシュを割り当てるため、または最適化のために使用できます。

転置カウント(デフォルト=0)は、名前付き計算が特定の数の JAX AD 転置変換によって生成されたかどうかを示します。

op のリージョンに自由変数があってはなりません。また、リージョン内の各ブロック引数と戻り値の型は、op の入力の型と戻り値の型と同じである必要があります。

トレイト: IsolatedFromAboveRecursiveMemoryEffectsRecursivelySpeculatableImplTraitSingleBlockImplicitTerminator<ReturnOp>SingleBlock

インターフェース: ConditionallySpeculatable

属性:

属性MLIR 型説明
origin::mlir::mpmd::UserOriginAttrユーザー指定の計算の起点。

オペランド:

オペランド 説明
tensors 4/6/8/16/32/64 ビット浮動小数点数、ブール値、2/4/8/16/32/64 ビット整数、32/64 ビット浮動小数点要素を含む複素数型、テンソルごとの整数量子化値、トークンのランク付きテンソルの可変長引数

結果:

結果 説明
results 4/6/8/16/32/64 ビット浮動小数点数、ブール値、2/4/8/16/32/64 ビット整数、32/64 ビット浮動小数点要素を含む複素数型、テンソルごとの整数量子化値、トークンのランク付きテンソルの可変長引数

mpmd.named_tensor(mpmd::NamedTensorOp)

テンソルをメッシュに割り当てる

構文:

operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)

テンソルの結果を特定の名前に関連付ける ID オペレーション。この NamedTensor は、MPMD でテンソルにメッシュを割り当てるために使用できます。

トレイト: AlwaysSpeculatableImplTraitSameOperandsAndResultType

インターフェース: ConditionallySpeculatableInferTypeOpInterfaceNoMemoryEffect (MemoryEffectOpInterface)

影響: MemoryEffects::Effect{}

属性:

属性MLIR 型説明
name::mlir::StringAttr文字列属性

オペランド:

オペランド 説明
tensor トークン以外の型の値のテンソル

結果:

結果 説明
result トークン以外の型の値のテンソル

mpmd.reduce(mpmd::ReduceOp)

クロス メッシュ削減オペレーション

構文:

operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)

テンソルをさまざまなメッシュで縮小し、使用する必要がある場所にブロードキャストできます。

トレイト: AlwaysSpeculatableImplTraitSameOperandsAndResultType

インターフェース: ConditionallySpeculatableNoMemoryEffect (MemoryEffectOpInterface)

影響: MemoryEffects::Effect{}

属性:

属性MLIR 型説明
reduction::mlir::mpmd::ReductionAttr削減を示します。

オペランド:

オペランド 説明
tensors 任意の非トークン型の値のテンソルの可変長引数

結果:

結果 説明
result トークン以外の型の値のテンソル

mpmd.return(mpmd::ReturnOp)

mpmd.return オペレーションは、mpmd リージョンベースのオペレーションに関連付けられたリージョンを終了します。これは可変長引数です。型が任意(ただし、同じ種類、たとえば AnyTensor)の値のリストを引数として受け取ります。そのため、MPMD IR スタックのさまざまなレベルで再利用できます。

構文:

operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?

トレイト: AlwaysSpeculatableImplTraitTerminator

インターフェース: ConditionallySpeculatableNoMemoryEffect (MemoryEffectOpInterface)

影響: MemoryEffects::Effect{}

オペランド:

オペランド 説明
results トークン以外の型の可変長引数

mpmd.transfer(mpmd::TransferOp)

転送オペレーション

構文:

operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)

分散テンソルをあるメッシュから別のメッシュに転送します。

オペランドと結果の型のメッシュ名は、トポロジ内のメッシュに対応している必要があり、グローバル型は同じである必要があります。

トレイト: AlwaysSpeculatableImplTraitHasParent<::mlir::func::FuncOp>

インターフェース: ConditionallySpeculatableNoMemoryEffect (MemoryEffectOpInterface)ShardingRuleOpInterface

影響: MemoryEffects::Effect{}

オペランド:

オペランド 説明
tensor メッシュ テンソル型

結果:

結果 説明
result メッシュ テンソル型

mpmd.unassign(mpmd::UnassignOp)

割り当て解除オペレーション

構文:

operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)

完全に複製されたテンソルをメッシュから割り当て解除します。

これは、jax ops を削減するときに導入される一時的な op で、ローカル型からメッシュ型に移行するために使用されます。これらのオペレーションは、func オペレーションの入力と結果がメッシュ テンソルになると、インポート時に削除されます。

オペランド タイプのメッシュ名はトポロジのメッシュに対応し、そのグローバル タイプは結果タイプと同一である必要があります。

トレイト: AlwaysSpeculatableImplTraitHasParent<::mlir::func::FuncOp, ForOp>InferTensorType

インターフェース: ConditionallySpeculatableInferShapedTypeOpInterfaceInferTypeOpInterfaceNoMemoryEffect (MemoryEffectOpInterface)

影響: MemoryEffects::Effect{}

属性:

属性MLIR 型説明
origin::mlir::StringAttr文字列属性

オペランド:

オペランド 説明
tensor メッシュ テンソル型

結果:

結果 説明
result トークン以外の型の値のテンソル

属性

MeshWithOriginsAttr

メッシュの起源と一致します。

構文:

#mpmd.mesh_with_origins<
  ::llvm::StringRef,   # mesh_name
  ::llvm::ArrayRef<OriginAttr>   # origins
>

パラメータ:

パラメータ C++ 型 説明
mesh_name ::llvm::StringRef mesh_name
origins ::llvm::ArrayRef<OriginAttr> origins

MeshesWithOriginsAttr

オリジンを含むメッシュのリスト。

構文:

#mpmd.meshes_with_origins<
  ::llvm::ArrayRef<MeshWithOriginsAttr>   # value
>

パラメータ:

パラメータ C++ 型 説明
::llvm::ArrayRef<MeshWithOriginsAttr>

NamedMeshAttr

名前と Mesh を含むペア。

構文:

#mpmd.named_mesh<
  ::llvm::StringRef,   # name
  sdy::MeshAttr   # mesh
>

パラメータ:

パラメータ C++ 型 説明
name ::llvm::StringRef name
メッシュ sdy::MeshAttr メッシュ

OriginAttr

メッシュ割り当てのオリジン。

構文:

#mpmd.origin<
  ::llvm::StringRef   # origin_label
>

メッシュ割り当てのオリジン。

origin_label は、人が読める形式のオリジンのラベルです。デバッグ目的で使用することを想定しています。

パラメータ:

パラメータ C++ 型 説明
origin_label ::llvm::StringRef origin_label

ReductionAttr

削減を示します。

構文:

#mpmd.reduction<
  `none` | `add` | `max` | `min` | `mul` | `or` | `and`   # reduction_type
>

パラメータ:

パラメータ C++ 型 説明
reduction_type ::mlir::mpmd::ReductionType ReductionType 型の列挙型

TopologyAttr

名前付きメッシュのトポロジ。

構文:

#mpmd.topology<
  ::llvm::ArrayRef<NamedMeshAttr>   # meshes
>

パラメータ:

パラメータ C++ 型 説明
meshes ::llvm::ArrayRef<NamedMeshAttr> トポロジ メッシュ

UserOriginAttr

ユーザー指定の計算の送信元。

構文:

#mpmd.user_origin<
  ::mlir::StringAttr,   # userName
  int64_t   # transposeCount
>

パラメータ:

パラメータ C++ 型 説明
userName ::mlir::StringAttr
transposeCount int64_t

MeshTensorType

メッシュ テンソル型

プログラムの MPMD トポロジのメッシュ内の特定の SPMD メッシュに RankedTensorType を割り当てます。この型には、SPMD メッシュに対するテンソルのシャーディング方法を指定するオプションのシャーディングが含まれます。シャーディングが存在しない場合、テンソルは完全に複製されます。

パラメータ:

パラメータ C++ 型 説明
mesh_name ::llvm::StringRef メッシュ名
ranked_tensor_type ::mlir::RankedTensorType ランク付けされたテンソル型
シャーディング ::mlir::sdy::TensorShardingAttr
memory_kind ::mlir::StringAttr

列挙型

ReductionType

reduction type [割引タイプ] 属性

Cases:

記号 文字列
kNone 0 なし
kAdd 1 追加
kMax 2 最大
kMin 3
kMul 4 mul
kOr 5 または
kAnd 6

EdgeNodeType

エッジノードタイプの列挙型

Cases:

記号 文字列
OPERAND 0 オペランド
結果 1 件の結果

PropagationDirection

伝播方向の列挙型

Cases:

記号 文字列
なし 0 なし
転送 1 転送
BACKWARD 2 BACKWARD
両方 3 両方

ReductionOp

削減演算子列挙型

Cases:

記号 文字列
SUM 0 sum
最大 1 最大
MIN 2