Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
需求 ReduceStdV2Update 算子支持 Ascend950 ascendc 实现
aclnnVar
aclnnVarMean
torch.var
torch.std
ACLNNTYPE=aclnn_exclude
aclnnVarCorrection
if_std
aclnnStd
l0op::ReduceStdV2Update(kernel)
调用链:
aclnnVar(x, dim, correction, keepdim) → ReduceMean(x) → Expand(mean, x.shape) → l0op::ReduceStdV2Update(x, mean, dim, unbiased, keepdim) ← 本算子 → output_var
属性:
dim
unbiased
keepdim
correction
InferShape4ReduceStdFunc
.Format({ge::FORMAT_ND})
cof = 1/(N-correction)
templateType(bit0) | isEmptyTensor(bit1) | isTailR(bit2)
实现 normal/group/empty 三套模板,共 15 份 binary(5 模板组合 × 3 dtype):
SetScheduleMode(1)
双输入并行载入:x + mean 两个 GM tensor 策略 B 并行载入(preIn 并行槽不开 DoubleBuffer)。
x
mean
/assign
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
一、背景信息 (必填)
需求 ReduceStdV2Update 算子支持 Ascend950 ascendc 实现
二、价值/作用 (必填)
aclnnVar/aclnnVarMean等上层接口在 Ascend 950 上具备 AscendC 原生 kernel 实现能力,替代旧版 TBE binary,获得更好的性能可维护性和功能扩展性。aclnnVarMean可复用外部传入的 mean 结果,避免重复求均值,提升方差/均值联合计算场景的性能。torch.var/torch.std的底层实现组件,支撑 PyTorch 训练和推理框架在 Ascend 950 上的归约统计计算。三、设计方案 (必填)
3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
ACLNNTYPE=aclnn_exclude),不对外暴露独立 aclnn L2 接口。aclnn 调用经上层aclnnVar/aclnnVarCorrection/aclnnVarMean间接触发。if_std属性可控制输出方差(if_std=false)或标准差(if_std=true)。torch.var/torch.std→ torch_npu →aclnnVar/aclnnStd→l0op::ReduceStdV2Update(kernel)。调用链:
3.2 总体设计
3.2.1 算子支持的数据类型
属性:
dim:ListInt,归约维度列表,支持负索引,dim 为空时归约所有维度if_std:Bool(默认 false),false=输出方差,true=输出标准差(开方)unbiased:Bool(默认 true),true=无偏(N-1),false=有偏(N)keepdim:Bool(默认 false),是否保留归约维度correction:Int(默认 1),0=有偏(N),1=无偏(N-1)3.2.2 host侧设计
InferShape4ReduceStdFunc逻辑,支持负索引归一化和全归约。format 限制由 def.cpp 的.Format({ge::FORMAT_ND})保证,infershape 不做 format 检查。cof = 1/(N-correction)在 host 高精度计算后下发,含除零保护。TilingKey 编码:templateType(bit0) | isEmptyTensor(bit1) | isTailR(bit2),动态分发 normal/group/empty 三套模板。3.2.3 kernel侧设计
实现 normal/group/empty 三套模板,共 15 份 binary(5 模板组合 × 3 dtype):
SetScheduleMode(1)启用 group 调度。双输入并行载入:x + mean 两个 GM tensor 策略 B 并行载入(preIn 并行槽不开 DoubleBuffer)。
3.3 支持硬件
3.4 算子约束限制
x与mean仅支持 FLOAT、FLOAT16、BFLOAT16,且二者数据类型须一致;不支持 DOUBLE、复数、整型。mean必须已通过 Expand 广播到x的 shape;output shape 为x沿dim归约后的 shape(keepdim=true 维度设 1,false 移除)。aclnnVarCorrection处理。if_std属性控制输出方差或标准差。本算子为 l0op 内部子算子,不对外暴露独立 aclnn L2 接口。aclnnVar/aclnnVarCorrection提前拦截返回 NAN/INF,kernel 实现含防御性处理。💡 备注(选填)