'mpmd' Dialect

作業

mpmd.assign (mpmd::AssignOp)

指派作業

語法:

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

將本機張量指派給網格,在該網格中完全複製。

這是降低 jax 作業時導入的暫時性作業,可從本機型別移至網格型別。匯入時,當 func op 的輸入和結果變成網格張量,這些 op 就會遭到淘汰。

結果類型的網格名稱應對應至拓撲中的網格,且其全域類型應與運算元類型相同。

指派作業的來源是網格的來源,例如 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)

適用於運算子

傳回執行主體函式固定疊代次數的結果,主體中提供疊代索引。

您可以指定選用的展開係數 (必須能整除疊代次數),依該係數展開運算元的主體,也就是說,如果展開係數為 N,主體會複製 N 份,疊代次數則會減少 1/N 倍。除了第一個副本外,每個副本都會使用前一個副本的結果,而非區塊引數,且疊代索引會乘以展開係數,並在每個副本後遞增。

for 運算子可以接受及傳回任何型別,但這些型別的 TypeID 必須相同,例如所有張量型別或所有 MPMD 網格型別等。這讓我們可以在各種層級使用運算子,共用實作項目和轉換。

特徵:HLO_PairwiseSameOperandAndResultTypeRecursiveMemoryEffectsRecursivelySpeculatableImplTraitSingleBlockImplicitTerminator<ReturnOp>SingleBlock

介面:ConditionallySpeculatableLoopLikeOpInterfaceOpAsmOpInterfaceShardableDataFlowOpInterface

屬性:

屬性MLIR 類型說明
iterations::mlir::IntegerAttr32 位元不帶正負號整數屬性
unroll_factor::mlir::IntegerAttr32 位元不帶正負號整數屬性

運算元:

運算元 說明
tensors 任何非權杖類型的 variadic

成果:

結果 說明
results 任何非權杖類型的 variadic

mpmd.fragment (mpmd::FragmentOp)

片段作業

將運算 (即一連串的作業) 指派給 MPDM 拓撲中的特定網格,目的是要將運算做為個別的 SPMD 程式片段執行。

片段只會接收和傳回指派給與片段相同網格的網格張量。

片段的網格名稱應對應拓撲中的網格。

片段包含來源清單,也就是含有資訊的中繼資料,這些資訊與構成這個片段的原始 named_computations 相關,以及定義 iff 的 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 網格張量型別或權杖的 variadic

成果:

結果 說明
results 網格張量型別或權杖的 variadic

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 網格張量型別的 variadic

成果:

結果 說明
「unnamed」 網格張量型別的 variadic

mpmd.named_computation (mpmd::NamedComputationOp)

具名範圍作業

將計算 (即一連串的作業) 分組,並透過 UserOrigin 屬性為其命名及提供轉置計數。這個 NamedComputation 可用於在 MPMD 中將網格指派給運算,或用於最佳化。

轉置計數 (預設值為 0) 表示具名計算是否由特定數量的 JAX AD 轉置轉換產生。

運算元的區域不應有任何自由變數,且區域中每個區塊引數和傳回值的型別,必須與運算元的輸入型別和傳回類型相同。

特徵: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)

將張量結果與指定名稱建立關聯的身分運算。這個 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 任何非權杖類型的 variadic

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 作業時導入的暫時性作業,可從本機型別移至網格型別。匯入時,當 func op 的輸入和結果變成網格張量,這些 op 就會遭到淘汰。

運算元類型的網格名稱應對應至拓撲中的網格,且其全域類型應與結果類型相同。

特徵: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
來源 ::llvm::ArrayRef<OriginAttr> 來源

MeshesWithOriginsAttr

網格清單及其來源。

語法:

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

參數:

參數 C++ 型別 說明
::llvm::ArrayRef<MeshWithOriginsAttr>

NamedMeshAttr

一對名稱和網格。

語法:

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

參數:

參數 C++ 型別 說明
名稱 ::llvm::StringRef 名稱
網格 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++ 型別 說明
網格 ::llvm::ArrayRef<NamedMeshAttr> 拓撲網格

UserOriginAttr

使用者指定運算的來源。

語法:

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

參數:

參數 C++ 型別 說明
userName ::mlir::StringAttr
transposeCount int64_t

類型

MeshTensorType

網格張量類型

在程式的 MPMP 網格拓撲中,將 RankedTensorType 指派給特定 SPMD 網格。這個型別會保留選用的分片,指定張量相對於 SPMD 網格的分片方式。如果沒有分片,張量會完全複製。

參數:

參數 C++ 型別 說明
mesh_name ::llvm::StringRef 網狀網路名稱
ranked_tensor_type ::mlir::RankedTensorType 有秩張量型別
資料分割 ::mlir::sdy::TensorShardingAttr
memory_kind ::mlir::StringAttr

列舉

ReductionType

減免類型屬性

案件:

符號 字串
kNone 0
kAdd 1 add
kMax 2 max
kMin 3 分鐘
kMul 4 mul
kOr 5
kAnd 6

EdgeNodeType

邊緣節點類型列舉

案件:

符號 字串
OPERAND 0 運算元
結果 1 結果

PropagationDirection

Propagation direction enum

案件:

符號 字串
0
FORWARD 1 FORWARD
向後 2 向後
雙方 3 雙方

ReductionOp

減少 op 列舉

案件:

符號 字串
SUM 0 總和
MAX 1 max
MIN 2 分鐘