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