Определения OpInterface

CollectiveOpInterface ( Sdy_CollectiveOpInterface )

Интерфейс для всех коллективных операций. Инкапсулирует общий метод get/set для атрибута outSharding.

Ограничения:

  • Операнд должен иметь сегментирование, иначе allowMissingInputSharding() вернет true.
  • out_sharding действителен для соответствующего типа.
  • Операнд и сегментирование результата должны иметь одинаковую сетку, если allowDifferentMeshes() возвращает false.
  • Тот же ранг для операнда и сегментирования результата.

Методы:

getOutSharding

::mlir::sdy::TensorShardingAttr getOutSharding();

Возвращает выходной тензорный сегмент коллективной операции.

setOutShardingAttr

void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);

Устанавливает сегментирование выходного тензора коллективной операции.

getTensor

::mlir::TypedValue<::mlir::TensorType> getTensor();

Получите тензорный операнд коллективной операции.

getType

::mlir::Type getType();

Получите тип результата коллективной операции.

allowDifferentMeshes

bool allowDifferentMeshes();

Указывает, позволяет ли коллективная операция использовать разные сетки для входного и выходного сегментирования.

allowMissingInputSharding

bool allowMissingInputSharding();

Указывает, позволяет ли коллективная операция входным данным не иметь сегментирования, т. е. неявно полностью реплицироваться.

ShardableDataFlowOpInterface ( Sdy_ShardableDataFlowOpInterface )

Интерфейс операции, который позволяет шарди распространять сегменты через границы потока данных операций, которые расширяют этот интерфейс.

Граница потока данных некоторой операции 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::SmallVector<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

Возвращает сегменты всех владельцев границ потока данных аргументов блока.

setBlockArgumentEdgeOwnerShardings

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

Устанавливает shardings всех владельцев границ аргументов блока.

getOpResultEdgeOwnerShardings

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

Возвращает сегменты всех владельцев ребер потока данных результата операции.

setOpResultEdgeOwnerShardings

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

Устанавливает shardings всех владельцев края результата операции.

transformTargetSharding

mlir::sdy::TensorShardingAttr transformTargetSharding(mlir::Value target, mlir::sdy::TensorShardingAttr sharding, mlir::sdy::DataFlowShardingTransformType transformType);

Преобразует sharding цели в зависимости от transformType

Дополнительные сведения см. в разделе DataFlowShardingTransformType .

getBlockArgumentEdgeOwners

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

Получает всех владельцев границ аргументов блока.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

Получает всех владельцев результатов операций.

getEdgeSources

mlir::SmallVector<mlir::OpOperand*> getEdgeSources(mlir::Value owner);

Получает источники ребер потока данных с учетом owner ребра.

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 ( Sdy_ShardingRuleOpInterface )

Интерфейс оператора, который позволяет оператору определять собственное правило сегментирования. Правило сегментирования определяет, как операция может быть разделена в соответствии с различными свойствами операции — любыми атрибутами, формой операндов, формой результатов и т. д. Дополнительные сведения см. в OpShardingRuleAttr .

Методы:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

Возвращает правило сегментирования операции.

,

CollectiveOpInterface ( Sdy_CollectiveOpInterface )

Интерфейс для всех коллективных операций. Инкапсулирует общий метод get/set для атрибута outSharding.

Ограничения:

  • Операнд должен иметь сегментирование, иначе allowMissingInputSharding() вернет true.
  • out_sharding действителен для соответствующего типа.
  • Операнд и сегментирование результата должны иметь одинаковую сетку, если allowDifferentMeshes() возвращает false.
  • Тот же ранг для операнда и сегментирования результата.

Методы:

getOutSharding

::mlir::sdy::TensorShardingAttr getOutSharding();

Возвращает выходной тензорный сегмент коллективной операции.

setOutShardingAttr

void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);

Устанавливает сегментирование выходного тензора коллективной операции.

getTensor

::mlir::TypedValue<::mlir::TensorType> getTensor();

Получите тензорный операнд коллективной операции.

getType

::mlir::Type getType();

Получите тип результата коллективной операции.

allowDifferentMeshes

bool allowDifferentMeshes();

Указывает, позволяет ли коллективная операция использовать разные сетки для входного и выходного сегментирования.

allowMissingInputSharding

bool allowMissingInputSharding();

Указывает, позволяет ли коллективная операция входным данным не иметь сегментирования, т. е. неявно полностью реплицироваться.

ShardableDataFlowOpInterface ( Sdy_ShardableDataFlowOpInterface )

Интерфейс операции, который позволяет шарди распространять сегменты через границы потока данных операций, которые расширяют этот интерфейс.

Граница потока данных некоторой операции 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::SmallVector<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

Возвращает сегменты всех владельцев границ потока данных аргументов блока.

setBlockArgumentEdgeOwnerShardings

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

Устанавливает shardings всех владельцев границ аргументов блока.

getOpResultEdgeOwnerShardings

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

Возвращает сегменты всех владельцев ребер потока данных результата операции.

setOpResultEdgeOwnerShardings

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

Устанавливает shardings всех владельцев края результата операции.

transformTargetSharding

mlir::sdy::TensorShardingAttr transformTargetSharding(mlir::Value target, mlir::sdy::TensorShardingAttr sharding, mlir::sdy::DataFlowShardingTransformType transformType);

Преобразует sharding цели в зависимости от transformType

Дополнительные сведения см. в разделе DataFlowShardingTransformType .

getBlockArgumentEdgeOwners

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

Получает всех владельцев границ аргументов блока.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

Получает всех владельцев результатов операций.

getEdgeSources

mlir::SmallVector<mlir::OpOperand*> getEdgeSources(mlir::Value owner);

Получает источники ребер потока данных с учетом owner ребра.

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 ( Sdy_ShardingRuleOpInterface )

Интерфейс оператора, который позволяет оператору определять собственное правило сегментирования. Правило сегментирования определяет, как операция может быть разделена в соответствии с различными свойствами операции — любыми атрибутами, формой операндов, формой результатов и т. д. Дополнительные сведения см. в OpShardingRuleAttr .

Методы:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

Возвращает правило сегментирования операции.

,

CollectiveOpInterface ( Sdy_CollectiveOpInterface )

Интерфейс для всех коллективных операций. Инкапсулирует общий метод get/set для атрибута outSharding.

Ограничения:

  • Операнд должен иметь сегментирование, иначе allowMissingInputSharding() вернет true.
  • out_sharding действителен для соответствующего типа.
  • Операнд и сегментирование результата должны иметь одинаковую сетку, если allowDifferentMeshes() возвращает false.
  • Тот же ранг для операнда и сегментирования результата.

Методы:

getOutSharding

::mlir::sdy::TensorShardingAttr getOutSharding();

Возвращает выходной тензорный сегмент коллективной операции.

setOutShardingAttr

void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);

Устанавливает сегментирование выходного тензора коллективной операции.

getTensor

::mlir::TypedValue<::mlir::TensorType> getTensor();

Получите тензорный операнд коллективной операции.

getType

::mlir::Type getType();

Получите тип результата коллективной операции.

allowDifferentMeshes

bool allowDifferentMeshes();

Указывает, позволяет ли коллективная операция использовать разные сетки для входного и выходного сегментирования.

allowMissingInputSharding

bool allowMissingInputSharding();

Указывает, позволяет ли коллективная операция входным данным не иметь сегментирования, т. е. неявно полностью реплицироваться.

ShardableDataFlowOpInterface ( Sdy_ShardableDataFlowOpInterface )

Интерфейс операции, который позволяет шарди распространять сегменты через границы потока данных операций, которые расширяют этот интерфейс.

Граница потока данных некоторой операции 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::SmallVector<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

Возвращает сегменты всех владельцев границ потока данных аргументов блока.

setBlockArgumentEdgeOwnerShardings

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

Устанавливает shardings всех владельцев границ аргументов блока.

getOpResultEdgeOwnerShardings

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

Возвращает сегменты всех владельцев ребер потока данных результата операции.

setOpResultEdgeOwnerShardings

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

Устанавливает shardings всех владельцев края результата операции.

transformTargetSharding

mlir::sdy::TensorShardingAttr transformTargetSharding(mlir::Value target, mlir::sdy::TensorShardingAttr sharding, mlir::sdy::DataFlowShardingTransformType transformType);

Преобразует sharding цели в зависимости от transformType

Дополнительные сведения см. в разделе DataFlowShardingTransformType .

getBlockArgumentEdgeOwners

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

Получает всех владельцев границ аргументов блока.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

Получает всех владельцев результатов операций.

getEdgeSources

mlir::SmallVector<mlir::OpOperand*> getEdgeSources(mlir::Value owner);

Получает источники ребер потока данных с учетом owner ребра.

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 ( Sdy_ShardingRuleOpInterface )

Интерфейс оператора, который позволяет оператору определять собственное правило сегментирования. Правило сегментирования определяет, как операция может быть разделена в соответствии с различными свойствами операции — любыми атрибутами, формой операндов, формой результатов и т. д. Дополнительные сведения см. в OpShardingRuleAttr .

Методы:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

Возвращает правило сегментирования операции.