已关闭
[Requirement|需求建议]: BNInferGrad算子支持Ascend950 Ascendc实现 #4333
yulianjie创建于  7月25日关闭于  7月30日
yulianjie成员
7月25日 创建

Background(背景信息)

BNInferGrad 用于计算 Batch Normalization 推理模式下输入的反向梯度。当前需要为该算子补充 Ascend 950 平台的 AscendC 实现,打通算子定义、图推导、Host Tiling、Kernel、GEIR 示例、测试与文档链路。

计算公式如下:

x_backprop=grads×scalebatch_variance+epsilonx\_backprop = grads \times \frac{scale}{\sqrt{batch\_variance + epsilon}}

其中 scale 和 batch_variance 沿 grads 的 C 维广播。

Origin(信息来源)

Vector 相关需求。

Benefit / Necessity(价值/作用)

  • 补齐 BNInferGrad 算子在 Ascend 950 平台上的 AscendC 实现。
  • 支持 FLOAT16、FLOAT、BFLOAT16 三种梯度数据类型以及 2D~5D 输入。
  • 完善从图定义、Shape/Dtype 推导、Tiling 到 Kernel 执行的完整算子链路。
  • 补充 GEIR 示例、UT、Golden 和算子文档,提高功能可验证性和后续维护效率。

Design(设计方案)

1. 功能规格

  • grads:2D~5D ND 张量,支持 FLOAT16、FLOAT、BFLOAT16。
  • scale:一维 FLOAT 张量,长度必须等于 grads 的 C 维。
  • batch_variance:一维 FLOAT 张量,长度必须等于 grads 的 C 维。
  • epsilon:可选 FLOAT 属性,默认值为 0.0001。
  • x_backprop:shape 和数据类型与 grads 保持一致。

2. 算子定义与图推导

  • 新增 BNInferGrad 算子原型和 OpDef 注册。
  • 实现 Graph Infer、InferShape 和 InferDataType。
  • 配置 Ascend 950 AI Core,支持动态 Shape、动态 Rank 和动态 Format。

3. Host Tiling

  • 新增 arch35 Tiling 实现及 UB 容量计算。
  • 输入 rank 2~4 使用 RANK_4 TilingKey,rank 5 使用 RANK_8 TilingKey。
  • 实现 C 维广播归一化、多核切分和空 Tensor 处理。
  • 校验 grads rank、scale/batch_variance rank 及通道长度一致性。

4. AscendC Kernel

  • 新增 Ascend 950 Kernel 入口和 BnInferGradKernel 模板实现。
  • FP32 路径直接计算;FP16/BF16 路径转换为 FP32 计算后再转换回原数据类型。
  • 使用 NDDMA 随路广播读取 scale 和 batch_variance。
  • 支持多核分片计算和结果搬出。

5. 测试与文档

  • Tiling UT 覆盖三种数据类型、2D~5D、TilingKey 分发、广播、空 Tensor、多核大 Shape及非法输入。
  • InferShape UT 覆盖 2D、4D、5D 输入。
  • Kernel UT 覆盖 RANK_4、RANK_8 数值校验。
  • GEIR 示例覆盖 FP16 多核广播、BF16 数值校验及非法 rank 拒绝场景。
  • 新增算子 README,并更新中文算子清单。

Acceptance Criteria(验收标准)

  • Ascend 950 上能够正确编译和执行 BNInferGrad。
  • 支持 2D~5D ND 输入及 FLOAT16、FLOAT、BFLOAT16 梯度数据类型。
  • 输出 shape、dtype 和数值结果符合算子规格及 Golden 结果。
  • 非法 rank 和通道长度不匹配场景能够正确拦截。
  • 相关编译、UT、GEIR 和仓库准入检查通过。
  • 算子 README 和算子清单更新完整。
likedislike
Yyulianjie成员
7月25日 添加了label:requirement
Yyulianjie成员
7月25日 关联了pull request:[CANNBot] BNInferGrad算子支持Ascend950 Ascendc实现
yuning_chenyuning_chen成员
7月26日 将 lianjieyu 设为负责人
Yyulianjie成员
7月30日 修改了issue 的描述
CANN-robotCANN-robot成员
7月30日 关闭了 issue
CANN-robotCANN-robot成员
7月30日 添加了label:resolved