Status do StableHLO

Ao inicializar o StableHLO do MHLO, herdamos a implementação da MHLO de muitos elementos, incluindo estilização, verificação e inferência de formas. Por isso, já temos uma cobertura significativa da opset, mas ainda há muito o que fazer para analisar a integridade das implementações atuais e fornecer novas implementações quando não houver nenhuma.

Esse documento ativo é para que os desenvolvedores e os usuários acompanhem o progresso em vários aspectos da opset: especificação, verificação, inferência de tipo, impressão avançada, intérprete etc.

Como usar

O progresso de uma operação StableHLO, como mencionado na linha correspondente, em um aspecto específico, como mencionado na coluna correspondente, é rastreado com um dos rótulos de acompanhamento a seguir.

  • Rótulos genéricos
    • yes: há uma implementação abrangente.
    • no: não há implementação, mas trabalhar nisso faz parte do roteiro. O verificador nunca pode ser rotulado como "não" porque o ODS já implementa alguma verificação.
  • Rótulos personalizados para verificador e inferência de tipo
    • yes: há uma implementação e ela está sincronizada com a semântica do StableHLO.
    • yes*: há uma implementação e está sincronizada com a semântica do XLA. Como a semântica do XLA costuma ser subdocumentada, estamos usando hlo_verifier.cc e shape_inference.cc como referência.
    • revisit: há uma implementação, mas não se enquadra em "sim" ou "sim*", seja porque ainda não a auditamos ou porque encontramos e encontramos problemas.
    • inviável: não há implementação, porque é inviável. Por exemplo, porque o tipo de resultado de uma op não pode ser inferido de acordo com os operandos e atributos dela.

Status

Operação do StableHLO Especificação Verificação Inferência de tipo Impressão elegante Intérprete
abs sim sim sim sim sim
adicionar sim sim sim sim sim
after_all sim sim sim sim sim
all_gather sim revisitar não não sim
all_reduce sim revisitar sim não sim
all_to_all sim revisitar sim não sim
e sim sim sim sim sim
atan2 sim sim sim sim sim
batch_norm_grad sim revisitar sim não revisitar
batch_norm_inference sim revisitar sim não revisitar
batch_norm_training sim revisitar sim não revisitar
bitcast_convert sim sim inviável sim sim
transmissão não sim* sim* sim revisitar
broadcast_in_dim sim sim inviável sim sim
caso sim revisitar sim não sim
CBRT sim sim sim sim sim
ceil sim sim sim sim sim
Cholesky sim sim sim sim revisitar
limitar sim revisitar sim sim sim
collective_permute sim revisitar sim não sim
compare sim sim sim sim sim
complexo sim sim sim sim sim
compute_reshape_shape não revisitar não sim não
concatenate sim sim sim sim sim
constante sim sim sim sim sim
fazer uma conversão sim sim inviável sim sim
convolução sim sim inviável revisitar não
cosseno sim sim sim sim sim
count_leading_zeros sim sim sim sim sim
create_token não sim* sim* sim revisitar
soma entre réplicas não revisitar sim* não revisitar
cstr_reshapable não revisitar não sim não
custom_call sim sim inviável sim sim
dividir sim sim sim sim sim
ponto não revisitar inviável sim revisitar
dot_general sim revisitar inviável não sim
dynamic_broadcast_in_dim não revisitar inviável não não
dynamic_conv não revisitar não não não
dynamic_gather não revisitar revisitar não não
dynamic_iota não revisitar inviável sim não
dynamic_pad não revisitar não sim não
dynamic_reshape não revisitar inviável sim não
dynamic_slice sim sim sim sim sim
dynamic_update_slice sim sim sim sim sim
einsum não revisitar não sim revisitar
exponencial sim sim sim sim sim
exponential_minus_one sim sim sim sim sim
fft sim revisitar sim sim não
floor sim sim sim sim sim
reunir sim sim sim não sim
get_dimension_size sim sim sim sim sim
get_tuple_element sim sim sim sim sim
if sim revisitar sim não sim
Imagem sim sim sim sim sim
entrada sim sim inviável não sim
Iota sim sim inviável sim sim
is_finite sim sim sim sim sim
log sim sim sim sim sim
log_plus_one sim sim sim sim sim
logística sim sim sim sim sim
mapa sim revisitar sim não sim
máximo sim sim sim sim sim
mínimo sim sim sim sim sim
multiplicar sim sim sim sim sim
negate sim sim sim sim sim
não sim sim sim sim sim
optimization_barrier sim sim sim sim sim
ou sim sim sim sim sim
saída sim sim sim não sim
bloco sim sim sim sim sim
partition_id sim sim sim sim sim
Popcnt sim sim sim sim sim
potência sim sim sim sim sim
real sim sim sim sim sim
real_dynamic_slice não revisitar não sim não
recv sim sim inviável não sim
reduce sim revisitar sim revisitar sim
reduce_precision sim sim sim sim sim
reduce_scatter sim revisitar não não sim
reduce_window sim revisitar sim não sim
restante sim sim sim sim sim
replica_id sim sim sim sim sim
remodelar sim sim inviável sim sim
return não revisitar inviável sim sim
anular sim sim sim sim sim
rm sim sim sim sim revisitar
rng_bit_generator sim revisitar inviável sim revisitar
round_nearest_afz sim sim sim sim sim
round_nearest_even sim sim sim sim sim
rsqrt sim sim sim sim sim
scatter sim revisitar sim não sim
select sim sim sim sim sim
select_and_scatter sim revisitar sim não sim
send sim sim sim não sim
set_dimension_size não sim* sim* sim não
shift_left sim sim sim sim sim
shift_right_arithmetic sim sim sim sim sim
shift_right_logical sim sim sim sim sim
de igual. sim sim sim sim sim
seno sim sim sim sim sim
slice sim sim sim não sim
sort sim sim sim não sim
sqrt sim sim sim sim sim
subtract sim sim sim sim sim
Tanh sim sim sim sim sim
torch_index_select não revisitar não não revisitar
trace não revisitar não sim revisitar
transpor sim sim sim sim sim
triangular_solve sim revisitar sim não revisitar
tuple sim sim sim sim sim
unary_einsum não revisitar não sim revisitar
uniform_dequantize sim sim sim sim não
uniform_quantize sim revisitar inviável sim não
enquanto sim revisitar sim revisitar sim
Xor sim sim sim sim sim