OpInterface の定義

ShardableDataFlowOpInterface(ShardableDataFlowOpInterface

このインターフェースを拡張するオペレーションのデータフロー エッジを介して、シャーディングを伝播できるようにするオペレーション インターフェース。

ある演算 X のデータフロー エッジは、一連のソース(それぞれ X のオペランドまたは X のブロック終端子のオペランド)と一連のターゲット(それぞれ X の結果または X のブロック引数)間のブリッジを定義します。これにより、すべてのソースとターゲットが同じ方法でシャーディングされるようになります。op は、互いに直交する複数のデータフロー エッジを持つことができます。

オーナーは、シャーディーのプロパゲーションによって使用されるデータフロー エッジのユーザー指定のターゲットです。ユーザーが任意に選択できますが、静的である必要があります。

例:

  y_1, ..., y_n = custom_op (x_1, ..., x_n)
                  ((body_arg_1,..., body_arg_n) {
                    ...
                    return return_value_1, ..., return_value_n
                  })

この custom_op には、データフロー エッジに 2 つのタイプがあります。return_value_i(ソース)と y_i(ターゲット)の間にそれぞれ n 個のエッジ、x_i(ソース)と body_arg_i(ターゲット)の間に n 個のエッジです。この場合、エッジ オーナーはターゲットと同じです。

複数のターゲットを持つオペレーションの例を次に示します。

  y_0, ..., y_n = while (x_0, ..., x_n)
                  ((pred_arg_0,... , pred_arg_n) { ... })
                  ((body_arg_0,..., body_arg_n) {
                    ...
                    return return_value_0, ..., return_value_n
                  })

この while オペレーションには n 個のデータフロー エッジがあり、i 番目のデータフロー エッジはソース x_ireturn_value_i とターゲット y_ipred_arg_ibody_arg_i の間にあります。

メソッド:

getBlockArgumentEdgeOwnerShardings

mlir::ArrayRef<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

すべてのブロック引数データフロー エッジ オーナーのシャーディングを返します。

setBlockArgumentEdgeOwnerSharding

void setBlockArgumentEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);

指定された index で、ブロック引数のエッジオーナーの sharding を設定します。

setBlockArgumentEdgeOwnerShardings

void setBlockArgumentEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

すべてのブロック引数のエッジ オーナーの shardings を設定します。

getOpResultEdgeOwnerShardings

mlir::ArrayRef<mlir::sdy::TensorShardingAttr> getOpResultEdgeOwnerShardings();

すべてのオペレーション結果データフロー エッジ オーナーのシャーディングを返します。

setOpResultEdgeOwnerSharding

void setOpResultEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);

op 結果エッジ オーナーの sharding を指定された index に設定します。

setOpResultEdgeOwnerShardings

void setOpResultEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

すべてのオペレーション結果エッジ オーナーの shardings を設定します。

getBlockArgumentEdgeOwners

mlir::ArrayRef<mlir::BlockArgument> getBlockArgumentEdgeOwners();

すべてのブロック引数のエッジ オーナーを取得します。

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

すべてのオペレーション結果エッジ オーナーを取得します。

getEdgeSources

mlir::SmallVector<mlir::Value> getEdgeSources(mlir::Value target);

target 値を指定して、データフロー エッジソースを取得します。

getEdgeOwnerFromTarget

mlir::Value getEdgeOwnerFromTarget(mlir::Value target);

所有者である可能性のある target を指定して、データフロー エッジの所有者 target を取得します。

getEdgeOwnerFromSource

mlir::Value getEdgeOwnerFromSource(mlir::OpOperand&source);

指定された source で指定された Dataflow エッジのオーナー ターゲットを取得します。

getNonEdgeOwnerTargets

mlir::SmallVector<mlir::Value> getNonEdgeOwnerTargets(mlir::Value owner);

エッジ owner を指定して、データフロー エッジのオーナー以外のターゲットを取得します。

ShardingRuleOpInterface(ShardingRuleOpInterface

演算で独自のシャーディング ルールを定義できる演算インターフェース。 シャーディング ルールでは、オペレーションのさまざまなプロパティ(属性、オペランドの形状、結果の形状など)に応じてオペレーションをパーティショニングする方法が指定されます。詳細については、OpShardingRuleAttr をご覧ください。

メソッド:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

演算のシャーディング ルールを返します。