-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
, то все остальные значения в этой группе должны находиться в том же блоке.