Stan stabilnego HLO

Przy wczytywaniu StableHLO z MHLO odziedziczyliśmy implementację wielu elementów, w tym preprintingu, weryfikację i wnioskowanie o kształtach. Dzięki temu mamy już sporo informacji na temat sprzeciwów, ale mamy jeszcze wiele do zrobienia, żeby sprawdzić, czy obecne implementacje są kompletne, i wprowadzić nowe, tam gdzie ich nie ma.

Ten dokument na żywo jest przeznaczony dla programistów i użytkowników do śledzenia postępów w różnych aspektach problemu – specyfikacji, weryfikacji, wnioskowania na podstawie typu, funkcji drukowania, tłumaczenia rozmowy itp.

Jak używać tej funkcji

Postęp operacji StableHLO, o którym wspomniano w odpowiednim wierszu, w określonym aspekcie (zgodnie z informacjami w odpowiedniej kolumnie) jest śledzony za pomocą jednej z poniższych etykiet śledzenia.

  • Etykiety ogólne:
    • yes: istnieje kompleksowa implementacja.
    • nie: nie ma implementacji, ale praca nad nią jest częścią planu. Pamiętaj, że weryfikatora nigdy nie można oznaczyć jako „nie”, ponieważ ODS wdrożył już mechanizm weryfikacji.
  • Niestandardowe etykiety na potrzeby weryfikatora i wnioskowania o typach.
    • yes: istnieje implementacja, która jest zsynchronizowana z semantyką StableHLO.
    • yes*: istnieje implementacja, która jest zsynchronizowana z semantyką XLA. Semantyka XLA często jest niedostatecznie udokumentowana, dlatego jako odniesienia używamy hlo_verifier.cc i shape_inference.cc.
    • powtórka: istnieje implementacja, ale nie można jej uznać za „tak” ani „tak*” z powodu braku kontroli albo dlatego, że znaleźliśmy problemy.
    • infeasible: nie ma implementacji, ponieważ jest niemożliwe. Wynika to np. z tego, że nie można wywnioskować typu wyniku operacji na podstawie jej operandów i atrybutów.

Stan

Operacje StableHLO Specyfikacja Weryfikacja Wnioskowanie typu Zastosuj formatowanie stylistyczne Interpreter
abs tak tak tak tak tak
dodaj tak tak tak tak tak
after_all tak tak tak tak tak
all_gather tak powtórka nie nie tak
all_reduce tak powtórka tak nie tak
all_to_all tak powtórka tak nie tak
i tak tak tak tak tak
atan2 tak tak tak tak tak
batch_norm_grad tak powtórka tak nie powtórka
batch_norm_inference tak powtórka tak nie powtórka
batch_norm_training tak powtórka tak nie powtórka
bitcast_convert tak tak niewykonalne tak tak
komunikat nie tak* tak* tak powtórka
broadcast_in_dim tak tak niewykonalne tak tak
zgłoszenie tak powtórka tak nie tak
CBRT tak tak tak tak tak
Ceil tak tak tak tak tak
Cholesky tak tak tak tak powtórka
ograniczać (zakres) tak powtórka tak tak tak
collective_broadcast tak powtórka tak nie tak
collective_permute tak powtórka tak nie tak
porównaj tak tak tak tak tak
złożone tak tak tak tak tak
wieloskładnikowa tak tak niewykonalne tak tak
concatenate tak tak tak tak tak
stała tak tak tak tak tak
dokonają konwersji tak tak niewykonalne tak tak
splot tak tak niewykonalne powtórka tak
cosinus tak tak tak tak tak
count_leading_zeros tak tak tak tak tak
create_token nie tak* tak* tak powtórka
suma-replik-krzyżowych nie powtórka tak* nie powtórka
custom_call tak tak niewykonalne tak tak
dzielenie tak tak tak tak tak
kropka nie powtórka niewykonalne tak powtórka
dot_general tak powtórka niewykonalne nie tak
dynamic_broadcast_in_dim tak tak niewykonalne tak powtórka
dynamic_conv tak tak niewykonalne powtórka powtórka
dynamic_gather tak tak niewykonalne nie powtórka
dynamic_iota tak tak niewykonalne tak powtórka
dynamic_pad tak tak niewykonalne tak powtórka
dynamic_reshape tak tak niewykonalne tak powtórka
dynamic_slice tak tak tak tak tak
dynamic_update_slice tak tak tak tak tak
einsum nie powtórka nie tak powtórka
wykładniczo tak tak tak tak tak
exponential_minus_one tak tak tak tak tak
FFT tak powtórka tak tak nie
piętro tak tak tak tak tak
zbierać tak tak tak nie tak
get_dimension_size tak tak tak tak tak
get_tuple_element tak tak tak tak tak
if tak powtórka tak nie tak
Obraz tak tak tak tak tak
InFeed tak tak niewykonalne nie tak
Iota tak tak niewykonalne tak tak
is_finite tak tak tak tak tak
log tak tak tak tak tak
log_plus_one tak tak tak tak tak
logistyka tak tak tak tak tak
mapa tak powtórka tak nie tak
maksimum tak tak tak tak tak
minimum tak tak tak tak tak
pomnóż tak tak tak tak tak
usuń tak tak tak tak tak
nie tak tak tak tak tak
optimization_barrier tak tak tak tak tak
lub tak tak tak tak tak
Outfeed tak tak tak nie tak
klawiatura tak tak tak tak tak
partition_id tak tak tak tak tak
Popcnt tak tak tak tak tak
moc tak tak tak tak tak
prawdziwe tak tak tak tak tak
real_dynamic_slice nie powtórka nie tak nie
recv tak tak niewykonalne nie tak
zmniejsz tak powtórka tak powtórka tak
reduce_precision tak tak tak tak tak
reduce_scatter tak powtórka nie nie tak
reduce_window tak powtórka tak nie tak
reszta tak tak tak tak tak
replica_id tak tak tak tak tak
zmienić kształt tak tak niewykonalne tak tak
return nie powtórka niewykonalne tak tak
odwróć tak tak tak tak tak
Rng tak tak tak tak powtórka
rng_bit_generator tak powtórka niewykonalne tak powtórka
round_nearest_afz tak tak tak tak tak
round_nearest_even tak tak tak tak tak
rsqrt tak tak tak tak tak
scatter tak powtórka tak nie tak
wybierz tak tak tak tak tak
select_and_scatter tak powtórka tak nie tak
wyślij tak tak tak nie tak
set_dimension_size nie tak* tak* tak nie
shift_left tak tak tak tak tak
shift_right_arithmetic tak tak tak tak tak
shift_right_logical tak tak tak tak tak
podpisywanie tak tak tak tak tak
sinus tak tak tak tak tak
wycinek tak tak tak nie tak
sortuj tak tak tak nie tak
sqrt tak tak tak tak tak
odejmować tak tak tak tak tak
Tanh tak tak tak tak tak
torch_index_select nie powtórka nie nie powtórka
transponować tak tak tak tak tak
triangular_solve tak powtórka tak nie powtórka
tuple tak tak tak tak tak
unary_einsum nie powtórka nie tak powtórka
uniform_dequantize tak tak tak tak nie
uniform_quantize tak powtórka niewykonalne tak nie
podczas tak powtórka tak powtórka tak
XOR tak tak tak tak tak

Wnioskowanie typu dla operacji skwantyzowanych

Kolumna Type Inference z tabeli powyżej powinna koncentrować się na operacjach niekwantyzowanych. W przypadku większości operacji kwantyzowanych określenie typu wyniku jest niemożliwe, ponieważ parametry kwantyzacji typów wyników mogą różnić się od parametrów operandów. Z wyjątkiem kilku przypadków, w których typ operandu i wyniku musi być identyczny, a opcja zawiera ograniczenia, które są przydatne przy wnioskowaniu typu wyniku, takie operacje są wymienione poniżej: all_gather, all_to_all, case, collective_permute, compare, concatenate, constant, dynamic_slice, dynamic_update_slice, gather, get_tuple_element, if, infeed, if, infeed, is_finite, map, is_finite, map, is_finite, map,optimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile