Operacje
mpmd.assign (mpmd::AssignOp)
Przypisz operację
Składnia:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
Przypisuje tensor lokalny do siatki jako w pełni zreplikowany w tej siatce.
Jest to tymczasowe działanie, które jest wprowadzane podczas obniżania liczby operacji Jax, aby przejść z typów lokalnych na typy siatkowe. Te operacje zostaną wyeliminowane podczas importowania, gdy dane wejściowe i wyniki operacji funkcji staną się tensorami siatki.
Nazwa siatki typu wyniku powinna odpowiadać siatce w topologii, a jej typ globalny powinien być identyczny z typem operandu.
Pochodzenie operacji przypisania to pochodzenie siatki, np. named_computation, mesh inference itp.
Cechy: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>
Interfejsy: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Skutki: MemoryEffects::Effect{}
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
origin | ::mlir::StringAttr | atrybut tekstowy, |
Operandy:
| Operand | Opis |
|---|---|
tensor |
tensor wartości dowolnego typu innego niż token |
Wyniki:
| Wynik | Opis |
|---|---|
result |
typ tensora siatki, |
mpmd.broadcast (mpmd::BroadcastOp)
Operacja transmisji
Składnia:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
Umożliwia przeniesienie (lub replikację) tensora w dowolnej siatce, w której jest używany. Za każdym razem, gdy operand jest przenoszony, źródłem przeniesienia jest jego bieżąca lokalizacja.
Cechy: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Interfejsy: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Skutki: MemoryEffects::Effect{}
Operandy:
| Operand | Opis |
|---|---|
tensor |
tensor wartości dowolnego typu innego niż token |
Wyniki:
| Wynik | Opis |
|---|---|
result |
tensor wartości dowolnego typu innego niż token |
mpmd.call (mpmd::CallOp)
Funkcja połączenia specyficzna dla MPMD
Składnia:
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
Operacja wywołania funkcji. Przydatne np. do umieszczania treści pętli w deklaracjach funkcji, aby zmniejszyć rozmiar kodu.
Interfejsy: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | atrybut odniesienia symbolu płaskiego, |
Operandy:
| Operand | Opis |
|---|---|
tensors |
zmienna liczba tensorów dowolnego typu innego niż token lub typu tensor siatki, |
Wyniki:
| Wynik | Opis |
|---|---|
| „bez nazwy” | zmienna liczba tensorów dowolnego typu innego niż token lub typu tensor siatki, |
mpmd.for (mpmd::ForOp)
Dla operatora
Zwraca wynik wykonania funkcji treści dla stałej liczby iteracji, przy czym indeks iteracji jest dostępny w treści.
Można określić opcjonalny współczynnik rozwinięcia, który musi dzielić liczbę iteracji.Umożliwia on rozwinięcie treści operacji o ten współczynnik, tzn. w przypadku współczynnika rozwinięcia N treść jest replikowana w celu utworzenia N kopii, a liczba iteracji jest zmniejszana o współczynnik 1/N. Każda kopia z wyjątkiem pierwszej używa wyników poprzedniej kopii zamiast argumentów bloku, a indeks iteracji jest mnożony przez współczynnik rozwinięcia i zwiększany po każdej kopii.
Operator „for” może akceptować i zwracać dowolne typy, ale ich TypeID musi być taki sam, np. wszystkie typy tensorów lub wszystkie typy siatek MPMD itp. Dzięki temu możemy używać operatora na różnych poziomach, udostępniając implementację i przekształcenia.
Cechy: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Interfejsy: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
iterations | ::mlir::IntegerAttr | Atrybut 32-bitowej liczby całkowitej bez znaku |
unroll_factor | ::mlir::IntegerAttr | Atrybut 32-bitowej liczby całkowitej bez znaku |
Operandy:
| Operand | Opis |
|---|---|
tensors |
zmienna liczba argumentów dowolnego typu innego niż token, |
Wyniki:
| Wynik | Opis |
|---|---|
results |
zmienna liczba argumentów dowolnego typu innego niż token, |
mpmd.fragment (mpmd::FragmentOp)
Operacja na fragmencie
Przypisuje obliczenia, czyli blok operacji, do określonej siatki w topologii MPMD, która ma być wykonywana jako fragment indywidualnego programu SPMD.
Fragment przyjmuje i zwraca tylko tensory siatki przypisane do tej samej siatki co fragment.
Nazwa siatki fragmentu powinna odpowiadać siatce w topologii.
Fragment zawiera listę źródeł, czyli metadanych z informacjami o oryginalnych obliczeniach o nazwach, które utworzyły ten fragment, oraz identyfikator staged_id zdefiniowany iff, jeśli jest to fragment zdefiniowany przez użytkownika, czyli ma niepustą listę źródeł. Opcjonalny argument in_shardings określa podział argumentów bloku fragmentu, które odpowiadają operandowi. Opcjonalny parametr out_shardings określa podział wyników na fragmenty.
Region fragmentu nie powinien zawierać żadnych wolnych zmiennych, a typ każdego argumentu bloku i wartości zwracanej w regionie to globalny typ tensora odpowiadającego tensora siatki.
Cechy: HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Interfejsy: ConditionallySpeculatable, ShardableDataFlowOpInterface
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
origin | ::mlir::ArrayAttr | tablica informacji o pochodzeniu |
mesh_name | ::mlir::StringAttr | atrybut tekstowy, |
stage_id | ::mlir::IntegerAttr | Atrybut 64-bitowej liczby całkowitej bez znaku |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Dzielenie tensora na fragmenty według operandu lub wyniku operacji |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Dzielenie tensora na fragmenty według operandu lub wyniku operacji |
Operandy:
| Operand | Opis |
|---|---|
inputs |
wieloznaczny typ tensora siatki lub token |
Wyniki:
| Wynik | Opis |
|---|---|
results |
wieloznaczny typ tensora siatki lub token |
mpmd.fragment_call (mpmd::FragmentCallOp)
Operacja wywołania fragmentu
Reprezentuje wywołanie funkcji, która zawiera fragment MPMD, czyli obliczenia przypisane do konkretnej siatki w topologii MPMD, które mają być wykonywane jako pojedynczy fragment programu SPMD.
Nazwa siatki fragmentu powinna odpowiadać siatce w topologii funkcji otaczającej, a kształt siatki powinien być zgodny z kształtem wywoływanej funkcji.
Pochodzenie określa obliczenia nazwane przez użytkownika, które przyczyniły się do tego wywołania fragmentu, np. przez scalanie.
Typy danych wejściowych i wyników funkcji wywoływanej muszą być lokalnymi typami tensorów odpowiednich tensorów siatki operandów i wyników tej operacji odpowiednio.
Przykład:
%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
(m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...
Cechy: HasParent<::mlir::func::FuncOp>, MemRefsNormalizable
Interfejsy: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
origin | ::mlir::ArrayAttr | tablica informacji o pochodzeniu |
mesh_name | ::mlir::StringAttr | atrybut tekstowy, |
callee | ::mlir::FlatSymbolRefAttr | atrybut odniesienia symbolu płaskiego, |
Operandy:
| Operand | Opis |
|---|---|
tensors |
zmienna liczba argumentów typu tensora siatki |
Wyniki:
| Wynik | Opis |
|---|---|
| „bez nazwy” | zmienna liczba argumentów typu tensora siatki |
mpmd.named_computation (mpmd::NamedComputationOp)
Operacja w zakresie nazwanym
Grupuje obliczenia, czyli blok operacji, i nadaje im nazwę oraz liczbę transpozycji za pomocą atrybutu UserOrigin. To obliczenie nazwane może służyć do przypisywania siatki do obliczeń w MPMD lub do optymalizacji.
Liczba transpozycji (domyślnie 0) określa, czy nazwane obliczenie zostało uzyskane w wyniku określonej liczby przekształceń transpozycji JAX AD.
Region operacji nie powinien zawierać żadnych wolnych zmiennych, a typ każdego argumentu bloku i zwracanych wartości w regionie musi być taki sam jak typ danych wejściowych i zwracany typ operacji.
Cechy: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Interfejsy: ConditionallySpeculatable
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | Pochodzenie obliczeń określonych przez użytkownika. |
Operandy:
| Operand | Opis |
|---|---|
tensors |
wielorakie tensory o randze 4/6/8/16/32/64-bitowych liczb zmiennoprzecinkowych lub wartości logicznych albo 2/4/8/16/32/64-bitowych liczb całkowitych lub typów złożonych z 32/64-bitowymi elementami zmiennoprzecinkowymi albo skwantowanych wartości całkowitych na tensor lub token |
Wyniki:
| Wynik | Opis |
|---|---|
results |
wielorakie tensory o randze 4/6/8/16/32/64-bitowych liczb zmiennoprzecinkowych lub wartości logicznych albo 2/4/8/16/32/64-bitowych liczb całkowitych lub typów złożonych z 32/64-bitowymi elementami zmiennoprzecinkowymi albo skwantowanych wartości całkowitych na tensor lub token |
mpmd.named_tensor (mpmd::NamedTensorOp)
Przypisywanie tensora do siatki typu mesh
Składnia:
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
Operacja tożsamości, która przypisuje wynik tensora do danej nazwy. Ten obiekt NamedTensor może służyć do przypisywania siatki do tensora w MPMD.
Cechy: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Interfejsy: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Skutki: MemoryEffects::Effect{}
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
name | ::mlir::StringAttr | atrybut tekstowy, |
Operandy:
| Operand | Opis |
|---|---|
tensor |
tensor wartości dowolnego typu innego niż token |
Wyniki:
| Wynik | Opis |
|---|---|
result |
tensor wartości dowolnego typu innego niż token |
mpmd.reduce (mpmd::ReduceOp)
Operacja zmniejszania w wielu siatkach
Składnia:
operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)
Umożliwia zmniejszenie tensora w różnych siatkach, a następnie rozgłaszanie go w miejscach, w których ma być używany.
Cechy: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Interfejsy: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Skutki: MemoryEffects::Effect{}
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | Oznacza obniżkę. |
Operandy:
| Operand | Opis |
|---|---|
tensors |
zmienna liczba tensorów z wartościami dowolnego typu innego niż token |
Wyniki:
| Wynik | Opis |
|---|---|
result |
tensor wartości dowolnego typu innego niż token |
mpmd.return (mpmd::ReturnOp)
Operacja mpmd.return kończy regiony dołączone do operacji opartych na regionach mpmd. Jest to funkcja o zmiennej liczbie argumentów: przyjmuje jako argumenty listę wartości, których typy mogą być dowolne (ale tego samego rodzaju, np. AnyTensor), i dlatego można jej używać na różnych poziomach stosu MPMD IR.
Składnia:
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
Cechy: AlwaysSpeculatableImplTrait, Terminator
Interfejsy: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Skutki: MemoryEffects::Effect{}
Operandy:
| Operand | Opis |
|---|---|
results |
zmienna liczba argumentów dowolnego typu innego niż token, |
mpmd.transfer (mpmd::TransferOp)
Operacja przenoszenia
Składnia:
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
Przenosi rozproszony tensor z jednej siatki do drugiej.
Nazwy siatek typów operandów i wyników powinny odpowiadać siatkom w topologii, a ich typy globalne powinny być identyczne.
Cechy: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>
Interfejsy: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface
Skutki: MemoryEffects::Effect{}
Operandy:
| Operand | Opis |
|---|---|
tensor |
typ tensora siatki, |
Wyniki:
| Wynik | Opis |
|---|---|
result |
typ tensora siatki, |
mpmd.unassign (mpmd::UnassignOp)
Operacja anulowania przypisania
Składnia:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
Usuwa w pełni zreplikowany tensor z siatki.
Jest to tymczasowe działanie wprowadzane podczas obniżania poziomu operacji JAX, aby przejść z typów lokalnych na typy siatkowe. Te operacje zostaną wyeliminowane podczas importowania, gdy dane wejściowe i wyniki operacji funkcji staną się tensorami siatki.
Nazwa siatki typu operandu powinna odpowiadać siatce w topologii, a jej typ globalny powinien być identyczny z typem wyniku.
Cechy: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType
Interfejsy: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Skutki: MemoryEffects::Effect{}
Atrybuty:
| Atrybut | Typ MLIR | Opis |
|---|---|---|
origin | ::mlir::StringAttr | atrybut tekstowy, |
Operandy:
| Operand | Opis |
|---|---|
tensor |
typ tensora siatki, |
Wyniki:
| Wynik | Opis |
|---|---|
result |
tensor wartości dowolnego typu innego niż token |
Atrybuty
MeshWithOriginsAttr
Pasuje do swoich korzeni.
Składnia:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| mesh_name | ::llvm::StringRef |
mesh_name |
| pochodzenie, | ::llvm::ArrayRef<OriginAttr> |
źródła, |
MeshesWithOriginsAttr
Lista siatek z ich źródłami.
Składnia:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| wartość | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
Para z nazwą i siatką.
Składnia:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| nazwa | ::llvm::StringRef |
nazwa |
| sieć typu mesh | sdy::MeshAttr |
sieć typu mesh |
OriginAttr
Źródło przypisania siatki.
Składnia:
#mpmd.origin<
::llvm::StringRef # origin_label
>
Pochodzenie przypisania do sieci mesh.
origin_label to zrozumiała dla człowieka etykieta źródła.
Jest przeznaczona do debugowania.
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| origin_label | ::llvm::StringRef |
origin_label |
ReductionAttr
Oznacza spadek.
Składnia:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType |
wyliczenie typu ReductionType, |
TopologyAttr
Topologia nazwanych siatek.
Składnia:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| siatki, | ::llvm::ArrayRef<NamedMeshAttr> |
siatki topologii, |
UserOriginAttr
Pochodzenie obliczeń określonych przez użytkownika.
Składnia:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
Typy
MeshTensorType
Typ tensora siatki
Przypisuje typ RankedTensorType do określonej siatki SPMD w topologii siatek MPMD programu. Typ zawiera opcjonalne dzielenie na fragmenty, które określa, jak tensor jest dzielony na fragmenty w odniesieniu do siatki SPMD. Jeśli nie ma podziału, tensor jest w pełni replikowany.
Parametry:
| Parametr | Typ C++ | Opis |
|---|---|---|
| mesh_name | ::llvm::StringRef |
nazwa sieci mesh |
| ranked_tensor_type | ::mlir::RankedTensorType |
typ tensora o określonym rankingu, |
| fragmentacja | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
Wartości w polu enum
ReductionType
Atrybut typu obniżki
Przypadki:
| Symbol | Wartość | Ciąg znaków |
|---|---|---|
| kNone | 0 |
brak |
| kAdd | 1 |
dodaj |
| kMax | 2 |
maksimum |
| kMin | 3 |
min |
| kMul | 4 |
mul |
| kOr | 5 |
lub |
| kAnd | 6 |
i |
EdgeNodeType
Wyliczenie typu węzła brzegowego
Przypadki:
| Symbol | Wartość | Ciąg znaków |
|---|---|---|
| OPERAND | 0 |
argument |
| WYNIK | 1 |
wynik |
PropagationDirection
Wyliczenie kierunku propagacji
Przypadki:
| Symbol | Wartość | Ciąg znaków |
|---|---|---|
| BRAK | 0 |
BRAK |
| FORWARD | 1 |
FORWARD |
| WSTECZ | 2 |
WSTECZ |
| BOTH | 3 |
BOTH |
ReductionOp
Wyliczenie Reduction op
Przypadki:
| Symbol | Wartość | Ciąg znaków |
|---|---|---|
| SUMA | 0 |
sumuj |
| MAKS. | 1 |
maksimum |
| MIN | 2 |
min |