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_barrier
outfeed
pad
recv
reduce
reduce_scatter
reduce_window
reverse
scatter
select_and_scatter
send
slice
sort
transpose
tuple
uniform_dequantized
while