已关闭
[Requirement|需求建议]: BNTrainingReduce算子支持Ascend 950 AscendC实现 #4715
yulianjie创建于  25 天前关闭于  18 天前
yulianjie成员
25 天前 创建

Backgroud(背景信息)

BNTrainingReduce 是 BatchNorm 训练阶段的统计量归约算子:对四维 NCHW 输入沿 N、H、W 轴归约,按通道输出元素和 sum 与平方和 square_sum。现有 Ascend 950PR/Ascend 950DT 产品支持项需要补齐 AscendC 实现,使 aclnnBatchNormReduce 及图模式能够在该平台完成编译和执行。

输入 x 支持 FLOAT16、BFLOAT16、FLOAT,输出固定为一维 FLOAT/ND;FLOAT16、BFLOAT16 输入按 FLOAT 精度执行平方与累加。算子无属性,并需要处理空 Tensor 场景。

Origin(信息来源)

CANN ops-nnnorm 类算子的 Ascend 950 适配需求。当前实现来源为提交者 lianjieyu 的 PR #8543;PR 中未注明更具体的提出部门或团队。

Benefit / Necessity (价值/作用)

  • 补齐 BNTrainingReduce 在 Ascend 950PR/Ascend 950DT 上的算子能力,支持 BatchNorm 训练统计量计算。
  • 统一 ACLNN 与 GEIR 图模式的接口、Shape/DType 推导和执行语义。
  • 对 FLOAT16/BFLOAT16 输入采用 FLOAT 累加,提升统计量计算的数值稳定性。
  • 覆盖静态/动态 Shape、空 Tensor 和非法输入等场景,为后续回归与维护提供验证基础。

Design(设计方案)

  • 注册 BNTrainingReduce 原型:输入 x,输出 sumsquare_sum;输入限定 FLOAT16/BFLOAT16/FLOAT + NCHW,输出固定 FLOAT + ND。
  • 实现图级 InferShape/InferDataType:已知 Rank 时校验四维 NCHW 并输出 [C],未知 Rank 时保留动态推导;两个输出数据类型固定为 FLOAT。
  • 在 Host 侧新增 arch35 Tiling,依据 Shape、DType、UB 和核数进行多核切分,覆盖 normal、group、tail 与 empty 等分支。
  • 在 Device 侧新增 AscendC Kernel,完成 sum_c = Σ(n,h,w) x[n,c,h,w]square_sum_c = Σ(n,h,w) x[n,c,h,w]^2,并单独处理空 Tensor。
  • 补充 ACLNN 两段式调用示例、GEIR 静态/动态及异常场景验证代码,同时更新 README、接口文档和算子清单。

验收标准

  • Ascend 950PR/Ascend 950DT 上可构建并加载 BNTrainingReduce 的 AscendC 实现。
  • FLOAT16、BFLOAT16、FLOAT 三种输入均能得到 FLOAT/ND 的 sumsquare_sum,Shape 均为 [C],结果满足精度标准。
  • ACLNN 与 GEIR 静态/动态通路可执行;空 Tensor 语义正确;非法 Rank、Format、DType 能被拒绝。
  • 相关单元测试、示例验证和仓库 CI 通过,且 PR 中阻塞性检视意见已闭环。
  • README、aclnnBatchNormReduce 文档及算子列表与实现能力一致。
likedislike
Yyulianjie成员
25 天前 添加了label:requirement
yuning_chenyuning_chen成员
25 天前 将 lianjieyu 设为负责人
CANN-robotCANN-robot成员
18 天前 关闭了 issue
CANN-robotCANN-robot成员
18 天前 添加了label:resolved