ShardableDataFlowOpInterface ( ShardableDataFlowOpInterface
)
Интерфейс операции, который позволяет шарди распространять сегменты через границы потока данных операций, которые расширяют этот интерфейс.
Граница потока данных некоторой операции X определяет мост между набором источников (каждый является либо операндом X, либо операндом терминатора блока X) и набором целей (каждый является либо результатом X, либо аргументом блока X). X), так что все источники и цели должны быть сегментированы одинаково. Операция может иметь несколько ребер потока данных, ортогональных друг другу.
Владелец — это указанная пользователем цель границы потока данных, используемая при распространении шарди. Пользователь может выбрать его произвольно, но он должен быть статичным.
Например:
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 имеет два типа ребер потока данных: по n ребер между return_value_i
(источниками) и y_i
(целями) и n ребер между x_i
(источниками) и body_arg_i
(целями). В этом случае владельцы ребер такие же, как и цели.
Вот пример операции с несколькими целями:
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
})
При этом, хотя op имеет n ребер потока данных, i-е ребро потока данных находится между источниками x_i
, return_value_i
и целями y_i
, pred_arg_i
, body_arg_i
.
Методы:
getBlockArgumentEdgeOwnerShardings
mlir::ArrayRef<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();
Возвращает сегменты всех владельцев границ потока данных аргументов блока.
setBlockArgumentEdgeOwnerSharding
void setBlockArgumentEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);
Устанавливает sharding
владельца края аргумента блока с заданным index
.
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);
Устанавливает 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
.
getNonEdgeOwnerTargets
mlir::SmallVector<mlir::Value> getNonEdgeOwnerTargets(mlir::Value owner);
Получает целевые объекты ребра потока данных, не являющиеся владельцами, с учетом owner
ребра.
ShardingRuleOpInterface ( ShardingRuleOpInterface
)
Интерфейс оператора, который позволяет оператору определять собственное правило сегментирования. Правило сегментирования определяет, как операция может быть разделена в соответствии с различными свойствами операции — любыми атрибутами, формой операндов, формой результатов и т. д. Дополнительные сведения см. в OpShardingRuleAttr
.
Методы:
getShardingRule
mlir::sdy::OpShardingRuleAttr getShardingRule();
Возвращает правило сегментирования операции.