-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)。
  • [meshmesh_0mesh_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 が含まれている場合、そのグループ内の他のすべての値が同じブロックに存在する必要があることをアサートしています。