Stato StableHLO

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
add
after_all
all_gather rivedere no no
all_reduce rivedere no
all_to_all rivedere no
e
atan2
batch_norm_grad rivedere no rivedere
batch_norm_inference rivedere no rivedere
batch_norm_training rivedere no rivedere
bitcast_convert impossibile
annuncio no sì* sì* rivedere
broadcast_in_dim impossibile
richiesta rivedere no
crt
ceil
Cholesky rivedere
clampare rivedere
collective_broadcast rivedere no
collective_permute rivedere no
compare
complesso
composito impossibile
concatenate
costante
effettuare una conversione impossibile
convoluzione impossibile rivedere
coseno
count_leading_zeros
create_token no sì* sì* rivedere
somma di replica incrociata no rivedere sì* no rivedere
custom_call impossibile
divisione
punto no rivedere impossibile rivedere
dot_general rivedere impossibile no
dynamic_broadcast_in_dim impossibile rivedere
dynamic_conv impossibile rivedere rivedere
dynamic_gather impossibile no rivedere
dynamic_iota impossibile rivedere
dynamic_pad impossibile rivedere
dynamic_reshape impossibile rivedere
dynamic_slice
dynamic_update_slice
einsum no rivedere no rivedere
esponenziale
exponential_minus_one
fft rivedere no
floor
raccogliere no
get_dimension_size
get_tuple_element
if rivedere no
immaginare
annuncio in-feed impossibile no
iota impossibile
is_finite
log
log_plus_one
logistica
mappa rivedere no
massima
minima
moltiplicazione
nega
non
optimization_barrier
o
Outfeed no
tappetino
partition_id
popcnt
potenza
reale
real_dynamic_slice no rivedere no no
recv impossibile no
reduce rivedere rivedere
reduce_precision
reduce_scatter rivedere no no
reduce_window rivedere no
resto
replica_id
rimodellare impossibile
return no rivedere impossibile
inverti
rng rivedere
rng_bit_generator rivedere impossibile rivedere
round_nearest_afz
round_nearest_even
rsqrt
scatter rivedere no
select
select_and_scatter rivedere no
Invia no
set_dimension_size no sì* sì* no
shift_left
shift_right_arithmetic
shift_right_logical
firmare
seno
sezione no
ordinare no
sqrt
subtract
Tanh
torch_index_select no rivedere no no rivedere
trasponi
triangular_solve rivedere no rivedere
tuple
unary_einsum no rivedere no rivedere
uniform_dequantize no
uniform_quantize rivedere impossibile no
mentre rivedere rivedere
Xor

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, caseall_gatherall_to_allcollective_permutecompareconcatenateconstantdynamic_slicedynamic_update_slicegatherget_tuple_elementifinfeedis_finitemapoptimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile