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