-sdy-close-shardings

關閉張量區塊劃分,並捨棄複製的軸。

-sdy-drop-sharding-rules

從所有已註冊的作業中移除 OpShardingRuleAttr

-sdy-insert-explicit-reshards

插入明確的 reshard,讓所有作業都具有相容的分割。

相容的分割作業基本上是指作業可以接受分割運算元,並產生分割結果,而不需要任何重新分割通訊 (請注意,作業可能仍需要通訊,例如 all-reduce 或 halo-swap)。

傳播後,部分作業可能仍有不相容的分割作業。

請注意,如果軸 (或子軸) 用於在多個張量中分割不相符的維度 (例如 matmul 中的非收縮維度),或是軸分割一個張量中的維度,但不分割另一個張量中的相符維度,則表示該運算有分割衝突。因此,在這個階段結束後,作業就不會發生衝突。

這個階段會明確插入重新分割作業,讓每個作業的對應維度以相同方式在所有運算元和結果中分割,且每個軸 (或子軸) 只能用於分割單一維度類型。

以下是說明用範例:

輸入:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"y"},{"x"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

輸出:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

在上述範例中,lhsrhs 張量在其非收縮維度上都以「x」軸分割,因此發生衝突。在此處,rhs 張量會在點運算之前重新分割,明確地只在其第一個維度和「x」軸上分割。這樣一來,點運算就會變得相容。

-sdy-remove-sharding-groups

在傳播後移除 ShardingGroupOps。

-sdy-sharding-constraint-to-reshard

將 ShardingConstraintOp 轉換為 ReshardOp。

-sdy-sink-data-flow-edges

將所有 DataFlowEdgeOp 匯入輸入內容。

將每個 DataFlowEdgeOp 的分割作業移至其輸入內容 (邊緣的根目錄目標),並將作業替換為其輸入內容。

TODO(tomnatan):請考慮將區隔作業移至所有可附加區隔作業的目標。

-sdy-update-non-divisible-input-output-shardings

讓 FuncOp 輸入/輸出均勻分割,消除因不可分割的分割而需要填充的情況。

Shardy 使用者預期函式輸入/輸出內容可平均分割/分割,以免需要填充張量。傳播可能會使輸入/輸出端具有不可分割的分割,因此這個傳遞會將這些端更新為原始分割的最大維度分割前置字串,以便平均分割。