-sdy-add-data-flow-edges

Wstawia DataFlowEdgeOp dla każdego krawędzi przepływu danych.

Wstawia DataFlowEdgeOp dla każdej wartości, która jest właścicielem krawędzi przepływu danych, czyli wszystkich wartości zwracanych przez getDataFlowEdgeOwners w przypadku każdego op w module.

Wstawiona wartość DataFlowEdgeOp przyjmie istniejące podziały docelowego obiektu właściciela, jeśli takie istnieją.

TODO(b/330339693): zaktualizuj ten dokument, gdy getDataFlowEdgeOwners zostanie usunięty.

-sdy-apply-sharding-constraints

Stosuje ograniczenia, które określają podział danych wejściowych.

Kopiuje fragmentację ShardingConstraintOp do danych wejściowych, jeśli spełnia wszystkie te warunki:

  • Dane wejściowe nie mają fragmentacji.
  • Dane wejściowe nie są generowane przez DataFlowEdgeOp, który zawiera podział wszystkich celów krawędzi.
  • Dzielenie na fragmenty ShardingConstraintOp zostało zakończone.
  • Dane wejściowe nie zawierają żadnych innych użytkowników typu ShardingConstraintOp ani ManualComputationOp z innym podziałem.

Oznacza to, że ShardingConstraintOp określa podział danych wejściowych.

Pamiętaj, że podczas propagacji podział ShardingConstraintOp zostanie przekazany do danych wejściowych lub użytkowników niezależnie od tego etapu, ale ponieważ zamknięta właściwość wymiaru nie jest przekazywana, ważne jest, aby skopiować podział, aby w pełni zachować ograniczenie w wymienionych wyżej przypadkach.

Jeśli ponadto tensor jest używany przez łańcuch elementów ShardingConstraintOp, który spełnia wszystkie te warunki:

  • Tensor nie jest generowany przez obiekt ShardingConstraintOp i nie ma żadnych innych użytkowników typu ShardingConstraintOp ani ManualComputationOp.
  • Żadne z elementów ShardingConstraintOp w łańcuchu nie ma więcej niż 1 zastosowania poza ostatnim.
  • Ostatnie ShardingConstraintOp w łańcuchu nie zawiera żadnych użytkowników typu ShardingConstraintOp ani ManualComputationOp (w przeciwnym razie nie jest to ostatni w łańcuchu).

ta karta zastępuje wszystkie inne sposoby użycia danych wejściowych łańcucha, które zostały zdefiniowane po ostatnim elemencie ShardingConstraintOp w łańcuchu (i w tym samym bloku), wynikiem tego łańcucha, ponieważ to ono powinno decydować o fragmentacji tych zastosowań.

-sdy-constant-splitter

Dzieli stałe obliczenia podrzędne, aby każde z nich było stosowane raz.

Dzieli stałe obliczenia podrzędne tak, że obejmuje jednego użytkownika.

Dzięki temu podział nie jest propagowany między różnymi zastosowaniami stałych podobliczeń, ponieważ jest to uważane za fałszywą zależność (użycia stałej nie powinny być dzielone w taki sam sposób tylko dlatego, że używają tej samej stałej). W efekcie każda instancja może mieć inny podział, który może być rozpowszechniany niezależnie od swojej kopii stałego podprocesu.

Stałe obliczenia podrzędne:

  • stała lub iota op (bez operandów);
  • operacja rozsiewająca, wycinająca lub elementowa, której wszystkie operandy są zdefiniowane przez stałe podobliczenia (rekursywnie) wraz z całymi podobliczeniami, które definiują te operandy.

Pamiętaj, że w ramach stałego podobliczenia wartość może być używana wielokrotnie w ramach tego podobliczenia.

-sdy-lift-inlined-meshes

Wzrosty wbudowane MeshAttr we fragmentach jako symbol MeshOp.

Zastępuje wszystkie wbudowane obiekty MeshAttr w elemencie TensorShardingAttr nazwą symbolu siatki odwołującą się do istniejącego lub nowego elementu MeshOp w module. Dzięki temu żadne dwa elementy MeshOp nie mają identycznego parametru MeshAttr (te zmienne również są pomijane).MeshOp

Nazwa każdej nowej MeshOp będzie:

  • maximal_mesh_{device-id}, aby uzyskać maksymalną siatkę (czyli pustą listę osi i jedyny identyfikator urządzenia).
  • Pierwsza dostępna nazwa w językach [mesh, mesh_0, mesh_1, ...]. W przeciwnym razie. ### -sdy-manual-axes-cleanup

Poprawiono użycie osi ręcznych w ManualComputationOp

1) W przypadku fragmentu na potrzeby fragmentu wewnętrznego, który nie ma określonej osi ręcznej, dodaj tę oś ręczną do jej osi zreplikowanych. Dzięki temu osie ręczne są zawsze w pełni określone.

2) Sortuje osie ręczne według kolejności deklaracji osi siatki.

-sdy-sharding-group-import

Kanonizacja i sprawdzanie grup dzielenia.

Stosuje konwertowanie kanoniczne i weryfikację do grup fragmentacji podczas importowania. Są to:

1) Połączenie grup fragmentacji – łączy grupy fragmentacji za pomocą właściwości przechodniej członkostwa w grupie. Za każdym razem, gdy tensor T znajduje się w grupie podziału G1 i grupie podziału G2, możemy wnioskować, że wszystkie elementy w grupach G1 i G2 powinny być podzielone w taki sam sposób. Możemy więc połączyć grupy G1 i G2 w jedną grupę. Zestaw identyfikatorów kanonicznej grupy po połączeniu będzie miał postać 0,1,...N-1 dla minimalnego zbioru grup.

2) Weryfikacja grup fragmentacji Sprawdza, czy grupy fragmentacji są poprawnie utworzone i czy są zgodne z założeniami w implementacji. Obecnie oznacza to, że jeśli grupa dzielenia na części zawiera Value zdefiniowany w bloku ManualComputationOp, wszystkie inne wartości w tej grupie muszą znajdować się w tym samym bloku.