-sdy-close-shardings

Закрывает тензорные сегменты и удаляет реплицированные оси.

-sdy-constant-merger

Объедините идентичные константы с соответствующими фрагментами.

Выполняет облегченную CSE для констант с одинаковыми сегментами.

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

-sdy-drop-sharding-rules

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

-sdy-insert-explicit-reshards

Вставляет явные сегменты, чтобы все операции имели совместимые сегменты.

Совместимое сегментирование по сути означает, что операция может принимать сегментированные операнды и выдавать сегментированный результат, не требуя каких-либо дополнительных соединений (обратите внимание, что операция все равно может требовать связи, такой как all-reduce или halo-swaps).

После распространения некоторые операции могут по-прежнему иметь несовместимые сегменты.

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

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

Пример:

Вход:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Выход:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

В приведенном выше примере lhs и rhs стороны сегментированы по оси «x» по своим несжимающимся размерам, что несовместимо. Этот проход вставляет явный сегмент по rhs перед операцией с точкой, чтобы операция с точкой имела совместимые сегменты.

-sdy-remove-sharding-groups

Удаляет ShardingGroupOps после распространения.

-sdy-reshard-to-collectives

Преобразует ReshardOp в различные коллективные операции Shardy.

Сопоставляет операции перешарда и перезаписывает их в различные коллективные операции Шарди. После этого прохода в модуле не остается никаких операций reshard. Этот проход предполагает, что явные разрешения уже были вставлены ( sdy-insert-explicit-reshards ).

Пример:

Вход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Выход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

В приведенном выше примере тензор %0 : tensor<16x2xf32> сегментируется как\[{"x", "y", "z"}, {}\] . Затем происходит reshard , в которой это перешардируется как\[{"x"}, {}\] . На первых осях, поскольку суффикс {"y", "z"} удаляется после перешарда, мы делаем вывод, что у нас есть все собранные {"y", "z"} . Второе измерение не изменилось.

-sdy-sharding-constraint-to-reshard

Преобразует ShardingConstraintOp в ReshardOp.

-sdy-sink-data-flow-edges

Помещает все DataFlowEdgeOp в свои входные данные.

Перемещает сегментацию каждого DataFlowEdgeOp на его вход (корневой целевой объект ребра) и заменяет операцию его входом.

Параметры

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-temp-explicit-reshards-for-optimizations

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

Этот проход является временным решением, пока мы не сможем включить проход sdy-insert-explicit-reshards по умолчанию.

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

-sdy-update-non-divisible-input-output-shardings

Делает входы/выходы FuncOp равномерно сегментированными, устраняя необходимость в заполнении из-за неделимых сегментов.

Пользователи Shardy ожидают, что входные/выходные данные функции будут равномерно делимыми/разделяемыми, чтобы избежать необходимости заполнения их тензоров. Распространение может привести к тому, что входные/выходные данные будут иметь неделимые сегменты, поэтому на этом этапе они обновляются до префикса сегментирования наибольшего размера исходного сегментирования, который сегментируется равномерно.

,

-sdy-close-shardings

Закрывает тензорные сегменты и удаляет реплицированные оси.

-sdy-constant-merger

Объедините идентичные константы с соответствующими фрагментами.

Выполняет облегченную CSE для констант с одинаковыми сегментами.

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

-sdy-drop-sharding-rules

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

-sdy-insert-explicit-reshards

Вставляет явные сегменты, чтобы все операции имели совместимые сегменты.

Совместимое сегментирование по сути означает, что операция может принимать сегментированные операнды и выдавать сегментированный результат, не требуя каких-либо дополнительных соединений (обратите внимание, что операция все равно может требовать связи, такой как all-reduce или halo-swaps).

После распространения некоторые операции могут по-прежнему иметь несовместимые сегменты.

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

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

Пример:

Вход:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Выход:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

В приведенном выше примере lhs и rhs стороны сегментированы по оси «x» по своим несжимающимся размерам, что несовместимо. Этот проход вставляет явный сегмент по rhs перед операцией с точкой, чтобы операция с точкой имела совместимые сегменты.

