Estado estable de HLO

Cuando se inicia StableHLO desde MHLO, heredamos la implementación de MHLO de muchos aspectos, como la edición de chicas, la verificación y la inferencia de formas. Gracias a eso, ya tenemos una cobertura significativa del conjunto de operaciones, pero aún queda mucho por hacer para revisar la integridad de las implementaciones existentes y proporcionar implementaciones nuevas en las que no exista ninguna.

Este documento publicado es para que los desarrolladores y los usuarios hagan un seguimiento del progreso en varios aspectos del conjunto de operaciones: especificación, verificación, inferencia de tipo, impresión con formato estilístico, intérprete, etcétera.

Instrucciones de uso

El progreso de una op StableHLO, como se menciona en la fila correspondiente, en un aspecto en particular, como se menciona en la columna correspondiente, se rastrea mediante una de las siguientes etiquetas de seguimiento.

  • Etiquetas genéricas
    • yes: Hay una implementación integral.
    • no: No hay implementación, pero trabajar en eso es parte de la hoja de ruta. Ten en cuenta que el verificador nunca se puede etiquetar como "no" porque la ODS ya implementó cierta verificación.
  • Etiquetas personalizadas para el verificador y la inferencia de tipos
    • yes: Hay una implementación y está sincronizada con la semántica de EstableHLO.
    • yes*: Hay una implementación y está sincronizada con la semántica de XLA. Dado que la semántica de XLA suele estar poco documentada, usamos hlo_verifier.cc y shape_inference.cc como referencia.
    • revisión: hay una implementación, pero no entra en la categoría "sí" o "sí*", ya sea porque aún no la auditamos o porque encontramos problemas.
    • inviable: No hay implementación, porque es inviable. (por ejemplo, porque el tipo de resultado de una op no se puede inferir de sus operandos y atributos).

Estado

Operaciones de HLO estable Especificación Verificación Inferencia de tipos Impresión con formato estilístico Intérprete
abs
add
after_all
all_gather volver a visitar no no
all_reduce volver a visitar no
all_to_all volver a visitar no
y
atan2
batch_norm_grad volver a visitar no volver a visitar
batch_norm_inference volver a visitar no volver a visitar
batch_norm_training volver a visitar no volver a visitar
bitcast_convert inviable
transmisión no Sí* Sí* volver a visitar
broadcast_in_dim inviable
caso volver a visitar no
CTR
ceil
colectivo volver a visitar
restringir volver a visitar
collective_permute volver a visitar no
compare
complejo
compute_reshape_shape no volver a visitar no no
concatenate
constante
generar una conversión inviable
convolución inviable volver a visitar no
coseno
count_leading_zeros
create_token no Sí* Sí* volver a visitar
suma-de-réplica-cruzada no volver a visitar Sí* no volver a visitar
cstr_reshapable no volver a visitar no no
custom_call inviable
dividir
punto no volver a visitar inviable volver a visitar
dot_general volver a visitar inviable no
dynamic_broadcast_in_dim no volver a visitar inviable no no
dynamic_conv no volver a visitar no no no
dynamic_gather no volver a visitar volver a visitar no no
dynamic_iota no volver a visitar inviable no
dynamic_pad no volver a visitar no no
dynamic_reshape no volver a visitar inviable no
dynamic_slice
dynamic_update_slice
einsum no volver a visitar no volver a visitar
exponencial
exponential_minus_one
FFT volver a visitar no
piso
recopilar no
get_dimension_size
get_tuple_element
if volver a visitar no
imagen
entrada inviable no
Iota inviable
is_finite
log
log_plus_one
logística
map volver a visitar no
máxima
mínima
multiplicar
negate
no me encuentro en
optimization_barrier
o
salida no
almohadilla
partition_id
popcnt
potencia
real
real_dynamic_slice no volver a visitar no no
recibir inviable no
Reducir volver a visitar volver a visitar
reduce_precision
reduce_scatter volver a visitar no no
reduce_window volver a visitar no
resto
replica_id
cambiar forma inviable
return no volver a visitar inviable
reverse
rng volver a visitar
rng_bit_generator volver a visitar inviable volver a visitar
round_nearest_afz
round_nearest_even
RQR
scatter volver a visitar no
select
select_and_scatter volver a visitar no
enviar no
set_dimension_size no Sí* Sí* no
shift_left
shift_right_arithmetic
shift_right_logical
igual.
seno
slice no
sort no
sqrt
subtract
tanh
torch_index_select no volver a visitar no no volver a visitar
trace no volver a visitar no volver a visitar
transponer
triangular_solve volver a visitar no volver a visitar
tuple
unary_einsum no volver a visitar no volver a visitar
uniform_dequantize no
uniform_quantize volver a visitar inviable no
mientras volver a visitar volver a visitar
xor