-sdy-add-data-flow-edges
為每個資料流動邊插入 DataFlowEdgeOp
。
針對資料流動邊緣的擁有者 (也就是模組中每個操作的 getDataFlowEdgeOwners
所傳回的所有值),為每個值插入 DataFlowEdgeOp
。
插入的 DataFlowEdgeOp
會採用擁有者目標的現有區塊處理作業 (如果有的話)。
TODO(b/330339693):在移除 getDataFlowEdgeOwners
時更新此文件。
-sdy-apply-sharding-constraints
套用限制,以便決定輸入內容的分割方式。
如果 ShardingConstraintOp
滿足下列所有條件,就會將其分割作業複製到輸入內容:
- 輸入內容沒有現有的切割。
- 輸入並非由
DataFlowEdgeOp
產生,其會保留邊緣所有目標的資料分割。 - 「
ShardingConstraintOp
」的資料分割已完全關閉。 - 輸入內容沒有其他使用者,且使用者類型為
ShardingConstraintOp
或ManualComputationOp
,且使用者有不同的分割。
這表示 ShardingConstraintOp
會決定其輸入內容的分割方式。
請注意,無論是否為此傳遞,ShardingConstraintOp
的分割作業都會在傳播期間傳播至其輸入或使用者,但由於維度的關閉屬性不會傳播,因此請務必複製分割作業,以便在上述情況下完全遵守限制。
此外,如果張量是由一連串 ShardingConstraintOp
使用,且符合下列所有條件:
- 張量並非由
ShardingConstraintOp
產生,也沒有任何其他ShardingConstraintOp
或ManualComputationOp
類型的使用者。 - 除了最後一個
ShardingConstraintOp
外,鏈條中的所有ShardingConstraintOp
都只能使用一次。 - 鏈結中的最後一個
ShardingConstraintOp
沒有任何類型ShardingConstraintOp
或ManualComputationOp
的使用者 (否則就不是鏈結中的最後一個)。
然後,這個傳遞會將鏈結的結果取代鏈結輸入的所有其他用途,這些用途是在鏈結中的最後一個 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
,則該群組中的所有其他值都必須位於同一個區塊。