-sdy-close-shardings

Zamykanie podziału tensora i usuwanie powielonych osi.

-sdy-constant-merger

Scalanie identycznych stałych z pasującymi podziałami.

Wykonuje lekkie szyfrowanie szyfrowaniem symetrycznym na stałych wartościach z identycznymi podziałami.

Przepustowość importu dzieli i duplikuje stałe, tak aby podział nie był propagowany między różnymi zastosowaniami stałych podobliczeń. Jeśli po propagacji stałe mają te same podziały, ten etap scala je, aby skrócić czas kompilacji.

-sdy-drop-sharding-rules

Usuwanie OpShardingRuleAttr ze wszystkich zarejestrowanych operacji.

-sdy-insert-explicit-reshards

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

Zgodność z podzieleniem oznacza, że operacja może przyjmować podzielone operandy i wytwarzać podzielone wyniki bez konieczności komunikacji z podzielonymi elementami (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 podziały.

Pamiętaj, że gdy oś (lub pod-oś) jest używana do dzielenia nieodpowiadających sobie wymiarów (np. wymiarów nieobkurczalnych w matmul) na kilka tensorów lub gdy oś dzieli wymiar w jednym tensorze, ale nie w odpowiadającym wymiarze w drugim tensorze, mówimy, że operacja ma konflikt podziału. Dlatego po tym przejściu operacje nie będą już powodować konfliktów.

W tym przejściu operacje reshard są wstrzykiwane w wyraźny sposób, aby w przypadku każdej operacji odpowiednie wymiary były dzielone w taki 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 przykładzie powyżej elementy lhsrhs są dzielone na części na osi „x” według wymiarów nieobkurczalnych, co jest niezgodne. Przed operacją dot wstawia jawne reshard na rhs, aby operacja dot miała zgodne podziały.

-sdy-remove-sharding-groups

Usuwanie ShardingGroupOps po propagacji.

-sdy-reshard-to-collectives

Konwertuje ReshardOp na różne operacje zbiorcze Shardy.

Dopasowuje operacje reshard i przepisuje je na różne operacje zbiorcze Shardy. Po tej operacji w module nie pozostają żadne operacje reshardingu. Ten krok zakłada, że jawne zasoby zostały już wstawione (sdy-insert-explicit-reshards).

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 tym przykładzie tensor %0 : tensor<16x2xf32> jest dzielony na części \[{"x", "y", "z"}, {}\]. Następnie jest reshard op resharding it as \[{"x"}, {}\]. Na pierwszych osiach, ponieważ sufiks {"y", "z"} został usunięty po przekształceniu, możemy wnioskować, że mamy do czynienia z wszystkimi danymi {"y", "z"}. Drugi wymiar nie ulega zmianie.

-sdy-sharding-constraint-to-reshard

Konwertuje ShardingConstraintOp na ReshardOp.

-sdy-sink-data-flow-edges

Zbiera wszystkie DataFlowEdgeOp z wejścia.

Przenosi podział każdego elementu DataFlowEdgeOp do jego danych wejściowych (elementu docelowego na poziomie wierzchołka) i zastępuje operatora jego wartością wejściową.

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-temp-explicit-reshards-for-optimizations

Wstawia jawne rozdzielcze dla konkretnych optymalizacji.

Ten bilet jest rozwiązaniem tymczasowym, dopóki nie włączymy domyślnie biletu sdy-insert-explicit-reshards.

Umożliwia nam to wstawianie jawnych reshardów w przypadku konkretnych operacji na potrzeby optymalizacji.

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

Zapewnia równomierne podzielenie na fragmenty danych wejściowych i wyjściowych funkcji FuncOp, eliminując potrzebę wypełniania pustymi wartościami w przypadku niedzielnych fragmentów.

Użytkownicy Shardy oczekują, że wejścia/wyjścia funkcji będą mogły być dzielone na równe części lub dzielone na części, aby uniknąć konieczności wypełniania tensorów. Propagowanie może spowodować, że wejścia/wyjścia będą miały niedzielone podziały, dlatego ta operacja aktualizuje je do największego prefiksu podziału wymiaru w początkowym podziale, który jest równomiernie podzielony.