-sdy-add-data-flow-edges
データフロー エッジごとに DataFlowEdgeOp
を挿入します。
データフロー エッジのオーナーである値(モジュール内のすべてのオペレーションで getDataFlowEdgeOwners
によって返されるすべての値)に DataFlowEdgeOp
を挿入します。
挿入された DataFlowEdgeOp
は、オーナー ターゲットの既存のシャーディング(存在する場合)を使用します。
-sdy-apply-sharding-constraints
入力のシャーディングを指定する制約を適用します。
次のすべての条件を満たす場合、ShardingConstraintOp
のシャーディングを入力にコピーします。
- 入力に既存のシャーディングがない。
ShardingConstraintOp
のシャーディングは完全にクローズされています。- 入力には、異なるシャーディングを持つ
ShardingConstraintOp
型またはManualComputationOp
型の他のユーザーがいません。
これらの条件は、ShardingConstraintOp
が入力のシャーディングを指示していることを示します。
入力が DataFlowEdgeOp
によって生成された場合、エッジのすべてのターゲットのシャーディングを制限しないように、オペレーションのシャーディングを設定する代わりに、input
のすべての使用を ShardingConstraintOp
に置き換えます。
ShardingConstraintOp
のシャーディングは、このパスに関係なく、伝播中に入力またはユーザーに伝播されますが、ディメンションの閉じられたプロパティは伝播されないため、上記のケースで制約を完全に遵守するには、シャーディングをコピーすることが重要です。
また、テンソルが次のすべての条件を満たす ShardingConstraintOp
のチェーンで使用されている場合:
- テンソルは
ShardingConstraintOp
によって生成されておらず、ShardingConstraintOp
またはManualComputationOp
タイプの他のユーザーもいません。 - チェーン内の
ShardingConstraintOp
は、最後を除き、複数回使用されません。 - チェーンの最後の
ShardingConstraintOp
にShardingConstraintOp
またはManualComputationOp
タイプのユーザーがいない(そうでない場合、チェーンの最後ではない)。
このパスは、チェーンの最後の ShardingConstraintOp
の後に定義されている(同じブロック内にある)チェーンの入力の他のすべての使用を、チェーンの結果に置き換えます。これは、これらの使用のシャーディングを指定する必要があるためです。
-sdy-constant-splitter
定数の副計算を分割して、それぞれを 1 回だけ使用できるようにします。
定数サブ計算を分割して、単一のユーザーが使用できるようにします。
これにより、定数の副計算の異なる使用間でシャーディングが伝播されなくなります。これは、偽の依存関係と見なされるためです(同じ定数を使用しているからといって、定数の使用を同じ方法でシャーディングしないでください)。実質的には、各使用に異なるシャーディングがあり、定数サブ計算の独自のコピーに個別に伝播できます。
定数の副計算は次のいずれかです。
- 定数または iota 演算子(オペランドなし)
- ブロードキャスト、スライス、または純粋な要素ごとの演算子。オペランドはすべて定数サブ計算によって(再帰的に)定義され、オペランドを定義するサブ計算全体も定義されます。
定数サブ計算内では、そのサブ計算内で値を複数回使用できます。
-sdy-lift-inlined-meshes
シャーディング内のインライン化された MeshAttr
をシンボル MeshOp
として昇格させます。
TensorShardingAttr
内のインライン MeshAttr
を、モジュール内の既存または新しい MeshOp
を参照するメッシュ シンボル名に置き換えます。これにより、2 つの MeshOp
に同じ MeshAttr
が存在しなくなります(既存の MeshOp
も重複除去されます)。
各新しい MeshOp
の名前は次のいずれかになります。
maximal_mesh_{device-id}
: 最大メッシュ(空の軸リストと単一のデバイス ID)の場合。- [
mesh
、mesh_0
、mesh_1
、...] で使用可能な最初の名前。
-sdy-manual-axes-cleanup
ManualComputationOp
で手動軸の使用をクリーンアップ
- 手動軸が指定されていないインバウンド/アウトバウンド シャーディングの場合は、その手動軸を replicated_axes に追加します。これは、手動軸が常に完全に指定されるようにするためです。
- 手動軸をメッシュ軸の宣言順に並べ替えます。
-sdy-sharding-group-import
シャーディング グループの正規化と検証パス。
インポート時にシャーディング グループに正規化と検証を適用します。具体的には次のとおりです。
シャーディング グループの統合
グループ メンバーシップの推移的プロパティを使用して、シャーディング グループを結合します。テンソル T がシャーディング グループ G1 とシャーディング グループ G2 にある場合は、G1 と G2 のすべてのメンバーが同じ方法でシャーディングされる必要があると推測できます。したがって、G1 と G2 を 1 つのグループにまとめることができます。統合後の正規グループ ID のセットは、最小グループセットの場合、0、1、...N-1 になります。
シャーディング グループの検証
シャーディング グループが適切に構成され、実装内の前提条件を満たしていることを確認します。現在、シャーディング グループに
ManualComputationOp
のブロック内に定義されたValue
が含まれている場合、そのグループ内の他のすべての値は同じブロックに存在する必要があることをアサートしています。