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