Status StabilHLO

Saat mem-bootstrap StableHLO dari MHLO, kami telah mewarisi implementasi banyak hal dari MHLO, termasuk cukupprinting, verifikasi, dan inferensi bentuk. Berkat itu, kita telah memiliki cakupan opset yang signifikan, tetapi masih banyak yang harus dilakukan untuk meninjau kelengkapan dan memberikan implementasi baru jika belum ada.

Dokumen live ini ditujukan bagi developer dan pengguna untuk melacak progres pada berbagai aspek pengoperasian - spesifikasi, verifikasi, inferensi jenis, pencetakan rapi, penafsir, dll.

Cara menggunakannya

Progres pengoperasian StableHLO, sebagaimana disebutkan di baris yang sesuai, pada aspek tertentu, sebagaimana disebutkan dalam kolom terkait, dilacak menggunakan salah satu label pelacakan berikut.

  • Label umum
    • yes: sudah ada implementasi yang komprehensif.
    • no: tidak ada implementasi, tetapi mengerjakannya adalah bagian dari roadmap. Perhatikan bahwa Pemverifikasi tidak akan pernah dapat diberi label "tidak" karena ODS sudah menerapkan beberapa verifikasi.
  • Label yang disesuaikan untuk Pemverifikasi dan Inferensi Jenis
    • yes: ada implementasi, dan sinkron dengan semantik StableHLO.
    • yes*: ada implementasi, dan sinkron dengan semantik XLA. Karena semantik XLA sering kali kurang terdokumentasi, kami menggunakan hlo_verifier.cc dan shape_inference.cc sebagai referensi.
    • kunjungan ulang: ada implementasi, tetapi tidak termasuk dalam "yes" atau "yes*" - baik karena kita belum mengauditnya, atau karena kita telah menemukan masalah.
    • ininclusive: tidak ada implementasi, karena tidak memungkinkan. Misalnya, karena jenis hasil operasi tidak dapat disimpulkan dari operand dan atributnya.

Status

