从 MHLO 引导 StableHLO 时,我们继承了 MHLO 的许多功能实现,包括美观打印、验证和形状推理。因此,我们已经充分涵盖相应操作集,但仍有许多工作要检查现有实现的完整性,并提供不存在任何新实现的新实现。
此实时文档供开发者和用户跟踪操作集各个方面(规范、验证、类型推断、美观打印、解释器等)的进度。
使用方法
如相应行中提到的,SableHLO 操作在特定方面(如相应列中所述)的进度通过以下跟踪标签之一进行跟踪。
- 通用标签
- yes:实现了全面的实现。
- no:不需要实施,但实施工作是路线图的一部分。 请注意,验证程序永远不能标记为“否”,因为 ODS 已实现一些验证。
- 验证程序和类型推断的自定义标签
- yes:存在实现,并且与 StableHLO 语义同步。
- yes*:存在实现,并且与 XLA 语义同步。由于 XLA 语义经常缺乏文档文档,因此我们使用 hlo_verifier.cc 和 shape_inference.cc 作为参考。
- 重新审视:存在某个实现,但它不在“是”或“是*”之下,要么是因为我们尚未对其进行审核,要么是因为我们发现并发现了问题。
- infeasible:没有实现,因为这种做法不可行。 例如,由于无法根据操作数和属性推断出操作的结果类型。
状态
| StableHLO 运算 | 规范 | 验证 | 类型推断 | 美观输出 | 口译 |
|---|---|---|---|---|---|
| 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 | 是 | 是 | 不可行 | 是 | 是 |
| 场景 | 是 | 重温 | 是 | 否 | 是 |
| cbrt | 是 | 是 | 是 | 是 | 是 |
| ceil | 是 | 是 | 是 | 是 | 是 |
| 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 | 是 | 是 | 是 | 是 | 是 |
| FFT | 是 | 重温 | 是 | 是 | 否 |
| 楼层 | 是 | 是 | 是 | 是 | 是 |
| 收集 | 是 | 是 | 是 | 否 | 是 |
| get_dimension_size | 是 | 是 | 是 | 是 | 是 |
| get_tuple_element | 是 | 是 | 是 | 是 | 是 |
| if | 是 | 重温 | 是 | 否 | 是 |
| 图片 | 是 | 是 | 是 | 是 | 是 |
| 信息流 | 是 | 是 | 不可行 | 否 | 是 |
| Iota | 是 | 是 | 不可行 | 是 | 是 |
| is_finite | 是 | 是 | 是 | 是 | 是 |
| 日志 | 是 | 是 | 是 | 是 | 是 |
| log_plus_one | 是 | 是 | 是 | 是 | 是 |
| 物流 | 是 | 是 | 是 | 是 | 是 |
| map | 是 | 重温 | 是 | 否 | 是 |
| 最大值 | 是 | 是 | 是 | 是 | 是 |
| 最小值 | 是 | 是 | 是 | 是 | 是 |
| 相乘 | 是 | 是 | 是 | 是 | 是 |
| negate | 是 | 是 | 是 | 是 | 是 |
| 非 | 是 | 是 | 是 | 是 | 是 |
| optimization_barrier | 是 | 是 | 是 | 是 | 是 |
| 或 | 是 | 是 | 是 | 是 | 是 |
| 主动馈送 | 是 | 是 | 是 | 否 | 是 |
| 垫子 | 是 | 是 | 是 | 是 | 是 |
| partition_id | 是 | 是 | 是 | 是 | 是 |
| 弹出 | 是 | 是 | 是 | 是 | 是 |
| 幂数 | 是 | 是 | 是 | 是 | 是 |
| real | 是 | 是 | 是 | 是 | 是 |
| real_dynamic_slice | 否 | 重温 | 否 | 是 | 否 |
| 接收 | 是 | 是 | 不可行 | 否 | 是 |
| reduce | 是 | 重温 | 是 | 重温 | 是 |
| reduce_precision | 是 | 是 | 是 | 是 | 是 |
| reduce_scatter | 是 | 重温 | 否 | 否 | 是 |
| reduce_window | 是 | 重温 | 是 | 否 | 是 |
| 余数 | 是 | 是 | 是 | 是 | 是 |
| replica_id | 是 | 是 | 是 | 是 | 是 |
| 调整形状 | 是 | 是 | 不可行 | 是 | 是 |
| return | 否 | 重温 | 不可行 | 是 | 是 |
| reverse | 是 | 是 | 是 | 是 | 是 |
| rng | 是 | 是 | 是 | 是 | 重温 |
| rng_bit_generator | 是 | 重温 | 不可行 | 是 | 重温 |
| round_nearest_afz | 是 | 是 | 是 | 是 | 是 |
| round_nearest_even | 是 | 是 | 是 | 是 | 是 |
| rsqrt | 是 | 是 | 是 | 是 | 是 |
| scatter | 是 | 重温 | 是 | 否 | 是 |
| select | 是 | 是 | 是 | 是 | 是 |
| select_and_scatter | 是 | 重温 | 是 | 否 | 是 |
| send | 是 | 是 | 是 | 否 | 是 |
| set_dimension_size | 否 | 是* | 是* | 是 | 否 |
| shift_left | 是 | 是 | 是 | 是 | 是 |
| shift_right_arithmetic | 是 | 是 | 是 | 是 | 是 |
| shift_right_logical | 是 | 是 | 是 | 是 | 是 |
| 签名 | 是 | 是 | 是 | 是 | 是 |
| 正弦 | 是 | 是 | 是 | 是 | 是 |
| slice | 是 | 是 | 是 | 否 | 是 |
| sort | 是 | 是 | 是 | 否 | 是 |
| sqrt | 是 | 是 | 是 | 是 | 是 |
| subtract | 是 | 是 | 是 | 是 | 是 |
| 双色 | 是 | 是 | 是 | 是 | 是 |
| torch_index_select | 否 | 重温 | 否 | 否 | 重温 |
| 转置 | 是 | 是 | 是 | 是 | 是 |
| triangular_solve | 是 | 重温 | 是 | 否 | 重温 |
| tuple | 是 | 是 | 是 | 是 | 是 |
| unary_einsum | 否 | 重温 | 否 | 是 | 重温 |
| uniform_dequantize | 是 | 是 | 是 | 是 | 否 |
| uniform_quantize | 是 | 重温 | 不可行 | 是 | 否 |
| 而 | 是 | 重温 | 是 | 重温 | 是 |
| 异或 | 是 | 是 | 是 | 是 | 是 |
量化运算的类型推断
上表中的 Type Inference 列旨在侧重于非量化运算。对于大多数量化运算,推断结果类型是不可行的,因为结果类型的量化参数可能与运算数的量化参数不同。除了运算数和结果类型必须完全相同的少数情况,或者运算具有可用于推断结果类型的约束条件之外,下文列出了此类运算:all_gather、all_to_all、case、collective_permute、compare、concatenate、constant、dynamic_slice、dynamic_update_slice、gather、get_tuple_element、if、infeed、is_finite、is_finite、is_finite、、、is_finite、is_finite、、、{1、}、is_finite、 /}。mapoptimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile