-sdy-add-data-flow-edges

Вставляет DataFlowEdgeOp для каждого края потока данных.

Вставляет DataFlowEdgeOp для каждого значения, которое является владельцем границы потока данных, т. е. для всех значений, возвращаемых getDataFlowEdgeOwners для каждой операции в модуле.

Вставленный DataFlowEdgeOp возьмет существующий сегмент цели-владельца, если он существует.

TODO(b/330339693): обновить этот документ после удаления getDataFlowEdgeOwners .

-sdy-apply-sharding-constraints

Применяет ограничения, определяющие сегментирование входных данных.

Копирует сегментирование ShardingConstraintOp на вход, если он удовлетворяет всем следующим условиям:

  • Входные данные не имеют существующего сегментирования.
  • Входные данные не создаются DataFlowEdgeOp , который содержит сегментирование всех целей края.
  • Шардинг ShardingConstraintOp полностью закрыт.
  • На входе нет других пользователей типа ShardingConstraintOp или ManualComputationOp с другим сегментированием.

Это указывает на то, что ShardingConstraintOp определяет сегментирование входных данных.

Обратите внимание, что сегментирование ShardingConstraintOp будет распространяться на его входные данные или пользователей во время распространения независимо от этого прохода, но поскольку закрытое свойство измерения не распространяется, важно скопировать сегментирование, чтобы полностью соблюдать ограничение в вышеупомянутых случаях.

Кроме того, если тензор используется цепочкой ShardingConstraintOp , которая удовлетворяет всем следующим требованиям:

  • Тензор не создается ShardingConstraintOp и не имеет других пользователей типа ShardingConstraintOp или ManualComputationOp .
  • Ни один из ShardingConstraintOp в цепочке не используется более одного раза, кроме последнего.
  • У последнего ShardingConstraintOp в цепочке нет пользователей типа ShardingConstraintOp или ManualComputationOp (в противном случае он не будет последним в цепочке).

затем этот проход заменяет все другие виды использования входных данных цепочки, определенные после последнего ShardingConstraintOp в цепочке (и внутри того же блока), на результат цепочки, поскольку он должен определять сегментирование этих использований.

-sdy-constant-splitter

Разделяет константные подвычисления, чтобы каждый из них мог использоваться только один раз.

Разделяет константные подвычисления таким образом, чтобы у них был один пользователь.

Это гарантирует, что сегментирование не будет распространяться между различными вариантами использования константного подвычисления, поскольку это считается ложной зависимостью (использования константы не должны сегментироваться одинаковым образом только потому, что они используют одну и ту же константу). Фактически, каждое использование может иметь разные сегменты, которые могут распространяться изолированно на свою собственную копию константного подвычисления.

Постоянное подвычисление - это либо:

  • константа или операция йоты (без операндов)
  • широковещательная, срезная или чистая поэлементная операция, все операнды которой определяются константными подвычислениями (рекурсивно), а также всеми подвычислениями, определяющими его операнды.

Обратите внимание, что в рамках подвычисления констант значение может иметь несколько применений в этом подвычислении.

-sdy-lift-inlined-meshes

Поднимает встроенные MeshAttr в сегментах как символы MeshOp .

Заменяет любой встроенный MeshAttr в TensorShardingAttr именем символа сетки, ссылаясь либо на существующий, либо на новый MeshOp в модуле, так что никакие два MeshOp с идентичным MeshAttr (существующие MeshOp также не дублируются).

Имя каждого нового MeshOp будет следующим:

  • maximal_mesh_{device-id} для максимальной сетки (т. е. пустой список осей и один идентификатор устройства).
  • Первое доступное имя в [ mesh , mesh_0 , mesh_1 , ...], в противном случае. ### -sdy-manual-axes-cleanup

Устраняется использование ручных осей в ManualComputationOp s.

1) Для любого сегментирования ввода/вывода, для которого не указана ось вручную, добавьте эту ось вручную в ее repliated_axes. Это необходимо для того, чтобы ручные оси всегда были полностью заданы.

2) Сортирует ручные оси в порядке объявления осей сетки.

-sdy-sharding-group-import

Канонизация и проверка групп сегментирования.

Применяет канонизацию и проверку к группам сегментирования при импорте. А именно это:

1) Объединение групп шардинга. Объединяет группы шардинга, используя транзитивное свойство членства в группах. Каждый раз, когда тензор T находится в группе сегментирования G1 и группе сегментирования G2, мы можем сделать вывод, что все члены в G1 и G2 должны быть сегментированы одинаковым образом. Таким образом, мы можем объединить G1 и G2 в одну группу. Набор идентификаторов канонических групп после слияния будет равен 0,1,...N-1 для минимального набора групп.

2) Проверка групп сегментирования. Проверяет, что группы сегментирования правильно сформированы и соответствуют предположениям в рамках реализации. В настоящее время это утверждает, что если группа сегментирования содержит Value определенное внутри блока ManualComputationOp , то все остальные значения в этой группе должны находиться в том же блоке.