Operasi StabilHLO Spesifikasi Verifikasi Inferensi Jenis Cetakan Menarik Interpreter
abs ya ya ya ya ya
add ya ya ya ya ya
after_all ya ya ya ya ya
all_gather ya lihat kembali no tidak ada ya
all_reduce ya lihat kembali ya no ya
all_to_all ya lihat kembali ya no ya
dan ya ya ya ya ya
atan2 ya ya ya ya ya
batch_norm_grad ya lihat kembali ya no lihat kembali
batch_norm_inference ya lihat kembali ya no lihat kembali
batch_norm_training ya lihat kembali ya no lihat kembali
bitcast_convert ya ya tidak layak ya ya
siaran no ya* ya* ya lihat kembali
broadcast_in_dim ya ya tidak layak ya ya
case ya lihat kembali ya no ya
Cbrt ya ya ya ya ya
ceil ya ya ya ya ya
Cholesky ya ya ya ya lihat kembali
klip ya lihat kembali ya ya ya
collective_broadcast ya lihat kembali ya no ya
collective_permute ya lihat kembali ya no ya
compare ya ya ya ya ya
kompleks ya ya ya ya ya
komposit ya ya tidak layak ya ya
concatenate ya ya ya ya ya
konstanta ya ya ya ya ya
melakukan konversi ya ya tidak layak ya ya
konvolusi ya ya tidak layak lihat kembali ya
cosinus ya ya ya ya ya
count_leading_zeros ya ya ya ya ya
create_token no ya* ya* ya lihat kembali
cross-replica-sum no lihat kembali ya* no lihat kembali
custom_call ya ya tidak layak ya ya
bagi ya ya ya ya ya
titik no lihat kembali tidak layak ya lihat kembali
dot_general ya lihat kembali tidak layak no ya
dynamic_broadcast_in_dim ya ya tidak layak ya lihat kembali
dynamic_conv ya ya tidak layak lihat kembali lihat kembali
dynamic_gather ya ya tidak layak no lihat kembali
dynamic_iota ya ya tidak layak ya lihat kembali
dynamic_pad ya ya tidak layak ya lihat kembali
dynamic_reshape ya ya tidak layak ya lihat kembali
dynamic_slice ya ya ya ya ya
dynamic_update_slice ya ya ya ya ya
einsum no lihat kembali no ya lihat kembali
berpangkat ya ya ya ya ya
exponential_minus_one ya ya ya ya ya
fft ya lihat kembali ya ya no
floor ya ya ya ya ya
mengumpulkan ya ya ya no ya
get_dimension_size ya ya ya ya ya
get_tuple_element ya ya ya ya ya
if ya lihat kembali ya no ya
gambar ya ya ya ya ya
dalam feed ya ya tidak layak no ya
Iota ya ya tidak layak ya ya
is_finite ya ya ya ya ya
log ya ya ya ya ya
log_plus_one ya ya ya ya ya
logistik ya ya ya ya ya
map ya lihat kembali ya no ya
maksimum ya ya ya ya ya
minimum ya ya ya ya ya
memperbanyak ya ya ya ya ya
negasi ya ya ya ya ya
bukan ya ya ya ya ya
optimization_barrier ya ya ya ya ya
atau ya ya ya ya ya
feed keluar ya ya ya no ya
padding ya ya ya ya ya
partition_id ya ya ya ya ya
Popcnt ya ya ya ya ya
daya ya ya ya ya ya
real ya ya ya ya ya
real_dynamic_slice no lihat kembali no ya no
terima ya ya tidak layak no ya
reduce ya lihat kembali ya lihat kembali ya
reduce_precision ya ya ya ya ya
reduce_scatter ya lihat kembali no tidak ada ya
reduce_window ya lihat kembali ya no ya
sisa ya ya ya ya ya
replica_id ya ya ya ya ya
membentuk ulang ya ya tidak layak ya ya
return no lihat kembali tidak layak ya ya
reverse ya ya ya ya ya
ng ya ya ya ya lihat kembali
rng_bit_generator ya lihat kembali tidak layak ya lihat kembali
round_nearest_afz ya ya ya ya ya
round_nearest_even ya ya ya ya ya
{i>rsqrt<i} ya ya ya ya ya
scatter ya lihat kembali ya no ya
pilih ya ya ya ya ya
select_and_scatter ya lihat kembali ya no ya
kirim ya ya ya no ya
set_dimension_size no ya* ya* ya no
shift_left ya ya ya ya ya
shift_right_arithmetic ya ya ya ya ya
shift_right_logical ya ya ya ya ya
tanda ya ya ya ya ya
sinus ya ya ya ya ya
slice ya ya ya no ya
mengurutkan ya ya ya no ya
sqrt ya ya ya ya ya
kurangi ya ya ya ya ya
Tanh ya ya ya ya ya
torch_index_select no lihat kembali no no lihat kembali
{i>transpose<i} ya ya ya ya ya
triangular_solve ya lihat kembali ya no lihat kembali
tuple ya ya ya ya ya
unary_einsum no lihat kembali no ya lihat kembali
uniform_dequantize ya ya ya ya no
uniform_quantize ya lihat kembali tidak layak ya no
saat ya lihat kembali ya lihat kembali ya
Xor ya ya ya ya ya

Inferensi jenis untuk operasi terkuantisasi

Kolom Type Inference dari tabel di atas ditujukan untuk berfokus pada operasi non-terkuantisasi. Untuk sebagian besar operasi terkuantisasi, tidak mungkin untuk menyimpulkan jenis hasil karena parameter kuantisasi jenis hasil mungkin berbeda dari operand. Dengan pengecualian beberapa kasus, operand dan jenis hasil harus cocok secara identik, atau op memiliki batasan yang berguna untuk menyimpulkan jenis hasil, operasi tersebut tercantum di bawah ini: all_gather, all_to_all, case, collective_permute, compare, concatenate, constant, dynamic_slice, dynamic_update_slice, gather, get_tuple_element, if, infeed, is_finite, map, all_to_all/optimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile