-sdy-close-shardings
Zamyka fragmentowanie tensorów i usuwa powielone osie.
-sdy-constant-or-scalar-merger
Łączy identyczne stałe i rozszerzenia skalarne z pasującym fragmentowaniem.
Wykonuje uproszczoną optymalizację CSE na stałych z identycznym fragmentowaniem.
Potok importu dzieli i duplikuje stałe oraz rozszerzenia skalarne w taki sposób, że fragmentowanie nie jest propagowane między różnymi zastosowaniami podrzędnego obliczenia stałej. Jeśli po propagacji stałe mają takie samo fragmentowanie, 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 fragmentowania.
Ta przepustka wykorzystuje konwerter typów do mapowania RankedTensorType z globalnych kształtów logicznych na fizyczne kształty lokalne urządzenia.
Opcje
-per-dim-all-gather : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3 : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-drop-sharding-and-mesh
Usuwa z programu operację mesh i notację fragmentowania.
Opcje
-keep-module-sharding-metadata : Whether to keep module-level sharding metadata (sdy.parameters_shardings and sdy.output_shardings).
-sdy-drop-sharding-rules
Usuwa OpShardingRuleAttr ze wszystkich zarejestrowanych operacji.
-sdy-export-named-computations
Wywołania z NamedComputationOp.
Tworzy przepustkę, która konwertuje NamedComputationOp na CallOp z nową funkcją prywatną o nazwie name NamedComputationOp. Nowe FuncOp i CallOp mają takie samo fragmentowanie jak operandy/wyniki oryginalnych NamedComputationOp.
Jeśli w module znajduje się funkcja o takiej samej nazwie jak NamedComputationOp, tabela symboli MLIR zmieni ją na {name}_#.
-sdy-insert-explicit-reshards
Wstawia jawne zmiany fragmentowania, aby wszystkie operacje miały zgodne fragmentowanie.
Zgodne fragmentowanie oznacza, że operacja może akceptować operandy z fragmentami i generować wynik z fragmentami bez konieczności komunikacji z ponownym fragmentowaniem (pamiętaj, że operacja może nadal wymagać komunikacji, takiej jak all-reduce lub halo-swaps).
Po propagacji niektóre operacje mogą nadal mieć niezgodne fragmentowanie.
Gdy oś (lub podoś) jest używana do fragmentowania nieodpowiadających sobie wymiarów (np. wymiarów niekurczących się w matmul) w wielu tensorach lub gdy oś fragmentuje wymiar w jednym tensorze, ale nie odpowiadający mu wymiar w drugim tensorze, mówi się, że operacja ma konflikt fragmentowania. Dlatego po tej przepustce operacje nie będą już powodować konfliktów.
Ta przepustka wstawia operacje ponownego fragmentowania w sposób jawny, tak aby w przypadku każdej operacji odpowiadające sobie wymiary były fragmentowane w ten sam sposób we wszystkich operandach i wynikach, a każda oś (lub podoś) mogła być używana tylko do fragmentowania 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 przykładzie powyżej lhs i rhs są fragmentowane na osi „x” w wymiarach niekurczących się, co jest niezgodne. Przepustka wstawia jawne ponowne fragmentowanie w rhs przed operacją dot, tak aby operacja dot miała zgodne fragmentowanie.
Opcje
-enable-full-version : Enable full version.
-mark-partial-result-with-unreduced-axes : Whether to mark partial reduction results with unreduced axes.
-sdy-insert-func-call-reshards
Wstawia ponowne fragmentowanie w przypadku konfliktów fragmentowania funkcji i wywołań.
Wstawia ponowne fragmentowanie w przypadku konfliktów fragmentowania funkcji i wywołań w wynikach.
-sdy-optimize-collectives
Optymalizuje operacje komunikacji zbiorowej.
Eliminuje zbędne operacje zbiorowe-permutacje poprzedzające łańcuchy all-to-all przez rozkładanie wymiarów dzielonych i łączenie ich w połączone all-to-all.
-sdy-pad-for-divisibility
Wypełnia tensory z niepodzielnym fragmentowaniem do kształtów podzielnych.
-sdy-per-instruction-partitioning
Selektywnie wyodrębnia instrukcje docelowe, uruchamia na nich potok partycjonowania, aby wygenerować kod lokalny urządzenia, i otacza je sdy.manualcomputation.
Na potrzeby debugowania i dzielenia na pół selektywnie dzieli poszczególne instrukcje za pomocą samodzielnego potoku partycjonowania Shardy (resolve-permutation-factors, reshard-to-collectives, pad-for-divisibility, convert-global-to-local) i otacza wynikowy kod lokalny urządzenia w sdy.manual_computation. Dzięki temu reszta programu globalnego pozostaje nienaruszona, więc partycje XLA SPMD dzielą tylko nieopakowane instrukcje globalne.
Opcje
-filter : Filter string for selective partitioning. Can be empty (all sharded ops), comma-separated op name substrings (e.g. 'dot, pad'), or key-values like 'selectLow=0, selectHigh=10, func=subroutine'.
-enable-halo-exchange : Implement halo exchange logic for windowed operations inside the sub-pipeline.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-rng-bit-generator-unsafe : Whether to allow unsafe partitioning of stablehlo.rng_bit_generator.
-sdy-propagate-to-func-results
Propaguje fragmentowanie z terminatora funkcji do wyników funkcji.
Kopiuje fragmentowanie wartości terminatora funkcji do odpowiednich wyników func.func, zachowując istniejące fragmentowanie w funkcji głównej.
-sdy-remove-all-gather-reduce-scatter-for-cmv1
_Usuwa sdy.all_gather i sdy.reducescatter dla CMV1.
Usuwa all-gather we wzorcu all-gather + dot. Usuwa reduce-scatter we wzorcu dot + reduce-scatter. Ta przepustka służy do zapewnienia zgodności ze zbiorowym matmul V1 (CMV1). Jest to tymczasowe rozwiązanie problemu b/432019089.
-sdy-remove-propagation-debug-info
Usuwa dane debugowania propagacji (krawędzie propagacji i fragmentowanie źródłowe) podczas eksportu.
-sdy-remove-sharding-groups
Usuwa ShardingGroupOps po propagacji.
-sdy-remove-sub-axes-in-input-output-shardings
Usuwa podosie w fragmentowaniu wejścia/wyjścia.
Niektórzy użytkownicy Shardy oczekują, że dane wejściowe/wyjściowe funkcji będą miały fragmentowanie bez podosi. Ta przepustka usuwa podosie i ich osie końcowe z fragmentowania wymiarów otwartych wejścia/wyjścia. Ta przepustka jest zwykle wykonywana po sdy-update-non-divisible-input-output-shardings, aby mieć pewność, że usunięcie podosi nie spowoduje wprowadzenia niepodzielnego fragmentowania.
-sdy-reshard-to-collectives
Konwertuje ReshardOp na różne operacje zbiorowe Shardy.
Dopasowuje operacje ponownego fragmentowania i przepisuje je na różne operacje zbiorowe Shardy. Po tej przepustce w module nie pozostaną żadne operacje ponownego fragmentowania.
Opcjonalnie, jeśli keepRedundantReshards ma wartość true, pozostaną tylko zbędne operacje ponownego fragmentowania. Domyślnie zakłada się, że jawne ponowne fragmentowanie zostało już wstawione (sdy-insert-explicit-reshards), i nie zachowuje zbędnego ponownego fragmentowania. Powinna zachować zbędne ponowne fragmentowanie, jeśli jawne ponowne fragmentowanie nie zostało jeszcze wstawione.
Przykład:
Urządzenie wejściowe:
mesh = <"x"=2, &q>uot;y"=<2, ">;z"=2
%0 <: tensor16x2xf32 {sdy.sharding>@mesh, \[{"x",< "y", &quo>t;z"<}, {}\]<>/span>
%1 = sdy.reshard %arg0 @mesh, \[{"x"}, {}\] : tensor16x2xf32
Dane wyjściowe:
mesh = <"x"=2, &q>uot;y"=<2, ">;z"=2
%0 <: tensor16x2xf32 {sdy.sharding>@mesh, \[{"x", "y", "z"}, {}\]<
%1 = sdy.all_gather> \[{&quo<t;y">;, "z"}, {}\] %arg0 out_sharding=@mesh, \[{"x"}, {}\] : tensor16x2xf32
W przykładzie powyżej tensor %0 : tensor<16x2xf32> jest fragmentowany jako
\[{"x", "y", "z"}, {}\]. Następnie występuje operacja reshard zmieniająca jego fragmentowanie na
\[{"x"}, {}\]. W przypadku pierwszych osi, ponieważ po ponownym fragmentowaniu usuwany jest sufiks {"y", "z"}
, wnioskujemy, że mamy all-gather {"y", "z"}. Drugi wymiar nie jest zmieniany.
Opcje
-keep-redundant-reshards : Whether it keeps redundant reshards or removes.
-sdy-resolve-permutation-factors
Rozwiązuje fragmentowanie w wymiarach mapowanych na czynniki kPermutation.
Fragmentowanie wymiarów za pomocą czynników kPermutation może wymagać komunikacji między urządzeniami (np. wymiany halo w przypadku okien lub zbiorowych permutacji w przypadku odwróceń).
Jeśli enableHaloExchange ma wartość true, przepustka użyje dostępnej zoptymalizowanej logiki komunikacji do rozwiązania czynników permutacji. W przeciwnym razie przepustka po prostu wstawi operacje sdy.reshard, aby powielić te wymiary. Domyślna wartość enableHaloExchange to true.
Opcje
-enable-halo-exchange : Implement halo exchange logic for windowed operations.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-rng-bit-generator-unsafe : Whether to allow unsafe partitioning of stablehlo.rng_bit_generator.
-sdy-resolve-single-device-sharding
Obniża operacje na jednym urządzeniu do stablehlo.if chronionego przez identyfikator urządzenia docelowego.
Opcje
-replica-count : Number of replicas per partition.
-partition-count : Number of partitions per replica.
-sdy-sharding-constraint-to-reshard
Konwertuje ShardingConstraintOp na ReshardOp.
-sdy-sink-data-flow-edges
Wszystkie DataFlowEdgeOp są przenoszone do ich wejścia.
Przenosi fragmentowanie każdej DataFlowEdgeOp do jej wejścia (docelowego elementu głównego krawędzi) i zastępuje operację jej wejściem.
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-sink-func-data-flow-edges
Wszystkie FuncDataFlowEdgeOp są przenoszone do ich wejścia.
Przenosi fragmentowanie każdej FuncDataFlowEdgeOp do jej wejścia i zastępuje operację jej wejściem.
-sdy-unflatten-call-graph
Spłaszcza graf wywołań.
Spłaszcza graf. Usuwa duplikaty funkcji z takim samym fragmentowaniem wejścia/wyjścia i takim samym źródłem, jak opisano w „original_func_name” dołączonym do funkcji.
Opcje
-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.
-sdy-update-non-divisible-input-output-shardings
Sprawia, że dane wejściowe/wyjściowe FuncOp są równomiernie fragmentowane, eliminując potrzebę dopełniania z powodu niepodzielnego fragmentowania.
Użytkownicy Shardy oczekują, że dane wejściowe/wyjściowe funkcji będą równomiernie podzielne/fragmentowane, aby uniknąć konieczności dopełniania tensorów. Propagacja może spowodować, że dane wejściowe/wyjściowe będą miały niepodzielne fragmentowanie, dlatego ta przepustka aktualizuje je do najdłuższego prefiksu fragmentowania wymiarów oryginalnego fragmentowania, które jest równomiernie fragmentowane.
-sdy-verify-unreduced-axes
Sprawdza spójność użycia osi nieograniczonych.
Sprawdza, czy w przypadku każdej operacji, jeśli jej operandy mają osie nieograniczone, operacja albo jawnie je ogranicza (np. za pomocą sdy.reshard), albo przekazuje je do swoich wyników (albo jest operacją ograniczającą, taką jak func.call).