OpInterface-Definitionen

ShardableDataFlowOpInterface (ShardableDataFlowOpInterface)

Eine Vorgangsschnittstelle, die es Shardy ermöglicht, Shardings über Datenflusskanten von Vorgängen zu propagieren, die diese Schnittstelle erweitern.

Eine Datenflusskante einer Operation X definiert eine Brücke zwischen einer Reihe von Quellen (jeweils ist entweder ein Operand von X oder ein Operand des Blockabschlusszeichens von X) und einer Gruppe von Zielen (jeweils ist entweder ein Ergebnis von X oder ein Blockargument von X), sodass alle Quellen und Ziele auf die gleiche Weise fragmentiert werden sollten. Ein Vorgang kann mehrere Datenflusskanten haben, die orthogonal zueinander verlaufen.

Ein Inhaber ist ein vom Nutzer angegebenes Ziel der Datenflusskante, das von Shardy für die Replikation verwendet wird. Der Nutzer kann sie frei wählen, sie muss aber statisch sein.

Beispiel:

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

Dieser custom_op hat zwei Typen für Datenflusskanten: jeweils n Kanten zwischen return_value_i (Quellen) und y_i (Ziele) und n Kanten zwischen x_i(Quellen) und body_arg_i(Ziele). In diesem Fall sind die Edge-Inhaber mit den Zielen identisch.

Hier ist ein Beispiel für eine Operation mit mehreren Zielen:

  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
                  })

Diese While-Operation hat n Datenflusskanten. Die i. Datenflusskante verläuft zwischen den Quellen x_i, return_value_i und den Zielen y_i, pred_arg_i, body_arg_i.

Methoden:

getBlockArgumentEdgeOwnerShardings

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

Gibt die Shardings aller Blockargument-Datenflusskanteneigentümer zurück.

setBlockArgumentEdgeOwnerSharding

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

Hiermit wird die sharding des Block-Arguments für den Kanteneigentümer mit der angegebenen index festgelegt.

setBlockArgumentEdgeOwnerShardings

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

Legt shardings für alle Blockargument-Kanteneigentümer fest.

getOpResultEdgeOwnerShardings

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

Gibt die Shardings aller Edge-Inhaber des Datenflusses für das Ergebnis einer Operation zurück.

setOpResultEdgeOwnerSharding

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

Legt die sharding des Inhabers der Vorgangs-Edge mit dem angegebenen index fest.

setOpResultEdgeOwnerShardings

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

Legt shardings aller Edge-Inhaber von Ergebnisoperatoren fest.

getBlockArgumentEdgeOwners

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

Alle Edge-Inhaber des Blockierungsarguments abrufen

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

Ruft alle Inhaber von OP-Ergebnis-Edges ab.

getEdgeSources

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

Ruft die Datenfluss-Kantenquellen mit einem target-Wert ab.

getEdgeOwnerFromTarget

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

Ruft den Inhaber target einer Datenflusskante für eine target ab, die möglicherweise der Inhaber ist.

getEdgeOwnerFromSource

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

Ruft das Inhaberziel einer Datenflusskante für eine source ab.

getNonEdgeOwnerTargets

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

Ruft die Ziele eines Datenfluss-Ecks ab, die nicht dem Inhaber gehören, und gibt dabei das Eck owner an.

ShardingRuleOpInterface (ShardingRuleOpInterface)

Eine Benutzeroberfläche für die Operation, mit der die Operation ihre eigene Sharding-Regel definieren kann. Mit einer Sharding-Regel wird angegeben, wie ein Vorgang gemäß verschiedenen Eigenschaften des Vorgangs partitioniert werden kann, z. B. Attribute, die Form der Operanden oder die Form der Ergebnisse. Weitere Informationen finden Sie unter OpShardingRuleAttr.

Methoden:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

Gibt die Sharding-Regel der Operation zurück.