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_all
is_finite
map
optimization_barrier
outfeed
pad
recv
reduce
reduce_scatter
reduce_window
reverse
scatter
select_and_scatter
send
slice
sort
transpose
tuple
uniform_dequantized
while