-mpmd-copy-topology-from-main
Kopiuje topologię z funkcji głównej do funkcji, do których odwołuje się mpmd.call.
Kopiuje atrybut topologii z funkcji głównej do dowolnej funkcji, do której odwołuje się mpmd.call. Ustawia też wartość mpmd.call callee na private visibility, aby uniknąć pomylenia z funkcją punktu wejścia.
-mpmd-enforce-input-output-equisharding
Wymusza ograniczenia dotyczące równomiernego podziału na partycje w przypadku funkcji MPMD.
Wymusza ograniczenia równomiernego podziału danych wejściowych i wyjściowych w przypadku funkcji MPMD, wprowadzając w razie potrzeby operacje przesyłania.
Opcje
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-generate-sdy-meshes-from-topology
Generuje siatki fragmentowane na podstawie topologii MPMD.
Ten etap usuwa wszystkie istniejące operacje siatki rozproszonej i zastępuje je operacjami opartymi na topologii MPMD. Aktualizuje też fragmentację tensorów, aby odwoływały się do nowych operacji na siatce typu mesh.
-mpmd-infer-mesh-assign-mesh-func-leaves
_Przypisuje siatkę do każdego nieużywanego obliczenia, wyniku funkcji i danych wejściowych funkcji za pomocą analizy use_set i srcset.
Ten etap przypisuje siatki do liści treści funkcji (czyli wyników nieużywanych obliczeń, nieużywanych argumentów funkcji i wyników funkcji) przez utworzenie operacji przypisania lub zmianę typu przy użyciu informacji use_set i src_set.
Na potrzeby analizy traktujemy też niektóre wartości pośrednie jako węzły końcowe. Oznacza to, że operandy mpmd.reduce i mpmd.broadcast są traktowane jako węzły końcowe, a na ich podstawie tworzona jest para przypisanie-odpisanie.
To przypisanie wyczyści use_set wszystkich operacji innych niż liście, ponieważ wcześniej zanotowane użycia będą nieaktualne, a wnioskowanie operacji redukcji zmieni use_set niektórych wartości: początkowe propagowanie use_set nie uwzględnia operacji redukcji, ale teraz, gdy wywnioskowaliśmy operacje redukcji, propagowanie będzie inne.
Jeśli zbiory use- i src-sets nie są prawidłowo wypełnione w przypadku operacji liściowych, ta przepustka zakończy się niepowodzeniem i wygeneruje błędy.
Warunek wstępny: każdy operator ma niepusty zestaw źródeł lub wnioskujemy o przeniesieniach.
Opcje
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-assign-using-input-output-constraints
Przypisuje siatkę do danych wejściowych i wyjściowych zgodnie z ograniczeniami przypisywania danych wejściowych i wyjściowych.
Ten przebieg wykorzystuje ograniczenia równomiernego przypisywania danych wejściowych i wyjściowych, aby przypisać zarówno dane wejściowe, jak i wyjściowe do tej samej siatki.
Pamiętaj, że gwarantuje to, że dane wejściowe znajdują się w tej samej siatce, niezależnie od tego, czy zostaną później przeniesione do innych siatek. Oznacza to jednak, że po tym przejściu nie powinniśmy uruchamiać populate-src-set.
Wymagania:
- dla dowolnego wejścia
ifunkcji punktu wejścia, które może być częścią ograniczenia równomiernego przypisania:ima typ MeshTensorType LUB dobrze zdefiniowany zbiór użycia. - w przypadku dowolnego wyniku
ofunkcji punktu wejścia, który może być częścią ograniczenia równoważnego przypisania:oma typ MeshTensorType LUB dobrze zdefiniowane zbiory źródeł i użycia.
Dobrze zdefiniowany zbiór użycia wartości obejmuje wszystkie siatki, do których wartość jest (przechodnio) przypisana za pomocą operacji mpmd.assign i żadnej innej siatki. Dobrze zdefiniowany zestaw src-set zawiera wszystkie siatki, w których tensor może się znajdować, i żadne inne siatki.
Chociaż działa to tylko w przypadku funkcji punktu wejścia, traktujemy to jako operację modułu, ponieważ wymaga to ukończenia wszystkich przekazań w istniejących funkcjach przed uruchomieniem. Jeśli np. ustawimy tę wartość na EntryPointFunctionPass, menedżer przekazywania może uruchomić przekazywanie przed zakończeniem weryfikacji w funkcjach innych niż punkt wejścia.
Opcje
-verbose-logging : Whether to enable verbose logging
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-infer-mesh-convert-reduce-ops
Funkcja Converts annotated reduce ops przekształca operacje reduce w operacje mpmd.reduce i spłaszcza łańcuchy operacji reduce.
Przekształca adnotowane operacje redukcji w operacje mpmd.reduce, a także spłaszcza łańcuchy tych operacji.
W symbolach:
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
Opcje
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
Stosuje ostateczne czyszczenie po wywnioskowaniu wzorców siatki.
Opcje
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_Inicjuje src_set dla UnassignOps i argumentów funkcji oraz propaguje srcset.
Ten etap inicjuje i propaguje src_set, wypełniając graf informacjami o src_set.
Warunek wstępny: aby argumenty funkcji miały src_sets, pole use_set musi być wypełnione.
Inicjowanie: src_set w operacji UnassignOp jest ustawiony na siatkę, do której przypisuje. src_set argumentu funkcji jest ustawiony na use_set.
Propagacja: src_sets są propagowane do przodu od operandów do samej operacji, przyjmując przecięcie operandów. Aby dowiedzieć się więcej, zobacz PropagateSrcSet.
-mpmd-infer-mesh-populate-use-set
_Inicjuje use_set dla AssignOps i propaguje useset.
Ten przebieg inicjuje use_set i propaguje go wstecz, wypełniając graf informacjami use_set.
Inicjowanie: use_set operacji AssignOp jest ustawiony na siatkę, do której przypisuje.
Propagacja: use_sets propagują się wstecz od użytkowników do operacji, przyjmując sumę użytkowników. Zgodnie z definicją zbiór use_set operatora jest sumą zbiorów use_set jego użytkowników, ponieważ zbiór use_set to zbiór zastosowań przechodnich.
-mpmd-infer-mesh-rewrite-using-analysis
_Przekształca operacje zgodnie z używanym zbiorem.
Ten etap przypisuje operacje bez siatki, umieszczając je we fragmentach za pomocą analiz use_set i src_set.
W ramach zwalniania miejsca usuwa też atrybuty use_set i src_set, ponieważ po tym etapie analizy nie są już potrzebne.
Warunek wstępny: każdy operator ma atrybut use_set, czyli analiza została ukończona. Warunek wstępny: każdy argument funkcji, która nie jest punktem wejścia, jest używany co najmniej przez 1 operację niekończącą.
TODO: jupvfranco – zastanów się nad zmianą nazwy tego etapu, ponieważ nie zależy on już tak bardzo od analizy.
Opcje
-max-clones : How many copies of a meshless operation we allow. Setting it to 1 means we never clone the op.
-mpmd-infer-mesh-validate-no-additional-transfers-needed
Sprawdza, czy do przypisania siatki nie są potrzebne żadne dodatkowe przelewy.
Ten etap weryfikuje, czy przypisanie siatki jest możliwe w przypadku wszystkich operacji bez siatki bez wprowadzania dodatkowych transferów.
W przypadku operacji bez siatki, które nie są operacjami funkcyjnymi, błąd występuje, gdy:
- use_set nie znajduje się w src_set dla danej operacji, tzn. wymagane jest przeniesienie.
W przypadku operacji funkcyjnych wystarczy sprawdzić powyższe warunki dla argumentów funkcji, ponieważ funkcja zwraca operacje bez siatki lub argumenty blokowe.
Opcje
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-validate-src-set-not-empty
_Sprawdza, czy każdy operator bez siatki ma niepusty zestaw src.
Ten test weryfikuje wszystkie operacje bez siatki, sprawdzając, czy można je gdzieś przypisać. W przypadku operacji bez siatki, które nie są operacjami funkcyjnymi, występuje błąd, gdy w operacji src_set jest pusta lub gdy została ona wywnioskowana jako redukcja między siatkami, ale nie została przekonwertowana. Jest to warunek wstępny przypisania urlopu funkcyjnego.
W przypadku operacji funkcyjnych wystarczy sprawdzić powyższe warunki dla argumentów funkcji, ponieważ funkcja zwraca operacje bez siatki lub argumenty blokowe.
Musi to być przekazanie na poziomie modułu, ponieważ w przypadku błędu w wywoływanym module chcemy wydrukować wywołujące.
Warunek wstępny: przed uruchomieniem tego etapu redukcje w różnych siatkach powinny zostać przekształcone w operacje redukcji.
Opcje
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_Wstawia w tekście dowolną operację mpmd widoczną dla użytkownika, która jest zagnieżdżona w nazwanym obliczeniu.
Wstawia w kodzie wszystkie obliczenia nazwane, tensory nazwane, operacje rozgłaszania i redukcji, które są zagnieżdżone w obliczeniach nazwanych, sprawdzając, czy przypisanie siatki (jeśli jest zdefiniowane) jest zgodne z przypisaniem elementu nadrzędnego.
Opcje
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-insert-nameless-clone-of-negligible-ops
Klonowanie pomijalnych operacji poza nazwanymi obliczeniami.
Klonuje nieistotne operacje, np. operacje z jednym wynikiem i zerową liczbą operandów, poza nazwanymi obliczeniami, gdy są one używane przez operację zwracającą obliczenia, zastępując wynik nazwanego obliczenia jego klonem. Jest to konieczne, ponieważ jeśli takie wyniki są używane przez nazwane obliczenia przypisane do różnych siatek, może to spowodować konflikt wnioskowania o siatce. Stosując ten przepust, zezwalamy na klonowanie tych nieistotnych operacji przez wnioskowanie w sieci.
Ten etap NIE zmienia w żaden sposób nazwanego obliczenia.
-mpmd-introduce-transfers
Tworzy transfery danych na podstawie przypisań do siatki użytkowników.
Tworzy etap, który wprowadza operacje przenoszenia na podstawie przypisań siatki użytkownika. Obejmuje to m.in.:
- Wstaw instrukcję UnassignOp do wywołań mpmd, jeśli wynik UnassignOp jest później przypisywany w wywoływanym kodzie.
- Zastępuje AssignOp w UnassignOp elementem TransferOp.
- Przypisz dodatek do siatki odbiorczej i wprowadź transfer, jeśli między fragmentami znajduje się dodatek bez siatki.
-mpmd-map-input-output-to-mesh
Przypisuje siatki do danych wejściowych i wyjściowych funkcji.
Tworzy przekazywanie, które mapuje dane wejściowe i wyjściowe funkcji na siatki na podstawie zdefiniowanego przez użytkownika przypisania siatki.
W przypadku argumentów wejściowych ten test:
- Przekształca tensory wejściowe, które mają być umieszczone na siatce, w tensor siatki.
- Aktualizuje sygnaturę funkcji.
- Dodaje mpmd.unassign przed użyciem tensora.
W przypadku argumentów wyjściowych ta przepustka dodaje mpmd.assign przed zwróceniem tensora i aktualizuje sygnaturę funkcji.
Wymagania: każdy indeks wejścia/wyjścia jest prawidłowy, a każda zmapowana siatka jest prawidłową siatką w topologii.
Opcje
-input-assignment : Mapping between function input indices and assigned mesh names.E.g., '0@m0,1@m1' defines that input with index 0 will be assigned to mesh m0 and input with index 1 will be assigned to mesh m1.
-output-assignment : Mapping between function output indices and assigned mesh names.E.g., '0@m0,1@m1' defines that output with index 0 will be assigned to mesh m0 and output with index 1 will be assigned to mesh m1.
-mpmd-map-named-ops-to-mpmd-ops
Przypisuje siatki do operacji zdefiniowanych przez użytkownika.
Tworzy przekazywanie, opcjonalnie przypisując mpmd.named_tensor do
Assign(Unassign(%v)) (zależy od tego, czy w assignment jest wpis), i mapuje każdą nazwaną operację obliczeniową na siatkę, używając zdefiniowanego przez użytkownika mapowania między nazwanymi operacjami obliczeniowymi a nazwami siatek. Oznacza to zastąpienie każdego elementu named_computation elementem Fragment i utworzenie operacji AssignOps dla operandów oraz operacji UnassignOps dla wyników tych elementów Fragment. Wprowadzony wzorzec Assign(Unassign(%v)) jest przekształcany w Transfer(%v).
Po tym etapie nie będzie już żadnych operacji named_computation ani named_tensor.
Wymaga: wszystkie named_computations i named_tensors muszą znajdować się na najwyższym poziomie funkcji.
Opcje
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-simplify-named-computations
Upraszcza dane wejściowe i wyjściowe nazwanych operacji obliczeniowych.
Upraszcza każde nazwane obliczenie niezależnie. W szczególności:
- usuwa zduplikowane wyniki i odpowiadające im wartości zwracane;
- usuwa duplikaty operandów i odpowiadających im argumentów bloku;
- usuwa wyniki, których odpowiedni operand zwracany jest argumentem bloku operacji;
- usuwa operandy, których odpowiedni argument bloku nie jest już używany (lub nie był używany od początku);
- usuwa nieużywane wyniki.
- zastępuje wzorzec
arg -> stablehlo.optimization_barrier -> returnw nazwanym obliczeniu wzorcemarg -> return, co umożliwia dalsze uproszczenie.
-mpmd-validate-named-ops-in-mpmd-func
Sprawdza, czy nazwane operacje są zagnieżdżone tylko w funkcjach mpmd.
Sprawdza, czy operacje NamedComputationOp i NamedTensorOp są zagnieżdżone tylko w funkcjach mpmd, czyli funkcjach z atrybutem topologii.