-sdy-remove-sharding-groups

Удаляет ShardingGroupOps после распространения.

-sdy-reshard-to-collectives

Преобразует ReshardOp в различные коллективные операции Shardy.

Сопоставляет операции перешарда и перезаписывает их в различные коллективные операции Шарди. После этого прохода в модуле не остается никаких операций reshard. Этот проход предполагает, что явные разрешения уже были вставлены ( sdy-insert-explicit-reshards ).

Пример:

Вход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Выход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

В приведенном выше примере тензор %0 : tensor<16x2xf32> сегментируется как\[{"x", "y", "z"}, {}\] . Затем происходит reshard , в которой это перешардируется как\[{"x"}, {}\] . На первых осях, поскольку суффикс {"y", "z"} удаляется после перешарда, мы делаем вывод, что у нас есть все собранные {"y", "z"} . Второе измерение не изменилось.

-sdy-sharding-constraint-to-reshard

Преобразует ShardingConstraintOp в ReshardOp.

-sdy-sink-data-flow-edges

Помещает все DataFlowEdgeOp в свои входные данные.

Перемещает сегментацию каждого DataFlowEdgeOp на его вход (корневой целевой объект ребра) и заменяет операцию его входом.

Параметры

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-temp-explicit-reshards-for-optimizations

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

Этот проход является временным решением, пока мы не сможем включить проход sdy-insert-explicit-reshards по умолчанию.

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

-sdy-update-non-divisible-input-output-shardings

Делает входы/выходы FuncOp равномерно сегментированными, устраняя необходимость в заполнении из-за неделимых фрагментов.

Пользователи Shardy ожидают, что входные/выходные данные функции будут равномерно делимыми/разделяемыми, чтобы избежать необходимости заполнения их тензоров. Распространение может привести к тому, что входные/выходные данные будут иметь неделимые сегменты, поэтому на этом этапе они обновляются до префикса сегментирования наибольшего размера исходного сегментирования, который сегментируется равномерно.

,

-sdy-close-shardings

Закрывает тензорные сегменты и удаляет реплицированные оси.

-sdy-constant-merger

Объедините идентичные константы с соответствующими фрагментами.

Выполняет облегченную CSE для констант с одинаковыми сегментами.

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

-sdy-drop-sharding-rules

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

-sdy-insert-explicit-reshards

Вставляет явные сегменты, чтобы все операции имели совместимые сегменты.

Совместимое сегментирование по сути означает, что операция может принимать сегментированные операнды и выдавать сегментированный результат, не требуя каких-либо дополнительных соединений (обратите внимание, что операция все равно может требовать связи, такой как all-reduce или halo-swaps).

После распространения некоторые операции могут по-прежнему иметь несовместимые сегменты.

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

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

Пример:

Вход:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Выход:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

В приведенном выше примере lhs и rhs стороны сегментированы по оси «x» по своим несжимающимся размерам, что несовместимо. Этот проход вставляет явный сегмент по rhs перед операцией с точкой, чтобы операция с точкой имела совместимые сегменты.

-sdy-remove-sharding-groups

Удаляет ShardingGroupOps после распространения.

-sdy-reshard-to-collectives

Преобразует ReshardOp в различные коллективные операции Shardy.

Сопоставляет операции перешарда и перезаписывает их в различные коллективные операции Шарди. После этого прохода в модуле не остается никаких операций reshard. Этот проход предполагает, что явные разрешения уже были вставлены ( sdy-insert-explicit-reshards ).

Пример:

Вход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Выход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

В приведенном выше примере тензор %0 : tensor<16x2xf32> сегментируется как\[{"x", "y", "z"}, {}\] . Затем происходит reshard , в которой это перешардируется как\[{"x"}, {}\] . На первых осях, поскольку суффикс {"y", "z"} удаляется после перешарда, мы делаем вывод, что у нас есть все собранные {"y", "z"} . Второе измерение не изменилось.

-sdy-sharding-constraint-to-reshard

Преобразует ShardingConstraintOp в ReshardOp.

-sdy-sink-data-flow-edges

Помещает все DataFlowEdgeOp в свои входные данные.

Перемещает сегментацию каждого DataFlowEdgeOp на его вход (корневой целевой объект ребра) и заменяет операцию его входом.

Параметры

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-temp-explicit-reshards-for-optimizations

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

Этот проход является временным решением, пока мы не сможем включить проход sdy-insert-explicit-reshards по умолчанию.

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

-sdy-update-non-divisible-input-output-shardings

Делает входы/выходы FuncOp равномерно сегментированными, устраняя необходимость в заполнении из-за неделимых сегментов.

Пользователи Shardy ожидают, что входные/выходные данные функции будут равномерно делимыми/разделяемыми, чтобы избежать необходимости заполнения их тензоров. Распространение может привести к тому, что входные/выходные данные будут иметь неделимые сегменты, поэтому на этом этапе они обновляются до префикса сегментирования наибольшего размера исходного сегментирования, который сегментируется равномерно.

,

-sdy-close-shardings

Закрывает тензорные сегменты и удаляет реплицированные оси.

-sdy-constant-merger

Объедините идентичные константы с соответствующими фрагментами.

Выполняет облегченную CSE для констант с одинаковыми сегментами.

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

-sdy-drop-sharding-rules

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

-sdy-insert-explicit-reshards

Вставляет явные сегменты, чтобы все операции имели совместимые сегменты.

Совместимое сегментирование по сути означает, что операция может принимать сегментированные операнды и выдавать сегментированный результат, не требуя каких-либо дополнительных соединений (обратите внимание, что операция все равно может требовать связи, такой как all-reduce или halo-swaps).

После распространения некоторые операции могут по-прежнему иметь несовместимые сегменты.

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

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

Пример:

Вход:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Выход:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

В приведенном выше примере lhs и rhs стороны сегментированы по оси «x» по своим несжимающимся размерам, что несовместимо. Этот проход вставляет явный сегмент по rhs перед операцией с точкой, чтобы операция с точкой имела совместимые сегменты.

-sdy-remove-sharding-groups

Удаляет ShardingGroupOps после распространения.

-sdy-reshard-to-collectives

Преобразует ReshardOp в различные коллективные операции Shardy.

Сопоставляет операции перешарда и перезаписывает их в различные коллективные операции Шарди. После этого прохода в модуле не остается никаких операций reshard. Этот проход предполагает, что явные разрешения уже были вставлены ( sdy-insert-explicit-reshards ).

Пример:

Вход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Выход:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

В приведенном выше примере тензор %0 : tensor<16x2xf32> сегментируется как\[{"x", "y", "z"}, {}\] . Затем происходит reshard , в которой это перешардируется как\[{"x"}, {}\] . На первых осях, поскольку суффикс {"y", "z"} удаляется после перешарда, мы делаем вывод, что у нас есть все собранные {"y", "z"} . Второе измерение не изменилось.

-sdy-sharding-constraint-to-reshard

Преобразует ShardingConstraintOp в ReshardOp.

-sdy-sink-data-flow-edges

Помещает все DataFlowEdgeOp в свои входные данные.

Перемещает сегментацию каждого DataFlowEdgeOp на его вход (корневой целевой объект ребра) и заменяет операцию его входом.

Параметры

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-temp-explicit-reshards-for-optimizations

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

Этот проход является временным решением, пока мы не сможем включить проход sdy-insert-explicit-reshards по умолчанию.

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

-sdy-update-non-divisible-input-output-shardings

Делает входы/выходы FuncOp равномерно сегментированными, устраняя необходимость в заполнении из-за неделимых фрагментов.

Пользователи Shardy ожидают, что входные/выходные данные функции будут равномерно делимыми/разделяемыми, чтобы избежать необходимости заполнения их тензоров. Распространение может привести к тому, что входные/выходные данные будут иметь неделимые сегменты, поэтому на этом этапе они обновляются до префикса сегментирования наибольшего размера исходного сегментирования, который сегментируется равномерно.