StableHLO 状态

从 MHLO 引导 StableHLO 时,我们继承了 MHLO 的许多功能实现,包括美观打印、验证和形状推理。因此,我们已经充分涵盖相应操作集,但仍有许多工作要检查现有实现的完整性,并提供不存在任何新实现的新实现。

此实时文档供开发者和用户跟踪操作集各个方面(规范、验证、类型推断、美观打印、解释器等)的进度。

使用方法

如相应行中提到的,SableHLO 操作在特定方面(如相应列中所述)的进度通过以下跟踪标签之一进行跟踪。

  • 通用标签
    • yes:实现了全面的实现。
    • no:不需要实施,但实施工作是路线图的一部分。 请注意,验证程序永远不能标记为“否”,因为 ODS 已实现一些验证。
  • 验证程序和类型推断的自定义标签
    • yes:存在实现,并且与 StableHLO 语义同步。
    • yes*:存在实现,并且与 XLA 语义同步。由于 XLA 语义经常缺乏文档文档,因此我们使用 hlo_verifier.ccshape_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_gatherall_to_allcasecollective_permutecompareconcatenateconstantdynamic_slicedynamic_update_slicegatherget_tuple_elementifinfeedis_finiteis_finiteis_finite、、、is_finiteis_finite、、、{1、}、is_finite、 /}。mapoptimization_barrieroutfeedpadrecvreducereduce_scatterreduce_windowreversescatterselect_and_scattersendslicesorttransposetupleuniform_dequantizedwhile