Definicje interfejsu OpInterface

ShardableDataFlowOpInterface (ShardableDataFlowOpInterface)

Interfejs operacji, który umożliwia cząstkom propagowanie podziału za pomocą krawędzi przepływu danych w operacjach rozszerzających ten interfejs.

Krawędzia przepływu danych w operacji X definiuje most między zbiorem źródeł (każde z nich jest albo operandem X, albo operandem terminatora bloku X) a zbiorem docelów (każdy z nich jest albo wynikiem X, albo argumentem bloku X), tak aby wszystkie źródła i docelowe powinny być dzielone w taki sam sposób. Operacja może mieć wiele krawędzi przepływu danych, które są do siebie prostopadłe.

Właściciel to określony przez użytkownika cel krawędzi przepływu danych używanej przez propagowanie fragmentów. Użytkownik może wybrać dowolny kolor, ale musi być on statyczny.

Na przykład:

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

Ta operacja niestandardowa ma 2 typy krawędzi przepływu danych: n krawędzi między return_value_i (źródła) a y_i (docelowe) oraz n krawędzi między x_i(źródła) a body_arg_i(docelowe). W tym przypadku właściciele krawędzi są tacy sami jak cele.

Oto przykład operacji z większą liczbą celów:

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

Ta operacja while ma n krawędzi przepływu danych, a i-ta krawędź przepływu danych znajduje się między źródłami x_ireturn_value_i oraz celami y_i, pred_arg_ibody_arg_i.

Metody:

getBlockArgumentEdgeOwnerShardings

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

Zwraca podział wszystkich właścicieli krawędzi przepływu danych argumentu bloku.

setBlockArgumentEdgeOwnerSharding

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

Ustawia wartość sharding argumentu bloku edge owner na podany index.

setBlockArgumentEdgeOwnerShardings

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

Ustawia wartość shardings wszystkich właścicieli krawędzi argumentu bloku.

getOpResultEdgeOwnerShardings

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

Zwraca fragmenty kodu ze wszystkich właścicieli brzegów przepływu danych wyniku operacji.

setOpResultEdgeOwnerSharding

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

Ustawia sharding właściciela krawędzi wyniku op za pomocą podanego index.

setOpResultEdgeOwnerShardings

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

Ustawia shardings wszystkich właścicieli krawędzi wyników op.

getBlockArgumentEdgeOwners

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

Pobiera wszystkich właścicieli krawędzi argumentu bloku.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

Pobiera wszystkich właścicieli krawędzi wyniku operacji.

getEdgeSources

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

Pobiera źródła brzegowe przepływu danych o danej wartości target.

getEdgeOwnerFromTarget

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

Pobiera właściciela target krawędzi przepływu danych podany jako target, który może, ale nie musi być właścicielem.

getEdgeOwnerFromSource

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

Pobiera właściciela celu krawędzi przepływu danych na podstawie source.

getNonEdgeOwnerTargets

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

Pobiera cele niebędące właścicielami krawędzi przepływu danych, biorąc pod uwagę krawędź owner.

ShardingRuleOpInterface (ShardingRuleOpInterface)

Interfejs operatora, który umożliwia mu zdefiniowanie własnej reguły dzielenia. Reguła podziału określa, jak operacja może być dzielona na podstawie różnych właściwości operacji, np. atrybutów, kształtu operandów, kształtu wyników itp. Więcej informacji znajdziesz w artykule OpShardingRuleAttr.

Metody:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

Zwraca regułę podziału operacji.