-sdy-add-data-flow-edges

為每個資料流動邊插入 DataFlowEdgeOp

針對資料流動邊緣的擁有者 (也就是模組中每個操作的 getDataFlowEdgeOwners 所傳回的所有值),為每個值插入 DataFlowEdgeOp

插入的 DataFlowEdgeOp 會採用擁有者目標的現有區塊處理作業 (如果有的話)。

TODO(b/330339693):在移除 getDataFlowEdgeOwners 時更新此文件。

-sdy-apply-sharding-constraints

套用限制,以便決定輸入內容的分割方式。

如果 ShardingConstraintOp 滿足下列所有條件,就會將其分割作業複製到輸入內容:

  • 輸入內容沒有現有的切割。
  • 輸入並非由 DataFlowEdgeOp 產生,其會保留邊緣所有目標的資料分割。
  • ShardingConstraintOp」的資料分割已完全關閉。
  • 輸入內容沒有其他使用者,且使用者類型為 ShardingConstraintOpManualComputationOp,且使用者有不同的分割。

這表示 ShardingConstraintOp 會決定其輸入內容的分割方式。

請注意,無論是否為此傳遞,ShardingConstraintOp 的分割作業都會在傳播期間傳播至其輸入或使用者,但由於維度的關閉屬性不會傳播,因此請務必複製分割作業,以便在上述情況下完全遵守限制。

此外,如果張量是由一連串 ShardingConstraintOp 使用,且符合下列所有條件:

  • 張量並非由 ShardingConstraintOp 產生,也沒有任何其他 ShardingConstraintOpManualComputationOp 類型的使用者。
  • 除了最後一個 ShardingConstraintOp 外,鏈條中的所有 ShardingConstraintOp 都只能使用一次。
  • 鏈結中的最後一個 ShardingConstraintOp 沒有任何類型 ShardingConstraintOpManualComputationOp 的使用者 (否則就不是鏈結中的最後一個)。

然後,這個傳遞會將鏈結的結果取代鏈結輸入的所有其他用途,這些用途是在鏈結中的最後一個 ShardingConstraintOp (以及同一區塊內) 之後定義,因為它應會指示這些用途的分割。

-sdy-constant-splitter

分割常數子運算,讓每個運算都有單一用途。

將常數子運算分割,讓每個子運算都有單一使用者。

這可確保在常數子運算的不同用途之間不會傳播分割作業,因為這會被視為錯誤的依附元件 (常數的用途不應以相同方式分割,只因它們使用相同的常數)。實際上,每個用途都可以有不同的區塊,這些區塊可獨立地傳播至常數子運算的專屬副本。

常數子運算為以下兩者之一:

  • 常數或 iota 運算 (無運算元)
  • 廣播、切片或純元素運算,其運算元皆由常數子運算 (遞迴) 定義,以及定義運算元的整個子運算。

請注意,在常數子運算中,值可在該子運算中多次使用。

-sdy-lift-inlined-meshes

將分割區中的內嵌 MeshAttr 提升為符號 MeshOp

TensorShardingAttr 中任何內嵌的 MeshAttr 替換為網格符號名稱,並參照模組中現有或新的 MeshOp,以便確保沒有兩個 MeshOp 具有相同的 MeshAttr (現有的 MeshOp 也會進行重複排除)。

每個新的 MeshOp 名稱會是下列其中一種:

  • maximal_mesh_{device-id},適用於最大網格 (即空白軸清單和單一裝置 ID)。
  • 否則為 [mesh, mesh_0, mesh_1, ...] 中的第一個可用名稱。### -sdy-manual-axes-cleanup

清理 ManualComputationOp 中手動軸的使用方式

1) 對於尚未指定手動軸的「內/外」資料分割,請將該手動軸新增至「copyd_axes」。這麼做是為了確保手動軸一律會完整指定。

2) 以網格軸宣告順序排序手動軸。

-sdy-sharding-group-import

資料分割群組的標準化與驗證通過。

在匯入時,將標準化和驗證套用至分割群組。包括:

1) 分割群組統一:使用群組成員的傳遞性屬性,結合分割群組。每當向量 T 位於切割群組 G1 切割群組 G2 時,我們可以推斷 G1 和 G2 中的所有成員都應以相同方式切割。因此,我們可以將 G1 和 G2 合併為單一群組。合併後的標準群組 ID 集合會是 0,1,...N-1,代表最少的群組集合。

2) 分割群組驗證:驗證分割群組是否正確形成,且符合實作中的假設。目前斷言:如果資料分割群組包含 ManualComputationOp 區塊內定義的 Value,則該群組中的所有其他值都必須位於同一個區塊。