已合并
feat: BatchNormGradV3 在 A5 上支持 output_mask #11948
qianzehong创建于 12 天前
feat: BatchNormGradV3 在 A5 上支持 output_mask #11948
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 qianzehong 的贡献)12 天前 创建了 pull request,commit 9f1eea25
12 天前 关联了issue:[Requirement|需求建议]: BatchNormGradV3 在 A5 上支持输出 mask
atomgit-bot
12 天前 评论:
12 天前 评论:
变更摘要
本次变更在 A5(Ascend950/Ascend350)上为 BatchNormGradV3 新增 output_mask 属性,按 [dx, dweight, dbias] 顺序控制三个必选输出是否需要写入,默认全 true,仅当全 false 时 kernel 直接返回。改动贯穿 OpDef/proto 属性定义、tiling 属性解析与 tilingdata 透传、A5 各 tiling 模板与 kernel 的输出拷贝判断、二进制属性匹配配置,以及 ACLNN L2 接口,并补充了文档、UT 与 golden。A2/A3 的 kernel、tilingdata 布局、二进制配置与 Fast ACLNN/L0 launcher 参数保持原版。
主要改动
- 新增
output_mask算子属性与解析逻辑: 在batch_norm_grad_v3_proto.h与batch_norm_grad_v3_def.cpp中新增可选ListBool属性output_mask,并新增batch_norm_grad_v3_output_mask.h的ParseBatchNormGradV3OutputMask,将长度必须为 3 的布尔列表按位组装为uint64_t(dx、dweight、dbias分别对应 bit 0/1/2),长度非法时返回失败。 - tilingdata 透传 mask: 在
batch_norm_grad_v3_tiling.h的各 TilingData 结构新增outputMask字段、在基类新增outputMask_{7}成员,并在各PostTiling中调用set_outputMask(outputMask_),同时GetShapeAttrsInfo中接入属性解析,使各 tiling 分支都能把 mask 下发到 kernel。 - A5 kernel 按掩码跳过输出拷贝: 在
arch35各 kernel 模板(如BatchNormGradV3RARFullLoad、BatchNormGradV3RARecompute、BatchNormGradV3RASplitR、BatchNormGradV3Infer等)新增SetOutputMask与outputMask_,对dx、dgamma、dbeta的写出分别以 bit 0/1/2 判断;batch_norm_grad_v3_apt.cpp在构造算子后判断outputMask == 0直接返回,否则设置掩码。 - ACLNN L2 入口区分 A5 与 A2/A3: 新增带
outputMask的BatchNormGradV3重载(batch_norm_backward.h/.cpp),以保留 A2/A3 原有 launcher 参数,A5 路径aclnn_batch_norm_backward.cpp传入outputMask。 - 二进制属性匹配与测试/文档配套更新:
ascend350、ascend950的batch_norm_grad_v3_binary.json为各配置项追加output_mask(list_bool);新增 mask 回归 golden、ACLNN UT,并在 host/kernel UT 中断言 tilingdata 末尾outputMask为 7、覆盖全部 8 种 mask 组合与非法长度。
🧩 本次 Review 已使用自定义 Skill:


不准确?
atomgit-bot
12 天前 评论:
12 天前 评论:


不准确?
12 天前 添加了label:cann-cla/yes
此处折叠了121条消息 查看更多
9 天前 添加了label:lgtm
9 天前 关闭了关联的issue
9 天前 合入了pull request
CANN-robot
9 天前 评论:
9 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
BatchNormGradV3 在 A5 上支持按需输出 dx、dweight(dgamma)和 dbias(dbeta)。新增可选 ListBool 属性 output_mask,长度为 3,顺序为 [dx, dweight, dbias],默认全 true;例如 [true, false, false] 仅写出 dx。三个输出仍为必选输出,shape/dtype 保持原定义,关闭输出的内容无效。
A2/A3 影响范围
A2/A3 的原有 kernel、tiling 模板及三个 tilingdata 结构与基线一致。普通 ACLNN 保留原有组合算子路径;Fast ACLNN 保留旧 L0 调用和 OP_ATTR(training, eps),继续由 L2 控制输出拷贝,不引入 kernel 按 mask 跳算的能力。
共用 OpDef/proto 和生成的编译接口存在属性变化,不能认定为接口完全无影响。直接使用旧编译入口并显式传入 version 的调用需要适配;Fast ACLNN 对外接口中的 version 参数保留。A2/A3 真机 ACLNN、精度、性能和 GEIR 尚未验证。
配套修复与主线同步
基线问题已分别通过以下 PR 合入 master,本 PR 已完成同步:
RASplitR 与 RARSplitCoreR1 的 UT 镜像已在末尾补齐 outputMask,序列化大小分别为 192 和 416 字节;后者的 outputMask 位于全部 binAdd 字段之后。已解决与主线的镜像布局冲突,保留融合键注册和错误码修复。
Golden 对 BF16 dtype 字符串先按 Torch dtype 解析,再回退到 NumPy,避免 Torch 通路依赖外部导入 ml_dtypes。已验证 4 个 BF16 CSV 用例的 CPU golden 调用、8 种 dtype 表示、非法 dtype 拒绝,以及 NumPy BF16 输出的按需导入。
主线新增 ascend960dt 配置中的 28 个第三属性同步为 output_mask:list_bool,与共享 OpDef 保持一致;五个平台的 JSON 属性一致性检查通过。
本轮追加验证
A6 范围核对
本算子当前主线注册的 A6 目标为 ascend960dt(DAV_9201)。OpDef 已将该目标指向 batch_norm_grad_v3_apt,ascendc_config.json 已包含其构建目标,ACLNN IsRegbase 与 Host IsRegbaseNpuArch 均已识别 DAV_9201;共享 Kernel 路径和 outputMask 序列化无需另加 A6 专属分支。本 PR 额外对齐 960DT binary.json 中的 output_mask:list_bool 属性,28 条配置与 ascend950 的配置语义一致。
使用仓库现有 Host/API UT 框架,在仓库外编译 DAV_9201 模拟探针:4 个测试通过,覆盖训练/推理全部 8 种 mask、非法 mask 长度、空指针及关闭输出。该验证检查 Host/API 路由,不包含 A6 Kernel 编译和设备执行。
ascend960pr(DAV_9202)尚无本算子的 OpDef/二进制配置,Host RegBase 识别也尚未覆盖该架构;本 PR 不新增这一平台,不能据此宣称 A6 全系列已适配。960DT 的设备精度/性能仍需目标环境验证。
当前提交的 A5 真机精度回归(2026-10-16)
验证提交:
5c1864a56d2e413c99c22c6ffca7b39e9db166ae。设备为 Ascend950PR、0 号卡,CANN 9.3.0;TTK 版本为eaa06de9ea65c5ffd0de5befd9e27483becc8976。在独立目录同步并校验 23,535 个源码文件后,在目标机器完整编包并安装
bngv3v5c1864_nn。ACLNN 的头文件/动态库解析及 Kernel vendor 加载日志均确认使用该包;Kernel 全部结果为BINARY_MATCH,直接执行本次构建的 release binary。安装包 SHA256:
105a6d803e5a1392b3f2511257326a85d8ec40662ab7036745b7a2a5b3aa0811。本轮为精度验证,不据采集到的单次计时宣称性能改善或无回退。关联的Issue
关联需求 Issue:6675
测试
文档更新
补充 proto 的 output_mask 属性说明。新增 tests/st/arch35/ttk_aclnn_batch_norm_grad_v3_st.csv 和 tests/assets/golden.py;golden 直接使用 CPU torch.nn.functional.batch_norm 前向及 torch.autograd.grad,采用 FP64 标杆。训练输入的保存统计量来自匹配的 torch.native_batch_norm 前向,并写回声明的 dtype。CSV 命名与接入方式参照 UndGenQkvRmsNormRopeCache;原有 kernel CSV 和 README 保持原版。
类型标签
AI/Agent生成声明