ReduceStdV2Update
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
产品与芯片映射关系参见昇腾产品形态说明。其中 Ascend 950PR&950DT系列产品 为本次新增 Ascend C Kernel 实现的目标平台;其余支持产品由已有 TBE binary 覆盖。
功能说明
-
算子功能:接收原始输入
x和已计算好的均值mean(已广播到x的 shape),沿指定维度dim归约计算平方偏差和,再除以N - correction得到方差或标准差。支持贝塞尔校正(correction)与 keepdim。ReduceStdV2Update 是 CANN l0op 内部算子,被aclnnVar/aclnnVarCorrection/aclnnVarMean在非 regbase 路径下内部调用,使aclnnVarMean可复用 mean 结果避免重复求均值。 -
计算公式:
diff=x−μ\text{diff} = x - \mu
sq_sum=∑i∈Ddiffi2\text{sq\_sum} = \sum_{i \in D} \text{diff}_{i}^{2}
var=sq_sumN−correction\text{var} = \frac{\text{sq\_sum}}{N - \text{correction}}
output={varif if_std=truevarif if_std=false\text{output} = \begin{cases} \sqrt{\text{var}} & \text{if } \text{if\_std} = \text{true} \\ \text{var} & \text{if } \text{if\_std} = \text{false} \end{cases}
其中 DD 为归约维度集合,NN 为归约维度元素个数,μ\mu 为外部传入的均值,correction=0 为有偏估计(分母 N),correction=1 为无偏估计(分母 N-1)。
-
接口间区别:本算子提供两个等价 L0 接口。
ReduceStdV2Update使用bool unbiased参数(true=无偏 N-1,false=有偏 N),被aclnnVar调用;ReduceStdV2UpdateCorrection使用int64_t correction参数(0=有偏,1=无偏),被aclnnVarCorrection调用。两者数学等价,仅参数表达方式不同。L0 接口固定输出方差(if_std=false);GE IR 图模式可通过if_std属性控制输出方差或标准差。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 | 非连续Tensor |
|---|---|---|---|---|---|
| x(self) | 输入 | 原始输入数据,对应公式中 x。0-8 维 ND。 | FLOAT、FLOAT16、BFLOAT16 | ND | √ |
| mean | 输入 | 已计算好的均值,对应公式中 μ,须已 Expand 广播到 self 的 shape。dtype 与 self 一致。 | FLOAT、FLOAT16、BFLOAT16 | ND | √ |
| dim | 属性 | 归约维度列表,对应公式中 D,支持负索引。dim 为空时归约所有维度。 | INT64(ListInt) | - | - |
| if_std | 属性 | false=输出方差,true=输出标准差(开方)。默认 false。aclnn 接口固定 false。 | BOOL | - | - |
| unbiased | 属性 | 是否使用贝塞尔校正。true=无偏(N-1),false=有偏(N)。默认 true。 | BOOL | - | - |
| keepdim | 属性 | 是否保留归约维度。true=设为 1,false=移除。默认 false。 | BOOL | - | - |
| correction | 属性 | 贝塞尔校正因子。0=有偏(N),1=无偏(N-1)。默认 1。 | INT64 | - | - |
| output(output_var) | 输出 | 方差或标准差,对应公式中 output。dtype 与 x 一致,shape 为 x 沿 dim 归约后的 shape。 | FLOAT、FLOAT16、BFLOAT16 | ND | × |
约束说明
- 输入数据类型限制:
x与mean仅支持 FLOAT、FLOAT16、BFLOAT16,且二者数据类型须一致;不支持 DOUBLE、复数、整型。 - shape 约束:
mean必须已通过 Expand 广播到x的 shape;output shape 为x沿dim归约后的 shape(keepdim=true 维度设 1,false 移除)。 - correction/unbiased 约束:仅支持 correction=0(有偏)和 correction=1(无偏)两种语义;correction>1 由上层
aclnnVarCorrection处理。 - 边界情况:空Tensor、单元素且correction≥1的场景通常由上层
aclnnVar/aclnnVarCorrection提前处理;kernel仍做防御性处理,其中输出为空的EMPTY_A路径零操作,归约轴为空但输出非空的EMPTY_R路径返回NaN,normal路径在N <= correction时通过cof=NaN保持相同语义。 - 精度约束(950 实现严格对齐 canndev 原型):
- FP16/BF16 输入固定提升到 FP32 累加(固定提升,无 GetPromoteType),FP32 输入直接计算;结果转回原 dtype。
- BF16 输出回转使用 round 模式(对应 AscendC Cast round),保留 BF16 舍入语义。
- if_std=true 时使用 high_precision vsqrt 开方。
- 输出 dtype 与输入 x 一致,不在接口层做类型提升。
- 确定性说明:本算子默认确定性实现。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| GE图模式 | test_geir_reduce_std_v2_update | 通过算子IR构图方式调用ReduceStdV2Update算子,支持if_std属性控制输出方差或标准差。 |
注:本算子为l0op内部子算子,不对外暴露独立aclnn接口;L0接口固定if_std=false输出方差,GE IR图模式可通过if_std属性控制输出方差或标准差。上层
aclnnVar/aclnnVarCorrection/aclnnVarMean在非regbase路径下内部调用本算子。