从 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
、 /}。map
optimization_barrier
outfeed
pad
recv
reduce
reduce_scatter
reduce_window
reverse
scatter
select_and_scatter
send
slice
sort
transpose
tuple
uniform_dequantized
while