Durante l'esecuzione del bootstrap di StableHLO da MHLO, abbiamo ereditato l'implementazione di MHLO di molti aspetti, tra cui l'elaborazione del calcolo, la verifica e l'inferenza della forma. Grazie a ciò, abbiamo già una copertura significativa dell'opset, ma c'è ancora molto da fare per esaminare la completezza delle implementazioni esistenti e fornire nuove implementazioni dove non ne esistono.
Questo documento online è destinato a sviluppatori e utenti a monitorare i progressi relativi a vari aspetti dell'opset: specifiche, verifica, inferenza tipo, bella stampa, interprete e così via.
Modalità d'uso
L'avanzamento di un'operazione StableHLO, come indicato nella riga corrispondente, su un determinato aspetto, come indicato nella colonna corrispondente, viene monitorato utilizzando una delle seguenti etichette di monitoraggio.
- Etichette generiche
- yes: l'implementazione è completa.
- no: non c'è alcuna implementazione, ma lavorarci sopra fa parte della roadmap. Tieni presente che Verifier non può mai essere etichettato con "no" perché l'ODS implementa già alcune verifiche.
- Etichette personalizzate per verificatore e inferenza del tipo
- yes: c'è un'implementazione ed è sincronizzata con la semantica di StableHLO.
- yes*: c'è un'implementazione ed è sincronizzata con la semantica XLA. Poiché la semantica XLA è spesso sotto documentata, usiamo hlo_verifier.cc e shape_inference.cc come riferimento.
- revisit: c'è un'implementazione, ma non può rientrare in "yes" o "yes*" perché non l'abbiamo ancora verificata o perché abbiamo e rilevato problemi.
- infeasible (non fattibile): non c'è alcuna implementazione, perché non è fattibile. Ad esempio, poiché il tipo di risultato di un'operazione non può essere dedotto dai suoi operandi e attributi.
Stato
Operazione HLO stabile | Specifiche | Verifica | Tipo di inferenza | Stampa carino | Interprete |
---|---|---|---|---|---|
abs | sì | sì | sì | sì | sì |
add | sì | sì | sì | sì | sì |
after_all | sì | sì | sì | sì | sì |
all_gather | sì | rivedere | no | no | sì |
all_reduce | sì | rivedere | sì | no | sì |
all_to_all | sì | rivedere | sì | no | sì |
e | sì | sì | sì | sì | sì |
atan2 | sì | sì | sì | sì | sì |
batch_norm_grad | sì | rivedere | sì | no | rivedere |
batch_norm_inference | sì | rivedere | sì | no | rivedere |
batch_norm_training | sì | rivedere | sì | no | rivedere |
bitcast_convert | sì | sì | impossibile | sì | sì |
annuncio | no | sì* | sì* | sì | rivedere |
broadcast_in_dim | sì | sì | impossibile | sì | sì |
richiesta | sì | rivedere | sì | no | sì |
crt | sì | sì | sì | sì | sì |
ceil | sì | sì | sì | sì | sì |
Cholesky | sì | sì | sì | sì | rivedere |
clampare | sì | rivedere | sì | sì | sì |
collective_broadcast | sì | rivedere | sì | no | sì |
collective_permute | sì | rivedere | sì | no | sì |
compare | sì | sì | sì | sì | sì |
complesso | sì | sì | sì | sì | sì |
composito | sì | sì | impossibile | sì | sì |
concatenate | sì | sì | sì | sì | sì |
costante | sì | sì | sì | sì | sì |
effettuare una conversione | sì | sì | impossibile | sì | sì |
convoluzione | sì | sì | impossibile | rivedere | sì |
coseno | sì | sì | sì | sì | sì |
count_leading_zeros | sì | sì | sì | sì | sì |
create_token | no | sì* | sì* | sì | rivedere |
somma di replica incrociata | no | rivedere | sì* | no | rivedere |
custom_call | sì | sì | impossibile | sì | sì |
divisione | sì | sì | sì | sì | sì |
punto | no | rivedere | impossibile | sì | rivedere |
dot_general | sì | rivedere | impossibile | no | sì |
dynamic_broadcast_in_dim | sì | sì | impossibile | sì | rivedere |
dynamic_conv | sì | sì | impossibile | rivedere | rivedere |
dynamic_gather | sì | sì | impossibile | no | rivedere |
dynamic_iota | sì | sì | impossibile | sì | rivedere |
dynamic_pad | sì | sì | impossibile | sì | rivedere |
dynamic_reshape | sì | sì | impossibile | sì | rivedere |
dynamic_slice | sì | sì | sì | sì | sì |
dynamic_update_slice | sì | sì | sì | sì | sì |
einsum | no | rivedere | no | sì | rivedere |
esponenziale | sì | sì | sì | sì | sì |
exponential_minus_one | sì | sì | sì | sì | sì |
fft | sì | rivedere | sì | sì | no |
floor | sì | sì | sì | sì | sì |
raccogliere | sì | sì | sì | no | sì |
get_dimension_size | sì | sì | sì | sì | sì |
get_tuple_element | sì | sì | sì | sì | sì |
if | sì | rivedere | sì | no | sì |
immaginare | sì | sì | sì | sì | sì |
annuncio in-feed | sì | sì | impossibile | no | sì |
iota | sì | sì | impossibile | sì | sì |
is_finite | sì | sì | sì | sì | sì |
log | sì | sì | sì | sì | sì |
log_plus_one | sì | sì | sì | sì | sì |
logistica | sì | sì | sì | sì | sì |
mappa | sì | rivedere | sì | no | sì |
massima | sì | sì | sì | sì | sì |
minima | sì | sì | sì | sì | sì |
moltiplicazione | sì | sì | sì | sì | sì |
nega | sì | sì | sì | sì | sì |
non | sì | sì | sì | sì | sì |
optimization_barrier | sì | sì | sì | sì | sì |
o | sì | sì | sì | sì | sì |
Outfeed | sì | sì | sì | no | sì |
tappetino | sì | sì | sì | sì | sì |
partition_id | sì | sì | sì | sì | sì |
popcnt | sì | sì | sì | sì | sì |
potenza | sì | sì | sì | sì | sì |
reale | sì | sì | sì | sì | sì |
real_dynamic_slice | no | rivedere | no | sì | no |
recv | sì | sì | impossibile | no | sì |
reduce | sì | rivedere | sì | rivedere | sì |
reduce_precision | sì | sì | sì | sì | sì |
reduce_scatter | sì | rivedere | no | no | sì |
reduce_window | sì | rivedere | sì | no | sì |
resto | sì | sì | sì | sì | sì |
replica_id | sì | sì | sì | sì | sì |
rimodellare | sì | sì | impossibile | sì | sì |
return | no | rivedere | impossibile | sì | sì |
inverti | sì | sì | sì | sì | sì |
rng | sì | sì | sì | sì | rivedere |
rng_bit_generator | sì | rivedere | impossibile | sì | rivedere |
round_nearest_afz | sì | sì | sì | sì | sì |
round_nearest_even | sì | sì | sì | sì | sì |
rsqrt | sì | sì | sì | sì | sì |
scatter | sì | rivedere | sì | no | sì |
select | sì | sì | sì | sì | sì |
select_and_scatter | sì | rivedere | sì | no | sì |
Invia | sì | sì | sì | no | sì |
set_dimension_size | no | sì* | sì* | sì | no |
shift_left | sì | sì | sì | sì | sì |
shift_right_arithmetic | sì | sì | sì | sì | sì |
shift_right_logical | sì | sì | sì | sì | sì |
firmare | sì | sì | sì | sì | sì |
seno | sì | sì | sì | sì | sì |
sezione | sì | sì | sì | no | sì |
ordinare | sì | sì | sì | no | sì |
sqrt | sì | sì | sì | sì | sì |
subtract | sì | sì | sì | sì | sì |
Tanh | sì | sì | sì | sì | sì |
torch_index_select | no | rivedere | no | no | rivedere |
trasponi | sì | sì | sì | sì | sì |
triangular_solve | sì | rivedere | sì | no | rivedere |
tuple | sì | sì | sì | sì | sì |
unary_einsum | no | rivedere | no | sì | rivedere |
uniform_dequantize | sì | sì | sì | sì | no |
uniform_quantize | sì | rivedere | impossibile | sì | no |
mentre | sì | rivedere | sì | rivedere | sì |
Xor | sì | sì | sì | sì | sì |
Inferenza dei tipi per operazioni quantiizzate
La colonna Type Inference
della tabella precedente è pensata per concentrarsi sulle operazioni non quantiizzate. Per la maggior parte delle operazioni quantiizzate, non è possibile dedurre il tipo di risultato perché i parametri di quantizzazione dei tipi di risultati possono variare da quelli degli operandi. {2, {2, {2,} {2,} case
, case
, case
, case
, case
, case
, case
, case
, case
all_gather
all_to_all
collective_permute
compare
concatenate
constant
dynamic_slice
dynamic_update_slice
gather
get_tuple_element
if
infeed
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