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 | sí | sí | sí | sí | sí |
add | sí | sí | sí | sí | sí |
after_all | sí | sí | sí | sí | sí |
all_gather | sí | volver a visitar | no | no | sí |
all_reduce | sí | volver a visitar | sí | no | sí |
all_to_all | sí | volver a visitar | sí | no | sí |
y | sí | sí | sí | sí | sí |
atan2 | sí | sí | sí | sí | sí |
batch_norm_grad | sí | volver a visitar | sí | no | volver a visitar |
batch_norm_inference | sí | volver a visitar | sí | no | volver a visitar |
batch_norm_training | sí | volver a visitar | sí | no | volver a visitar |
bitcast_convert | sí | sí | inviable | sí | sí |
transmisión | no | Sí* | Sí* | sí | volver a visitar |
broadcast_in_dim | sí | sí | inviable | sí | sí |
caso | sí | volver a visitar | sí | no | sí |
CTR | sí | sí | sí | sí | sí |
ceil | sí | sí | sí | sí | sí |
colectivo | sí | sí | sí | sí | volver a visitar |
restringir | sí | volver a visitar | sí | sí | sí |
collective_permute | sí | volver a visitar | sí | no | sí |
compare | sí | sí | sí | sí | sí |
complejo | sí | sí | sí | sí | sí |
compute_reshape_shape | no | volver a visitar | no | sí | no |
concatenate | sí | sí | sí | sí | sí |
constante | sí | sí | sí | sí | sí |
generar una conversión | sí | sí | inviable | sí | sí |
convolución | sí | sí | inviable | volver a visitar | no |
coseno | sí | sí | sí | sí | sí |
count_leading_zeros | sí | sí | sí | sí | sí |
create_token | no | Sí* | 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 | sí | no |
custom_call | sí | sí | inviable | sí | sí |
dividir | sí | sí | sí | sí | sí |
punto | no | volver a visitar | inviable | sí | volver a visitar |
dot_general | sí | volver a visitar | inviable | no | sí |
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 | sí | no |
dynamic_pad | no | volver a visitar | no | sí | no |
dynamic_reshape | no | volver a visitar | inviable | sí | no |
dynamic_slice | sí | sí | sí | sí | sí |
dynamic_update_slice | sí | sí | sí | sí | sí |
einsum | no | volver a visitar | no | sí | volver a visitar |
exponencial | sí | sí | sí | sí | sí |
exponential_minus_one | sí | sí | sí | sí | sí |
FFT | sí | volver a visitar | sí | sí | no |
piso | sí | sí | sí | sí | sí |
recopilar | sí | sí | sí | no | sí |
get_dimension_size | sí | sí | sí | sí | sí |
get_tuple_element | sí | sí | sí | sí | sí |
if | sí | volver a visitar | sí | no | sí |
imagen | sí | sí | sí | sí | sí |
entrada | sí | sí | inviable | no | sí |
Iota | sí | sí | inviable | sí | sí |
is_finite | sí | sí | sí | sí | sí |
log | sí | sí | sí | sí | sí |
log_plus_one | sí | sí | sí | sí | sí |
logística | sí | sí | sí | sí | sí |
map | sí | volver a visitar | sí | no | sí |
máxima | sí | sí | sí | sí | sí |
mínima | sí | sí | sí | sí | sí |
multiplicar | sí | sí | sí | sí | sí |
negate | sí | sí | sí | sí | sí |
no me encuentro en | sí | sí | sí | sí | sí |
optimization_barrier | sí | sí | sí | sí | sí |
o | sí | sí | sí | sí | sí |
salida | sí | sí | sí | no | sí |
almohadilla | sí | sí | sí | sí | sí |
partition_id | sí | sí | sí | sí | sí |
popcnt | sí | sí | sí | sí | sí |
potencia | sí | sí | sí | sí | sí |
real | sí | sí | sí | sí | sí |
real_dynamic_slice | no | volver a visitar | no | sí | no |
recibir | sí | sí | inviable | no | sí |
Reducir | sí | volver a visitar | sí | volver a visitar | sí |
reduce_precision | sí | sí | sí | sí | sí |
reduce_scatter | sí | volver a visitar | no | no | sí |
reduce_window | sí | volver a visitar | sí | no | sí |
resto | sí | sí | sí | sí | sí |
replica_id | sí | sí | sí | sí | sí |
cambiar forma | sí | sí | inviable | sí | sí |
return | no | volver a visitar | inviable | sí | sí |
reverse | sí | sí | sí | sí | sí |
rng | sí | sí | sí | sí | volver a visitar |
rng_bit_generator | sí | volver a visitar | inviable | sí | volver a visitar |
round_nearest_afz | sí | sí | sí | sí | sí |
round_nearest_even | sí | sí | sí | sí | sí |
RQR | sí | sí | sí | sí | sí |
scatter | sí | volver a visitar | sí | no | sí |
select | sí | sí | sí | sí | sí |
select_and_scatter | sí | volver a visitar | sí | no | sí |
enviar | 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í |
igual. | sí | sí | sí | sí | sí |
seno | sí | sí | sí | sí | sí |
slice | sí | sí | sí | no | sí |
sort | 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 | volver a visitar | no | no | volver a visitar |
trace | no | volver a visitar | no | sí | volver a visitar |
transponer | sí | sí | sí | sí | sí |
triangular_solve | sí | volver a visitar | sí | no | volver a visitar |
tuple | sí | sí | sí | sí | sí |
unary_einsum | no | volver a visitar | no | sí | volver a visitar |
uniform_dequantize | sí | sí | sí | sí | no |
uniform_quantize | sí | volver a visitar | inviable | sí | no |
mientras | sí | volver a visitar | sí | volver a visitar | sí |
xor | sí | sí | sí | sí | sí |