-sdy-close-shardings

Zamyka podziały tensorów i usuwa zduplikowane osie.

-sdy-constant-or-scalar-merger

Łączy identyczne stałe i rozszerzenia skalarne z pasującymi podziałami.

Wykonuje uproszczoną optymalizację CSE na stałych z identycznymi podziałami.

Potok importu dzieli i duplikuje stałe oraz rozszerzenia skalarne w taki sposób, że podział nie jest propagowany między różnymi zastosowaniami podrzędnego obliczenia stałej. Jeśli po propagacji stałe mają te same podziały, ta przepustka łączy je, aby skrócić czas kompilacji. Więcej informacji znajdziesz w artykule -sdy-constant-or-scalar-splitter.

-sdy-convert-global-to-local

Konwertuje program SDY z kształtów globalnych na kształty lokalne.

Konwertuje program SDY z kształtów globalnych na kształty lokalne, dzieląc wymiary logiczne na podstawie atrybutów podziału.

Ta przepustka wykorzystuje konwerter typów do mapowania RankedTensorType z globalnych kształtów logicznych na fizyczne kształty lokalne urządzenia.

-sdy-drop-sharding-rules

Usuwa OpShardingRuleAttr ze wszystkich zarejestrowanych operacji.

-sdy-insert-explicit-reshards

Wstawia jawne podziały, aby wszystkie operacje miały zgodne podziały.

Zgodny podział oznacza, że operacja może akceptować podzielone operandy i generować podzielony wynik bez konieczności komunikacji z podziałem (należy pamiętać, że operacja może nadal wymagać komunikacji, takiej jak all-reduce lub halo-swaps).

Po propagacji niektóre operacje mogą nadal mieć niezgodne podziały.

Gdy oś (lub podoś) jest używana do dzielenia nieodpowiadających sobie wymiarów (np. wymiarów niekurczących się w matmul) w wielu tensorach lub gdy oś dzieli wymiar w jednym tensorze, ale nie w odpowiadającym mu wymiarze w drugim tensorze, mówi się, że operacja ma konflikt podziału. Dlatego po tej przepustce operacje nie będą już powodować konfliktów.

Ta przepustka wstawia operacje podziału jawnie, tak aby w przypadku każdej operacji odpowiadające sobie wymiary były dzielone w ten sam sposób we wszystkich operandach i wynikach, a każda oś (lub podoś) mogła być używana tylko do dzielenia jednego typu wymiaru.

Przykład:

Urządzenie wejściowe:

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>

Dane wyjściowe:

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>

W powyższym przykładzie lhs i rhs są dzielone na osi „x” w wymiarach niekurczących się, co jest niezgodne. Przepustka wstawia jawny podział na rhs przed operacją dot, tak aby operacja dot miała zgodne podziały.

Opcje

-enable-full-version                  : Enable full version.
-avoid-reshards-on-named-computations : Avoid explicit reshards/collectives on named computations.

-sdy-remove-all-gather-reduce-scatter-for-cmv1

_Usuwa sdy.all_gather i sdy.reducescatter w przypadku CMV1.

Usuwa all-gather w wzorcu all-gather + dot. Usuwa reduce-scatter w wzorcu dot + reduce-scatter. Ta przepustka służy do zapewnienia zgodności z zbiorowym mnożeniem macierzy w wersji 1 (CMV1). Jest to tymczasowe rozwiązanie problemu b/432019089.

-sdy-remove-propagation-debug-info

Usuwa informacje debugowania propagacji (krawędzie propagacji i podziały źródłowe) podczas eksportu.

-sdy-remove-sharding-groups

Usuwa ShardingGroupOps po propagacji.

-sdy-remove-sub-axes-in-input-output-shardings

Usuwa podosie w podziałach wejścia/wyjścia.

Niektórzy użytkownicy Shardy oczekują, że dane wejściowe i wyjściowe funkcji będą miały podziały bez podosi. Ta przepustka usuwa podosie i ich osie końcowe z podziałów wejścia/wyjścia. Ta przepustka jest zwykle stosowana po sdy-update-non-divisible-input-output-shardings, aby zapewnić, że usunięcie podosi nie spowoduje wprowadzenia podziałów niepodzielnych.

-sdy-reshard-to-collectives

Konwertuje ReshardOp na różne operacje zbiorowe Shardy.

Dopasowuje operacje podziału i przepisuje je na różne operacje zbiorowe Shardy. Po tej przepustce w module nie pozostaną żadne operacje podziału.

Opcjonalnie, jeśli keepRedundantReshards ma wartość true, pozostaną tylko nadmiarowe operacje podziału. Domyślnie zakłada się, że jawne podziały zostały już wstawione (sdy-insert-explicit-reshards), i nie zachowuje nadmiarowych podziałów. Powinna zachować nadmiarowe podziały, jeśli jawne podziały nie zostały jeszcze wstawione.

Przykład:

Urządzenie wejściowe:

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

Dane wyjściowe:

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>

W powyższym przykładzie tensor %0 : tensor<16x2xf32> jest dzielony jako \[{"x", "y", "z"}, {}\]. Następnie występuje operacja reshard dzieląca go jako \[{"x"}, {}\]. W przypadku pierwszych osi, ponieważ sufiks {"y", "z"} jest usuwany po podziale, wnioskujemy, że mamy all-gather {"y", "z"}. Drugi wymiar nie jest zmieniany.

Opcje

-keep-redundant-reshards : Whether it keeps redundant reshards or removes.

-sdy-sharding-constraint-to-reshard

Konwertuje ShardingConstraintOp na ReshardOp.

-sdy-sink-data-flow-edges

Przenosi wszystkie DataFlowEdgeOp do ich danych wejściowych.

Przenosi podział każdej DataFlowEdgeOp do jej danych wejściowych (docelowego elementu głównego krawędzi) i zastępuje operację jej danymi wejściowymi.

Opcje

-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-update-non-divisible-input-output-shardings

Sprawia, że dane wejściowe i wyjściowe FuncOp są dzielone równomiernie, eliminując potrzebę dopełniania z powodu podziałów niepodzielnych.

Użytkownicy Shardy oczekują, że dane wejściowe i wyjściowe funkcji będą równomiernie podzielne, aby uniknąć konieczności dopełniania tensorów. Propagacja może spowodować, że dane wejściowe i wyjściowe będą miały podziały niepodzielne, dlatego ta przepustka aktualizuje je do największego prefiksu podziału wymiaru oryginalnego podziału, który jest dzielony równomiernie.