Durante l'esecuzione del bootstrap di StableHLO da MHLO, abbiamo ereditato l'implementazione di MHLO di molti aspetti, tra cui l'elaborazione del calcolo, la verifica e l'inferenza della forma. Grazie a ciò, abbiamo già una copertura significativa dell'opset, ma c'è ancora molto da fare per esaminare la completezza delle implementazioni esistenti e fornire nuove implementazioni dove non ne esistono.
Questo documento online è destinato a sviluppatori e utenti a monitorare i progressi relativi a vari aspetti dell'opset: specifiche, verifica, inferenza tipo, bella stampa, interprete e così via.
Modalità d'uso
L'avanzamento di un'operazione StableHLO, come indicato nella riga corrispondente, su un determinato aspetto, come indicato nella colonna corrispondente, viene monitorato utilizzando una delle seguenti etichette di monitoraggio.
- Etichette generiche
- yes: l'implementazione è completa.
- no: non c'è alcuna implementazione, ma lavorarci sopra fa parte della roadmap. Tieni presente che Verifier non può mai essere etichettato con "no" perché l'ODS implementa già alcune verifiche.
- Etichette personalizzate per verificatore e inferenza del tipo
- yes: c'è un'implementazione ed è sincronizzata con la semantica di StableHLO.
- yes*: c'è un'implementazione ed è sincronizzata con la semantica XLA. Poiché la semantica XLA è spesso sotto documentata, usiamo hlo_verifier.cc e shape_inference.cc come riferimento.
- revisit: c'è un'implementazione, ma non può rientrare in "yes" o "yes*" perché non l'abbiamo ancora verificata o perché abbiamo e rilevato problemi.
- infeasible (non fattibile): non c'è alcuna implementazione, perché non è fattibile. Ad esempio, poiché il tipo di risultato di un'operazione non può essere dedotto dai suoi operandi e attributi.
Stato
| Operazione HLO stabile | Specifiche | Verifica | Tipo di inferenza | Stampa carino | Interprete |
|---|---|---|---|---|---|
| abs | sì | sì | sì | sì | sì |
| add | sì | sì | sì | sì | sì |
| after_all | sì | sì | sì | sì | sì |
| all_gather | sì | rivedere | no | no | sì |
| all_reduce | sì | rivedere | sì | no | sì |
| all_to_all | sì | rivedere | sì | no | sì |
| e | sì | sì | sì | sì | sì |
| atan2 | sì | sì | sì | sì | sì |
| batch_norm_grad | sì | rivedere | sì | no | rivedere |
| batch_norm_inference | sì | rivedere | sì | no | rivedere |
| batch_norm_training | sì | rivedere | sì | no | rivedere |
| bitcast_convert | sì | sì | impossibile | sì | sì |
| annuncio | no | sì* | sì* | sì | rivedere |
| broadcast_in_dim | sì | sì | impossibile | sì | sì |
| richiesta | sì | rivedere | sì | no | sì |
| crt | sì | sì | sì | sì | sì |
| ceil | sì | sì | sì | sì | sì |
| Cholesky | sì | sì | sì | sì | rivedere |
| clampare | sì | rivedere | sì | sì | sì |
| collective_broadcast | sì | rivedere | sì | no | sì |
| collective_permute | sì | rivedere | sì | no | sì |
| compare | sì | sì | sì | sì | sì |
| complesso | sì | sì | sì | sì | sì |
| composito | sì | sì | impossibile | sì | sì |
| concatenate | sì | sì | sì | sì | sì |
| costante | sì | sì | sì | sì | sì |
| effettuare una conversione | sì | sì | impossibile | sì | sì |
| convoluzione | sì | sì | impossibile | rivedere | sì |
| coseno | sì | sì | sì | sì | sì |
| count_leading_zeros | sì | sì | sì | sì | sì |
| create_token | no | sì* | sì* | sì | rivedere |
| somma di replica incrociata | no | rivedere | sì* | no | rivedere |
| custom_call | sì | sì | impossibile | sì | sì |
| divisione | sì | sì | sì | sì | sì |
| punto | no | rivedere | impossibile | sì | rivedere |
| dot_general | sì | rivedere | impossibile | no | sì |
| dynamic_broadcast_in_dim | sì | sì | impossibile | sì | rivedere |
| dynamic_conv | sì | sì | impossibile | rivedere | rivedere |
| dynamic_gather | sì | sì | impossibile | no | rivedere |
| dynamic_iota | sì | sì | impossibile | sì | rivedere |
| dynamic_pad | sì | sì | impossibile | sì | rivedere |
| dynamic_reshape | sì | sì | impossibile | sì | rivedere |
| dynamic_slice | sì | sì | sì | sì | sì |
| dynamic_update_slice | sì | sì | sì | sì | sì |
| einsum | no | rivedere | no | sì | rivedere |
| esponenziale | sì | sì | sì | sì | sì |
| exponential_minus_one | sì | sì | sì | sì | sì |
| fft | sì | rivedere | sì | sì | no |
| floor | sì | sì | sì | sì | sì |
| raccogliere | sì | sì | sì | no | sì |
| get_dimension_size | sì | sì | sì | sì | sì |
| get_tuple_element | sì | sì | sì | sì | sì |
| if | sì | rivedere | sì | no | sì |
| immaginare | sì | sì | sì | sì | sì |
| annuncio in-feed | sì | sì | impossibile | no | sì |
| iota | sì | sì | impossibile | sì | sì |
| is_finite | sì | sì | sì | sì | sì |
| log | sì | sì | sì | sì | sì |
| log_plus_one | sì | sì | sì | sì | sì |
| logistica | sì | sì | sì | sì | sì |
| mappa | sì | rivedere | sì | no | sì |
| massima | sì | sì | sì | sì | sì |
| minima | sì | sì | sì | sì | sì |
| moltiplicazione | sì | sì | sì | sì | sì |
| nega | sì | sì | sì | sì | sì |
| non | sì | sì | sì | sì | sì |
| optimization_barrier | sì | sì | sì | sì | sì |
| o | sì | sì | sì | sì | sì |
| Outfeed | sì | sì | sì | no | sì |
| tappetino | sì | sì | sì | sì | sì |
| partition_id | sì | sì | sì | sì | sì |
| popcnt | sì | sì | sì | sì | sì |
| potenza | sì | sì | sì | sì | sì |
| reale | sì | sì | sì | sì | sì |
| real_dynamic_slice | no | rivedere | no | sì | no |
| recv | sì | sì | impossibile | no | sì |
| reduce | sì | rivedere | sì | rivedere | sì |
| reduce_precision | sì | sì | sì | sì | sì |
| reduce_scatter | sì | rivedere | no | no | sì |
| reduce_window | sì | rivedere | sì | no | sì |
| resto | sì | sì | sì | sì | sì |
| replica_id | sì | sì | sì | sì | sì |
| rimodellare | sì | sì | impossibile | sì | sì |
| return | no | rivedere | impossibile | sì | sì |
| inverti | sì | sì | sì | sì | sì |
| rng | sì | sì | sì | sì | rivedere |
| rng_bit_generator | sì | rivedere | impossibile | sì | rivedere |
| round_nearest_afz | sì | sì | sì | sì | sì |
| round_nearest_even | sì | sì | sì | sì | sì |
| rsqrt | sì | sì | sì | sì | sì |
| scatter | sì | rivedere | sì | no | sì |
| select | sì | sì | sì | sì | sì |
| select_and_scatter | sì | rivedere | sì | no | sì |
| Invia | 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ì |
| firmare | sì | sì | sì | sì | sì |
| seno | sì | sì | sì | sì | sì |
| sezione | sì | sì | sì | no | sì |
| ordinare | 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 | rivedere | no | no | rivedere |
| trasponi | sì | sì | sì | sì | sì |
| triangular_solve | sì | rivedere | sì | no | rivedere |
| tuple | sì | sì | sì | sì | sì |
| unary_einsum | no | rivedere | no | sì | rivedere |
| uniform_dequantize | sì | sì | sì | sì | no |
| uniform_quantize | sì | rivedere | impossibile | sì | no |
| mentre | sì | rivedere | sì | rivedere | sì |
| Xor | sì | sì | sì | sì | sì |
Inferenza dei tipi per operazioni quantiizzate
La colonna Type Inference della tabella precedente è pensata per concentrarsi sulle operazioni non quantiizzate. Per la maggior parte delle operazioni quantiizzate, non è possibile dedurre il tipo di risultato perché i parametri di quantizzazione dei tipi di risultati possono variare da quelli degli operandi. {2, {2, {2,} {2,} case, case, case, case, case, case, case, case, caseall_gatherall_to_allcollective_permutecompareconcatenateconstantdynamic_slicedynamic_update_slicegatherget_tuple_elementifinfeedis_finitemapoptimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile