État StableHLO

Lors de l'amorçage de StableHLO à partir de MHLO, nous avons hérité de l'implémentation de MHLO pour de nombreux éléments, y compris l'impression d'image, la vérification et l'inférence de forme. Grâce à cela, nous disposons déjà d'une couverture significative de l'opération, mais il reste encore beaucoup à faire pour vérifier l'exhaustivité des implémentations existantes et fournir de nouvelles implémentations lorsqu'il n'en existe aucune.

Ce document en ligne permet aux développeurs et aux utilisateurs de suivre la progression de divers aspects de l'opération : spécification, vérification, inférence de type, impression élégante, interprète, etc.

Comment l'utiliser ?

La progression d'une opération StableHLO, comme indiqué dans la ligne correspondante, sur un aspect particulier, comme indiqué dans la colonne correspondante, est suivie à l'aide de l'un des libellés de suivi suivants.

  • Étiquettes génériques
    • yes: la mise en œuvre est complète.
    • no: il n'y a pas d'implémentation, mais travailler dessus fait partie de la feuille de route. Notez que le vérificateur ne peut jamais être associé à la mention "non", car l'ODS implémente déjà une vérification.
  • Libellés personnalisés pour le vérificateur et l'inférence de type
    • yes: il existe une implémentation synchronisée avec la sémantique StableHLO.
    • yes*: il existe une implémentation synchronisée avec la sémantique XLA. La sémantique XLA étant souvent sous-documentée, nous utilisons hlo_verifier.cc et shape_inference.cc comme référence.
    • revisit: il y a une implémentation, mais elle ne relève pas de "oui " ni de"oui*", soit parce que nous n'avons pas encore effectué d'audit, soit parce que nous avons détecté et détecté des problèmes.
    • infeasible (infaisable) : il n'y a pas d'implémentation, car c'est impossible. C'est par exemple le cas, car le type de résultat d'une opération ne peut pas être déduit de ses opérandes et attributs.

État

StableHLO op Spécification Validation Inférence de type Impression élégante Interpréteur
abs oui oui oui oui oui
add oui oui oui oui oui
after_all oui oui oui oui oui
all_gather oui revoir non Non oui
all_reduce oui revoir oui non oui
all_to_all oui revoir oui non oui
et oui oui oui oui oui
atan2 oui oui oui oui oui
batch_norm_grad oui revoir oui non revoir
batch_norm_inference oui revoir oui non revoir
batch_norm_training oui revoir oui non revoir
bitcast_convert oui oui infaisable oui oui
annonce non oui* oui* oui revoir
broadcast_in_dim oui oui infaisable oui oui
demande oui revoir oui non oui
cbrt oui oui oui oui oui
ceil oui oui oui oui oui
Cholesky oui oui oui oui revoir
limiter oui revoir oui oui oui
collective_broadcast oui revoir oui non oui
collective_permute oui revoir oui non oui
compare oui oui oui oui oui
complexe oui oui oui oui oui
mixte oui oui infaisable oui oui
concatenate oui oui oui oui oui
constante oui oui oui oui oui
d'effectuer une conversion oui oui infaisable oui oui
convolution oui oui infaisable revoir oui
cosinus oui oui oui oui oui
count_leading_zeros oui oui oui oui oui
create_token non oui* oui* oui revoir
somme inter-instances répliquées non revoir oui* non revoir
custom_call oui oui infaisable oui oui
diviser oui oui oui oui oui
point non revoir infaisable oui revoir
dot_general oui revoir infaisable non oui
dynamic_broadcast_in_dim oui oui infaisable oui revoir
dynamic_conv oui oui infaisable revoir revoir
dynamic_gather oui oui infaisable non revoir
dynamic_iota oui oui infaisable oui revoir
dynamic_pad oui oui infaisable oui revoir
dynamic_reshape oui oui infaisable oui revoir
dynamic_slice oui oui oui oui oui
dynamic_update_slice oui oui oui oui oui
einsum non revoir non oui revoir
exponentiel oui oui oui oui oui
exponential_minus_one oui oui oui oui oui
fft oui revoir oui oui non
étage oui oui oui oui oui
rassembler oui oui oui non oui
get_dimension_size oui oui oui oui oui
get_tuple_element oui oui oui oui oui
if oui revoir oui non oui
Image oui oui oui oui oui
flux oui oui infaisable non oui
Iota oui oui infaisable oui oui
is_finite oui oui oui oui oui
log oui oui oui oui oui
log_plus_one oui oui oui oui oui
logistique oui oui oui oui oui
carte oui revoir oui non oui
maximum oui oui oui oui oui
minimum oui oui oui oui oui
multiplier oui oui oui oui oui
negate oui oui oui oui oui
(ne vivant pas oui oui oui oui oui
optimization_barrier oui oui oui oui oui
ou oui oui oui oui oui
flux de sortie oui oui oui non oui
pad oui oui oui oui oui
partition_id oui oui oui oui oui
Popcnt oui oui oui oui oui
puissance oui oui oui oui oui
real oui oui oui oui oui
real_dynamic_slice non revoir non oui non
recv oui oui infaisable non oui
reduce oui revoir oui revoir oui
reduce_precision oui oui oui oui oui
reduce_scatter oui revoir non Non oui
reduce_window oui revoir oui non oui
reste oui oui oui oui oui
replica_id oui oui oui oui oui
remodeler oui oui infaisable oui oui
return non revoir infaisable oui oui
reverse oui oui oui oui oui
rng oui oui oui oui revoir
rng_bit_generator oui revoir infaisable oui revoir
round_nearest_afz oui oui oui oui oui
round_nearest_even oui oui oui oui oui
psqrt oui oui oui oui oui
scatter oui revoir oui non oui
select oui oui oui oui oui
select_and_scatter oui revoir oui non oui
envoyer oui oui oui non oui
set_dimension_size non oui* oui* oui non
shift_left oui oui oui oui oui
shift_right_arithmetic oui oui oui oui oui
shift_right_logical oui oui oui oui oui
signe "=". oui oui oui oui oui
sinus oui oui oui oui oui
tranche oui oui oui non oui
trier oui oui oui non oui
sqrt oui oui oui oui oui
subtract oui oui oui oui oui
Tanh oui oui oui oui oui
torch_index_select non revoir non non revoir
transposer oui oui oui oui oui
triangular_solve oui revoir oui non revoir
tuple oui oui oui oui oui
unary_einsum non revoir non oui revoir
uniform_dequantize oui oui oui oui non
uniform_quantize oui revoir infaisable oui non
alors que oui revoir oui revoir oui
Xor oui oui oui oui oui

Inférence de type pour les opérations quantifiées

La colonne Type Inference du tableau ci-dessus est destinée aux opérations non quantifiées. Pour la majorité des opérations quantifiées, il n'est pas possible de déduire le type de résultat, car les paramètres de quantification des types de résultats peuvent différer de ceux des opérandes. À l'exception de quelques cas où l'opérande et les types de résultats doivent correspondre de manière identique, ou l'opération comporte des contraintes utiles pour déduire le type de résultat. Les opérations suivantes sont listées ci-dessous : all_gather, all_to_all, case, collective_permute, compare, concatenate, constant, dynamic_slice, dynamic_update_slice, gather, get_tuple_element, if, infeed, all_to_all, all_to_all, all_to_all, all_to_all, all_to_all, all_to_all, all_to_allis_finitemapoptimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile