-sdy-close-shardings
Zamyka podziały tensorów i usuwa powielone osie.
-sdy-constant-or-scalar-merger
Łączy identyczne stałe i rozszerzenia skalarne z pasującymi podziałami.
Wykonuje uproszczoną eliminację wspólnych podwyrażeń na stałych z identycznymi podziałami.
Potok importu dzieli i powiela stałe oraz rozszerzenia skalarne tak, aby podział nie był 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 zaoszczędzić 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 lokalne.
Konwertuje program SDY z kształtów globalnych na 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.
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ę podziału.
-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ą te same podziały co operandy/wyniki oryginalnych NamedComputationOp.
Jeśli w module znajduje się funkcja o tej samej nazwie co NamedComputationOp, tabela symboli MLIR zmieni ją na {name}_#.
-sdy-insert-explicit-reshards
Wstawia jawne podziały, aby wszystkie operacje miały zgodne podziały.
Zgodna fragmentacja oznacza, że operacja może akceptować fragmentowane operandy i generować fragmentowany wynik bez konieczności komunikacji z ponowną fragmentacją (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.
-sdy-insert-func-call-reshards
Wstawia podziały w przypadku konfliktów podziału funkcji i wywołania.
Wstawia podziały w przypadku konfliktów podziału funkcji i wywołania w wynikach.
-sdy-optimize-collectives
Optymalizuje operacje komunikacji zbiorowej.
Eliminuje zbędne operacje zbiorowe-permutacje poprzedzające łańcuchy all-to-all, rozkładając wymiary podziału i łącząc je w połączoną operację all-to-all.
-sdy-pad-for-divisibility
Wypełnia tensory z niedzielnymi podziałami 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 opakowuje je w sdy.manualcomputation.
Na potrzeby debugowania i bisekcji 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 opakowuje 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'.
-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).
-sdy-propagate-to-func-results
Propaguje podziały z terminatora funkcji do wyników funkcji.
Kopiuje podziały wartości terminatora funkcji do odpowiednich wyników func.func, zachowując istniejące podziały w funkcji głównej.
-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 ze zbiorową operacją matmul V1 (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/wyjściowe funkcji będą miały podziały bez podosi. Ta przepustka usuwa podosie i ich osie końcowe z podziałów wymiarów otwartych wejścia/wyjścia. Ta przepustka jest zwykle stosowana po sdy-update-non-divisible-input-output-shardings, aby mieć pewność, że usunięcie podosi nie spowoduje wprowadzenia podziałów niedzielnych.
-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 zbędne operacje podziału. Domyślnie zakłada się, że jawne podziały zostały już wstawione (sdy-insert-explicit-reshards), i nie zachowuje zbędnych podziałów. Powinna zachować zbędne 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, która dzieli 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-resolve-permutation-factors
Rozwiązuje podział w wymiarach mapowanych na czynniki kPermutation.
Dzielenie 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).
-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ą kierowane do ich danych wejściowych.
Przenosi podział każdej DataFlowEdgeOp do jej danych wejściowych (głównego celu 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-sink-func-data-flow-edges
Wszystkie FuncDataFlowEdgeOp są kierowane do ich danych wejściowych.
Przenosi podział każdej FuncDataFlowEdgeOp do jej danych wejściowych i zastępuje operację jej danymi wejściowymi.
-sdy-unflatten-call-graph
Rozpłaszcza graf wywołań.
Rozpłaszcza graf. Usuwa duplikaty funkcji z tymi samymi podziałami wejścia/wyjścia i tym samym źródłem, jak opisano w atrybucie '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ą dzielone równomiernie, eliminując potrzebę wypełniania z powodu podziałów niedzielnych.
Użytkownicy Shardy oczekują, że dane wejściowe/wyjściowe funkcji będą równomiernie podzielne/dzielone, aby uniknąć konieczności wypełniania tensorów. Propagacja może spowodować, że dane wejściowe/wyjściowe będą miały podziały niedzielne, dlatego ta przepustka aktualizuje je do największego prefiksu podziału wymiaru oryginalnego podziału, który jest dzielony równomiernie.
-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).