透過 MHLO 啟動 StableHLO 時,我們繼承了 MHLO 的許多實作項目,包括美化排版、驗證和形狀推論。有鑑於此,我們已提供大量的運算技術,但還有很多機會來檢查現有的實作內容是否完整,並在不存在的地方提供新的實作內容。
這份即時文件可讓開發人員和使用者追蹤各種操作集的進度,例如規格、驗證、類型推論、美化排版、解譯等。
使用方式
如對應欄中所說,在對應資料列中提到的 StableHLO 運算進度,會使用下列其中一種追蹤標籤進行追蹤。
- 一般標籤
- 是:有完善的導入方法。
- no:應用程式未提供實作,但我們正努力進行,這屬於發展藍圖的一部分。請注意,驗證器永遠不得加上「no」標籤,因為 ODS 已導入部分驗證程序。
- 驗證者和類型推論的自訂標籤
- yes:有一個實作項目,而且會與 StableHLO 語意保持同步。
- yes*:已有實作,且會與 XLA 語意保持同步。XLA 語意通常是未記載的,因此我們使用 hlo_verifier.cc 和 shape_inference.cc 做為參考。
- revisit:有實作程序,但並未歸類到「是」或「是*」,原因可能在於我們尚未稽核,或是系統偵測到問題。
- 不可行:沒有實作,因為不可能。舉例來說,因為系統無法根據運算元和屬性推論運算的結果類型。
狀態
| 結構定義 | 規格 | 驗證 | 型別推斷 | 美化印刷 | 翻譯模式 |
|---|---|---|---|---|---|
| abs | 是 | 是 | 是 | 是 | 是 |
| add | 是 | 是 | 是 | 是 | 是 |
| after_all | 是 | 是 | 是 | 是 | 是 |
| all_gather | 是 | 再次瀏覽 | 否 | 否 | 是 |
| all_reduce | 是 | 再次瀏覽 | 是 | 否 | 是 |
| all_to_all | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 和 | 是 | 是 | 是 | 是 | 是 |
| atan2 | 是 | 是 | 是 | 是 | 是 |
| batch_norm_grad | 是 | 再次瀏覽 | 是 | 否 | 再次瀏覽 |
| batch_norm_inference | 是 | 再次瀏覽 | 是 | 否 | 再次瀏覽 |
| batch_norm_training | 是 | 再次瀏覽 | 是 | 否 | 再次瀏覽 |
| bitcast_convert | 是 | 是 | 不可行 | 是 | 是 |
| 廣播訊息 | 否 | 是* | 是* | 是 | 再次瀏覽 |
| broadcast_in_dim | 是 | 是 | 不可行 | 是 | 是 |
| 客服案件 | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 哭泣 | 是 | 是 | 是 | 是 | 是 |
| Cil | 是 | 是 | 是 | 是 | 是 |
| Cholesky | 是 | 是 | 是 | 是 | 再次瀏覽 |
| 限制取值範圍 | 是 | 再次瀏覽 | 是 | 是 | 是 |
| collective_broadcast | 是 | 再次瀏覽 | 是 | 否 | 是 |
| collective_permute | 是 | 再次瀏覽 | 是 | 否 | 是 |
| compare | 是 | 是 | 是 | 是 | 是 |
| 複雜 | 是 | 是 | 是 | 是 | 是 |
| 複合 | 是 | 是 | 不可行 | 是 | 是 |
| concatenate | 是 | 是 | 是 | 是 | 是 |
| 常數 | 是 | 是 | 是 | 是 | 是 |
| 完成轉換 | 是 | 是 | 不可行 | 是 | 是 |
| 卷積 | 是 | 是 | 不可行 | 再次瀏覽 | 是 |
| 餘弦 | 是 | 是 | 是 | 是 | 是 |
| count_leading_zeros | 是 | 是 | 是 | 是 | 是 |
| create_token | 否 | 是* | 是* | 是 | 再次瀏覽 |
| 跨備用資源-總和 | 否 | 再次瀏覽 | 是* | 否 | 再次瀏覽 |
| custom_call | 是 | 是 | 不可行 | 是 | 是 |
| 除 | 是 | 是 | 是 | 是 | 是 |
| 點號 | 否 | 再次瀏覽 | 不可行 | 是 | 再次瀏覽 |
| dot_general | 是 | 再次瀏覽 | 不可行 | 否 | 是 |
| dynamic_broadcast_in_dim | 是 | 是 | 不可行 | 是 | 再次瀏覽 |
| dynamic_conv | 是 | 是 | 不可行 | 再次瀏覽 | 再次瀏覽 |
| dynamic_gather | 是 | 是 | 不可行 | 否 | 再次瀏覽 |
| dynamic_iota | 是 | 是 | 不可行 | 是 | 再次瀏覽 |
| dynamic_pad | 是 | 是 | 不可行 | 是 | 再次瀏覽 |
| dynamic_reshape | 是 | 是 | 不可行 | 是 | 再次瀏覽 |
| dynamic_slice | 是 | 是 | 是 | 是 | 是 |
| dynamic_update_slice | 是 | 是 | 是 | 是 | 是 |
| einsum | 否 | 再次瀏覽 | 否 | 是 | 再次瀏覽 |
| 指數 | 是 | 是 | 是 | 是 | 是 |
| exponential_minus_one | 是 | 是 | 是 | 是 | 是 |
| 夫特 | 是 | 再次瀏覽 | 是 | 是 | 否 |
| floor | 是 | 是 | 是 | 是 | 是 |
| 收集 | 是 | 是 | 是 | 否 | 是 |
| get_dimension_size | 是 | 是 | 是 | 是 | 是 |
| get_tuple_element | 是 | 是 | 是 | 是 | 是 |
| if | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 圖片 | 是 | 是 | 是 | 是 | 是 |
| 動態內廣告 | 是 | 是 | 不可行 | 否 | 是 |
| Iota | 是 | 是 | 不可行 | 是 | 是 |
| is_finite | 是 | 是 | 是 | 是 | 是 |
| 紀錄/記錄檔 | 是 | 是 | 是 | 是 | 是 |
| log_plus_one | 是 | 是 | 是 | 是 | 是 |
| 物流 | 是 | 是 | 是 | 是 | 是 |
| 地圖 | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 最高 | 是 | 是 | 是 | 是 | 是 |
| 最低 | 是 | 是 | 是 | 是 | 是 |
| 相乘 | 是 | 是 | 是 | 是 | 是 |
| negate | 是 | 是 | 是 | 是 | 是 |
| 不是 | 是 | 是 | 是 | 是 | 是 |
| optimization_barrier | 是 | 是 | 是 | 是 | 是 |
| 或 | 是 | 是 | 是 | 是 | 是 |
| Outfeed | 是 | 是 | 是 | 否 | 是 |
| 墊片 | 是 | 是 | 是 | 是 | 是 |
| partition_id | 是 | 是 | 是 | 是 | 是 |
| Popcnt | 是 | 是 | 是 | 是 | 是 |
| 功率 | 是 | 是 | 是 | 是 | 是 |
| real | 是 | 是 | 是 | 是 | 是 |
| real_dynamic_slice | 否 | 再次瀏覽 | 否 | 是 | 否 |
| 最佳化建議 | 是 | 是 | 不可行 | 否 | 是 |
| 減少 | 是 | 再次瀏覽 | 是 | 再次瀏覽 | 是 |
| reduce_precision | 是 | 是 | 是 | 是 | 是 |
| reduce_scatter | 是 | 再次瀏覽 | 否 | 否 | 是 |
| reduce_window | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 餘數 | 是 | 是 | 是 | 是 | 是 |
| replica_id | 是 | 是 | 是 | 是 | 是 |
| Reshape | 是 | 是 | 不可行 | 是 | 是 |
| return | 否 | 再次瀏覽 | 不可行 | 是 | 是 |
| 反向排序 | 是 | 是 | 是 | 是 | 是 |
| 原始 | 是 | 是 | 是 | 是 | 再次瀏覽 |
| rng_bit_generator | 是 | 再次瀏覽 | 不可行 | 是 | 再次瀏覽 |
| round_nearest_afz | 是 | 是 | 是 | 是 | 是 |
| round_nearest_even | 是 | 是 | 是 | 是 | 是 |
| rsqrt | 是 | 是 | 是 | 是 | 是 |
| scatter | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 選取 | 是 | 是 | 是 | 是 | 是 |
| select_and_scatter | 是 | 再次瀏覽 | 是 | 否 | 是 |
| 傳送 | 是 | 是 | 是 | 否 | 是 |
| set_dimension_size | 否 | 是* | 是* | 是 | 否 |
| shift_left | 是 | 是 | 是 | 是 | 是 |
| shift_right_arithmetic | 是 | 是 | 是 | 是 | 是 |
| shift_right_logical | 是 | 是 | 是 | 是 | 是 |
| 簽署 | 是 | 是 | 是 | 是 | 是 |
| 正弦 | 是 | 是 | 是 | 是 | 是 |
| 配量 | 是 | 是 | 是 | 否 | 是 |
| 排序 | 是 | 是 | 是 | 否 | 是 |
| sqrt | 是 | 是 | 是 | 是 | 是 |
| subtract | 是 | 是 | 是 | 是 | 是 |
| 棕褐色 | 是 | 是 | 是 | 是 | 是 |
| torch_index_select | 否 | 再次瀏覽 | 否 | 否 | 再次瀏覽 |
| 轉置 | 是 | 是 | 是 | 是 | 是 |
| triangular_solve | 是 | 再次瀏覽 | 是 | 否 | 再次瀏覽 |
| tuple | 是 | 是 | 是 | 是 | 是 |
| unary_einsum | 否 | 再次瀏覽 | 否 | 是 | 再次瀏覽 |
| uniform_dequantize | 是 | 是 | 是 | 是 | 否 |
| uniform_quantize | 是 | 再次瀏覽 | 不可行 | 是 | 否 |
| 期間 | 是 | 再次瀏覽 | 是 | 再次瀏覽 | 是 |
| Xor | 是 | 是 | 是 | 是 | 是 |
量化運算的型別推論
上表的 Type Inference 欄主要用於非量化作業。在大部分的量化運算中,結果類型的量化參數可能與運算元不同,因此無法推論結果類型。除了「few」與 {1, 2, 3}/ 2, 3}/ 2, 3}/ 2, 3}/ 2, 3}/ 2, 3}/ 2, 2, 3}/7}/7}/7}/7all_gatherall_to_allcasecollective_permutecompareconcatenateconstantdynamic_slicedynamic_update_slicegatherget_tuple_elementifinfeedis_finitemapoptimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile