| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
AdaLayerNorm添加epsilon建议传正数的约束 Co-authored-by: chenhaijie<chenhaijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !10221 merge AdaLayerNorm into master AdaLayerNorm添加epsilon建议传正数的约束 Created-by: chenhaijie1423 Commit-by: chenhaijie Merged-by: cann-robot Description: ## 描述 AdaLayerNorm添加epsilon建议传正数的约束 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5768 ## 测试 仅文档修改 ## 文档更新 更新了以下文档: https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm/docs/aclnnAdaLayerNorm.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm/README.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_v2/docs/aclnnAdaLayerNormV2.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_v2/README.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_quant/docs/aclnnAdaLayerNormQuant.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_quant/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10221 | 1 个月前 | |
修复L2_DFX_PHASE_1参数与接口不一致的问题 Co-authored-by: chenhaijie<chenhaijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !9673 merge master into master 修复L2_DFX_PHASE_1参数与接口不一致的问题 Created-by: chenhaijie1423 Commit-by: chenhaijie Merged-by: cann-robot Description: ## 描述 修复L2_DFX_PHASE_1参数与接口不一致的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5462 ## 测试 涉及修改的四个算子编译+跑example全部OK ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9673 | 1 个月前 | |
AdaLayerNorm添加epsilon建议传正数的约束 Co-authored-by: chenhaijie<chenhaijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !10221 merge AdaLayerNorm into master AdaLayerNorm添加epsilon建议传正数的约束 Created-by: chenhaijie1423 Commit-by: chenhaijie Merged-by: cann-robot Description: ## 描述 AdaLayerNorm添加epsilon建议传正数的约束 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5768 ## 测试 仅文档修改 ## 文档更新 更新了以下文档: https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm/docs/aclnnAdaLayerNorm.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm/README.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_v2/docs/aclnnAdaLayerNormV2.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_v2/README.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_quant/docs/aclnnAdaLayerNormQuant.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_quant/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10221 | 1 个月前 | |
AdaLayerNorm添加epsilon建议传正数的约束 Co-authored-by: chenhaijie<chenhaijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !10221 merge AdaLayerNorm into master AdaLayerNorm添加epsilon建议传正数的约束 Created-by: chenhaijie1423 Commit-by: chenhaijie Merged-by: cann-robot Description: ## 描述 AdaLayerNorm添加epsilon建议传正数的约束 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5768 ## 测试 仅文档修改 ## 文档更新 更新了以下文档: https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm/docs/aclnnAdaLayerNorm.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm/README.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_v2/docs/aclnnAdaLayerNormV2.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_v2/README.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_quant/docs/aclnnAdaLayerNormQuant.md https://gitcode.com/cann/ops-nn/blob/master/norm/ada_layer_norm_quant/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10221 | 1 个月前 | |
fix(add_layer_norm): 修正 welford finalize 的归约系数精度 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !10097 merge aln_294 into master fix(add_layer_norm): 修正 welford finalize 的归约系数精度 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 修正 arch35(Regbase)平台上 add_layer_norm / add_layer_norm_quant 算子 Welford finalize 阶段的归约系数精度问题。 原实现中归约系数 reduceScale = 1.0f / cols_(单次浮点除法),在 Welford 并行归约迭代过程中累积舍入误差,导致 mean/rstd 输出精度下降。 ### 改动原因 add_layer_norm_regbase_welford.h 中 Welford finalize 阶段使用 reduceScale = 1.0f / cols_ 作为归约系数。该值为单次浮点除法结果,在并行归约的多次迭代中反复参与运算,累积舍入误差,影响 mean/rstd 的最终精度。非对齐场景(VFWelfordParallelFinalizeNonAlignSituation1/2/3)和对齐场景(VFWelfordParallelFinalizeAlign)均存在此问题。 ### 改动方法 将归约系数拆分为两部分,分离精确的 2 的幂倒数和修正系数: 1. **reduceScale_ = 1.0f / reducePowerOfTwo**(reducePowerOfTwo 为不小于 cols_ 的最小 2 的幂):2 的幂倒数在 IEEE 754 中精确表示,归约迭代中无舍入误差累积。 2. **reduceScaleCorrection_ = reducePowerOfTwo / cols_**:修正系数,在 DichotomyAdd 完成后通过 Muls 一次性修正。 最终数学等价:sum * (1/reducePowerOfTwo) * (reducePowerOfTwo/cols_) = sum / cols_,但精度提升:归约过程使用精确的 2 的幂倒数,仅最终一次 Muls 引入单次舍入。 具体变更: - **add_layer_norm_regbase_common.h**(+17 -7):VFWelfordParallelFinalizeNonAlignSituation1/2/3 及 dispatcher VFWelfordParallelFinalizeNonAlign 新增 reduceScaleCorrection 参数,在 DichotomyAdd 后对 mean/var 执行 Muls(..., reduceScaleCorrection, ...)。 - **add_layer_norm_regbase_welford.h**(+18 -6):新增 reduceScale_ / reduceScaleCorrection_ 成员,Init 中计算 reducePowerOfTwo;对齐场景同样拆分 scale = 1/powerOfTwo_(精确)+ scaleCorrection = powerOfTwo_/colsPerLoop_(修正),VFWelfordParallelFinalizeAlign 新增 scaleCorrection 参数并在 DichotomyAdd 后修正 mean/var;调用处改用预计算成员。 - **add_layer_norm_quant_regbase_helper.h**(+1 -1):quant 路径调用 VFWelfordParallelFinalizeNonAlign 时传 reduceScaleCorrection = 1.0f(quant 侧无需修正)。 涉及文件: - norm/add_layer_norm/op_kernel/arch35/add_layer_norm_regbase_common.h(+17 -7) - norm/add_layer_norm/op_kernel/arch35/add_layer_norm_regbase_welford.h(+18 -6) - norm/add_layer_norm_quant/op_kernel/arch35/add_layer_norm_quant_regbase_helper.h(+1 -1) ## 关联的Issue -https://gitcode.com/cann/ops-nn/pull/8804 ## 测试 - 在 arch35(Regbase)平台上验证 add_layer_norm / add_layer_norm_quant 算子 mean/rstd 输出精度提升。 - 覆盖对齐和非对齐 cols 场景。 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10097 | 1 个月前 | |
fix file name Co-authored-by: liuyun_nj<liuyun90@h-partners.com> # message auto-generated for no-merge-commit merge: !10037 merge master into master fix file name Created-by: liuyun_nj Commit-by: liuyun_nj Merged-by: cann-robot Description: ## 描述 调整重复文件名 ## 关联的Issue #5695 ## 测试 回黄编包,验证 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10037 | 1 个月前 | |
fix(add_layer_norm): 修正 welford finalize 的归约系数精度 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !10097 merge aln_294 into master fix(add_layer_norm): 修正 welford finalize 的归约系数精度 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 修正 arch35(Regbase)平台上 add_layer_norm / add_layer_norm_quant 算子 Welford finalize 阶段的归约系数精度问题。 原实现中归约系数 reduceScale = 1.0f / cols_(单次浮点除法),在 Welford 并行归约迭代过程中累积舍入误差,导致 mean/rstd 输出精度下降。 ### 改动原因 add_layer_norm_regbase_welford.h 中 Welford finalize 阶段使用 reduceScale = 1.0f / cols_ 作为归约系数。该值为单次浮点除法结果,在并行归约的多次迭代中反复参与运算,累积舍入误差,影响 mean/rstd 的最终精度。非对齐场景(VFWelfordParallelFinalizeNonAlignSituation1/2/3)和对齐场景(VFWelfordParallelFinalizeAlign)均存在此问题。 ### 改动方法 将归约系数拆分为两部分,分离精确的 2 的幂倒数和修正系数: 1. **reduceScale_ = 1.0f / reducePowerOfTwo**(reducePowerOfTwo 为不小于 cols_ 的最小 2 的幂):2 的幂倒数在 IEEE 754 中精确表示,归约迭代中无舍入误差累积。 2. **reduceScaleCorrection_ = reducePowerOfTwo / cols_**:修正系数,在 DichotomyAdd 完成后通过 Muls 一次性修正。 最终数学等价:sum * (1/reducePowerOfTwo) * (reducePowerOfTwo/cols_) = sum / cols_,但精度提升:归约过程使用精确的 2 的幂倒数,仅最终一次 Muls 引入单次舍入。 具体变更: - **add_layer_norm_regbase_common.h**(+17 -7):VFWelfordParallelFinalizeNonAlignSituation1/2/3 及 dispatcher VFWelfordParallelFinalizeNonAlign 新增 reduceScaleCorrection 参数,在 DichotomyAdd 后对 mean/var 执行 Muls(..., reduceScaleCorrection, ...)。 - **add_layer_norm_regbase_welford.h**(+18 -6):新增 reduceScale_ / reduceScaleCorrection_ 成员,Init 中计算 reducePowerOfTwo;对齐场景同样拆分 scale = 1/powerOfTwo_(精确)+ scaleCorrection = powerOfTwo_/colsPerLoop_(修正),VFWelfordParallelFinalizeAlign 新增 scaleCorrection 参数并在 DichotomyAdd 后修正 mean/var;调用处改用预计算成员。 - **add_layer_norm_quant_regbase_helper.h**(+1 -1):quant 路径调用 VFWelfordParallelFinalizeNonAlign 时传 reduceScaleCorrection = 1.0f(quant 侧无需修正)。 涉及文件: - norm/add_layer_norm/op_kernel/arch35/add_layer_norm_regbase_common.h(+17 -7) - norm/add_layer_norm/op_kernel/arch35/add_layer_norm_regbase_welford.h(+18 -6) - norm/add_layer_norm_quant/op_kernel/arch35/add_layer_norm_quant_regbase_helper.h(+1 -1) ## 关联的Issue -https://gitcode.com/cann/ops-nn/pull/8804 ## 测试 - 在 arch35(Regbase)平台上验证 add_layer_norm / add_layer_norm_quant 算子 mean/rstd 输出精度提升。 - 覆盖对齐和非对齐 cols 场景。 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10097 | 1 个月前 | |
AIDD拼写和标点问题修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !10060 merge master into master AIDD拼写和标点问题修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 AIDD拼写和标点问题修改 ## 关联的Issue 关联Issue #5680 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10060 | 1 个月前 | |
fix(norm): 完善RMSNorm量化校验 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10098 merge fix/rmsnorm-aclnn-param-validation into master fix(norm): 完善RMSNorm量化校验 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本 PR 的开发基线为主仓 master@894833b1a7,集中整改错误日志合规报告中与 Ascend 950 RMSNorm 量化类相关、经代码复核后确认需要修改的问题。当前 HEAD 为 d153894d0e3f,相对基线仅包含 1 个提交。开发期间 master 已前进,本次按协作约定不重复 rebase。 提交压缩当时已用 tree ID 和 binary diff SHA-256 双重校验,确认 squash 本身只改变提交历史、未改变文件内容。随后根据 review 意见将 950 直接枚举判定整改为 RegBase 统一判定;本次又根据 P3 意见区分存量产品的原生 V2 能力与 ACLNN V1 回退能力。上述变更均已 amend 进同一提交。当前最终 tree ID 为 59edb4e11d1b26d4835040e7bb60b3cfb37f176c,binary diff SHA-256 为 02bcab58d3ba6c44e13a21d31d31a4d208f7dc61cfdeb774aa3f3a63c77e35a8。 核心修改如下: 1. aclnnAddRmsNormDynamicQuantV2:在 RegBase(当前对应 Ascend 950)补齐跨参数 dtype 关系校验;所有产品统一先校验必选输入/输出 Tensor 指针,再执行 dtype、outputMask 和 shape 校验,避免 dtype 宏在空指针场景先解引用。该顺序调整不改变合法调用语义,非 RegBase 仅改善非法空指针的错误返回稳定性。 2. aclnnAddRmsNormQuant:在 RegBase 补齐输入、量化参数及输出间的 dtype 组合校验;Ascend 950 支持 scales2Optional == nullptr && zeroPoints2Optional != nullptr,第二路缺省 scale 按 1,并确保 y2Out 回拷。 3. aclnnAddRmsNormQuantV2:Excel 未直接收录该接口,但按 V1 同一整改理念一并补齐 RegBase 跨参数 dtype 关系和完整 (x, scale, zero point) binary 组合校验;纳入 V2 特有的 beta/rmsNormOut 关系,修正 beta 文档表格,并在 README/ACLNN 文档中区分存量产品原生 V2 仅支持 divMode=True 与满足约束时 ACLNN 可回退 V1 执行 False 的能力边界。 4. aclnnAddRmsNorm:不改变 rstdOut == nullptr 的合法 PRE/POST 模式,只将该模式下非法 gamma 维数的日志改为明确说明“gamma should be 2 dims”。 5. aclnnNorm:文档明确 dim=[] 是合法输入,语义为对 self 的所有维度求范数,并补充 keepdim 对输出 shape 的影响。 6. DynamicQuant arch35:修正 rank 错误日志中的 actual value,避免错误地固定打印 1。 7. Quant V1/V2 共用 InferShape:第二路输出 y2Out 的存在条件由仅检查 scales2 补齐为检查 scales2 || zeroPoints2。修复 950 zeroPoints2-only 场景中 InferShape 错误给出 {1}、而 tiling/kernel 按完整第二路处理所造成的 GEIR shape 冲突;不修改 kernel 计算逻辑。 ### 修改文件与目的 | 文件 | 修改内容 | 修改目的及产品影响 | | --- | --- | --- | | norm/add_rms_norm/op_host/add_rms_norm_tiling.cpp | PRE/POST 分支的 gamma rank 校验改用带 reason 的日志,reason 为 rstdOut is nullptr, PreRmsNorm/PostRmsNorm mode is used, gamma should be 2 dims。判断条件仍为 gammaDimNum != 2。 | 仅改善错误诊断,不改变任一产品的合法性判断、tiling 或执行行为。该文件为共用文件,因此日志文本对所有产品一致生效。 | | norm/add_rms_norm/tests/ut/op_host/test_add_rms_norm_tiling.cpp | 增加 Ascend 950 PRE 模式、rstdOut 空 shape、gamma 为一维的负向用例。 | 覆盖上述日志对应的失败分支,确认合法的空 rstdOut 模式不会被误判,真正的错误是 gamma rank。 | | norm/add_rms_norm_dynamic_quant/op_host/arch35/add_rms_norm_dynamic_quant_tiling_base_arch35.cpp | gamma、smoothScale1、smoothScale2、beta rank 非法时,日志 actual value 改为真实维数。 | 修复 950 arch35 的错误日志失真,不改变校验规则。 | | norm/add_rms_norm_dynamic_quant/op_host/op_api/aclnn_add_rms_norm_dynamic_quant_v2.cpp | 统一以 AclnnUtil::IsRegbase() 识别 RegBase 路径,补齐 RegBase 跨参数 dtype 关系;将公共校验流程整理为“x1/x2/gamma 及五个输出指针判空 → dtype → outputMask → processOut 计算 → shape/执行”,删除按产品重复调用 CheckDtypeValid 和带 processOut1/processOut2 的条件判空分支。 | 当前 RegBase 即 Ascend 950,其非法 dtype 组合在 L2 阶段被准确拦截;所有产品都在 dtype/shape 解引用前稳定拦截必选 Tensor 空指针。outputMask 表示某路输出数据是否有效,不会把对应输出 Tensor 变成可选指针;因此合法调用和非 RegBase 参数接受范围不变。 | | norm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant_v2.cpp | 增加 950 的 x2 dtype 不一致、beta dtype 不一致、xOut dtype 不一致、inactive output 为空四类负向用例,并补充 Ascend 910B inactive output 为空的回归用例。 | 验证 950 dtype 错误返回 ACLNN_ERR_PARAM_INVALID,并证明 950、910B 均在禁用输出传空指针时稳定返回 ACLNN_ERR_PARAM_NULLPTR。 | | norm/add_rms_norm_quant/docs/aclnnAddRmsNormQuant.md | 明确仅 Ascend 950 支持 zeroPoints2-only;缺少 scales2 时 scale=1,公式为 y2Out = round(y + zero_points2),且 y2Out 与 x1 同 shape;其他产品不支持该组合。 | 统一 950 的接口文档、L2、tiling 和 kernel 契约。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_infershape.cpp | V1/V2 共用 InferShape 将第二路存在条件从仅 scales2 改为 scales2 || zeroPoints2;任一第二路量化参数存在时,y2Out 均推导为与 x1 相同的完整 shape。 | 修复 950 zeroPoints2-only 在图模式下被错误推导成 dummy {1}、随后与 tiling/kernel 完整 y2 契约冲突的问题。支持场景的执行逻辑和 kernel 不变;A2/A3 合法场景本来就要求 scales2,因此其既有合法行为不变。 | | norm/add_rms_norm_quant/tests/ut/op_host/CMakeLists.txt | 将仓内既有 InferShape UT 源文件接入 OP_INFERSHAPE_MODULE_NAME。 | 修复该 UT 文件存在但未实际参与构建执行的问题,使 InferShape 回归能够真正拦截契约偏差。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_AddRmsNormQuant_infershape.cpp | 在既有测试基础上补充 V1/V2 各两例:zeroPoints2-only 推导完整 y2,以及无第二路参数推导 dummy y2。 | 同时锁定修复分支和兼容分支;4 个新增测试均已实际执行通过。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_tiling_arch35.cpp | 将第二路 zero point dtype 的选取条件从 hasScales2 && hasZeroPoints2 改为 hasZeroPoints2。 | 修复 950 zeroPoints2-only 跳过 dtype 组合校验的问题。该类只在 IsRegbaseSocVersion() 为真时实例化;910B/910_93 走 non-RegBase tiling,不执行本分支。该修改由 Quant V1/V2 的 950 路径共用,不负责 y2 分配、计算或回拷。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.cpp | 保留 master 的逐 Tensor dtype 范围检查;以 AclnnUtil::IsRegbase() 决定是否继续执行跨参数关系和完整 dtype 组合校验;第二路存在条件改为 scales2 != nullptr || (isRegbase && zeroPoints2 != nullptr),确保 Ascend 950 zeroPoints2-only 场景的 y2 回拷。 | 实现 Ascend 950 zeroPoints2-only 的 L2 闭环,并将新增严格校验限定在 RegBase;910/310 仍仅以 scales2 判断第二路。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.h | 公开头文件说明 950 缺省 scales2 时按 1,且其他产品不支持 zeroPoints2-only。 | 让 API 注释与公开文档和实现一致。 | | norm/add_rms_norm_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant.cpp | 将既有 950 用例显式固定为 ASCEND950;增加 950 zeroPoints2-only 成功用例,以及 x2/scales dtype 关系和非法 dtype 组合负向用例。 | 防止 UT 受默认模拟产品影响,覆盖 950 新契约和错误返回。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_add_rms_norm_quant_tiling.cpp | zeroPoints2-only 从预期失败调整为 950 预期成功,验证完整 y2 shape、tiling key 1012;增加非法 zeroPoints2 dtype 组合失败检查。 | 同时覆盖 950 功能路径与边界校验。 | | norm/add_rms_norm_quant_v2/README.md | 按多产品差异描述规范整理参数顺序和产品差异表,补齐 dst_type/output_res,明确 950 zeroPoints2-only 的 scale=1 契约;区分存量产品原生 V2 与 ACLNN V1 回退路径的 div_mode=False 能力。 | 使 README 同时满足文档规范、多产品差异表达和各调用通路的实际能力,避免把原生 V2 限制误写成 ACLNN 接口完全不支持。 | | norm/add_rms_norm_quant_v2/docs/aclnnAddRmsNormQuantV2.md | 补充 scales2/zeroPoints2 组合约束和 950 scale=1 公式;修正 8 行将 FLOAT16/BFLOAT16 组合中 betaOptional 误写为 FLOAT32 的表格;说明跨参数 dtype 关系;补充存量产品 divMode=False 的 ACLNN V1 回退条件。 | 使公开文档与 950 binary 签名、ACLNN 前置校验及存量产品实际分流逻辑一致。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.cpp | 保留逐 Tensor dtype 范围检查;以语义一致的 IsRegbase() 封装 AclnnUtil::IsRegbase(),在其外层分支内调用 CheckCommonDtypeRelationV2 和 CheckRegbaseDtypeCombinationV2,补充 x/gamma/beta/xOut/resOut、两路 scale、两路 zero point 和 y1/y2 关系及完整 (x, scale, zero point) 组合校验。 | 与 V1 的 RegBase 整改理念对齐,当前对应 Ascend 950;两项新增校验不会进入 910B/910_93/310P 路径,不改空指针、shape、L0 或 kernel 契约。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.h | 同步 950 scale=1 与非 950 组合限制的 API 注释。 | 保证头文件、ACLNN 文档和实现一致。 | | norm/add_rms_norm_quant_v2/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant_v2.cpp | 保留 zeroPoints2-only 成功例,增加 950 合法全参数例和 9 个 dtype 关系/组合负例;保留 910B/910_93/310P gamma 兼容用例。 | 覆盖 V2 新增校验的每类关系,并验证非 950 兼容路径没有被改变。 | | norm/lp_norm_v2/docs/aclnnNorm.md | 明确 dim 不能为空指针,但可以是长度为 0 的数组;空数组表示归约所有维度,并说明 keepdim=true/false 的输出 shape。 | 修正文档歧义;实现本身支持 dim=[],无需修改算子代码。 | ### 范围边界 - 本 PR 的功能性修改聚焦 Ascend 950,代码路由统一使用 AclnnUtil::IsRegbase();当前 ACLNN 产品映射中 RegBase 即 Ascend 950,RegBase 能力校验按通用语义实现,不再直接比较 SocVersion::ASCEND950。DynamicQuant V2 的必选 Tensor 判空顺序统一作用于所有产品,但不改变合法输入契约;非 RegBase 仅将非法空指针场景提前、稳定地返回 ACLNN_ERR_PARAM_NULLPTR。 - aclnnAddRmsNormQuantV2 只新增 950 L2 参数校验,不改 L2 计算/回拷或 kernel:zeroPoints2-only 已由 CheckSupportV2()、RegBase L0 的 scales2 || zeroPoints2、shape 一致时的 y2 ViewCopy 和 HAS_SCALE2=false/HAS_ZEROPOINTS2=true kernel 模板实现闭环。 - 本 PR 只参考 !9263 中与 V1 dtype 理念一致的部分,没有带入其 xOut 必选、shape 或 L0 参数顺序等其他改动。 - aclnnAddRmsNorm 的共用 tiling 文件只改日志文案,不改变 310/910/950 的判断或执行结果。 - aclnnAddRmsNormDynamicQuant V1 的 ACLNN L2 契约不修改;仅修正 arch35 tiling 错误日志中的实际 rank。报告中的非 ND format、可选参数 nullptr 属于扫描器预设口径问题,不应据此收缩接口。 - norm/add_rms_norm/op_host/op_api/aclnn_add_rms_norm.cpp 及其 310P UT 已从本 PR 恢复为 master,不包含 310P 功能改动。 - norm/add_rms_norm_quant/tests/st/ 和 norm/add_rms_norm_quant_v2/tests/st/ 均不在本 PR 最终 diff 中;执行级 GEIR/TTK 验证材料保存在仓外整改目录,不作为代码提交。 ## 关联的Issue 关联的Issue:#5745 ## 测试 - [x] Ascend 950 Host/Tiling UT:70/70 PASS(AddRmsNorm 11、DynamicQuant arch35 24、Quant 24、InferShape 11)。 - [x] ACLNN L2 UT:DynamicQuant V1/V2 26/26 PASS(V1 6、V2 20,含新增 Ascend 910B 判空顺序回归);Quant V1 12/12 PASS;Quant V2 19/19 PASS。Quant V2 中的 910B/910_93/310P 兼容用例同时通过。 - [x] Quant 910B Host/Tiling 定向构建与 UT:24/24 PASS;确认 arch35 文件虽参与编译,910B 运行时仍走 non-RegBase 分支。 - [x] Quant V2 950 binary 穷举对表:416 条 binary 的跨参数关系全部满足;代码接受的 12 类 dtype 投影与已交付集合完全相同。 - [x] aclnnAddRmsNorm 实际 plog 验证:命中指定 reason,返回失败符合预期。 - [x] V1/V2 NCHW 单进程专项验证:各 1/1 PASS,合法 NCHW 输入可正常执行。 - [x] Ascend 950 zeroPoints2-only TTK 执行级验证:1/1 PASS,y2 与 round(rmsnorm(x) + zeroPoints2) 逐元素一致。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)定向 ACLNN 回归:57/57 PASS(DynamicQuant V1 6、V2 20;Quant V1 12、V2 19);clang-format 和 git diff --check 通过。 - [x] 线上 CodeCheck 失败项已按平台 pre-commit 口径修复:README 尾随空格、clang-format 自动修复项及 2 个 OAT License Header 均已整改;随后对 17 个 PR 文件重新执行 pre-commit,全部 hook PASS。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)使用 /workspace/CI-skills/ci_local_check.sh 完成统一入口的定向本地 CI:17 个 PR 文件的 whitespace、EOF、clang-format、codespell、OAT 全部 PASS,Markdown 链接 PASS;Ascend 950/910B 的定向 package、ophost UT、opapi UT 全部 PASS。本次 93020a45f8 仅继续修改 README/ACLNN 文档,代码内容不变。本项不再使用仓内旧 scripts/ci/pre_push_build.sh 的 ALL PASSED 代替 CodeCheck 结论。 - [x] P3 文档修正后,对 17 个 PR 文件重新执行平台同款 pre-commit,whitespace、EOF、clang-format、codespell、OAT 全部 PASS;V2 README 和 ACLNN 文档的 Markdown 链接检查 PASS。 - [x] Quant V1/V2 共用 InferShape/tiling/dtype Host UT:38/38 PASS;其中新增 4 个 InferShape 用例,覆盖 V1/V2 的 zeroPoints2-only 和无第二路参数两类分支。 - [x] 修复前 GEIR 定向复现:V1、V2 的 zeroPoints2-only 均因 y2Out 被推导为 (1,) 而失败;修复后 V1 1/1、V2 1/1 PASS,量化输出精度均为 100%。测试 CSV 保存在仓外,不提交 ST 目录。 - [x] 最终 PR 共 1 个提交、20 个文件,确认 Quant V1/V2 ST 目录均不在 diff 中。 ## 文档更新 - [x] 更新 aclnnAddRmsNormQuant.md:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义。 - [x] 更新 aclnn_add_rms_norm_quant.h:同步公开接口注释。 - [x] 更新 aclnnAddRmsNormQuantV2.md、V2 README 和头文件:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义,修正 8 行 beta dtype,按多产品差异规范整理 README,并区分存量产品原生 V2 与 ACLNN V1 回退路径的 divMode=False 能力。 - [x] 更新 aclnnNorm.md:明确空 dim 数组的全维归约语义与输出 shape。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!10098 | 1 个月前 | |
fix uint32 overloop Co-authored-by: liuyun_nj<liuyun90@h-partners.com> # message auto-generated for no-merge-commit merge: !9865 merge master into master fix uint32 overloop Created-by: liuyun_nj Commit-by: liuyun_nj Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9865 | 1 个月前 | |
[BugFix] 修复add_rms_norm_dynamic_quant FP4输出y的shape恢复错误(尾两维(1,2)场景) Co-authored-by: wangqi<wangqi195@hisilicon.com> # message auto-generated for no-merge-commit merge: !10182 merge fix/fp4-packed-dim-shape-restore into master [BugFix] 修复add_rms_norm_dynamic_quant FP4输出y的shape恢复错误(尾两维(1,2)场景) Created-by: wangqi_ai Commit-by: wangqi Merged-by: cann-robot Description: 关联 Issue: #5727 ## 变更摘要 修复 torch.ops.cann_ops_nn.add_rms_norm_dynamic_quant(基于 aclnnAddRmsNormDynamicMxQuantV2)在 **x1 尾两维为 (1,2) 且 dst_type 为 FP4(40/41)** 时输出 y 的 shape 恢复错误(EZ0009),并补充 H=2 边界 st 用例。 - **csrc 修复**(+4 行):构造 TensorWrapper y_wrapper 时显式指定 packedDim = y.dim() - 1,跳过歧义 stride 启发式,走 CollectB4ShapeInfo 确定性恢复分支;非 4-bit 类型不消费该字段,无影响。该分支同时完整恢复所有非末维 stride(启发式仅修正倒数第二维),描述符更规范。 - **st 用例**(+6 行):新增 H=2 边界用例(R=1/R=2 × FP4 E2M1/E1M2、H=4 对照、FP8 回归、bf16)——修复前 H=2 覆盖为零(既有用例 H 最小 32)。 ## 问题现象 Invalid_Argument_Tensor_Shape(EZ0009): Parameter output_y of AddRmsNormDynamicMxQuant has incorrect shape [[..., 2, 1]]. Reason: same as input x1. [FUNC:CheckShapeSame][FILE:add_rms_norm_dynamic_mx_quant_tiling_base_arch35.cpp][LINE:44] L1 shape fuzz 的 6 个失败用例均为此模式。 ## 根因 csrc 将 FP4 的 y 按尾维减半打包为 uint8(y_shape.back() /= 2)后,TensorWrapper 未声明 packedDim(默认 -1),aclnn_common.h 的 CollectB4ShapeInfo 退化为 stride 启发式。当打包后 y 的末两维均为 1(连续 tensor 末两维 stride 均为 1 且倒数第二维 size 为 1)时,启发式误判打包维度在倒数第二维,恢复出 (...,2,1)。该场景下逻辑 shape (...,1,2) 与 (...,2,1) 字节层面同构(1 字节含 2 个 FP4),启发式原理上无法区分,必须显式声明——这正是 packedDim 字段的设计目的。 ## 验证(TTK E2E,Ascend950PR,cann-9.2.0) | 项 | 结果 | |---|---| | 原始 6 个 L1 shape 失败用例 | shape 报错全部消除(修复前 0/6 可执行) | | 泛化矩阵 113 例(维度 1-7 × H=2 全 R 变体 × dst_type 35/36/40/41 × beta/x3/output_rstd/round_mode/bf16) | 全部通过;H 奇数+FP4 等非法组合仍被既有校验正确拒绝 | | st 回归(41 既有用例,固定 seed A/B 对比原始代码) | 行为等价 | | 全量 st(41 既有 + 6 新增) | **47/47 PASS** | | pre-commit(clang-format / codespell / OAT 合规) | 全部通过 | ## 附带分析结论(不改变 golden,仅记录) 修复后 fuzz 用例 957(FP4,H=2,118M 行)在 binary_equal 标准下仍有 16/238M(~7e-8)bit 翻档。已实验证明:golden 的 fp32→T_X cast 建模与 kernel 实际路径一致(去掉 cast 后翻档恶化 4 个数量级至 0.12%,**不可改为 fp32 量化**);残余翻档源于 golden 与 kernel 的 fp32 normed ulp 级差异(求和顺序)恰落在 cast 判决边界两侧,属量化边界的固有噪声,建议通过容差配置处理(FP4 的 y 容差 2^-10 已有先例)。 ## 关联改进(另一仓) 本 bug 之所以表象错位(shape 报错掩盖属性丢失),是因为 L1 用例从 aclnn 转 E2E 时属性键名(camelCase dstType 等)未映射为 torch schema 的 snake_case,被 TTK 静默丢弃后按默认值执行。已在 ops-test-kit 提交看护 MR:cann/ops-test-kit#239(未匹配属性打 WARNING)。 ## CLA 已通过(cann-cla/yes)。 See merge request: cann/ops-nn!10182 | 1 个月前 | |
fix(norm): 完善RMSNorm量化校验 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10098 merge fix/rmsnorm-aclnn-param-validation into master fix(norm): 完善RMSNorm量化校验 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本 PR 的开发基线为主仓 master@894833b1a7,集中整改错误日志合规报告中与 Ascend 950 RMSNorm 量化类相关、经代码复核后确认需要修改的问题。当前 HEAD 为 d153894d0e3f,相对基线仅包含 1 个提交。开发期间 master 已前进,本次按协作约定不重复 rebase。 提交压缩当时已用 tree ID 和 binary diff SHA-256 双重校验,确认 squash 本身只改变提交历史、未改变文件内容。随后根据 review 意见将 950 直接枚举判定整改为 RegBase 统一判定;本次又根据 P3 意见区分存量产品的原生 V2 能力与 ACLNN V1 回退能力。上述变更均已 amend 进同一提交。当前最终 tree ID 为 59edb4e11d1b26d4835040e7bb60b3cfb37f176c,binary diff SHA-256 为 02bcab58d3ba6c44e13a21d31d31a4d208f7dc61cfdeb774aa3f3a63c77e35a8。 核心修改如下: 1. aclnnAddRmsNormDynamicQuantV2:在 RegBase(当前对应 Ascend 950)补齐跨参数 dtype 关系校验;所有产品统一先校验必选输入/输出 Tensor 指针,再执行 dtype、outputMask 和 shape 校验,避免 dtype 宏在空指针场景先解引用。该顺序调整不改变合法调用语义,非 RegBase 仅改善非法空指针的错误返回稳定性。 2. aclnnAddRmsNormQuant:在 RegBase 补齐输入、量化参数及输出间的 dtype 组合校验;Ascend 950 支持 scales2Optional == nullptr && zeroPoints2Optional != nullptr,第二路缺省 scale 按 1,并确保 y2Out 回拷。 3. aclnnAddRmsNormQuantV2:Excel 未直接收录该接口,但按 V1 同一整改理念一并补齐 RegBase 跨参数 dtype 关系和完整 (x, scale, zero point) binary 组合校验;纳入 V2 特有的 beta/rmsNormOut 关系,修正 beta 文档表格,并在 README/ACLNN 文档中区分存量产品原生 V2 仅支持 divMode=True 与满足约束时 ACLNN 可回退 V1 执行 False 的能力边界。 4. aclnnAddRmsNorm:不改变 rstdOut == nullptr 的合法 PRE/POST 模式,只将该模式下非法 gamma 维数的日志改为明确说明“gamma should be 2 dims”。 5. aclnnNorm:文档明确 dim=[] 是合法输入,语义为对 self 的所有维度求范数,并补充 keepdim 对输出 shape 的影响。 6. DynamicQuant arch35:修正 rank 错误日志中的 actual value,避免错误地固定打印 1。 7. Quant V1/V2 共用 InferShape:第二路输出 y2Out 的存在条件由仅检查 scales2 补齐为检查 scales2 || zeroPoints2。修复 950 zeroPoints2-only 场景中 InferShape 错误给出 {1}、而 tiling/kernel 按完整第二路处理所造成的 GEIR shape 冲突;不修改 kernel 计算逻辑。 ### 修改文件与目的 | 文件 | 修改内容 | 修改目的及产品影响 | | --- | --- | --- | | norm/add_rms_norm/op_host/add_rms_norm_tiling.cpp | PRE/POST 分支的 gamma rank 校验改用带 reason 的日志,reason 为 rstdOut is nullptr, PreRmsNorm/PostRmsNorm mode is used, gamma should be 2 dims。判断条件仍为 gammaDimNum != 2。 | 仅改善错误诊断,不改变任一产品的合法性判断、tiling 或执行行为。该文件为共用文件,因此日志文本对所有产品一致生效。 | | norm/add_rms_norm/tests/ut/op_host/test_add_rms_norm_tiling.cpp | 增加 Ascend 950 PRE 模式、rstdOut 空 shape、gamma 为一维的负向用例。 | 覆盖上述日志对应的失败分支,确认合法的空 rstdOut 模式不会被误判,真正的错误是 gamma rank。 | | norm/add_rms_norm_dynamic_quant/op_host/arch35/add_rms_norm_dynamic_quant_tiling_base_arch35.cpp | gamma、smoothScale1、smoothScale2、beta rank 非法时,日志 actual value 改为真实维数。 | 修复 950 arch35 的错误日志失真,不改变校验规则。 | | norm/add_rms_norm_dynamic_quant/op_host/op_api/aclnn_add_rms_norm_dynamic_quant_v2.cpp | 统一以 AclnnUtil::IsRegbase() 识别 RegBase 路径,补齐 RegBase 跨参数 dtype 关系;将公共校验流程整理为“x1/x2/gamma 及五个输出指针判空 → dtype → outputMask → processOut 计算 → shape/执行”,删除按产品重复调用 CheckDtypeValid 和带 processOut1/processOut2 的条件判空分支。 | 当前 RegBase 即 Ascend 950,其非法 dtype 组合在 L2 阶段被准确拦截;所有产品都在 dtype/shape 解引用前稳定拦截必选 Tensor 空指针。outputMask 表示某路输出数据是否有效,不会把对应输出 Tensor 变成可选指针;因此合法调用和非 RegBase 参数接受范围不变。 | | norm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant_v2.cpp | 增加 950 的 x2 dtype 不一致、beta dtype 不一致、xOut dtype 不一致、inactive output 为空四类负向用例,并补充 Ascend 910B inactive output 为空的回归用例。 | 验证 950 dtype 错误返回 ACLNN_ERR_PARAM_INVALID,并证明 950、910B 均在禁用输出传空指针时稳定返回 ACLNN_ERR_PARAM_NULLPTR。 | | norm/add_rms_norm_quant/docs/aclnnAddRmsNormQuant.md | 明确仅 Ascend 950 支持 zeroPoints2-only;缺少 scales2 时 scale=1,公式为 y2Out = round(y + zero_points2),且 y2Out 与 x1 同 shape;其他产品不支持该组合。 | 统一 950 的接口文档、L2、tiling 和 kernel 契约。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_infershape.cpp | V1/V2 共用 InferShape 将第二路存在条件从仅 scales2 改为 scales2 || zeroPoints2;任一第二路量化参数存在时,y2Out 均推导为与 x1 相同的完整 shape。 | 修复 950 zeroPoints2-only 在图模式下被错误推导成 dummy {1}、随后与 tiling/kernel 完整 y2 契约冲突的问题。支持场景的执行逻辑和 kernel 不变;A2/A3 合法场景本来就要求 scales2,因此其既有合法行为不变。 | | norm/add_rms_norm_quant/tests/ut/op_host/CMakeLists.txt | 将仓内既有 InferShape UT 源文件接入 OP_INFERSHAPE_MODULE_NAME。 | 修复该 UT 文件存在但未实际参与构建执行的问题,使 InferShape 回归能够真正拦截契约偏差。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_AddRmsNormQuant_infershape.cpp | 在既有测试基础上补充 V1/V2 各两例:zeroPoints2-only 推导完整 y2,以及无第二路参数推导 dummy y2。 | 同时锁定修复分支和兼容分支;4 个新增测试均已实际执行通过。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_tiling_arch35.cpp | 将第二路 zero point dtype 的选取条件从 hasScales2 && hasZeroPoints2 改为 hasZeroPoints2。 | 修复 950 zeroPoints2-only 跳过 dtype 组合校验的问题。该类只在 IsRegbaseSocVersion() 为真时实例化;910B/910_93 走 non-RegBase tiling,不执行本分支。该修改由 Quant V1/V2 的 950 路径共用,不负责 y2 分配、计算或回拷。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.cpp | 保留 master 的逐 Tensor dtype 范围检查;以 AclnnUtil::IsRegbase() 决定是否继续执行跨参数关系和完整 dtype 组合校验;第二路存在条件改为 scales2 != nullptr || (isRegbase && zeroPoints2 != nullptr),确保 Ascend 950 zeroPoints2-only 场景的 y2 回拷。 | 实现 Ascend 950 zeroPoints2-only 的 L2 闭环,并将新增严格校验限定在 RegBase;910/310 仍仅以 scales2 判断第二路。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.h | 公开头文件说明 950 缺省 scales2 时按 1,且其他产品不支持 zeroPoints2-only。 | 让 API 注释与公开文档和实现一致。 | | norm/add_rms_norm_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant.cpp | 将既有 950 用例显式固定为 ASCEND950;增加 950 zeroPoints2-only 成功用例,以及 x2/scales dtype 关系和非法 dtype 组合负向用例。 | 防止 UT 受默认模拟产品影响,覆盖 950 新契约和错误返回。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_add_rms_norm_quant_tiling.cpp | zeroPoints2-only 从预期失败调整为 950 预期成功,验证完整 y2 shape、tiling key 1012;增加非法 zeroPoints2 dtype 组合失败检查。 | 同时覆盖 950 功能路径与边界校验。 | | norm/add_rms_norm_quant_v2/README.md | 按多产品差异描述规范整理参数顺序和产品差异表,补齐 dst_type/output_res,明确 950 zeroPoints2-only 的 scale=1 契约;区分存量产品原生 V2 与 ACLNN V1 回退路径的 div_mode=False 能力。 | 使 README 同时满足文档规范、多产品差异表达和各调用通路的实际能力,避免把原生 V2 限制误写成 ACLNN 接口完全不支持。 | | norm/add_rms_norm_quant_v2/docs/aclnnAddRmsNormQuantV2.md | 补充 scales2/zeroPoints2 组合约束和 950 scale=1 公式;修正 8 行将 FLOAT16/BFLOAT16 组合中 betaOptional 误写为 FLOAT32 的表格;说明跨参数 dtype 关系;补充存量产品 divMode=False 的 ACLNN V1 回退条件。 | 使公开文档与 950 binary 签名、ACLNN 前置校验及存量产品实际分流逻辑一致。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.cpp | 保留逐 Tensor dtype 范围检查;以语义一致的 IsRegbase() 封装 AclnnUtil::IsRegbase(),在其外层分支内调用 CheckCommonDtypeRelationV2 和 CheckRegbaseDtypeCombinationV2,补充 x/gamma/beta/xOut/resOut、两路 scale、两路 zero point 和 y1/y2 关系及完整 (x, scale, zero point) 组合校验。 | 与 V1 的 RegBase 整改理念对齐,当前对应 Ascend 950;两项新增校验不会进入 910B/910_93/310P 路径,不改空指针、shape、L0 或 kernel 契约。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.h | 同步 950 scale=1 与非 950 组合限制的 API 注释。 | 保证头文件、ACLNN 文档和实现一致。 | | norm/add_rms_norm_quant_v2/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant_v2.cpp | 保留 zeroPoints2-only 成功例,增加 950 合法全参数例和 9 个 dtype 关系/组合负例;保留 910B/910_93/310P gamma 兼容用例。 | 覆盖 V2 新增校验的每类关系,并验证非 950 兼容路径没有被改变。 | | norm/lp_norm_v2/docs/aclnnNorm.md | 明确 dim 不能为空指针,但可以是长度为 0 的数组;空数组表示归约所有维度,并说明 keepdim=true/false 的输出 shape。 | 修正文档歧义;实现本身支持 dim=[],无需修改算子代码。 | ### 范围边界 - 本 PR 的功能性修改聚焦 Ascend 950,代码路由统一使用 AclnnUtil::IsRegbase();当前 ACLNN 产品映射中 RegBase 即 Ascend 950,RegBase 能力校验按通用语义实现,不再直接比较 SocVersion::ASCEND950。DynamicQuant V2 的必选 Tensor 判空顺序统一作用于所有产品,但不改变合法输入契约;非 RegBase 仅将非法空指针场景提前、稳定地返回 ACLNN_ERR_PARAM_NULLPTR。 - aclnnAddRmsNormQuantV2 只新增 950 L2 参数校验,不改 L2 计算/回拷或 kernel:zeroPoints2-only 已由 CheckSupportV2()、RegBase L0 的 scales2 || zeroPoints2、shape 一致时的 y2 ViewCopy 和 HAS_SCALE2=false/HAS_ZEROPOINTS2=true kernel 模板实现闭环。 - 本 PR 只参考 !9263 中与 V1 dtype 理念一致的部分,没有带入其 xOut 必选、shape 或 L0 参数顺序等其他改动。 - aclnnAddRmsNorm 的共用 tiling 文件只改日志文案,不改变 310/910/950 的判断或执行结果。 - aclnnAddRmsNormDynamicQuant V1 的 ACLNN L2 契约不修改;仅修正 arch35 tiling 错误日志中的实际 rank。报告中的非 ND format、可选参数 nullptr 属于扫描器预设口径问题,不应据此收缩接口。 - norm/add_rms_norm/op_host/op_api/aclnn_add_rms_norm.cpp 及其 310P UT 已从本 PR 恢复为 master,不包含 310P 功能改动。 - norm/add_rms_norm_quant/tests/st/ 和 norm/add_rms_norm_quant_v2/tests/st/ 均不在本 PR 最终 diff 中;执行级 GEIR/TTK 验证材料保存在仓外整改目录,不作为代码提交。 ## 关联的Issue 关联的Issue:#5745 ## 测试 - [x] Ascend 950 Host/Tiling UT:70/70 PASS(AddRmsNorm 11、DynamicQuant arch35 24、Quant 24、InferShape 11)。 - [x] ACLNN L2 UT:DynamicQuant V1/V2 26/26 PASS(V1 6、V2 20,含新增 Ascend 910B 判空顺序回归);Quant V1 12/12 PASS;Quant V2 19/19 PASS。Quant V2 中的 910B/910_93/310P 兼容用例同时通过。 - [x] Quant 910B Host/Tiling 定向构建与 UT:24/24 PASS;确认 arch35 文件虽参与编译,910B 运行时仍走 non-RegBase 分支。 - [x] Quant V2 950 binary 穷举对表:416 条 binary 的跨参数关系全部满足;代码接受的 12 类 dtype 投影与已交付集合完全相同。 - [x] aclnnAddRmsNorm 实际 plog 验证:命中指定 reason,返回失败符合预期。 - [x] V1/V2 NCHW 单进程专项验证:各 1/1 PASS,合法 NCHW 输入可正常执行。 - [x] Ascend 950 zeroPoints2-only TTK 执行级验证:1/1 PASS,y2 与 round(rmsnorm(x) + zeroPoints2) 逐元素一致。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)定向 ACLNN 回归:57/57 PASS(DynamicQuant V1 6、V2 20;Quant V1 12、V2 19);clang-format 和 git diff --check 通过。 - [x] 线上 CodeCheck 失败项已按平台 pre-commit 口径修复:README 尾随空格、clang-format 自动修复项及 2 个 OAT License Header 均已整改;随后对 17 个 PR 文件重新执行 pre-commit,全部 hook PASS。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)使用 /workspace/CI-skills/ci_local_check.sh 完成统一入口的定向本地 CI:17 个 PR 文件的 whitespace、EOF、clang-format、codespell、OAT 全部 PASS,Markdown 链接 PASS;Ascend 950/910B 的定向 package、ophost UT、opapi UT 全部 PASS。本次 93020a45f8 仅继续修改 README/ACLNN 文档,代码内容不变。本项不再使用仓内旧 scripts/ci/pre_push_build.sh 的 ALL PASSED 代替 CodeCheck 结论。 - [x] P3 文档修正后,对 17 个 PR 文件重新执行平台同款 pre-commit,whitespace、EOF、clang-format、codespell、OAT 全部 PASS;V2 README 和 ACLNN 文档的 Markdown 链接检查 PASS。 - [x] Quant V1/V2 共用 InferShape/tiling/dtype Host UT:38/38 PASS;其中新增 4 个 InferShape 用例,覆盖 V1/V2 的 zeroPoints2-only 和无第二路参数两类分支。 - [x] 修复前 GEIR 定向复现:V1、V2 的 zeroPoints2-only 均因 y2Out 被推导为 (1,) 而失败;修复后 V1 1/1、V2 1/1 PASS,量化输出精度均为 100%。测试 CSV 保存在仓外,不提交 ST 目录。 - [x] 最终 PR 共 1 个提交、20 个文件,确认 Quant V1/V2 ST 目录均不在 diff 中。 ## 文档更新 - [x] 更新 aclnnAddRmsNormQuant.md:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义。 - [x] 更新 aclnn_add_rms_norm_quant.h:同步公开接口注释。 - [x] 更新 aclnnAddRmsNormQuantV2.md、V2 README 和头文件:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义,修正 8 行 beta dtype,按多产品差异规范整理 README,并区分存量产品原生 V2 与 ACLNN V1 回退路径的 divMode=False 能力。 - [x] 更新 aclnnNorm.md:明确空 dim 数组的全维归约语义与输出 shape。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!10098 | 1 个月前 | |
refactor: reduce duplicated code Co-authored-by: hushenxi<shenxi780803@163.com> # message auto-generated for no-merge-commit merge: !9451 merge cleancode-minimal-clean into master refactor: reduce duplicated code Created-by: Hushenxi111 Commit-by: hushenxi Merged-by: cann-robot Description: ## 描述 针对 CleanCode 重复代码报告进行最小化降重:仅调整局部变量、参数和配置对象命名,打断重复代码块。 未修改算子接口、计算公式、控制流或功能逻辑。本次共修改 31 个文件,473 行新增、471 行删除。 ## 关联的Issue 无。 ## 测试 - ATK测试通过 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:CleanCode 重复代码降重 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9451 | 1 个月前 | |
fix(norm): 完善RMSNorm量化校验 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10098 merge fix/rmsnorm-aclnn-param-validation into master fix(norm): 完善RMSNorm量化校验 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本 PR 的开发基线为主仓 master@894833b1a7,集中整改错误日志合规报告中与 Ascend 950 RMSNorm 量化类相关、经代码复核后确认需要修改的问题。当前 HEAD 为 d153894d0e3f,相对基线仅包含 1 个提交。开发期间 master 已前进,本次按协作约定不重复 rebase。 提交压缩当时已用 tree ID 和 binary diff SHA-256 双重校验,确认 squash 本身只改变提交历史、未改变文件内容。随后根据 review 意见将 950 直接枚举判定整改为 RegBase 统一判定;本次又根据 P3 意见区分存量产品的原生 V2 能力与 ACLNN V1 回退能力。上述变更均已 amend 进同一提交。当前最终 tree ID 为 59edb4e11d1b26d4835040e7bb60b3cfb37f176c,binary diff SHA-256 为 02bcab58d3ba6c44e13a21d31d31a4d208f7dc61cfdeb774aa3f3a63c77e35a8。 核心修改如下: 1. aclnnAddRmsNormDynamicQuantV2:在 RegBase(当前对应 Ascend 950)补齐跨参数 dtype 关系校验;所有产品统一先校验必选输入/输出 Tensor 指针,再执行 dtype、outputMask 和 shape 校验,避免 dtype 宏在空指针场景先解引用。该顺序调整不改变合法调用语义,非 RegBase 仅改善非法空指针的错误返回稳定性。 2. aclnnAddRmsNormQuant:在 RegBase 补齐输入、量化参数及输出间的 dtype 组合校验;Ascend 950 支持 scales2Optional == nullptr && zeroPoints2Optional != nullptr,第二路缺省 scale 按 1,并确保 y2Out 回拷。 3. aclnnAddRmsNormQuantV2:Excel 未直接收录该接口,但按 V1 同一整改理念一并补齐 RegBase 跨参数 dtype 关系和完整 (x, scale, zero point) binary 组合校验;纳入 V2 特有的 beta/rmsNormOut 关系,修正 beta 文档表格,并在 README/ACLNN 文档中区分存量产品原生 V2 仅支持 divMode=True 与满足约束时 ACLNN 可回退 V1 执行 False 的能力边界。 4. aclnnAddRmsNorm:不改变 rstdOut == nullptr 的合法 PRE/POST 模式,只将该模式下非法 gamma 维数的日志改为明确说明“gamma should be 2 dims”。 5. aclnnNorm:文档明确 dim=[] 是合法输入,语义为对 self 的所有维度求范数,并补充 keepdim 对输出 shape 的影响。 6. DynamicQuant arch35:修正 rank 错误日志中的 actual value,避免错误地固定打印 1。 7. Quant V1/V2 共用 InferShape:第二路输出 y2Out 的存在条件由仅检查 scales2 补齐为检查 scales2 || zeroPoints2。修复 950 zeroPoints2-only 场景中 InferShape 错误给出 {1}、而 tiling/kernel 按完整第二路处理所造成的 GEIR shape 冲突;不修改 kernel 计算逻辑。 ### 修改文件与目的 | 文件 | 修改内容 | 修改目的及产品影响 | | --- | --- | --- | | norm/add_rms_norm/op_host/add_rms_norm_tiling.cpp | PRE/POST 分支的 gamma rank 校验改用带 reason 的日志,reason 为 rstdOut is nullptr, PreRmsNorm/PostRmsNorm mode is used, gamma should be 2 dims。判断条件仍为 gammaDimNum != 2。 | 仅改善错误诊断,不改变任一产品的合法性判断、tiling 或执行行为。该文件为共用文件,因此日志文本对所有产品一致生效。 | | norm/add_rms_norm/tests/ut/op_host/test_add_rms_norm_tiling.cpp | 增加 Ascend 950 PRE 模式、rstdOut 空 shape、gamma 为一维的负向用例。 | 覆盖上述日志对应的失败分支,确认合法的空 rstdOut 模式不会被误判,真正的错误是 gamma rank。 | | norm/add_rms_norm_dynamic_quant/op_host/arch35/add_rms_norm_dynamic_quant_tiling_base_arch35.cpp | gamma、smoothScale1、smoothScale2、beta rank 非法时,日志 actual value 改为真实维数。 | 修复 950 arch35 的错误日志失真,不改变校验规则。 | | norm/add_rms_norm_dynamic_quant/op_host/op_api/aclnn_add_rms_norm_dynamic_quant_v2.cpp | 统一以 AclnnUtil::IsRegbase() 识别 RegBase 路径,补齐 RegBase 跨参数 dtype 关系;将公共校验流程整理为“x1/x2/gamma 及五个输出指针判空 → dtype → outputMask → processOut 计算 → shape/执行”,删除按产品重复调用 CheckDtypeValid 和带 processOut1/processOut2 的条件判空分支。 | 当前 RegBase 即 Ascend 950,其非法 dtype 组合在 L2 阶段被准确拦截;所有产品都在 dtype/shape 解引用前稳定拦截必选 Tensor 空指针。outputMask 表示某路输出数据是否有效,不会把对应输出 Tensor 变成可选指针;因此合法调用和非 RegBase 参数接受范围不变。 | | norm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant_v2.cpp | 增加 950 的 x2 dtype 不一致、beta dtype 不一致、xOut dtype 不一致、inactive output 为空四类负向用例,并补充 Ascend 910B inactive output 为空的回归用例。 | 验证 950 dtype 错误返回 ACLNN_ERR_PARAM_INVALID,并证明 950、910B 均在禁用输出传空指针时稳定返回 ACLNN_ERR_PARAM_NULLPTR。 | | norm/add_rms_norm_quant/docs/aclnnAddRmsNormQuant.md | 明确仅 Ascend 950 支持 zeroPoints2-only;缺少 scales2 时 scale=1,公式为 y2Out = round(y + zero_points2),且 y2Out 与 x1 同 shape;其他产品不支持该组合。 | 统一 950 的接口文档、L2、tiling 和 kernel 契约。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_infershape.cpp | V1/V2 共用 InferShape 将第二路存在条件从仅 scales2 改为 scales2 || zeroPoints2;任一第二路量化参数存在时,y2Out 均推导为与 x1 相同的完整 shape。 | 修复 950 zeroPoints2-only 在图模式下被错误推导成 dummy {1}、随后与 tiling/kernel 完整 y2 契约冲突的问题。支持场景的执行逻辑和 kernel 不变;A2/A3 合法场景本来就要求 scales2,因此其既有合法行为不变。 | | norm/add_rms_norm_quant/tests/ut/op_host/CMakeLists.txt | 将仓内既有 InferShape UT 源文件接入 OP_INFERSHAPE_MODULE_NAME。 | 修复该 UT 文件存在但未实际参与构建执行的问题,使 InferShape 回归能够真正拦截契约偏差。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_AddRmsNormQuant_infershape.cpp | 在既有测试基础上补充 V1/V2 各两例:zeroPoints2-only 推导完整 y2,以及无第二路参数推导 dummy y2。 | 同时锁定修复分支和兼容分支;4 个新增测试均已实际执行通过。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_tiling_arch35.cpp | 将第二路 zero point dtype 的选取条件从 hasScales2 && hasZeroPoints2 改为 hasZeroPoints2。 | 修复 950 zeroPoints2-only 跳过 dtype 组合校验的问题。该类只在 IsRegbaseSocVersion() 为真时实例化;910B/910_93 走 non-RegBase tiling,不执行本分支。该修改由 Quant V1/V2 的 950 路径共用,不负责 y2 分配、计算或回拷。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.cpp | 保留 master 的逐 Tensor dtype 范围检查;以 AclnnUtil::IsRegbase() 决定是否继续执行跨参数关系和完整 dtype 组合校验;第二路存在条件改为 scales2 != nullptr || (isRegbase && zeroPoints2 != nullptr),确保 Ascend 950 zeroPoints2-only 场景的 y2 回拷。 | 实现 Ascend 950 zeroPoints2-only 的 L2 闭环,并将新增严格校验限定在 RegBase;910/310 仍仅以 scales2 判断第二路。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.h | 公开头文件说明 950 缺省 scales2 时按 1,且其他产品不支持 zeroPoints2-only。 | 让 API 注释与公开文档和实现一致。 | | norm/add_rms_norm_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant.cpp | 将既有 950 用例显式固定为 ASCEND950;增加 950 zeroPoints2-only 成功用例,以及 x2/scales dtype 关系和非法 dtype 组合负向用例。 | 防止 UT 受默认模拟产品影响,覆盖 950 新契约和错误返回。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_add_rms_norm_quant_tiling.cpp | zeroPoints2-only 从预期失败调整为 950 预期成功,验证完整 y2 shape、tiling key 1012;增加非法 zeroPoints2 dtype 组合失败检查。 | 同时覆盖 950 功能路径与边界校验。 | | norm/add_rms_norm_quant_v2/README.md | 按多产品差异描述规范整理参数顺序和产品差异表,补齐 dst_type/output_res,明确 950 zeroPoints2-only 的 scale=1 契约;区分存量产品原生 V2 与 ACLNN V1 回退路径的 div_mode=False 能力。 | 使 README 同时满足文档规范、多产品差异表达和各调用通路的实际能力,避免把原生 V2 限制误写成 ACLNN 接口完全不支持。 | | norm/add_rms_norm_quant_v2/docs/aclnnAddRmsNormQuantV2.md | 补充 scales2/zeroPoints2 组合约束和 950 scale=1 公式;修正 8 行将 FLOAT16/BFLOAT16 组合中 betaOptional 误写为 FLOAT32 的表格;说明跨参数 dtype 关系;补充存量产品 divMode=False 的 ACLNN V1 回退条件。 | 使公开文档与 950 binary 签名、ACLNN 前置校验及存量产品实际分流逻辑一致。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.cpp | 保留逐 Tensor dtype 范围检查;以语义一致的 IsRegbase() 封装 AclnnUtil::IsRegbase(),在其外层分支内调用 CheckCommonDtypeRelationV2 和 CheckRegbaseDtypeCombinationV2,补充 x/gamma/beta/xOut/resOut、两路 scale、两路 zero point 和 y1/y2 关系及完整 (x, scale, zero point) 组合校验。 | 与 V1 的 RegBase 整改理念对齐,当前对应 Ascend 950;两项新增校验不会进入 910B/910_93/310P 路径,不改空指针、shape、L0 或 kernel 契约。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.h | 同步 950 scale=1 与非 950 组合限制的 API 注释。 | 保证头文件、ACLNN 文档和实现一致。 | | norm/add_rms_norm_quant_v2/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant_v2.cpp | 保留 zeroPoints2-only 成功例,增加 950 合法全参数例和 9 个 dtype 关系/组合负例;保留 910B/910_93/310P gamma 兼容用例。 | 覆盖 V2 新增校验的每类关系,并验证非 950 兼容路径没有被改变。 | | norm/lp_norm_v2/docs/aclnnNorm.md | 明确 dim 不能为空指针,但可以是长度为 0 的数组;空数组表示归约所有维度,并说明 keepdim=true/false 的输出 shape。 | 修正文档歧义;实现本身支持 dim=[],无需修改算子代码。 | ### 范围边界 - 本 PR 的功能性修改聚焦 Ascend 950,代码路由统一使用 AclnnUtil::IsRegbase();当前 ACLNN 产品映射中 RegBase 即 Ascend 950,RegBase 能力校验按通用语义实现,不再直接比较 SocVersion::ASCEND950。DynamicQuant V2 的必选 Tensor 判空顺序统一作用于所有产品,但不改变合法输入契约;非 RegBase 仅将非法空指针场景提前、稳定地返回 ACLNN_ERR_PARAM_NULLPTR。 - aclnnAddRmsNormQuantV2 只新增 950 L2 参数校验,不改 L2 计算/回拷或 kernel:zeroPoints2-only 已由 CheckSupportV2()、RegBase L0 的 scales2 || zeroPoints2、shape 一致时的 y2 ViewCopy 和 HAS_SCALE2=false/HAS_ZEROPOINTS2=true kernel 模板实现闭环。 - 本 PR 只参考 !9263 中与 V1 dtype 理念一致的部分,没有带入其 xOut 必选、shape 或 L0 参数顺序等其他改动。 - aclnnAddRmsNorm 的共用 tiling 文件只改日志文案,不改变 310/910/950 的判断或执行结果。 - aclnnAddRmsNormDynamicQuant V1 的 ACLNN L2 契约不修改;仅修正 arch35 tiling 错误日志中的实际 rank。报告中的非 ND format、可选参数 nullptr 属于扫描器预设口径问题,不应据此收缩接口。 - norm/add_rms_norm/op_host/op_api/aclnn_add_rms_norm.cpp 及其 310P UT 已从本 PR 恢复为 master,不包含 310P 功能改动。 - norm/add_rms_norm_quant/tests/st/ 和 norm/add_rms_norm_quant_v2/tests/st/ 均不在本 PR 最终 diff 中;执行级 GEIR/TTK 验证材料保存在仓外整改目录,不作为代码提交。 ## 关联的Issue 关联的Issue:#5745 ## 测试 - [x] Ascend 950 Host/Tiling UT:70/70 PASS(AddRmsNorm 11、DynamicQuant arch35 24、Quant 24、InferShape 11)。 - [x] ACLNN L2 UT:DynamicQuant V1/V2 26/26 PASS(V1 6、V2 20,含新增 Ascend 910B 判空顺序回归);Quant V1 12/12 PASS;Quant V2 19/19 PASS。Quant V2 中的 910B/910_93/310P 兼容用例同时通过。 - [x] Quant 910B Host/Tiling 定向构建与 UT:24/24 PASS;确认 arch35 文件虽参与编译,910B 运行时仍走 non-RegBase 分支。 - [x] Quant V2 950 binary 穷举对表:416 条 binary 的跨参数关系全部满足;代码接受的 12 类 dtype 投影与已交付集合完全相同。 - [x] aclnnAddRmsNorm 实际 plog 验证:命中指定 reason,返回失败符合预期。 - [x] V1/V2 NCHW 单进程专项验证:各 1/1 PASS,合法 NCHW 输入可正常执行。 - [x] Ascend 950 zeroPoints2-only TTK 执行级验证:1/1 PASS,y2 与 round(rmsnorm(x) + zeroPoints2) 逐元素一致。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)定向 ACLNN 回归:57/57 PASS(DynamicQuant V1 6、V2 20;Quant V1 12、V2 19);clang-format 和 git diff --check 通过。 - [x] 线上 CodeCheck 失败项已按平台 pre-commit 口径修复:README 尾随空格、clang-format 自动修复项及 2 个 OAT License Header 均已整改;随后对 17 个 PR 文件重新执行 pre-commit,全部 hook PASS。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)使用 /workspace/CI-skills/ci_local_check.sh 完成统一入口的定向本地 CI:17 个 PR 文件的 whitespace、EOF、clang-format、codespell、OAT 全部 PASS,Markdown 链接 PASS;Ascend 950/910B 的定向 package、ophost UT、opapi UT 全部 PASS。本次 93020a45f8 仅继续修改 README/ACLNN 文档,代码内容不变。本项不再使用仓内旧 scripts/ci/pre_push_build.sh 的 ALL PASSED 代替 CodeCheck 结论。 - [x] P3 文档修正后,对 17 个 PR 文件重新执行平台同款 pre-commit,whitespace、EOF、clang-format、codespell、OAT 全部 PASS;V2 README 和 ACLNN 文档的 Markdown 链接检查 PASS。 - [x] Quant V1/V2 共用 InferShape/tiling/dtype Host UT:38/38 PASS;其中新增 4 个 InferShape 用例,覆盖 V1/V2 的 zeroPoints2-only 和无第二路参数两类分支。 - [x] 修复前 GEIR 定向复现:V1、V2 的 zeroPoints2-only 均因 y2Out 被推导为 (1,) 而失败;修复后 V1 1/1、V2 1/1 PASS,量化输出精度均为 100%。测试 CSV 保存在仓外,不提交 ST 目录。 - [x] 最终 PR 共 1 个提交、20 个文件,确认 Quant V1/V2 ST 目录均不在 diff 中。 ## 文档更新 - [x] 更新 aclnnAddRmsNormQuant.md:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义。 - [x] 更新 aclnn_add_rms_norm_quant.h:同步公开接口注释。 - [x] 更新 aclnnAddRmsNormQuantV2.md、V2 README 和头文件:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义,修正 8 行 beta dtype,按多产品差异规范整理 README,并区分存量产品原生 V2 与 ACLNN V1 回退路径的 divMode=False 能力。 - [x] 更新 aclnnNorm.md:明确空 dim 数组的全维归约语义与输出 shape。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!10098 | 1 个月前 | |
fix(norm): 完善RMSNorm量化校验 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10098 merge fix/rmsnorm-aclnn-param-validation into master fix(norm): 完善RMSNorm量化校验 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本 PR 的开发基线为主仓 master@894833b1a7,集中整改错误日志合规报告中与 Ascend 950 RMSNorm 量化类相关、经代码复核后确认需要修改的问题。当前 HEAD 为 d153894d0e3f,相对基线仅包含 1 个提交。开发期间 master 已前进,本次按协作约定不重复 rebase。 提交压缩当时已用 tree ID 和 binary diff SHA-256 双重校验,确认 squash 本身只改变提交历史、未改变文件内容。随后根据 review 意见将 950 直接枚举判定整改为 RegBase 统一判定;本次又根据 P3 意见区分存量产品的原生 V2 能力与 ACLNN V1 回退能力。上述变更均已 amend 进同一提交。当前最终 tree ID 为 59edb4e11d1b26d4835040e7bb60b3cfb37f176c,binary diff SHA-256 为 02bcab58d3ba6c44e13a21d31d31a4d208f7dc61cfdeb774aa3f3a63c77e35a8。 核心修改如下: 1. aclnnAddRmsNormDynamicQuantV2:在 RegBase(当前对应 Ascend 950)补齐跨参数 dtype 关系校验;所有产品统一先校验必选输入/输出 Tensor 指针,再执行 dtype、outputMask 和 shape 校验,避免 dtype 宏在空指针场景先解引用。该顺序调整不改变合法调用语义,非 RegBase 仅改善非法空指针的错误返回稳定性。 2. aclnnAddRmsNormQuant:在 RegBase 补齐输入、量化参数及输出间的 dtype 组合校验;Ascend 950 支持 scales2Optional == nullptr && zeroPoints2Optional != nullptr,第二路缺省 scale 按 1,并确保 y2Out 回拷。 3. aclnnAddRmsNormQuantV2:Excel 未直接收录该接口,但按 V1 同一整改理念一并补齐 RegBase 跨参数 dtype 关系和完整 (x, scale, zero point) binary 组合校验;纳入 V2 特有的 beta/rmsNormOut 关系,修正 beta 文档表格,并在 README/ACLNN 文档中区分存量产品原生 V2 仅支持 divMode=True 与满足约束时 ACLNN 可回退 V1 执行 False 的能力边界。 4. aclnnAddRmsNorm:不改变 rstdOut == nullptr 的合法 PRE/POST 模式,只将该模式下非法 gamma 维数的日志改为明确说明“gamma should be 2 dims”。 5. aclnnNorm:文档明确 dim=[] 是合法输入,语义为对 self 的所有维度求范数,并补充 keepdim 对输出 shape 的影响。 6. DynamicQuant arch35:修正 rank 错误日志中的 actual value,避免错误地固定打印 1。 7. Quant V1/V2 共用 InferShape:第二路输出 y2Out 的存在条件由仅检查 scales2 补齐为检查 scales2 || zeroPoints2。修复 950 zeroPoints2-only 场景中 InferShape 错误给出 {1}、而 tiling/kernel 按完整第二路处理所造成的 GEIR shape 冲突;不修改 kernel 计算逻辑。 ### 修改文件与目的 | 文件 | 修改内容 | 修改目的及产品影响 | | --- | --- | --- | | norm/add_rms_norm/op_host/add_rms_norm_tiling.cpp | PRE/POST 分支的 gamma rank 校验改用带 reason 的日志,reason 为 rstdOut is nullptr, PreRmsNorm/PostRmsNorm mode is used, gamma should be 2 dims。判断条件仍为 gammaDimNum != 2。 | 仅改善错误诊断,不改变任一产品的合法性判断、tiling 或执行行为。该文件为共用文件,因此日志文本对所有产品一致生效。 | | norm/add_rms_norm/tests/ut/op_host/test_add_rms_norm_tiling.cpp | 增加 Ascend 950 PRE 模式、rstdOut 空 shape、gamma 为一维的负向用例。 | 覆盖上述日志对应的失败分支,确认合法的空 rstdOut 模式不会被误判,真正的错误是 gamma rank。 | | norm/add_rms_norm_dynamic_quant/op_host/arch35/add_rms_norm_dynamic_quant_tiling_base_arch35.cpp | gamma、smoothScale1、smoothScale2、beta rank 非法时,日志 actual value 改为真实维数。 | 修复 950 arch35 的错误日志失真,不改变校验规则。 | | norm/add_rms_norm_dynamic_quant/op_host/op_api/aclnn_add_rms_norm_dynamic_quant_v2.cpp | 统一以 AclnnUtil::IsRegbase() 识别 RegBase 路径,补齐 RegBase 跨参数 dtype 关系;将公共校验流程整理为“x1/x2/gamma 及五个输出指针判空 → dtype → outputMask → processOut 计算 → shape/执行”,删除按产品重复调用 CheckDtypeValid 和带 processOut1/processOut2 的条件判空分支。 | 当前 RegBase 即 Ascend 950,其非法 dtype 组合在 L2 阶段被准确拦截;所有产品都在 dtype/shape 解引用前稳定拦截必选 Tensor 空指针。outputMask 表示某路输出数据是否有效,不会把对应输出 Tensor 变成可选指针;因此合法调用和非 RegBase 参数接受范围不变。 | | norm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant_v2.cpp | 增加 950 的 x2 dtype 不一致、beta dtype 不一致、xOut dtype 不一致、inactive output 为空四类负向用例,并补充 Ascend 910B inactive output 为空的回归用例。 | 验证 950 dtype 错误返回 ACLNN_ERR_PARAM_INVALID,并证明 950、910B 均在禁用输出传空指针时稳定返回 ACLNN_ERR_PARAM_NULLPTR。 | | norm/add_rms_norm_quant/docs/aclnnAddRmsNormQuant.md | 明确仅 Ascend 950 支持 zeroPoints2-only;缺少 scales2 时 scale=1,公式为 y2Out = round(y + zero_points2),且 y2Out 与 x1 同 shape;其他产品不支持该组合。 | 统一 950 的接口文档、L2、tiling 和 kernel 契约。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_infershape.cpp | V1/V2 共用 InferShape 将第二路存在条件从仅 scales2 改为 scales2 || zeroPoints2;任一第二路量化参数存在时,y2Out 均推导为与 x1 相同的完整 shape。 | 修复 950 zeroPoints2-only 在图模式下被错误推导成 dummy {1}、随后与 tiling/kernel 完整 y2 契约冲突的问题。支持场景的执行逻辑和 kernel 不变;A2/A3 合法场景本来就要求 scales2,因此其既有合法行为不变。 | | norm/add_rms_norm_quant/tests/ut/op_host/CMakeLists.txt | 将仓内既有 InferShape UT 源文件接入 OP_INFERSHAPE_MODULE_NAME。 | 修复该 UT 文件存在但未实际参与构建执行的问题,使 InferShape 回归能够真正拦截契约偏差。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_AddRmsNormQuant_infershape.cpp | 在既有测试基础上补充 V1/V2 各两例:zeroPoints2-only 推导完整 y2,以及无第二路参数推导 dummy y2。 | 同时锁定修复分支和兼容分支;4 个新增测试均已实际执行通过。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_tiling_arch35.cpp | 将第二路 zero point dtype 的选取条件从 hasScales2 && hasZeroPoints2 改为 hasZeroPoints2。 | 修复 950 zeroPoints2-only 跳过 dtype 组合校验的问题。该类只在 IsRegbaseSocVersion() 为真时实例化;910B/910_93 走 non-RegBase tiling,不执行本分支。该修改由 Quant V1/V2 的 950 路径共用,不负责 y2 分配、计算或回拷。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.cpp | 保留 master 的逐 Tensor dtype 范围检查;以 AclnnUtil::IsRegbase() 决定是否继续执行跨参数关系和完整 dtype 组合校验;第二路存在条件改为 scales2 != nullptr || (isRegbase && zeroPoints2 != nullptr),确保 Ascend 950 zeroPoints2-only 场景的 y2 回拷。 | 实现 Ascend 950 zeroPoints2-only 的 L2 闭环,并将新增严格校验限定在 RegBase;910/310 仍仅以 scales2 判断第二路。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.h | 公开头文件说明 950 缺省 scales2 时按 1,且其他产品不支持 zeroPoints2-only。 | 让 API 注释与公开文档和实现一致。 | | norm/add_rms_norm_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant.cpp | 将既有 950 用例显式固定为 ASCEND950;增加 950 zeroPoints2-only 成功用例,以及 x2/scales dtype 关系和非法 dtype 组合负向用例。 | 防止 UT 受默认模拟产品影响,覆盖 950 新契约和错误返回。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_add_rms_norm_quant_tiling.cpp | zeroPoints2-only 从预期失败调整为 950 预期成功,验证完整 y2 shape、tiling key 1012;增加非法 zeroPoints2 dtype 组合失败检查。 | 同时覆盖 950 功能路径与边界校验。 | | norm/add_rms_norm_quant_v2/README.md | 按多产品差异描述规范整理参数顺序和产品差异表,补齐 dst_type/output_res,明确 950 zeroPoints2-only 的 scale=1 契约;区分存量产品原生 V2 与 ACLNN V1 回退路径的 div_mode=False 能力。 | 使 README 同时满足文档规范、多产品差异表达和各调用通路的实际能力,避免把原生 V2 限制误写成 ACLNN 接口完全不支持。 | | norm/add_rms_norm_quant_v2/docs/aclnnAddRmsNormQuantV2.md | 补充 scales2/zeroPoints2 组合约束和 950 scale=1 公式;修正 8 行将 FLOAT16/BFLOAT16 组合中 betaOptional 误写为 FLOAT32 的表格;说明跨参数 dtype 关系;补充存量产品 divMode=False 的 ACLNN V1 回退条件。 | 使公开文档与 950 binary 签名、ACLNN 前置校验及存量产品实际分流逻辑一致。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.cpp | 保留逐 Tensor dtype 范围检查;以语义一致的 IsRegbase() 封装 AclnnUtil::IsRegbase(),在其外层分支内调用 CheckCommonDtypeRelationV2 和 CheckRegbaseDtypeCombinationV2,补充 x/gamma/beta/xOut/resOut、两路 scale、两路 zero point 和 y1/y2 关系及完整 (x, scale, zero point) 组合校验。 | 与 V1 的 RegBase 整改理念对齐,当前对应 Ascend 950;两项新增校验不会进入 910B/910_93/310P 路径,不改空指针、shape、L0 或 kernel 契约。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.h | 同步 950 scale=1 与非 950 组合限制的 API 注释。 | 保证头文件、ACLNN 文档和实现一致。 | | norm/add_rms_norm_quant_v2/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant_v2.cpp | 保留 zeroPoints2-only 成功例,增加 950 合法全参数例和 9 个 dtype 关系/组合负例;保留 910B/910_93/310P gamma 兼容用例。 | 覆盖 V2 新增校验的每类关系,并验证非 950 兼容路径没有被改变。 | | norm/lp_norm_v2/docs/aclnnNorm.md | 明确 dim 不能为空指针,但可以是长度为 0 的数组;空数组表示归约所有维度,并说明 keepdim=true/false 的输出 shape。 | 修正文档歧义;实现本身支持 dim=[],无需修改算子代码。 | ### 范围边界 - 本 PR 的功能性修改聚焦 Ascend 950,代码路由统一使用 AclnnUtil::IsRegbase();当前 ACLNN 产品映射中 RegBase 即 Ascend 950,RegBase 能力校验按通用语义实现,不再直接比较 SocVersion::ASCEND950。DynamicQuant V2 的必选 Tensor 判空顺序统一作用于所有产品,但不改变合法输入契约;非 RegBase 仅将非法空指针场景提前、稳定地返回 ACLNN_ERR_PARAM_NULLPTR。 - aclnnAddRmsNormQuantV2 只新增 950 L2 参数校验,不改 L2 计算/回拷或 kernel:zeroPoints2-only 已由 CheckSupportV2()、RegBase L0 的 scales2 || zeroPoints2、shape 一致时的 y2 ViewCopy 和 HAS_SCALE2=false/HAS_ZEROPOINTS2=true kernel 模板实现闭环。 - 本 PR 只参考 !9263 中与 V1 dtype 理念一致的部分,没有带入其 xOut 必选、shape 或 L0 参数顺序等其他改动。 - aclnnAddRmsNorm 的共用 tiling 文件只改日志文案,不改变 310/910/950 的判断或执行结果。 - aclnnAddRmsNormDynamicQuant V1 的 ACLNN L2 契约不修改;仅修正 arch35 tiling 错误日志中的实际 rank。报告中的非 ND format、可选参数 nullptr 属于扫描器预设口径问题,不应据此收缩接口。 - norm/add_rms_norm/op_host/op_api/aclnn_add_rms_norm.cpp 及其 310P UT 已从本 PR 恢复为 master,不包含 310P 功能改动。 - norm/add_rms_norm_quant/tests/st/ 和 norm/add_rms_norm_quant_v2/tests/st/ 均不在本 PR 最终 diff 中;执行级 GEIR/TTK 验证材料保存在仓外整改目录,不作为代码提交。 ## 关联的Issue 关联的Issue:#5745 ## 测试 - [x] Ascend 950 Host/Tiling UT:70/70 PASS(AddRmsNorm 11、DynamicQuant arch35 24、Quant 24、InferShape 11)。 - [x] ACLNN L2 UT:DynamicQuant V1/V2 26/26 PASS(V1 6、V2 20,含新增 Ascend 910B 判空顺序回归);Quant V1 12/12 PASS;Quant V2 19/19 PASS。Quant V2 中的 910B/910_93/310P 兼容用例同时通过。 - [x] Quant 910B Host/Tiling 定向构建与 UT:24/24 PASS;确认 arch35 文件虽参与编译,910B 运行时仍走 non-RegBase 分支。 - [x] Quant V2 950 binary 穷举对表:416 条 binary 的跨参数关系全部满足;代码接受的 12 类 dtype 投影与已交付集合完全相同。 - [x] aclnnAddRmsNorm 实际 plog 验证:命中指定 reason,返回失败符合预期。 - [x] V1/V2 NCHW 单进程专项验证:各 1/1 PASS,合法 NCHW 输入可正常执行。 - [x] Ascend 950 zeroPoints2-only TTK 执行级验证:1/1 PASS,y2 与 round(rmsnorm(x) + zeroPoints2) 逐元素一致。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)定向 ACLNN 回归:57/57 PASS(DynamicQuant V1 6、V2 20;Quant V1 12、V2 19);clang-format 和 git diff --check 通过。 - [x] 线上 CodeCheck 失败项已按平台 pre-commit 口径修复:README 尾随空格、clang-format 自动修复项及 2 个 OAT License Header 均已整改;随后对 17 个 PR 文件重新执行 pre-commit,全部 hook PASS。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)使用 /workspace/CI-skills/ci_local_check.sh 完成统一入口的定向本地 CI:17 个 PR 文件的 whitespace、EOF、clang-format、codespell、OAT 全部 PASS,Markdown 链接 PASS;Ascend 950/910B 的定向 package、ophost UT、opapi UT 全部 PASS。本次 93020a45f8 仅继续修改 README/ACLNN 文档,代码内容不变。本项不再使用仓内旧 scripts/ci/pre_push_build.sh 的 ALL PASSED 代替 CodeCheck 结论。 - [x] P3 文档修正后,对 17 个 PR 文件重新执行平台同款 pre-commit,whitespace、EOF、clang-format、codespell、OAT 全部 PASS;V2 README 和 ACLNN 文档的 Markdown 链接检查 PASS。 - [x] Quant V1/V2 共用 InferShape/tiling/dtype Host UT:38/38 PASS;其中新增 4 个 InferShape 用例,覆盖 V1/V2 的 zeroPoints2-only 和无第二路参数两类分支。 - [x] 修复前 GEIR 定向复现:V1、V2 的 zeroPoints2-only 均因 y2Out 被推导为 (1,) 而失败;修复后 V1 1/1、V2 1/1 PASS,量化输出精度均为 100%。测试 CSV 保存在仓外,不提交 ST 目录。 - [x] 最终 PR 共 1 个提交、20 个文件,确认 Quant V1/V2 ST 目录均不在 diff 中。 ## 文档更新 - [x] 更新 aclnnAddRmsNormQuant.md:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义。 - [x] 更新 aclnn_add_rms_norm_quant.h:同步公开接口注释。 - [x] 更新 aclnnAddRmsNormQuantV2.md、V2 README 和头文件:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义,修正 8 行 beta dtype,按多产品差异规范整理 README,并区分存量产品原生 V2 与 ACLNN V1 回退路径的 divMode=False 能力。 - [x] 更新 aclnnNorm.md:明确空 dim 数组的全维归约语义与输出 shape。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!10098 | 1 个月前 | |
batch_norm/batch_norm_v3算子新平台支持 Co-authored-by: ASCEND222<dongfei16@h-partners.com> # message auto-generated for no-merge-commit merge: !10044 merge master into master batch_norm/batch_norm_v3算子新平台支持 Created-by: ASCEND222 Commit-by: ASCEND222 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> batch_norm/batch_norm_v3算子新平台支持 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5672 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10044 | 1 个月前 | |
fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !9459 merge master into master fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 BatchNorm 系列算子,主要包含: - 移除 BatchNorm3DGrad / BatchNormGradExt2 的 BFLOAT16(bfloat16)数据类型支持:def.cpp 中 y_backprop/x/x_backprop 仅保留 FLOAT16/FLOAT32,proto.h 同步更新,并删除含 bfloat16 的预编译 binary 配置(batch_norm3_d_grad_binary.json / batch_norm_grad_ext2_binary.json)。 - 三个 BatchNorm 算子(BatchNorm3D/BatchNorm3DGrad/BatchNormGradExt2)新增 Atlas 200I/500 A2 推理产品支持(README 产品支持表由 × 改为 √)。 - 新增图模式调用样例:test_geir_batch_norm3d_grad.cpp、test_geir_batch_norm_grad_ext2.cpp。 - BNTrainingReduceGrad 新增 TensorFlow framework 插件(framework/bn_training_reduce_grad_tf_plugin.cpp)。 - 同步更新 tiling、infershape、golden.py 及相应单测。 ## 关联的Issue - #5355 ## 测试 - 更新 infershape 单测:test_batch_norm3d_infershape.cpp、test_batch_norm3_d_grad_infershape.cpp、test_batch_norm_grad_ext2_infershape.cpp - 更新 tiling 单测:test_bn_training_reduce_grad_tiling.cpp - 更新 golden 数据:golden.py ## 文档更新 - 更新 batch_norm3_d/batch_norm3_d_grad/batch_norm_grad_ext2 的 README(Atlas 200I/500 A2 支持、调用样例链接) ## 类型标签 - [x] Bug修复 - [x] 新特性 ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9459 | 1 个月前 | |
fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !9459 merge master into master fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 BatchNorm 系列算子,主要包含: - 移除 BatchNorm3DGrad / BatchNormGradExt2 的 BFLOAT16(bfloat16)数据类型支持:def.cpp 中 y_backprop/x/x_backprop 仅保留 FLOAT16/FLOAT32,proto.h 同步更新,并删除含 bfloat16 的预编译 binary 配置(batch_norm3_d_grad_binary.json / batch_norm_grad_ext2_binary.json)。 - 三个 BatchNorm 算子(BatchNorm3D/BatchNorm3DGrad/BatchNormGradExt2)新增 Atlas 200I/500 A2 推理产品支持(README 产品支持表由 × 改为 √)。 - 新增图模式调用样例:test_geir_batch_norm3d_grad.cpp、test_geir_batch_norm_grad_ext2.cpp。 - BNTrainingReduceGrad 新增 TensorFlow framework 插件(framework/bn_training_reduce_grad_tf_plugin.cpp)。 - 同步更新 tiling、infershape、golden.py 及相应单测。 ## 关联的Issue - #5355 ## 测试 - 更新 infershape 单测:test_batch_norm3d_infershape.cpp、test_batch_norm3_d_grad_infershape.cpp、test_batch_norm_grad_ext2_infershape.cpp - 更新 tiling 单测:test_bn_training_reduce_grad_tiling.cpp - 更新 golden 数据:golden.py ## 文档更新 - 更新 batch_norm3_d/batch_norm3_d_grad/batch_norm_grad_ext2 的 README(Atlas 200I/500 A2 支持、调用样例链接) ## 类型标签 - [x] Bug修复 - [x] 新特性 ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9459 | 1 个月前 | |
feat: 算子910B~910E区间判断追加IsRegbase()并统一IsArch3510判断以兼容后续Regbase芯片 Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !10101 merge q_aclnn_version into master feat: 算子910B~910E区间判断追加IsRegbase()并统一IsArch3510判断以兼容后续Regbase芯片 Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 以 RegBase 架构(NpuArch = DAV_3510,含 Ascend950 及后续 Regbase 芯片)兼容为目标,统一两类芯片判断写法: 1. **区间判断追加**:对 4 个算子 op_api 中 GetSocVersion() >= ASCEND910B && GetSocVersion() <= ASCEND910E 区间判断追加 || Ops::NN::AclnnUtil::IsRegbase(),使 RegBase 平台在 SocVersion 区间之外时也走 910B 支持分支 2. **硬编码统一**:将 1 个算子的本地架构判断封装函数(IsArch3510)实现改为 IsRegbase(),后续 Regbase 芯片无需逐文件修改 ## 修改内容一:区间判断追加(4 个文件,4 处) | 算子 | 文件 | 修改 | |------|------|------| | logsoftmaxv2 | activation/log_softmax_v2/op_api/aclnn_log_softmax.cpp | CheckSocVersionIsSupportBf16 追加 IsRegbase();补 include | | logsoftmaxgrad | activation/log_softmax_grad/op_api/aclnn_logsoftmax_backward.cpp | 同上(include 原已存在) | | softmaxgrad | activation/softmax_grad/op_api/aclnn_softmax_backward.cpp | 同上(include 原已存在) | | batchNormElemt | norm/batch_norm_elemt/op_host/op_api/aclnn_batch_norm_elemt.cpp | 追加 IsRegbase() 并删除冗余 == SocVersion::ASCEND950;补 include | ### 关于删除 == SocVersion::ASCEND950 的说明 SocVersion 枚举中 ASCEND950 = ASCEND910_95(值 3)位于 ASCEND910B(1)与 ASCEND910E(4)之间,区间判断本已覆盖 950,原 || == ASCEND950 分支从不单独生效;且 Ascend950 的 NpuArch 即 DAV_3510,IsRegbase() 对 950 同样为真。净效果为纯扩展,存量平台无收窄。 ## 修改内容二:硬编码判断统一(1 个文件,1 处) - layerNormV4:norm/layer_norm_v4/op_host/op_api/aclnn_layer_norm.cpp:123 —— IsArch3510() 函数体改为 Ops::NN::AclnnUtil::IsRegbase()(调用点不动) ### 范围说明 - addRmsNormQuantV2(aclnn_add_rms_norm_quant_v2):upstream !10098(完善RMSNorm量化校验)已将其 IsSocVersion950() 统一改名并实现为 IsRegbase(),本次不改,与 upstream 保持零 diff - batchNormGradV3(aclnn_fast_batch_norm_backward):经评审本次不改,与 upstream 保持零 diff,其恒真条件见关联 Issue - 公共头 level2_base_caculation.h、experimental 目录、tests 不在本次范围,遗留问题见关联 Issue ## 关联的Issue - #5707 (ops-nn仓RegBase兼容遗留问题清理:公共头IsRegbase同步、恒真条件修正、重复查询优化) ## 测试 - pre-commit 检查(clang-format/codespell/OAT 等)全部通过 - 修改文件 g++ -fsyntax-only 语法验证通过 - 已触发 compile 编译 - 建议测试项: 1. 910B/910E 平台回归 BF16 正反向用例行为不变 2. Ascend950 平台回归(验证删除 == ASCEND950 等价、layerNormV4 的 950 分支行为不变) 3. RegBase 平台 BF16 用例由校验拒绝变为正常放行 4. 区间外平台(910/310/310P)BF16 仍被拦截 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ### 关联issue - [cann/ops-math#5467(ops-math 侧 910B~910E 区间判断追加 IsRegBase)](https://gitcode.com/cann/ops-math/pull/5467) See merge request: cann/ops-nn!10101 | 1 个月前 | |
batch_norm类部分算子检视问题修复 Co-authored-by: LuckySun<sunwenlong8@huawei.com> # message auto-generated for no-merge-commit merge: !9620 merge check_fix into master batch_norm类部分算子检视问题修复 Created-by: LuckySun Commit-by: LuckySun Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复深度检视后发现的问题,包括文档的产品区分,输入的校验,泛化发现的精度问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5223 https://gitcode.com/cann/ops-nn/issues/5004 https://gitcode.com/cann/ops-nn/issues/5001 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了README.md文档的描述 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9620 | 1 个月前 | |
fix(batch_norm): arch35 路径 VL 写死常量改为 VL 派生,移除 batch_norm_v3 本地 GetVRegSize 写死回退 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !9027 merge fix/batch_norm_vl_hardcode_arch35 into master fix(batch_norm): arch35 路径 VL 写死常量改为 VL 派生,移除 batch_norm_v3 本地 GetVRegSize 写死回退 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 背景 docs/batch_norm_vl_hardcode_audit.md 审计报告指出 batch_norm 系列四个算子 arch35 kernel 侧存在 VL 写死常量。本 PR 按报告 P0+P1 优先级进行整改,范围与 b1cb72bde / b55fcd4f2 一致(仅 arch35/regbase 路径,910/310 的 tiling 与 kernel 未触碰)。 ## 修改内容 ### P0: batch_norm_v3.h — 移除本地 GetVRegSize() 写死回退 - 移除 #if __CCE_AICORE__ == 310 || __NPU_ARCH == 5102 / return 256U 写死回退分支 - 改为委托 platform::GetVRegSize(),与 batch_norm / batch_norm_grad / batch_norm_grad_v3 其余三个算子统一 VL 来源 - 同时将 GetUbBlockSize() 改为委托 platform::GetUbBlockSize() - 消除 batch_norm_v3 与 norm_common 的 #if 判断不一致风险(前者含 5102 分支,后者不含,在 DAV_5102 上可能导致同编译单元内 VL 取值分叉) ### P1: batch_norm_grad_common.h / batch_norm_grad_v3_split_r1_regbase.h — 9 个 cache 常量改为 VL 派生 - CACHE_BUFF_SIZE / DGAMA_CACHE_INDEX / CACHE_LEVEL0~2_INDEX / DBETA_FOLD_CACHE_INDEX / DGAMA_FOLD_CACHE_INDEX / FOLD_CACHE_CAPACITY / ONE_LEVEL_BINARRY_ADD_CACHE_CAPACITY - 从字面量(256/768/1536/64 等)改为 VECTOR_LENGTH / VL_FP32 派生表达式 - 这些常量被 InitBuffer / 二分掩码 idx & (CAPACITY - 1) 强耦合,未来 VL 变化会导致归约语义错误 ### P1: 3 个文件的 UB_ADD_BUF / UB_ADD_LEN 改为 VL 派生 - batch_norm_grad_recompute_split_r0_regbase.h / batch_norm_grad_infer.h / batch_norm_grad_v3_recompute_split_r0_regbase.h - UB_ADD_LEN = 1024/sizeof(float) → 4 * VL_FP32 - UB_ADD_BUF = 3*1024 → 3 * UB_ADD_LEN * sizeof(float) ## 等价性验证 所有派生表达式在 950 平台(VRegSize=256B、VL_FP32=64)下与原字面量取值完全一致: | 常量 | 原值 | 派生表达式 | 派生值 | |---|---|---|---| | ONE_LEVEL_BINARRY_ADD_CACHE_CAPACITY | 256 | VECTOR_LENGTH | 256 | | FOLD_CACHE_CAPACITY | 64 | VL_FP32 | 64 | | CACHE_LEVEL1_INDEX | 256 | VECTOR_LENGTH | 256 | | DGAMA_CACHE_INDEX | 768 | 3 * VECTOR_LENGTH | 768 | | DBETA_FOLD_CACHE_INDEX | 1536 | 6 * VECTOR_LENGTH | 1536 | | CACHE_BUFF_SIZE | 6656 | 6*1024 + 2*VECTOR_LENGTH | 6656 | | UB_ADD_LEN | 256 | 4 * VL_FP32 | 256 | | UB_ADD_BUF | 3072 | 3 * UB_ADD_LEN * sizeof(float) | 3072 | ## 未涉及(后续整改) - P2: FIRST_VCADD_RESULT_MAX_NUM = 128 及非 arch35(A2/A3)路径 ELEM_PER_REP_FP32 = 64 等(base 路径需单独评估回归面) - P3: norm_common/reduce_common_regbase.h 的 ONCE_VECTOR_SIZE = 256(被约 15 个 norm 算子共用,b55fcd4f2 已标注为残留风险,待 norm_common 统一整改) --- ## 关联 issue Fixes #5048 See merge request: cann/ops-nn!9027 | 1 个月前 | |
fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !9459 merge master into master fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 BatchNorm 系列算子,主要包含: - 移除 BatchNorm3DGrad / BatchNormGradExt2 的 BFLOAT16(bfloat16)数据类型支持:def.cpp 中 y_backprop/x/x_backprop 仅保留 FLOAT16/FLOAT32,proto.h 同步更新,并删除含 bfloat16 的预编译 binary 配置(batch_norm3_d_grad_binary.json / batch_norm_grad_ext2_binary.json)。 - 三个 BatchNorm 算子(BatchNorm3D/BatchNorm3DGrad/BatchNormGradExt2)新增 Atlas 200I/500 A2 推理产品支持(README 产品支持表由 × 改为 √)。 - 新增图模式调用样例:test_geir_batch_norm3d_grad.cpp、test_geir_batch_norm_grad_ext2.cpp。 - BNTrainingReduceGrad 新增 TensorFlow framework 插件(framework/bn_training_reduce_grad_tf_plugin.cpp)。 - 同步更新 tiling、infershape、golden.py 及相应单测。 ## 关联的Issue - #5355 ## 测试 - 更新 infershape 单测:test_batch_norm3d_infershape.cpp、test_batch_norm3_d_grad_infershape.cpp、test_batch_norm_grad_ext2_infershape.cpp - 更新 tiling 单测:test_bn_training_reduce_grad_tiling.cpp - 更新 golden 数据:golden.py ## 文档更新 - 更新 batch_norm3_d/batch_norm3_d_grad/batch_norm_grad_ext2 的 README(Atlas 200I/500 A2 支持、调用样例链接) ## 类型标签 - [x] Bug修复 - [x] 新特性 ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9459 | 1 个月前 | |
[cleancode] norm类算子C++语言规则告警整改 Co-authored-by: runqi_zhang<zhangrunqi2@huawei.com> # message auto-generated for no-merge-commit merge: !9815 merge test/codecheck-norm-split into master [cleancode] norm类算子C++语言规则告警整改 Created-by: runqi_zhang Commit-by: runqi_zhang Merged-by: cann-robot Description: ## 描述 仓内norm类算子存在大量C++语言规则类告警,对相应文件进行整改。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9815 | 1 个月前 | |
batch_norm/batch_norm_v3算子新平台支持 Co-authored-by: ASCEND222<dongfei16@h-partners.com> # message auto-generated for no-merge-commit merge: !10044 merge master into master batch_norm/batch_norm_v3算子新平台支持 Created-by: ASCEND222 Commit-by: ASCEND222 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> batch_norm/batch_norm_v3算子新平台支持 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5672 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10044 | 1 个月前 | |
batch_norm类部分算子检视问题修复 Co-authored-by: LuckySun<sunwenlong8@huawei.com> # message auto-generated for no-merge-commit merge: !9620 merge check_fix into master batch_norm类部分算子检视问题修复 Created-by: LuckySun Commit-by: LuckySun Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复深度检视后发现的问题,包括文档的产品区分,输入的校验,泛化发现的精度问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5223 https://gitcode.com/cann/ops-nn/issues/5004 https://gitcode.com/cann/ops-nn/issues/5001 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了README.md文档的描述 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9620 | 1 个月前 | |
batch_norm类部分算子检视问题修复 Co-authored-by: LuckySun<sunwenlong8@huawei.com> # message auto-generated for no-merge-commit merge: !9620 merge check_fix into master batch_norm类部分算子检视问题修复 Created-by: LuckySun Commit-by: LuckySun Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复深度检视后发现的问题,包括文档的产品区分,输入的校验,泛化发现的精度问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5223 https://gitcode.com/cann/ops-nn/issues/5004 https://gitcode.com/cann/ops-nn/issues/5001 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了README.md文档的描述 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9620 | 1 个月前 | |
refactor: align operator docs and Ascend C APIs Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !9366 merge docs/bn-inference-readme-compliance into master refactor: align operator docs and Ascend C APIs Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 - 规范BNInference README的多产品差异说明,并迁移arch35非对齐搬运接口,保持REG_OP、ABI、数学语义和tiling方案不变。 - 带入PR #9368的InplaceAdd README产品能力描述整改,明确各产品的数据类型、动态shape、索引与空Tensor约束。 - 带入PR #9364的BN3DTrainingReduce Reg搬运接口迁移,将旧 DataCopy按方向替换为LoadAlign/StoreAlign。 ## 关联的Issue 关联Issue #5259 https://gitcode.com/cann/ops-nn/issues/5259 ## 测试 - pre-commit:trim、EOF、merge-conflict、private-key、clang-format、codespell、OAT均通过。 - BNInference使用工作目录私有CANN 9.2.0分别编译修改前后源码;55/55个kernel .o及55/55个JSON均字节级一致。 - BN3DTrainingReduce接口迁移已在PR #9364验证修改前后二进制一致。 - InplaceAdd仅修改README,不影响执行代码。 - #9368与#9364带入后的文件blob与对应PR head逐文件一致,因此未重复运行本地CI。 ## 文档更新 - 更新norm/bn_inference/README.md。 - 更新index/inplace_add/README.md。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:Ascend C API重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9366 | 1 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
legacy下线:整改NN算子图模式注册与日志规范 Co-authored-by: zhouxuan78<zhouxuan78@huawei.com> # message auto-generated for no-merge-commit merge: !8388 merge master into master legacy下线:整改NN算子图模式注册与日志规范 Created-by: zhouxuan78 Commit-by: zhouxuan78 Merged-by: cann-robot Description: ## 描述 本 PR 用于 ops-nn 仓 Legacy 下线整改,补齐部分算子的直调/图模式注册、InferShape / InferDataType 拆分、日志规范整改及必要的编译/预提交问题修复。 1. 补齐多个算子的 op_graph 侧 InferDataType / graph infer 注册文件,并同步补充对应 CMakeLists.txt: - 如 FastGeluV2、HardShrinkGrad、HardSigmoidGrad、HardSwish、HardSwishGrad、Selu、SeluGrad、Shrink、SoftplusGrad、SoftplusV2、SoftplusV2Grad、Softsign、SoftsignGrad、SmoothL1Loss、SoftMarginLoss、LpNormUpdateV2、ApplyFtrlV2、ApplyMomentum、ApplyRMSProp 等。 2. 调整部分算子的 op_host infer 文件: - 将 InferDataType 逻辑从 infershape 文件中拆分/迁移到 op_graph 侧; - 保留 InferShape 逻辑,避免 shape/type 混在同一处注册; - 收敛 IndexCheck infershape 日志,仅保留入口日志。 3. 补充 SoftMarginLoss 图模式原型: - 新增 loss/soft_margin_loss/op_graph/soft_margin_loss_proto.h; - 新增 OPS_PROTO_DEF_SOFTMARGINLOSS 去重宏,避免重复注册; - 补充 SoftMarginLoss 的 op_graph/CMakeLists.txt 和 graph infer 注册。 4. 日志整改: - 为 Arch35 tiling 入口补充统一入口日志; - 对本 PR 修改范围内新增/调整的外部输入错误日志,按规范使用 OP_LOGE_FOR_INVALID_* 系列上报接口; - 收敛部分过多的 tiling / infershape 日志打印,避免循环或冗余打印。 5. 回退/收敛不属于本次整改范围的 Softshrink 重命名相关改动: - Softshrink -> SoftShrink 的命名调整不放在本 PR 中,后续单独 PR 处理。 6. 修复 pre-commit 格式问题: - 按仓库 .clang-format 修复格式; - 不修改 .pre-commit-config.yaml。 影响范围 主要影响 activation、index、loss、norm、optim、quant、vfusion 等目录下 Legacy 下线相关算子的 op_graph 注册、InferDataType 拆分、tiling 入口日志和错误日志规范。 ## 变更内容 ## 关联的Issue ## 测试 ## 文档更新 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:Legacy包下线整改 See merge request: cann/ops-nn!8388 | 1 个月前 | |
fix(bn_inference): 修复 CANN 9.0.0 编译失败 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !9813 merge fix/bn-inference-cann900-compile into master fix(bn_inference): 修复 CANN 9.0.0 编译失败 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 修复 BNInference 在 CANN 9.0.0 Ascend 950 动态 kernel 编译阶段找不到 platform_util.h 的问题。将 kernel 公共头文件引用调整为算子包公共源码目录使用的相对路径,不改变算子接口、REG_OP、tiling 或计算语义。 ## 关联的Issue #5534 ## 测试 - CANN 9.0.0 独立环境:bash build.sh --pkg --ops=bn_inference --soc=ascend950 --cann_3rd_lib_path=<third_party> --ccache=off -j8 - 修改前:动态 kernel PRECOMPILE 阶段稳定复现头文件缺失。 - 修改后:55 个 BNInference 动态 kernel 全部编译完成,整包生成成功。 - 本地定向 CI:仅检查 BNInference 影响范围;Ascend 950 package/opkernel 与 Ascend 910B package/opkernel 均通过。 - 提交钩子:通过。 - 远程 CI:已通过 compile 评论触发。 ## 文档更新 无文档变更。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9813 | 1 个月前 | |
legacy下线:整改NN算子图模式注册与日志规范 Co-authored-by: zhouxuan78<zhouxuan78@huawei.com> # message auto-generated for no-merge-commit merge: !8388 merge master into master legacy下线:整改NN算子图模式注册与日志规范 Created-by: zhouxuan78 Commit-by: zhouxuan78 Merged-by: cann-robot Description: ## 描述 本 PR 用于 ops-nn 仓 Legacy 下线整改,补齐部分算子的直调/图模式注册、InferShape / InferDataType 拆分、日志规范整改及必要的编译/预提交问题修复。 1. 补齐多个算子的 op_graph 侧 InferDataType / graph infer 注册文件,并同步补充对应 CMakeLists.txt: - 如 FastGeluV2、HardShrinkGrad、HardSigmoidGrad、HardSwish、HardSwishGrad、Selu、SeluGrad、Shrink、SoftplusGrad、SoftplusV2、SoftplusV2Grad、Softsign、SoftsignGrad、SmoothL1Loss、SoftMarginLoss、LpNormUpdateV2、ApplyFtrlV2、ApplyMomentum、ApplyRMSProp 等。 2. 调整部分算子的 op_host infer 文件: - 将 InferDataType 逻辑从 infershape 文件中拆分/迁移到 op_graph 侧; - 保留 InferShape 逻辑,避免 shape/type 混在同一处注册; - 收敛 IndexCheck infershape 日志,仅保留入口日志。 3. 补充 SoftMarginLoss 图模式原型: - 新增 loss/soft_margin_loss/op_graph/soft_margin_loss_proto.h; - 新增 OPS_PROTO_DEF_SOFTMARGINLOSS 去重宏,避免重复注册; - 补充 SoftMarginLoss 的 op_graph/CMakeLists.txt 和 graph infer 注册。 4. 日志整改: - 为 Arch35 tiling 入口补充统一入口日志; - 对本 PR 修改范围内新增/调整的外部输入错误日志,按规范使用 OP_LOGE_FOR_INVALID_* 系列上报接口; - 收敛部分过多的 tiling / infershape 日志打印,避免循环或冗余打印。 5. 回退/收敛不属于本次整改范围的 Softshrink 重命名相关改动: - Softshrink -> SoftShrink 的命名调整不放在本 PR 中,后续单独 PR 处理。 6. 修复 pre-commit 格式问题: - 按仓库 .clang-format 修复格式; - 不修改 .pre-commit-config.yaml。 影响范围 主要影响 activation、index、loss、norm、optim、quant、vfusion 等目录下 Legacy 下线相关算子的 op_graph 注册、InferDataType 拆分、tiling 入口日志和错误日志规范。 ## 变更内容 ## 关联的Issue ## 测试 ## 文档更新 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:Legacy包下线整改 See merge request: cann/ops-nn!8388 | 1 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
[doc] 文档描述修改 Co-authored-by: justsheldon<taoxudong@huawei.com> # message auto-generated for no-merge-commit merge: !9551 merge BNTrainingUpdateGrad into master [doc] 文档描述修改 Created-by: justsheldon Commit-by: justsheldon Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 芯片描述信息调整 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 仅文档修改,不涉及测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了bn_training_update_grad/README.md、bn_training_update_v2/README.md、bn_training_update_v3/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9551 | 1 个月前 | |
Centralization 算子下一代支持 Co-authored-by: 岩80<1611150171@qq.com> # message auto-generated for no-merge-commit merge: !9814 merge master into master Centralization 算子下一代支持 Created-by: 2403_87792773 Commit-by: 岩80 Merged-by: cann-robot Description: ## 描述 新增 Centralization 算子,在指定轴上计算输入均值,并从输入对应元素中逐元素减去,输出 保持与输入相同的 shape 和 dtype。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue#5533 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 已完成 Ascend 950PR 环境下的验证: - release binary 泛化验证:1010/1010 PASS; - 本地精度验证:200/200 PASS; - GEIR 通路验证:60/60 PASS; - TensorFlow parser 通路验证:60/60 PASS; - DFX 验证:8/8 PASS; - code-check 和 C/C++ 格式检查已执行; - GPU 性能、三方精度和性能验证按当前任务要求未执行。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 norm/centralization/README.md; - 更新 docs/zh/op_list.md; - 补充算子参数、约束、产品支持范围和调用方式说明。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9814 | 1 个月前 | |
add renorm for A5 ascendc Co-authored-by: liuyun_nj<liuyun90@h-partners.com> # message auto-generated for no-merge-commit merge: !10195 merge master into master add renorm for A5 ascendc Created-by: liuyun_nj Commit-by: liuyun_nj Merged-by: cann-robot Description: ## 描述 renorm算子支持A5 as实现,性能调优 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 泛化验证 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10195 | 1 个月前 | |
[cleancode] norm类算子C++语言规则告警整改 Co-authored-by: runqi_zhang<zhangrunqi2@huawei.com> # message auto-generated for no-merge-commit merge: !10000 merge test/codecheck-norm2 into master [cleancode] norm类算子C++语言规则告警整改 Created-by: runqi_zhang Commit-by: runqi_zhang Merged-by: cann-robot Description: ## 描述 仓内norm类算子存在大量C++语言规则类告警,对相应文件进行整改。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10000 | 1 个月前 | |
[cleancode] norm类算子C++语言规则告警整改 Co-authored-by: runqi_zhang<zhangrunqi2@huawei.com> # message auto-generated for no-merge-commit merge: !10000 merge test/codecheck-norm2 into master [cleancode] norm类算子C++语言规则告警整改 Created-by: runqi_zhang Commit-by: runqi_zhang Merged-by: cann-robot Description: ## 描述 仓内norm类算子存在大量C++语言规则类告警,对相应文件进行整改。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10000 | 1 个月前 | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 3 个月前 | |
fix asan test Co-authored-by: chenqi317<chenqi317@huawei.com> # message auto-generated for no-merge-commit merge: !9033 merge master into master fix asan test Created-by: chenqi317 Commit-by: chenqi317 Merged-by: cann-robot Description: ## 描述 修复 ASan(AddressSanitizer)测试中暴露的问题,主要包括:类型不匹配、越界访问、字段缺失及命名不一致。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 详细变更 ### 1. 类型修正(uint32_t/int32_t → int64_t/uint64_t) 使测试中的 CompileInfo 结构体字段类型与实际算子侧定义保持一致,消除 ASan 因类型宽度不匹配报告的问题。 | 文件 | 字段 | 旧类型 | 新类型 | |------|------|--------|--------| | test_add_layer_norm_tiling.cpp | aivCoreNum_, sysWorkspaceSize_, vecRegSize_, blockSize_ | uint32_t | int64_t | | test_embedding_dense_grad_v2_tiling.cpp | totalCoreNum | int32_t | uint64_t | | test_add_rms_norm_cast_tiling.cpp | totalCoreNum | uint32_t | uint64_t | | test_add_rms_norm_quant_tiling.cpp | totalCoreNum | uint32_t | uint64_t | ### 2. 命名规范化:isRegbase → isRegBase 修正大小写不一致,统一为驼峰命名 isRegBase。 - test_embedding_dense_grad_v2_tiling.cpp ### 3. 补充缺失字段 isRegBase 为以下测试的 CompileInfo 结构体补充 isRegBase 字段(默认 false),避免因结构体字段缺失导致的内存读取越界: - test_modulate_tiling.cpp(4 处) - test_multi_scale_deformable_attention_grad_tiling.cpp(1 处) - test_multi_scale_deformable_attn_function_tiling.cpp(9 处) ### 4. 补充缺失字段 blockSize / vlFp32 - test_layer_norm_grad_tiling.cpp: 为 LayerNormGradCompileInfo 补充 blockSize 和 vlFp32(均为 int64_t)字段。 ### 5. 移除硬编码值 - test_add_rms_norm_cast_tiling.cpp: 将 totalCoreNum = 40、totalUbSize = 196608 改为 0,避免与实际平台信息不一致。 - test_add_rms_norm_quant_tiling.cpp: 同上,并调整字段顺序与命名(socVersion → curSocVersion,totalUbSize → maxUbSize)。 ### 6. 越界访问修复 - tests/ut/common/tiling_context_faker.cpp:309: 添加 idx < inputInstanceNumPacked_.size() 边界检查,防止 inputInstanceNumPacked_ 越界访问。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9033 | 1 个月前 | |
refactor: reduce duplicated code Co-authored-by: hushenxi<shenxi780803@163.com> # message auto-generated for no-merge-commit merge: !9451 merge cleancode-minimal-clean into master refactor: reduce duplicated code Created-by: Hushenxi111 Commit-by: hushenxi Merged-by: cann-robot Description: ## 描述 针对 CleanCode 重复代码报告进行最小化降重:仅调整局部变量、参数和配置对象命名,打断重复代码块。 未修改算子接口、计算公式、控制流或功能逻辑。本次共修改 31 个文件,473 行新增、471 行删除。 ## 关联的Issue 无。 ## 测试 - ATK测试通过 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:CleanCode 重复代码降重 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9451 | 1 个月前 | |
fix(norm): split oversized headers at declaration boundaries Co-authored-by: hushenxi<shenxi780803@163.com> # message auto-generated for no-merge-commit merge: !9861 merge fix/codecheck-large-headers-v2 into master fix(norm): split oversized headers at declaration boundaries Created-by: Hushenxi111 Commit-by: hushenxi Merged-by: cann-robot Description: ## 背景 修复 CleanCode 的 C/C++ 超大头文件告警。 ## 修改内容 - 拆分 5 个超过 500 LOC 的 Norm 内核头文件,保留原文件路径、接口、类及函数实现逻辑。 - 新增同目录 *_partN.h,由原头文件在合适的声明边界处 include。 - 所有 part 文件均不关闭父头文件的 #endif。 - 所有拆分边界位于完整函数/声明之间,不从函数体中间物理切分。 - 新增文件已补齐仓库许可证头。 See merge request: cann/ops-nn!9861 | 1 个月前 | |
fix file name Co-authored-by: liuyun_nj<liuyun90@h-partners.com> # message auto-generated for no-merge-commit merge: !10037 merge master into master fix file name Created-by: liuyun_nj Commit-by: liuyun_nj Merged-by: cann-robot Description: ## 描述 调整重复文件名 ## 关联的Issue #5695 ## 测试 回黄编包,验证 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10037 | 1 个月前 | |
docs(aclnn): 修正 GroupNormSiluQuant/GroupNormSilu 与 scatter 四算子的资料与实现不一致项 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9399 merge fix/aclnn-doc-support-scope into master docs(aclnn): 修正 GroupNormSiluQuant/GroupNormSilu 与 scatter 四算子的资料与实现不一致项 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 三类「资料与实现不符」的订正,来源于测试反馈的资料核对。**不改动任何算子实现**,唯一的非文档改动是补了 2 条 tiling 边界 UT。 **一、GroupNormSiluQuant / GroupNormSilu:输出 Tensor 的「非连续Tensor」列标注与实现不符** aclnnGroupNormSiluQuant 的 out / meanOut / rstdOut 三行在 docs 中标 -(未标注)、在 README 中标 x(不支持);aclnnGroupNormSilu 的同三行标 x。而三者的 op_api 实现中每个输出均经 l0op::ViewCopy 写回(空 Tensor 分支的 FillScalar 同样经 ViewCopy),即支持非连续输出。三处统一改为 √。 **二、GroupNormSiluQuant:空 Tensor 支持范围声明过宽** docs 与 README 原文为「支持空Tensor(任意维度为0)」。实现自首版 5d36b373b 起,CheckAttr 即拒收 N(第 0 维)或 C(第 1 维)为 0 的输入并返回 161002。表述收窄为「支持空Tensor:N(第0维)与C(第1维)需大于0,其余维度可为0」,填充行为(out 为空、meanOut 填 0、rstdOut 填 NAN)与原描述一致,保留不变。 **三、ScatterMin / ScatterMax / ScatterMul / ScatterDiv:aclnn 资料缺少 varRef 首维上限约束** 四个算子共用 scatter_reduce_common tiling,其中 varFirstDim > INT32_MAX 即拒收——并行归并排序以 INT32_MAX 作为补齐哨兵,首维再大将使合法索引与哨兵不可区分。该约束已在四个算子的 README「约束说明」中声明(2e6678836,与实现同笔提交),但四篇 aclnn 资料的「约束说明」节遗漏,本次补入「varRef的首维大小不超过INT32_MAX。」。 **四、补齐 ScatterMin tiling 的边界用例** 既有 4 条 tiling UT 均为常规规模,未覆盖 INT32_MAX 边界。新增两条:首维 = INT32_MAX 期望接受、= INT32_MAX + 1 期望拒收。 ## 关联的Issue 关联Issue #5270 —— https://gitcode.com/cann/ops-nn/issues/5270 ## 测试 **1. Host UT** bash build.sh -u --ophost --ops=scatter_min --soc=ascend950 ScatterMinTiling 共 9 条用例全部通过(原 4 条 + 本次新增 2 条 + 其余 3 条),含新增的 test_tiling_var_dim0_eq_int32max(期望 GRAPH_SUCCESS)与 test_tiling_var_dim0_over_int32max(期望拒收)。 **2. Ascend 950PR 真机实测(CANN 9.2.0 发布包内置 kernel)** - 非连续输出:为 aclnnGroupNormSiluQuant 与 aclnnGroupNormSilu 构造末维 stride=2 的非连续输出,结果均与全连续基线逐元素一致;并在 storage 空隙中预置哨兵值,跑完检查未被改写,确认是按 stride 散射写入而非连续覆盖。 - 空 Tensor 逐轴:N=0、C=0 被拒收并返回 161002;H=0、W=0 通过,meanOut 填 0、rstdOut 填 NAN。 ## 文档更新 更新了 7 篇资料,均只改与实现不符的字段,不涉及接口与行为变更: - norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md(非连续标记 ×3、空 Tensor 范围) - norm/group_norm_silu_quant/README.md(非连续标记 ×3、空 Tensor 范围) - norm/group_norm_silu/docs/aclnnGroupNormSilu.md(非连续标记 ×3) - index/scatter_min/docs/aclnnScatterMin.md、index/scatter_max/docs/aclnnScatterMax.md、index/scatter_mul/docs/aclnnScatterMul.md、index/scatter_div/docs/aclnnScatterDiv.md(各补 1 条首维约束) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9399 | 1 个月前 | |
fix(assets,index,loss): ScatterList 资料/校验、loss 检视整改、TTK spec 适配、tf 三方腿与三方精度修正 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9870 merge fix/ttk-golden-tf-third-party into master fix(assets,index,loss): ScatterList 资料/校验、loss 检视整改、TTK spec 适配、tf 三方腿与三方精度修正 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ## 描述 补齐foreach类、scatter类及lamb类算子的tf等通路三方 ## 关联的Issue NA ## 测试 st ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9870 | 1 个月前 | |
规范化修改产品术语名 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !8341 merge master into master 规范化修改产品术语名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 产品文档中产品名需规范化 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#4260](https://gitcode.com/cann/ops-nn/issues/4260) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 相关readme和aclnn API MD ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8341 | 2 个月前 | |
将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Co-authored-by: m0_71149169<1907825139@qq.com> # message auto-generated for no-merge-commit merge: !9291 merge norm-quant-microapi-to-reg into master 将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Created-by: m0_71149169 Commit-by: m0_71149169 Merged-by: cann-robot Description: ## 描述 MicroAPI → Reg 命名空间迁移: norm,quant CANN 头文件 kernel_macros.h 中存在命名空间别名 namespace MicroAPI = Reg;,MicroAPI 只是 Reg 的别名。为统一命名规范,将 nn 仓所有算子 kernel 代码中的 MicroAPI 替换为 Reg,并通过对比替换前后 binary .o 文件 MD5 验证替换无影响。 覆盖范围 - nn 主仓目录:norm,quant ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5098](https://gitcode.com/cann/ops-nn/issues/5098) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: norm,quant目录下MicroAPI → Reg 命名空间迁移 See merge request: cann/ops-nn!9291 | 1 个月前 | |
fix(softmax/group_norm): 平台参数与 VL 相关常量改为接口派生,消除跨平台写死 Co-authored-by: zhuzixian-lr<zhuzixian1@h-partners.com> # message auto-generated for no-merge-commit merge: !9759 merge softmax_vl into master fix(softmax/group_norm): 平台参数与 VL 相关常量改为接口派生,消除跨平台写死 Created-by: zhuzixian-lr Commit-by: zhuzixian-lr Merged-by: cann-robot Description: ## 描述 将 softmax 系 5 个算子(softmax_v2 / log_softmax_v2 / softmax_grad / log_softmax_grad / confusion_softmax_grad)与 GroupNormV2 / GroupNormGrad 中写死的平台相关常量改为接口派生,消除换设备平台时的功能/能力异常。 ### 问题背景 排查发现两类"由平台参数决定却写死为具体值"的常量: 1. **VL 算法界写死**: - R_MAX_VALUE = 16384 实为二分累加算法安全上限 4 * VL^2(SecondNormComputePost 要求 foldPoint <= 2*VL,故 r <= 4*VL*VL)。VL=64 平台恰好吻合;VL 变小平台将放行超界 r 导致 sum 不计算(功能错误),VL 变大平台错误拒绝合法 r(能力损失)。 - GroupNormV2 FP32_ONE_REPEAT = 64 即 VL_FP32 写死形态,two_pass 模板 dichotomyAdd buffer 按 64 切分,而 tiling 侧按 GetVRegSize(context) 接口值计算——跨侧不一致,换平台必现 buffer 尺寸错误。 - GroupNormV2 使用裸名 VECTOR_REG_WIDTH(AscendC::VECTOR_REG_WIDTH 定义于 SDK 常量表,各架构分支均为写死 256),改为 Ops::Base::GetVRegSize() 统一适配层。 2. **UB 块参数写死**: - BLOCK_SIZE = 32(DataCopy stride 换算)、FP32/FP16_BLOCK_ALIGN_NUM = 8/16(= 32B/dtypeSize) - AR_RECOMPUTE_MAX/SUM_BUFFER_BTYES = 32(标量 buffer 按 UB 块对齐) - AR_RECOMPUTE_BINARY_CACHE_BTYES = 2048(= 64 槽位 × 32B/槽,64 为二分层级 2 的幂上限) ### 修改内容(34 文件) | 修改点 | 前 | 后 | |---|---|---| | R_MAX_VALUE(3 家 ar_full_load tiling) | 16384 | CONST_FOUR * vlFp32_ * vlFp32_ | | BINARY_CACHE(5 算子 kernel + 2 tiling) | 2048 | 64 * GetUbBlockSize() | | MAX/SUM_BUFFER(kernel+tiling) | 32 | GetUbBlockSize() | | BLOCK_SIZE(5 kernel + softmax_v2 tiling) | 32 | Ops::Base::GetUbBlockSize() / blockSize_ | | FP32/FP16_BLOCK_ALIGN_NUM(2 tiling.h) | 8/16 | blockSize_ / dtypeSize(定义删除) | | GNV2 FP32_ONE_REPEAT(two_pass ×2) | 64 | VL_FP32(定义删除) | | GNV2 VECTOR_REG_WIDTH(VL_FP32/GetVLSize) | 裸名 SDK 常量 | Ops::Base::GetVRegSize() | | GNG 本地 GetVRegSize/GetUbBlockSize | 写死 256U/32U | 委托 Ops::Base:: | | GNG CACHE_LEVEL1/2_IDX | 256/512 | CACHE_BUFF_SIZE 派生 | | grad 系 platform:: 前缀(16 文件) | platform::GetVRegSize/GetUbBlockSize | Ops::Base::(include 换 op_kernel/platform_util.h) | ## 关联的Issue close #5515 ## 测试 - [x] 29 个 arch35 tiling cpp syntax-only 编译通过(UT 编译环境完整 -I 集) - [x] GroupNormGrad tiling make ophost_nn_tiling_obj 增量编译 + tiling UT 用例重编通过 - [x] 7 算子全部 arch35 kernel 模板显式实例化,经 ccec(--cce-aicore-arch=dav-c310-vec)编译通过 7/7 - [x] 数值等价验证:当前平台(VL=64、UB 块=32B)新旧表达式逐项相等(16384=4×64²、2048=64×32 等),零行为变化 ## 文档更新 无需更新文档 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9759 | 1 个月前 | |
将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Co-authored-by: m0_71149169<1907825139@qq.com> # message auto-generated for no-merge-commit merge: !9291 merge norm-quant-microapi-to-reg into master 将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Created-by: m0_71149169 Commit-by: m0_71149169 Merged-by: cann-robot Description: ## 描述 MicroAPI → Reg 命名空间迁移: norm,quant CANN 头文件 kernel_macros.h 中存在命名空间别名 namespace MicroAPI = Reg;,MicroAPI 只是 Reg 的别名。为统一命名规范,将 nn 仓所有算子 kernel 代码中的 MicroAPI 替换为 Reg,并通过对比替换前后 binary .o 文件 MD5 验证替换无影响。 覆盖范围 - nn 主仓目录:norm,quant ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5098](https://gitcode.com/cann/ops-nn/issues/5098) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: norm,quant目录下MicroAPI → Reg 命名空间迁移 See merge request: cann/ops-nn!9291 | 1 个月前 | |
docs: add in_training_reduce_grad to op_list Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !8793 merge in_training_reduce_grad into master docs: add in_training_reduce_grad to op_list Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: ## PR: feat(norm): add InTrainingReduceGrad operator ### 概述 新增 InTrainingReduceGrad 算子,实现 InstanceNorm 训练反向 reduce 阶段的梯度计算。在训练反向传播中,根据上游梯度 dy、前向输入 x、归约统计量(mean/variance)、以及 res_gamma/res_beta(由 in_training_update_grad 计算的 per-(N,C) 部分和)和缩放参数 gamma,计算前向输入 x 的梯度 pd_x。算子基于 Ascend C 开发,支持 Ascend950 (arch35/DAV_3510) 平台,仅支持 GEIR 图模式调用。 InstanceNorm 训练反向分两阶段执行:本算子为第一阶段(reduce 阶段),对空间维归约并计算输入梯度 pd_x;与 in_training_update_grad(update 阶段,计算 gamma/beta 梯度)配套使用。 ### 算子功能 实现 InstanceNorm 训练反向 reduce 阶段的梯度公式(六步链式计算): $$ \begin{aligned} \text{data\_sqrt} &= \sqrt{\text{variance} + \text{eps}} \\ \text{scale\_inv} &= \frac{\text{res\_gamma}}{num} \\ \text{multiplier} &= -\frac{\text{scale\_inv}}{\text{data\_sqrt}} \\ \text{addend} &= \frac{\text{mean}}{\text{data\_sqrt}} \cdot \text{scale\_inv} - \frac{\text{res\_beta}}{num} \\ \text{coef} &= \text{dy} + \text{multiplier} \cdot x + \text{addend} \\ \text{pd\_x} &= \frac{\text{coef} \cdot \text{gamma}}{\text{data\_sqrt}} \end{aligned} $$ 其中 $num = H \times W$ 为空间维元素数,$variance/mean$ 为前向 reduce 阶段计算的 per-(N,C) 统计量,$res\_gamma/res\_beta$ 为由 in_training_update_grad 计算的 per-(N,C) 部分和($\Sigma(dy \cdot x_{norm})$ 与 $\Sigma dy$),$gamma$ 为可学习缩放参数。 **关键特性**: - **Broadcast 范式**:variance/mean/res_gamma/res_beta/gamma 为 [N,C,1,1] 形状,广播到 dy/x 的 [N,C,H,W] 形状 - **NDDMA 广播加载**:利用 NDDMA 硬件广播能力,per-(N,C) 参数仅加载一份并广播到 H×W 空间维,减少 GM 访问 - **VF 融合**:coef = dy + multiplier * x + addend 三元计算链通过 Vector Fusion(CoefVF)合并为单条 VF 指令,减少 Vector 流水线往返 - **六缓冲流水线**:P=6 UB 缓冲区(B0–B5),覆盖 copy-in → scalar 计算 → VF 融合 → copy-out 全链路双缓冲 - **FP16 Cast up**:半精度 dy/x 输入内部 Cast 到 FP32 计算,结果 Cast 回原始精度 ### 对标竞品 | 竞品 | 接口 | 说明 | |------|------|------| | PyTorch | torch.nn.InstanceNorm backward | 功能对标,PyTorch 在 ATen 层实现反向 | | TensorFlow | tf.raw_ops.InstanceNormGrad | 功能对标,CANN 接口拆分为 reduce + update 两阶段 | ### 支持规格 | 项目 | 支持情况 | |------|---------| | **数据类型** | float16, float32(dy/x/pd_x);float32(variance/mean/res_gamma/res_beta/gamma) | | **数据格式** | NCHW, NHWC | | **平台** | Ascend950 (arch35) | | **调用模式** | GEIR 图模式 | | **输入端口** | 7 个(dy, x, variance, mean, res_gamma, res_beta, gamma) | | **输出端口** | 1 个(pd_x) | | **维度** | 仅支持 4D(rank=4) | ### 交付件清单 norm/in_training_reduce_grad/ ├── CMakeLists.txt # 构建配置 ├── CODE_REVIEW.md # 代码检视报告 ├── op_graph/ │ ├── CMakeLists.txt │ ├── in_training_reduce_grad_proto.h # GEIR 原型定义(7输入1输出) │ └── in_training_reduce_grad_graph_infer.cpp # 图模式 InferDataType ├── op_host/ │ ├── CMakeLists.txt │ ├── in_training_reduce_grad_def.cpp # 算子定义(7输入1输出) │ ├── in_training_reduce_grad_infershape.cpp # 形状推导(broadcast(dy,x)) │ └── arch35/ │ ├── in_training_reduce_grad_tiling_arch35.h # Tiling 类声明 + CompileInfo │ └── in_training_reduce_grad_tiling_arch35.cpp # Tiling 计算(586行) ├── op_kernel/ │ ├── CMakeLists.txt │ ├── in_training_reduce_grad.cpp # Kernel 入口(7输入1输出+workspace+tiling) │ └── arch35/ │ ├── in_training_reduce_grad_kernel.h # Kernel 实现(529行,六步链式+VF融合) │ ├── in_training_reduce_grad_struct.h # TPL 模板参数声明(RANK=4/8) │ └── in_training_reduce_grad_tiling_struct.h # Tiling 数据结构(共享 Host/Kernel) ### 测试验证 #### 单元测试 (UT) - **覆盖范围**:InferShape + Tiling - **状态**:待交付 #### GEIR 端对端验证 - **状态**:待交付 - **精度标准**:商用标准(双标杆 Ratio),L0 级(MARE Ratio≤10) - **Golden 标杆**:PyTorch torch.nn.InstanceNorm backward / TensorFlow InstanceNormGrad - **覆盖范围**: - 数据类型:FP32 / FP16 - 数据格式:NCHW / NHWC - 特殊场景:空 Tensor(H*W=0)、大 shape、多核切分边界 ### 代码质量 - ✅ 文件头格式统一(Copyright + ROLE 注释块) - ✅ Tiling 校验使用 OP_LOGE 统一日志格式(format/dtype/shape/rank 四级校验) - ✅ dtype 校验使用 OP_CHECK_NULL_WITH_CONTEXT + OP_LOGE 格式 - ✅ 魔鬼数字常量化(kMaxInputSlots=7, kMaxOutputSlots=1, kPhysNodes=6) - ✅ InferShape 支持 UNKNOWN_RANK 传播 - ✅ Kernel 使用 NDDMA 广播 + VF 融合优化 - ✅ 代码检视通过(CODE_REVIEW.md:43 PASS / 0 FAIL / 3 SUSPICIOUS) ### 编译验证 bash cd ops-nn bash build.sh --soc=ascend950 --pkg --ops=in_training_reduce_grad -j16 # 输出 ✅ 编译成功 ✅ 生成算子包:cann-ops-nn-custom_linux-x86_64.run ### 关键实现细节 #### 1. 算子接口 | 参数 | 类型 | 说明 | |:-----|:-----|:-----| | INPUT dy | Tensor (REQUIRED) | 上游梯度,shape=[N,C,H,W],fp16/fp32 | | INPUT x | Tensor (REQUIRED) | 前向输入,shape 同 dy,fp16/fp32 | | INPUT variance | Tensor (REQUIRED) | 前向归约方差,shape=[N,C,1,1],fp32 | | INPUT mean | Tensor (REQUIRED) | 前向归约均值,shape=[N,C,1,1],fp32 | | INPUT res_gamma | Tensor (REQUIRED) | update 阶段部分和 Σ(dy·x_norm),shape=[N,C,1,1],fp32 | | INPUT res_beta | Tensor (REQUIRED) | update 阶段部分和 Σdy,shape=[N,C,1,1],fp32 | | INPUT gamma | Tensor (REQUIRED) | 可学习缩放参数,shape=[N,C,1,1],fp32 | | OUTPUT pd_x | Tensor (REQUIRED) | 输入 x 的梯度,shape 同 dy,fp16/fp32 | #### 2. Kernel 实现 - **架构**:6 UB 缓冲(B0–B5)流水线,NDDMA 广播加载 + VF 融合 - **模板参数**:RANK(4/8),通过 ASCENDC_TPL 分发;dtype 通过 DTYPE_DY 宏选择 - **六步链式计算**: 1. data_sqrt = sqrt(variance + eps)(Adds + Sqrt) 2. scale_inv = res_gamma / num(Muls) 3. multiplier = -scale_inv / data_sqrt(Div + Muls(-1)) 4. addend = (mean / data_sqrt) * scale_inv - res_beta/num(Div + Mul + Muls + Add) 5. coef = dy + multiplier * x + addend(VF 融合 CoefVF) 6. pd_x = coef * gamma / data_sqrt(Mul + Div) #### 3. 精度策略 - **FP32**:原生计算,无转换 - **FP16**:Cast→FP32 计算→Cast 回 fp16(CAST_RINT) #### 4. Tiling 实现 - **格式校验**:仅 NCHW / NHWC - **PadAndSqueeze**:前向 pad 到统一 rank,squeeze 掉全 1 维度 - **FindSplitAxis**:按 UB 容量(per_buf_bytes / 4)选择切分轴 - **MultiCoreSplit**:total_tiles = outer_prod × a_o,按核数均衡分配 - **PrecomputeStrides**:size-1 维度 stride=0(广播标记) - **TilingKey**:RANK_4 / RANK_8 二选一 #### 5. Broadcast 优化 - variance/mean/res_gamma/res_beta/gamma 为 [N,C,1,1],广播到 [N,C,H,W] - NDDMA 硬件广播:per-(N,C) 参数仅从 GM 加载一份,UB 内广播到 H×W - 避免重复 GM 读取,降低带宽压力 ### 依赖与限制 - **依赖**:CANN 9.0.0 - **配套算子**:in_training_update_grad(update 阶段,计算 gamma/beta 梯度并提供 res_gamma/res_beta) - **限制**: - 仅支持 GEIR 图模式(无 ACLNN 接口) - 仅支持 Ascend950 (arch35) - 仅支持 4D 张量(rank=4,NCHW/NHWC) - dy 与 x 的 shape/dtype 必须完全一致 - variance/mean/res_gamma/res_beta/gamma 五者 shape 必须相同,且空间维为 1 - 支持空 Tensor(H*W=0 时短路返回) ### Checklist - [x] 代码符合 ops-nn 内置算子标准 - [x] 文件头格式统一 - [x] Tiling 校验规范化(format/dtype/shape/rank 四级) - [x] 代码检视通过(CODE_REVIEW.md) - [x] clang-format 格式化 - [x] InferShape 支持 UNKNOWN_RANK - [x] NDDMA 广播 + VF 融合优化 - [ ] 单元测试通过(待交付) - [ ] GEIR 端对端验证通过(待交付) - [ ] 编译安装验证通过(待交付) - [ ] 文档完整(README + 示例,待交付) See merge request: cann/ops-nn!8793 | 1 个月前 | |
将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Co-authored-by: m0_71149169<1907825139@qq.com> # message auto-generated for no-merge-commit merge: !9291 merge norm-quant-microapi-to-reg into master 将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Created-by: m0_71149169 Commit-by: m0_71149169 Merged-by: cann-robot Description: ## 描述 MicroAPI → Reg 命名空间迁移: norm,quant CANN 头文件 kernel_macros.h 中存在命名空间别名 namespace MicroAPI = Reg;,MicroAPI 只是 Reg 的别名。为统一命名规范,将 nn 仓所有算子 kernel 代码中的 MicroAPI 替换为 Reg,并通过对比替换前后 binary .o 文件 MD5 验证替换无影响。 覆盖范围 - nn 主仓目录:norm,quant ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5098](https://gitcode.com/cann/ops-nn/issues/5098) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: norm,quant目录下MicroAPI → Reg 命名空间迁移 See merge request: cann/ops-nn!9291 | 1 个月前 | |
将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Co-authored-by: m0_71149169<1907825139@qq.com> # message auto-generated for no-merge-commit merge: !9291 merge norm-quant-microapi-to-reg into master 将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Created-by: m0_71149169 Commit-by: m0_71149169 Merged-by: cann-robot Description: ## 描述 MicroAPI → Reg 命名空间迁移: norm,quant CANN 头文件 kernel_macros.h 中存在命名空间别名 namespace MicroAPI = Reg;,MicroAPI 只是 Reg 的别名。为统一命名规范,将 nn 仓所有算子 kernel 代码中的 MicroAPI 替换为 Reg,并通过对比替换前后 binary .o 文件 MD5 验证替换无影响。 覆盖范围 - nn 主仓目录:norm,quant ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5098](https://gitcode.com/cann/ops-nn/issues/5098) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: norm,quant目录下MicroAPI → Reg 命名空间迁移 See merge request: cann/ops-nn!9291 | 1 个月前 | |
docs: add InplaceAddLayerNormFusionPass doc Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !9666 merge inplace_aln_pass_doc into master docs: add InplaceAddLayerNormFusionPass doc Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 为现有InplaceAddLayerNormFusionPass融合规则补充独立资料页。该规则在推理场景下,将图中的AddLayerNorm算子替换为InplaceAddLayerNorm算子,使层归一化结果和加法结果分别原地写回x1和x2。 资料同步说明规则的使用约束: - AddLayerNorm算子的bias为可选输入,支持带bias和不带bias的场景。 - x1和x2必须满足原地写回安全要求:除当前AddLayerNorm算子外不能被其他节点消费,且不能来自连续内存排布的多输出节点。 - 静态shape场景下,x1占用的内存大小必须大于等于L2缓存容量的1/8,且小于等于L2缓存容量的2倍。 - 动态shape场景下,x1的最后一维必须为5120。 - AddLayerNorm算子的x1、x2和gamma输入的数据类型必须相同。 同时新增融合前后拓扑对比图,展示AddLayerNorm算子替换为InplaceAddLayerNorm算子前后的图结构。 ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/5459 ## 测试 - 本次仅新增文档和配图,不涉及代码逻辑变更,未执行代码测试。 - 已检查Markdown格式、PNG图片文件格式、图片尺寸及图片引用路径。 ## 文档更新 - 新增 norm/inplace_add_layer_norm/docs/InplaceAddLayerNormFusionPass.md,说明融合模式和使用约束。 - 新增docs/zh/figures/InplaceAddLayerNormFusionPass_1.png,展示融合前后的图结构。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9666 | 1 个月前 | |
refactor: reduce duplicated code Co-authored-by: hushenxi<shenxi780803@163.com> # message auto-generated for no-merge-commit merge: !9451 merge cleancode-minimal-clean into master refactor: reduce duplicated code Created-by: Hushenxi111 Commit-by: hushenxi Merged-by: cann-robot Description: ## 描述 针对 CleanCode 重复代码报告进行最小化降重:仅调整局部变量、参数和配置对象命名,打断重复代码块。 未修改算子接口、计算公式、控制流或功能逻辑。本次共修改 31 个文件,473 行新增、471 行删除。 ## 关联的Issue 无。 ## 测试 - ATK测试通过 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:CleanCode 重复代码降重 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9451 | 1 个月前 | |
fix(instance_norm): 修复 ND 格式除零 UB 与 ReduceEmpty 小 N*C 对齐下溢 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !9740 merge fix-instancenorm-divzero-nd into master fix(instance_norm): 修复 ND 格式除零 UB 与 ReduceEmpty 小 N*C 对齐下溢 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: 本 PR 包含 InstanceNorm(arch35)两个独立缺陷的修复。 ## 问题一:ND 格式 GetShapeAttrsInfo 除零 UB(issue #5010) ### 现象 ND 格式下 x 的第 0 维(N)或第 1 维(C)为 0 时,Host Tiling 进程整数除零(C++ 未定义行为),表现为 SIGFPE 宿主机崩溃而非干净报错。 ### 根因 ND 分支中 a1/a0 从 shape 维度赋值后,在零值校验之前就被用作除数: cpp a1 = xStorageShape.GetDim(DIM_0); a0 = xStorageShape.GetDim(DIM_1); r = xStorageShape.GetShapeSize() / a1 / a0; // 第138行:除法 ... if (a1 <= 0) return ge::GRAPH_FAILED; // 第144行:校验晚于除法 if (a0 <= 0) return ge::GRAPH_FAILED; // 第151行:校验晚于除法 上游的 CheckShapeAllNotNegative 仅检查 GetDim(i) < 0,不排除 0 值(有意放行 0 以支持空 tensor),因此 a1=0/a0=0 可到达除法。空 shape 专用处理器 InstanceNormReduceEmptyTiling 也无法拦截——其 IsCapable 在 GetShapeAttrsInfo 之后调用,UB 已发生。 其余格式分支(NCHW/NCDHW/NHWC/NDHWC)的 r 均由乘法计算,不受影响。 ### 修复 在 ND 分支的除法之前加入 a1 <= 0 || a0 <= 0 前置校验(OP_CHECK_IF),命中则记录原因并返回 GRAPH_FAILED。各格式分支共享的后置零值校验保持不变(它们对无除法的分支仍有效)。合法空 tensor(reduction 轴为 0、N>0、C>0)不受影响。 ## 问题二:ReduceEmpty tiling 对齐下溢(小 N*C 垃圾值) ### 现象 r=0(合法空 tensor)且 N\*C 小于 32B 对齐粒度(fp32 mean < 8,fp16/bf16 mean < 16)时,mean/variance 输出**垃圾值**而非 NaN。实测输出字节与 tiling data 内容完全一致(从未初始化的 UB 拷出),且输出非确定——同一用例时而 NaN 时而垃圾值,"碰巧对"比"稳定错"更具隐蔽性。典型触发:[1,7,0,0] fp32、[1,8,0,0] fp16 mean。 ### 根因链条 InstanceNormReduceEmptyTiling::DoOpTiling(头核,尾核对称): cpp perCorePerLoopElements = FloorAlign(min(perLoopMaxIndicesElements, perCoreElements), ubBlockSize / elemSize); // ① N*C < 粒度时下溢为 0 perCoreLoops = CeilDiv(perCoreElements, perCorePerLoopElements); // ② CeilDiv(x,0) 静默返回 x 1. FloorAlign(x, align) = x / align * align,当 x < align 时返回 0 2. CeilDiv(x, y) 定义 y == 0 时返回 x 而非报错,错误静默传播 3. kernel 侧(instance_norm_reduce_empty.h)以 perCorePerLoopElements=0 执行:InitBuffer(0 字节)、Duplicate(local, NaN, 0)(实际未写入)、末次 DataCopyPad 从 0 字节 local tensor 拷出 N\*C\*elemSize 字节 → 未初始化内存写入 mean/variance ### 修复 FloorAlign 结果下溢为 0 时回退为**单次全量拷贝**(DataCopyPad 本就支持字节级 blockLen,无需 32B 对齐),头核/尾核两处对称处理;对齐路径行为完全不变: cpp int64_t perCoreAligned = FloorAlign(min(perLoopMaxIndicesElements, perCoreElements), ubBlockSize / elemSize); // perCoreElements 小于对齐粒度时 FloorAlign 下溢为 0,回退为单次全量拷贝 perCorePerLoopElements = (perCoreAligned == 0) ? perCoreElements : perCoreAligned; 下溢分支健全性: - **下溢必为单核**:blockNum_ ≥ 2 ⟺ totalLength*elemSize > 32K ⟹ totalLength > 8192 ⟹ perCoreElements ≥ 4097 ≫ 对齐粒度(≤16),即 FloorAlign==0 仅在 blockNum_=1 时出现,头核/尾核两处对称兜底已完全覆盖 - **回退值必在 UB 内**:下溢时 min(perLoopMax, perCore) < align ≪ perLoopMax,故回退值 perCoreElements ≤ perLoopMax,InitBuffer 尺寸安全 ## UT 补充 test_instance_norm_tiling.cpp 此前对 reduce_empty 场景**零覆盖**(缺陷未被发现的原因),补充 6 例:fp32/fp16 mean × 下溢回退(N\*C=1/7/8)/ 对齐单拷贝(N\*C=8/16)/ 对齐多循环尾loop(N\*C=9),锁定 tiling 切分行为防回归。另有 ND N=0/C=0 两例锁定问题一的干净拒绝。 > 注:kernel UT(tikicpulib CPU 仿真)无法覆盖 ReduceEmpty 分支——仿真器不支持该路径 Duplicate 广播所需的 pset 谓词寄存器指令(dav_3510),故实机行为通过 TTK kernel 直调验证。 ## 验证 - **除零**:950PR 实机 TTK kernel 直调复现 SIGFPE 崩溃;替换修复库后变为干净报错("The N-dimension and C-dimension of input x must be positive numbers when the format of x is ND, where N is the 0th dim and C is the 1st dim"),恢复原库崩溃复现,因果闭环;5 种格式 N=0/C=0 全覆盖(唯 ND 崩溃,其余干净拒绝) - **下溢**:950PR 实机(TTK kernel 直调 + built-in libophost_nn.so 替换):小 N\*C 边界 6 例 6/6 PASS(mean/variance 全 NaN),大 shape reduce_empty(含多核 [433,90,0,...] blockNum=5、[221,90,150,0] blockNum=3)、各模板最小 shape(ar/ara 通路 10 例)、r=0 常规、正常对照均无回归 - **UT 红绿验证**:撤掉下溢修复后恰 3 个下溢用例失败、对齐用例不受影响;加修复后 26/26 全部通过 - **本地定向 CI**(ascend950 + ascend910b):pre-commit、pkg、ophost、opgraph 全部 PASS ## 关联 issue Fixes #5010 See merge request: cann/ops-nn!9740 | 1 个月前 | |
feat: 迁移第二批 TF 算子插件(新增 21 个 TF plugin 注册文件) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9685 merge tf-plugin-part2 into master feat: 迁移第二批 TF 算子插件(新增 21 个 TF plugin 注册文件) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 本 PR 为 TensorFlow(TF)算子插件迁移的第二批(分支 tf-plugin-part2),新增 21 个 *_tf_plugin.cpp 插件注册文件,覆盖 common、conv、matmul、pooling、optim、norm、index、vfusion 模块。每个文件通过 REGISTER_CUSTOM_OP 将 TF 框架算子注册为自定义算子: - .FrameworkType(TENSORFLOW):声明算子来源于 TF 框架; - .OriginOpType(...):映射原始 TF 算子类型(含 Resource* 变体,如 ApplyAddSign / ResourceApplyAddSign); - 参数解析:多数算子通过 AutoMappingByOpFn 自动映射属性;Conv2D 额外将 filter format 固定为 HWCN,并根据 explicit_paddings 与输入 format(NCHW/NHWC)生成 pads 属性;Conv2DBackpropInput / Conv2DBackpropFilter / Conv3DBackpropFilter / Conv3DBackpropInput / AvgPool3D 等设置 NDHWC/NCDHW/DHWCN 等 format 与 pads 默认值;BatchMatMulV2 将 adj_x / adj_y 映射为 adj_x1 / adj_x2,并对 BatchMatMulV3 提供 ParseOpToGraphFn 将算子展开为 Data -> BatchMatMulV3 -> Cast 子图;InstanceNormGrad 提供 FusionParseParamsFn 融合参数解析接口; - .ImplyType(ImplyType::TVM):所有注册算子采用 TVM 实现。 ### 新增算子清单(21 个文件) | 文件 | 注册算子(OriginOpType) | |------|-------------------------| | common/src/framework/apply_add_sign_tf_plugin.cpp | ApplyAddSign(ApplyAddSign / ResourceApplyAddSign) | | common/src/framework/basic_lstm_cell_tf_plugin.cpp | BasicLSTMCell | | common/src/framework/basic_lstm_cell_grad_tf_plugin.cpp | BasicLSTMCellCStateGrad / BasicLSTMCellWeightGrad / BasicLSTMCellInputGrad | | common/src/framework/dynamic_lstm_tf_plugin.cpp | DynamicLSTM | | conv/conv2d_v2/framework/conv2d_tf_plugin.cpp | Conv2D | | conv/conv3d_v2/framework/conv3d_tf_plugin.cpp | Conv3D | | conv/conv3d_backprop_filter_v2/framework/conv2d_backprop_filter_tf_plugin.cpp | Conv2DBackpropFilter | | conv/conv3d_backprop_filter_v2/framework/conv3d_backprop_filter_tf_plugin.cpp | Conv3DBackpropFilter(Conv3DBackpropFilterV2) | | conv/conv3d_backprop_input_v2/framework/conv2d_backprop_input_tf_plugin.cpp | Conv2DBackpropInput | | conv/conv3d_backprop_input_v2/framework/conv3d_backprop_input_tf_plugin.cpp | Conv3DBackpropInput(Conv3DBackpropInputV2) | | index/non_zero_with_value_shape_v2/framework/non_zero_with_value_shape_v2_tf_plugin.cpp | NonZeroWithValueShapeV2 | | matmul/mat_mul_v3/framework/matmul_tf_plugin.cpp | MatMulV2(MatMul) | | matmul/batch_mat_mul_v3/framework/batch_matmul_tf_plugin.cpp | BatchMatMulV2(BatchMatMul / BatchMatMulV2 / BatchMatMulV3) | | norm/instance_norm_grad/framework/instance_norm_grad_tf_plugin.cpp | InstanceNormGrad | | optim/inplace_apply_adagrad_da/framework/apply_adagrad_da_tf_plugin.cpp | ApplyAdagradDA(ApplyAdagradDA / ResourceApplyAdagradDA) | | optim/inplace_apply_adagrad_v2/framework/apply_adagradv2_tf_plugin.cpp | ApplyAdagradV2(ApplyAdagradV2 / ResourceApplyAdagradV2) | | optim/inplace_apply_power_sign/framework/apply_power_sign_tf_plugin.cpp | ApplyPowerSign(ApplyPowerSign / ResourceApplyPowerSign) | | pooling/avg_pool3_d/framework/avg_pool3d_tf_plugin.cpp | AvgPool3D | | pooling/dilation2_d/framework/dilation2d_tf_plugin.cpp | Dilation2D | | pooling/max_pool_3d_grad_grad/framework/max_pool3d_grad_grad_tf_plugin.cpp | MaxPool3DGradGrad | | vfusion/normalize_bbox/framework/normalize_bbox_tf_plugin.cpp | NormalizeBBox | ### 改动原因 TF 算子插件迁移系列工作的第二批:将 TF 算子按模块拆分为独立的 */framework/*_tf_plugin.cpp 注册文件,统一注册方式与代码组织。 ## 关联的Issue - #5464 ## 测试 本次变更仅新增插件注册文件,未包含测试用例变更。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述 ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9685 | 1 个月前 | |
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !9817 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 modified md files(for readability improvement) ## 关联的Issue na ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9817 | 1 个月前 | |
refactor(l2_normalize_grad): dim 对齐 GE 语义、归约改平台接口、新增大 D 分块模板 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9850 merge refactor/l2-normalize-grad-arch35 into master refactor(l2_normalize_grad): dim 对齐 GE 语义、归约改平台接口、新增大 D 分块模板 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9850 | 1 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
feat(layer_norm_grad): 增加 Transpose RegBase template for LayerNormGrad/V3 Co-authored-by: zhuzixian-lr<zhuzixian1@h-partners.com> # message auto-generated for no-merge-commit merge: !9473 merge pr_8977_ub_formula_v2 into master feat(layer_norm_grad): 增加 Transpose RegBase template for LayerNormGrad/V3 Created-by: zhuzixian-lr Commit-by: zhuzixian-lr Merged-by: cann-robot Description: ## 描述 为 LayerNormGrad / LayerNormGradV3 新增 Transpose RegBase 模板(TilingKey=800,ascend950/arch35),覆盖小 N(colBytes≤32B)大 M(row>256)场景,两个算子同步实现: **1. Tiling( *_transpose_regbase_tiling.cpp)** - 路由条件:isRegBase(NpuArch 3510/5102)+ colBytes≤32B + row>256,priority=500 优先于 Recompute - gamma_beta:mFactorAlign 从 2048 按 2 的幂递减搜索 UB 上限下的最大可行块;主核/尾核独立切分;预计算二分累加所需的 cacheBufferCount / ResultCacheID / basicBlock - backward:由 UB 公式直接求 mFactorMax,向下对齐 16(TransDataTo5HD C0 对齐);并通过 GetReduceSumMaxMinTmpSize 校验 tmp buffer - UB 空间公式采用显式推导写法:(3*dy + 3*x + 1*tmp)*MN + (3*mean + 3*rstd)*M + (2*dgamma + 2*dbeta + 2*reduceSum + 2*cnt*cache)*N)*dtypeSize <= ubSize,移项解出 M 上限,系数为命名常量(NUM_TWO/NUM_SIX/NUM_SEVEN) - Workspace:用户 workspace(每核 NAlign×2 段 dbeta/dgamma)+ PlatformAscendC::GetLibApiWorkSpaceSize() **2. Kernel(arch35,RegBase VF API)** - gamma_beta(*_transpose_gamma_beta_impl.h):GM 数据 CopyInTranspose 转置为 [N][M] 布局,核内二分折叠累加 + cache 层级管理,core 0 跨核 ReduceSum RA 汇总 dgamma/dbeta;V3 支持按需计算(pdxIsRequire/pdgammaIsRequire/pdbetaIsRequire),两段独立 TPipe - backward(*_transpose_backward_impl.h):转置布局下计算 dx(ReduceSum RA 求 sum1/sum2,VF 计算 dx,TransDataTo5HD 转回 [M][N] 输出);double buffer 流水,gamma 全程复用 - 公共 base(*_base.h):CopyInTranspose(NdDma 2 维转置搬运)、LoadTensorForDtypeT/StoreTensorForDtypeT 等模板工具 **3. UT(tiling)** - 正向用例按 dtype 看护 tilingKey=800 与逐字段 tilingdata 值(fp16[512,16] / fp32[1024,8] / bf16[512,16]) - 拒绝用例:UB=8KB 时 gamma_beta 无可行 mFactorAlign,校验返回失败且 tilingdata 保持全 0 无脏数据 - 镜像 tilingdata 结构体采用与框架一致的自然对齐布局 ## 关联的Issue - #5399 ## 测试 - [x] nn_op_host_ut 24/24 通过(含 transpose_regbase 4 个用例) - [x] pre-commit 全部通过(clang-format / codespell / OAT 合规) - [x] UB 公式数值验证:N×ubSize×cacheBufferCount 扫描下 M 上限均不超出 kernel 实际 InitBuffer 总占用 ## 文档更新 无需更新文档 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9473 | 1 个月前 | |
feat(layer_norm_grad): 增加 Transpose RegBase template for LayerNormGrad/V3 Co-authored-by: zhuzixian-lr<zhuzixian1@h-partners.com> # message auto-generated for no-merge-commit merge: !9473 merge pr_8977_ub_formula_v2 into master feat(layer_norm_grad): 增加 Transpose RegBase template for LayerNormGrad/V3 Created-by: zhuzixian-lr Commit-by: zhuzixian-lr Merged-by: cann-robot Description: ## 描述 为 LayerNormGrad / LayerNormGradV3 新增 Transpose RegBase 模板(TilingKey=800,ascend950/arch35),覆盖小 N(colBytes≤32B)大 M(row>256)场景,两个算子同步实现: **1. Tiling( *_transpose_regbase_tiling.cpp)** - 路由条件:isRegBase(NpuArch 3510/5102)+ colBytes≤32B + row>256,priority=500 优先于 Recompute - gamma_beta:mFactorAlign 从 2048 按 2 的幂递减搜索 UB 上限下的最大可行块;主核/尾核独立切分;预计算二分累加所需的 cacheBufferCount / ResultCacheID / basicBlock - backward:由 UB 公式直接求 mFactorMax,向下对齐 16(TransDataTo5HD C0 对齐);并通过 GetReduceSumMaxMinTmpSize 校验 tmp buffer - UB 空间公式采用显式推导写法:(3*dy + 3*x + 1*tmp)*MN + (3*mean + 3*rstd)*M + (2*dgamma + 2*dbeta + 2*reduceSum + 2*cnt*cache)*N)*dtypeSize <= ubSize,移项解出 M 上限,系数为命名常量(NUM_TWO/NUM_SIX/NUM_SEVEN) - Workspace:用户 workspace(每核 NAlign×2 段 dbeta/dgamma)+ PlatformAscendC::GetLibApiWorkSpaceSize() **2. Kernel(arch35,RegBase VF API)** - gamma_beta(*_transpose_gamma_beta_impl.h):GM 数据 CopyInTranspose 转置为 [N][M] 布局,核内二分折叠累加 + cache 层级管理,core 0 跨核 ReduceSum RA 汇总 dgamma/dbeta;V3 支持按需计算(pdxIsRequire/pdgammaIsRequire/pdbetaIsRequire),两段独立 TPipe - backward(*_transpose_backward_impl.h):转置布局下计算 dx(ReduceSum RA 求 sum1/sum2,VF 计算 dx,TransDataTo5HD 转回 [M][N] 输出);double buffer 流水,gamma 全程复用 - 公共 base(*_base.h):CopyInTranspose(NdDma 2 维转置搬运)、LoadTensorForDtypeT/StoreTensorForDtypeT 等模板工具 **3. UT(tiling)** - 正向用例按 dtype 看护 tilingKey=800 与逐字段 tilingdata 值(fp16[512,16] / fp32[1024,8] / bf16[512,16]) - 拒绝用例:UB=8KB 时 gamma_beta 无可行 mFactorAlign,校验返回失败且 tilingdata 保持全 0 无脏数据 - 镜像 tilingdata 结构体采用与框架一致的自然对齐布局 ## 关联的Issue - #5399 ## 测试 - [x] nn_op_host_ut 24/24 通过(含 transpose_regbase 4 个用例) - [x] pre-commit 全部通过(clang-format / codespell / OAT 合规) - [x] UB 公式数值验证:N×ubSize×cacheBufferCount 扫描下 M 上限均不超出 kernel 实际 InitBuffer 总占用 ## 文档更新 无需更新文档 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9473 | 1 个月前 | |
AIDD拼写和标点问题修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !10060 merge master into master AIDD拼写和标点问题修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 AIDD拼写和标点问题修改 ## 关联的Issue 关联Issue #5680 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10060 | 1 个月前 | |
LayerNorm类算子VL/UB block去硬编码 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !9042 merge ln_VL into master LayerNorm类算子VL/UB block去硬编码 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 本 PR 对 norm 系列算子 arch35 路径下的 VL/UB block size 处理进行代码清理,去除散落在各算子中的硬编码常量 32,统一改用平台 API 在运行时获取,消除魔法数字,提升代码可维护性与跨硬件适配能力。 ### 改动原因 arch35 路径下 add_layer_norm_quant、layer_norm_grad/grad_v3、layer_norm_v3、layer_norm_v4 等算子的 host tiling 与 kernel 侧多处使用 constexpr ... = 32 表示 UB block 字节数(部分派生出 B32_ALIGN_NUM = 32/sizeof(float) 等常量)。这些魔法数字: - 与具体硬件强绑定,未来硬件 block size 变化时需要逐文件修改,维护成本高; - 同一语义在 host 侧(BLOCK_SIZE/BLOCK_BYTES/B32_ALIGN_NUM)与 kernel 侧(自定义 GetUbBlockSize()、BLOCK_SIZE)重复定义,缺乏单一数据源。 ### 改动方法 统一替换为平台 API: - **Host tiling 侧**:删除本地 BLOCK_SIZE/BLOCK_BYTES/B32_ALIGN_NUM 等常量,改用 Ops::Base::GetUbBlockSize(context_)(新增 #include "op_common/op_host/util/platform_util.h"),或复用类成员 this->blockSize_; - **Kernel 侧**(layer_norm_v3/v4 common/regbase/welford):constexpr static int64_t BLOCK_SIZE = 32 → platform::GetUbBlockSize()(新增 #include "../../inc/platform.h"); - **Kernel 侧**(layer_norm_grad_base.h):删除自定义 GetUbBlockSize() 内联函数,统一使用 AscendC 框架的 BLOCK_SIZE。 涉及算子:add_layer_norm_quant、layer_norm_grad、layer_norm_grad_v3、layer_norm_v3、layer_norm_v4。 ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/5099 ## 测试 - pass ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码清理(去除硬编码常量) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9042 | 1 个月前 | |
feat: 算子910B~910E区间判断追加IsRegbase()并统一IsArch3510判断以兼容后续Regbase芯片 Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !10101 merge q_aclnn_version into master feat: 算子910B~910E区间判断追加IsRegbase()并统一IsArch3510判断以兼容后续Regbase芯片 Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 以 RegBase 架构(NpuArch = DAV_3510,含 Ascend950 及后续 Regbase 芯片)兼容为目标,统一两类芯片判断写法: 1. **区间判断追加**:对 4 个算子 op_api 中 GetSocVersion() >= ASCEND910B && GetSocVersion() <= ASCEND910E 区间判断追加 || Ops::NN::AclnnUtil::IsRegbase(),使 RegBase 平台在 SocVersion 区间之外时也走 910B 支持分支 2. **硬编码统一**:将 1 个算子的本地架构判断封装函数(IsArch3510)实现改为 IsRegbase(),后续 Regbase 芯片无需逐文件修改 ## 修改内容一:区间判断追加(4 个文件,4 处) | 算子 | 文件 | 修改 | |------|------|------| | logsoftmaxv2 | activation/log_softmax_v2/op_api/aclnn_log_softmax.cpp | CheckSocVersionIsSupportBf16 追加 IsRegbase();补 include | | logsoftmaxgrad | activation/log_softmax_grad/op_api/aclnn_logsoftmax_backward.cpp | 同上(include 原已存在) | | softmaxgrad | activation/softmax_grad/op_api/aclnn_softmax_backward.cpp | 同上(include 原已存在) | | batchNormElemt | norm/batch_norm_elemt/op_host/op_api/aclnn_batch_norm_elemt.cpp | 追加 IsRegbase() 并删除冗余 == SocVersion::ASCEND950;补 include | ### 关于删除 == SocVersion::ASCEND950 的说明 SocVersion 枚举中 ASCEND950 = ASCEND910_95(值 3)位于 ASCEND910B(1)与 ASCEND910E(4)之间,区间判断本已覆盖 950,原 || == ASCEND950 分支从不单独生效;且 Ascend950 的 NpuArch 即 DAV_3510,IsRegbase() 对 950 同样为真。净效果为纯扩展,存量平台无收窄。 ## 修改内容二:硬编码判断统一(1 个文件,1 处) - layerNormV4:norm/layer_norm_v4/op_host/op_api/aclnn_layer_norm.cpp:123 —— IsArch3510() 函数体改为 Ops::NN::AclnnUtil::IsRegbase()(调用点不动) ### 范围说明 - addRmsNormQuantV2(aclnn_add_rms_norm_quant_v2):upstream !10098(完善RMSNorm量化校验)已将其 IsSocVersion950() 统一改名并实现为 IsRegbase(),本次不改,与 upstream 保持零 diff - batchNormGradV3(aclnn_fast_batch_norm_backward):经评审本次不改,与 upstream 保持零 diff,其恒真条件见关联 Issue - 公共头 level2_base_caculation.h、experimental 目录、tests 不在本次范围,遗留问题见关联 Issue ## 关联的Issue - #5707 (ops-nn仓RegBase兼容遗留问题清理:公共头IsRegbase同步、恒真条件修正、重复查询优化) ## 测试 - pre-commit 检查(clang-format/codespell/OAT 等)全部通过 - 修改文件 g++ -fsyntax-only 语法验证通过 - 已触发 compile 编译 - 建议测试项: 1. 910B/910E 平台回归 BF16 正反向用例行为不变 2. Ascend950 平台回归(验证删除 == ASCEND950 等价、layerNormV4 的 950 分支行为不变) 3. RegBase 平台 BF16 用例由校验拒绝变为正常放行 4. 区间外平台(910/310/310P)BF16 仍被拦截 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ### 关联issue - [cann/ops-math#5467(ops-math 侧 910B~910E 区间判断追加 IsRegBase)](https://gitcode.com/cann/ops-math/pull/5467) See merge request: cann/ops-nn!10101 | 1 个月前 | |
docs(lp_norm_update): update supported products Co-authored-by: Davon14272<liuwenda4@huawei.com> # message auto-generated for no-merge-commit merge: !9458 merge docs/lp-norm-update-support into master docs(lp_norm_update): update supported products Created-by: Davon14272 Commit-by: Davon14272 Merged-by: cann-robot Description: ## 描述 统一型号支持描述, | <term>Atlas 200I/500 A2 推理产品</term> | √ | | <term>Atlas 推理系列产品</term> | √ | | <term>Atlas 训练系列产品</term> | √ | <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9458 | 1 个月前 | |
fix file name Co-authored-by: liuyun_nj<liuyun90@h-partners.com> # message auto-generated for no-merge-commit merge: !10037 merge master into master fix file name Created-by: liuyun_nj Commit-by: liuyun_nj Merged-by: cann-robot Description: ## 描述 调整重复文件名 ## 关联的Issue #5695 ## 测试 回黄编包,验证 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10037 | 1 个月前 | |
fix(norm): 完善RMSNorm量化校验 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10098 merge fix/rmsnorm-aclnn-param-validation into master fix(norm): 完善RMSNorm量化校验 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本 PR 的开发基线为主仓 master@894833b1a7,集中整改错误日志合规报告中与 Ascend 950 RMSNorm 量化类相关、经代码复核后确认需要修改的问题。当前 HEAD 为 d153894d0e3f,相对基线仅包含 1 个提交。开发期间 master 已前进,本次按协作约定不重复 rebase。 提交压缩当时已用 tree ID 和 binary diff SHA-256 双重校验,确认 squash 本身只改变提交历史、未改变文件内容。随后根据 review 意见将 950 直接枚举判定整改为 RegBase 统一判定;本次又根据 P3 意见区分存量产品的原生 V2 能力与 ACLNN V1 回退能力。上述变更均已 amend 进同一提交。当前最终 tree ID 为 59edb4e11d1b26d4835040e7bb60b3cfb37f176c,binary diff SHA-256 为 02bcab58d3ba6c44e13a21d31d31a4d208f7dc61cfdeb774aa3f3a63c77e35a8。 核心修改如下: 1. aclnnAddRmsNormDynamicQuantV2:在 RegBase(当前对应 Ascend 950)补齐跨参数 dtype 关系校验;所有产品统一先校验必选输入/输出 Tensor 指针,再执行 dtype、outputMask 和 shape 校验,避免 dtype 宏在空指针场景先解引用。该顺序调整不改变合法调用语义,非 RegBase 仅改善非法空指针的错误返回稳定性。 2. aclnnAddRmsNormQuant:在 RegBase 补齐输入、量化参数及输出间的 dtype 组合校验;Ascend 950 支持 scales2Optional == nullptr && zeroPoints2Optional != nullptr,第二路缺省 scale 按 1,并确保 y2Out 回拷。 3. aclnnAddRmsNormQuantV2:Excel 未直接收录该接口,但按 V1 同一整改理念一并补齐 RegBase 跨参数 dtype 关系和完整 (x, scale, zero point) binary 组合校验;纳入 V2 特有的 beta/rmsNormOut 关系,修正 beta 文档表格,并在 README/ACLNN 文档中区分存量产品原生 V2 仅支持 divMode=True 与满足约束时 ACLNN 可回退 V1 执行 False 的能力边界。 4. aclnnAddRmsNorm:不改变 rstdOut == nullptr 的合法 PRE/POST 模式,只将该模式下非法 gamma 维数的日志改为明确说明“gamma should be 2 dims”。 5. aclnnNorm:文档明确 dim=[] 是合法输入,语义为对 self 的所有维度求范数,并补充 keepdim 对输出 shape 的影响。 6. DynamicQuant arch35:修正 rank 错误日志中的 actual value,避免错误地固定打印 1。 7. Quant V1/V2 共用 InferShape:第二路输出 y2Out 的存在条件由仅检查 scales2 补齐为检查 scales2 || zeroPoints2。修复 950 zeroPoints2-only 场景中 InferShape 错误给出 {1}、而 tiling/kernel 按完整第二路处理所造成的 GEIR shape 冲突;不修改 kernel 计算逻辑。 ### 修改文件与目的 | 文件 | 修改内容 | 修改目的及产品影响 | | --- | --- | --- | | norm/add_rms_norm/op_host/add_rms_norm_tiling.cpp | PRE/POST 分支的 gamma rank 校验改用带 reason 的日志,reason 为 rstdOut is nullptr, PreRmsNorm/PostRmsNorm mode is used, gamma should be 2 dims。判断条件仍为 gammaDimNum != 2。 | 仅改善错误诊断,不改变任一产品的合法性判断、tiling 或执行行为。该文件为共用文件,因此日志文本对所有产品一致生效。 | | norm/add_rms_norm/tests/ut/op_host/test_add_rms_norm_tiling.cpp | 增加 Ascend 950 PRE 模式、rstdOut 空 shape、gamma 为一维的负向用例。 | 覆盖上述日志对应的失败分支,确认合法的空 rstdOut 模式不会被误判,真正的错误是 gamma rank。 | | norm/add_rms_norm_dynamic_quant/op_host/arch35/add_rms_norm_dynamic_quant_tiling_base_arch35.cpp | gamma、smoothScale1、smoothScale2、beta rank 非法时,日志 actual value 改为真实维数。 | 修复 950 arch35 的错误日志失真,不改变校验规则。 | | norm/add_rms_norm_dynamic_quant/op_host/op_api/aclnn_add_rms_norm_dynamic_quant_v2.cpp | 统一以 AclnnUtil::IsRegbase() 识别 RegBase 路径,补齐 RegBase 跨参数 dtype 关系;将公共校验流程整理为“x1/x2/gamma 及五个输出指针判空 → dtype → outputMask → processOut 计算 → shape/执行”,删除按产品重复调用 CheckDtypeValid 和带 processOut1/processOut2 的条件判空分支。 | 当前 RegBase 即 Ascend 950,其非法 dtype 组合在 L2 阶段被准确拦截;所有产品都在 dtype/shape 解引用前稳定拦截必选 Tensor 空指针。outputMask 表示某路输出数据是否有效,不会把对应输出 Tensor 变成可选指针;因此合法调用和非 RegBase 参数接受范围不变。 | | norm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant_v2.cpp | 增加 950 的 x2 dtype 不一致、beta dtype 不一致、xOut dtype 不一致、inactive output 为空四类负向用例,并补充 Ascend 910B inactive output 为空的回归用例。 | 验证 950 dtype 错误返回 ACLNN_ERR_PARAM_INVALID,并证明 950、910B 均在禁用输出传空指针时稳定返回 ACLNN_ERR_PARAM_NULLPTR。 | | norm/add_rms_norm_quant/docs/aclnnAddRmsNormQuant.md | 明确仅 Ascend 950 支持 zeroPoints2-only;缺少 scales2 时 scale=1,公式为 y2Out = round(y + zero_points2),且 y2Out 与 x1 同 shape;其他产品不支持该组合。 | 统一 950 的接口文档、L2、tiling 和 kernel 契约。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_infershape.cpp | V1/V2 共用 InferShape 将第二路存在条件从仅 scales2 改为 scales2 || zeroPoints2;任一第二路量化参数存在时,y2Out 均推导为与 x1 相同的完整 shape。 | 修复 950 zeroPoints2-only 在图模式下被错误推导成 dummy {1}、随后与 tiling/kernel 完整 y2 契约冲突的问题。支持场景的执行逻辑和 kernel 不变;A2/A3 合法场景本来就要求 scales2,因此其既有合法行为不变。 | | norm/add_rms_norm_quant/tests/ut/op_host/CMakeLists.txt | 将仓内既有 InferShape UT 源文件接入 OP_INFERSHAPE_MODULE_NAME。 | 修复该 UT 文件存在但未实际参与构建执行的问题,使 InferShape 回归能够真正拦截契约偏差。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_AddRmsNormQuant_infershape.cpp | 在既有测试基础上补充 V1/V2 各两例:zeroPoints2-only 推导完整 y2,以及无第二路参数推导 dummy y2。 | 同时锁定修复分支和兼容分支;4 个新增测试均已实际执行通过。 | | norm/add_rms_norm_quant/op_host/add_rms_norm_quant_tiling_arch35.cpp | 将第二路 zero point dtype 的选取条件从 hasScales2 && hasZeroPoints2 改为 hasZeroPoints2。 | 修复 950 zeroPoints2-only 跳过 dtype 组合校验的问题。该类只在 IsRegbaseSocVersion() 为真时实例化;910B/910_93 走 non-RegBase tiling,不执行本分支。该修改由 Quant V1/V2 的 950 路径共用,不负责 y2 分配、计算或回拷。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.cpp | 保留 master 的逐 Tensor dtype 范围检查;以 AclnnUtil::IsRegbase() 决定是否继续执行跨参数关系和完整 dtype 组合校验;第二路存在条件改为 scales2 != nullptr || (isRegbase && zeroPoints2 != nullptr),确保 Ascend 950 zeroPoints2-only 场景的 y2 回拷。 | 实现 Ascend 950 zeroPoints2-only 的 L2 闭环,并将新增严格校验限定在 RegBase;910/310 仍仅以 scales2 判断第二路。 | | norm/add_rms_norm_quant/op_host/op_api/aclnn_add_rms_norm_quant.h | 公开头文件说明 950 缺省 scales2 时按 1,且其他产品不支持 zeroPoints2-only。 | 让 API 注释与公开文档和实现一致。 | | norm/add_rms_norm_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant.cpp | 将既有 950 用例显式固定为 ASCEND950;增加 950 zeroPoints2-only 成功用例,以及 x2/scales dtype 关系和非法 dtype 组合负向用例。 | 防止 UT 受默认模拟产品影响,覆盖 950 新契约和错误返回。 | | norm/add_rms_norm_quant/tests/ut/op_host/test_add_rms_norm_quant_tiling.cpp | zeroPoints2-only 从预期失败调整为 950 预期成功,验证完整 y2 shape、tiling key 1012;增加非法 zeroPoints2 dtype 组合失败检查。 | 同时覆盖 950 功能路径与边界校验。 | | norm/add_rms_norm_quant_v2/README.md | 按多产品差异描述规范整理参数顺序和产品差异表,补齐 dst_type/output_res,明确 950 zeroPoints2-only 的 scale=1 契约;区分存量产品原生 V2 与 ACLNN V1 回退路径的 div_mode=False 能力。 | 使 README 同时满足文档规范、多产品差异表达和各调用通路的实际能力,避免把原生 V2 限制误写成 ACLNN 接口完全不支持。 | | norm/add_rms_norm_quant_v2/docs/aclnnAddRmsNormQuantV2.md | 补充 scales2/zeroPoints2 组合约束和 950 scale=1 公式;修正 8 行将 FLOAT16/BFLOAT16 组合中 betaOptional 误写为 FLOAT32 的表格;说明跨参数 dtype 关系;补充存量产品 divMode=False 的 ACLNN V1 回退条件。 | 使公开文档与 950 binary 签名、ACLNN 前置校验及存量产品实际分流逻辑一致。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.cpp | 保留逐 Tensor dtype 范围检查;以语义一致的 IsRegbase() 封装 AclnnUtil::IsRegbase(),在其外层分支内调用 CheckCommonDtypeRelationV2 和 CheckRegbaseDtypeCombinationV2,补充 x/gamma/beta/xOut/resOut、两路 scale、两路 zero point 和 y1/y2 关系及完整 (x, scale, zero point) 组合校验。 | 与 V1 的 RegBase 整改理念对齐,当前对应 Ascend 950;两项新增校验不会进入 910B/910_93/310P 路径,不改空指针、shape、L0 或 kernel 契约。 | | norm/add_rms_norm_quant_v2/op_host/op_api/aclnn_add_rms_norm_quant_v2.h | 同步 950 scale=1 与非 950 组合限制的 API 注释。 | 保证头文件、ACLNN 文档和实现一致。 | | norm/add_rms_norm_quant_v2/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_quant_v2.cpp | 保留 zeroPoints2-only 成功例,增加 950 合法全参数例和 9 个 dtype 关系/组合负例;保留 910B/910_93/310P gamma 兼容用例。 | 覆盖 V2 新增校验的每类关系,并验证非 950 兼容路径没有被改变。 | | norm/lp_norm_v2/docs/aclnnNorm.md | 明确 dim 不能为空指针,但可以是长度为 0 的数组;空数组表示归约所有维度,并说明 keepdim=true/false 的输出 shape。 | 修正文档歧义;实现本身支持 dim=[],无需修改算子代码。 | ### 范围边界 - 本 PR 的功能性修改聚焦 Ascend 950,代码路由统一使用 AclnnUtil::IsRegbase();当前 ACLNN 产品映射中 RegBase 即 Ascend 950,RegBase 能力校验按通用语义实现,不再直接比较 SocVersion::ASCEND950。DynamicQuant V2 的必选 Tensor 判空顺序统一作用于所有产品,但不改变合法输入契约;非 RegBase 仅将非法空指针场景提前、稳定地返回 ACLNN_ERR_PARAM_NULLPTR。 - aclnnAddRmsNormQuantV2 只新增 950 L2 参数校验,不改 L2 计算/回拷或 kernel:zeroPoints2-only 已由 CheckSupportV2()、RegBase L0 的 scales2 || zeroPoints2、shape 一致时的 y2 ViewCopy 和 HAS_SCALE2=false/HAS_ZEROPOINTS2=true kernel 模板实现闭环。 - 本 PR 只参考 !9263 中与 V1 dtype 理念一致的部分,没有带入其 xOut 必选、shape 或 L0 参数顺序等其他改动。 - aclnnAddRmsNorm 的共用 tiling 文件只改日志文案,不改变 310/910/950 的判断或执行结果。 - aclnnAddRmsNormDynamicQuant V1 的 ACLNN L2 契约不修改;仅修正 arch35 tiling 错误日志中的实际 rank。报告中的非 ND format、可选参数 nullptr 属于扫描器预设口径问题,不应据此收缩接口。 - norm/add_rms_norm/op_host/op_api/aclnn_add_rms_norm.cpp 及其 310P UT 已从本 PR 恢复为 master,不包含 310P 功能改动。 - norm/add_rms_norm_quant/tests/st/ 和 norm/add_rms_norm_quant_v2/tests/st/ 均不在本 PR 最终 diff 中;执行级 GEIR/TTK 验证材料保存在仓外整改目录,不作为代码提交。 ## 关联的Issue 关联的Issue:#5745 ## 测试 - [x] Ascend 950 Host/Tiling UT:70/70 PASS(AddRmsNorm 11、DynamicQuant arch35 24、Quant 24、InferShape 11)。 - [x] ACLNN L2 UT:DynamicQuant V1/V2 26/26 PASS(V1 6、V2 20,含新增 Ascend 910B 判空顺序回归);Quant V1 12/12 PASS;Quant V2 19/19 PASS。Quant V2 中的 910B/910_93/310P 兼容用例同时通过。 - [x] Quant 910B Host/Tiling 定向构建与 UT:24/24 PASS;确认 arch35 文件虽参与编译,910B 运行时仍走 non-RegBase 分支。 - [x] Quant V2 950 binary 穷举对表:416 条 binary 的跨参数关系全部满足;代码接受的 12 类 dtype 投影与已交付集合完全相同。 - [x] aclnnAddRmsNorm 实际 plog 验证:命中指定 reason,返回失败符合预期。 - [x] V1/V2 NCHW 单进程专项验证:各 1/1 PASS,合法 NCHW 输入可正常执行。 - [x] Ascend 950 zeroPoints2-only TTK 执行级验证:1/1 PASS,y2 与 round(rmsnorm(x) + zeroPoints2) 逐元素一致。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)定向 ACLNN 回归:57/57 PASS(DynamicQuant V1 6、V2 20;Quant V1 12、V2 19);clang-format 和 git diff --check 通过。 - [x] 线上 CodeCheck 失败项已按平台 pre-commit 口径修复:README 尾随空格、clang-format 自动修复项及 2 个 OAT License Header 均已整改;随后对 17 个 PR 文件重新执行 pre-commit,全部 hook PASS。 - [x] 当前 HEAD 的代码内容(文档 P3 修正前提交 f1c0f62708)使用 /workspace/CI-skills/ci_local_check.sh 完成统一入口的定向本地 CI:17 个 PR 文件的 whitespace、EOF、clang-format、codespell、OAT 全部 PASS,Markdown 链接 PASS;Ascend 950/910B 的定向 package、ophost UT、opapi UT 全部 PASS。本次 93020a45f8 仅继续修改 README/ACLNN 文档,代码内容不变。本项不再使用仓内旧 scripts/ci/pre_push_build.sh 的 ALL PASSED 代替 CodeCheck 结论。 - [x] P3 文档修正后,对 17 个 PR 文件重新执行平台同款 pre-commit,whitespace、EOF、clang-format、codespell、OAT 全部 PASS;V2 README 和 ACLNN 文档的 Markdown 链接检查 PASS。 - [x] Quant V1/V2 共用 InferShape/tiling/dtype Host UT:38/38 PASS;其中新增 4 个 InferShape 用例,覆盖 V1/V2 的 zeroPoints2-only 和无第二路参数两类分支。 - [x] 修复前 GEIR 定向复现:V1、V2 的 zeroPoints2-only 均因 y2Out 被推导为 (1,) 而失败;修复后 V1 1/1、V2 1/1 PASS,量化输出精度均为 100%。测试 CSV 保存在仓外,不提交 ST 目录。 - [x] 最终 PR 共 1 个提交、20 个文件,确认 Quant V1/V2 ST 目录均不在 diff 中。 ## 文档更新 - [x] 更新 aclnnAddRmsNormQuant.md:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义。 - [x] 更新 aclnn_add_rms_norm_quant.h:同步公开接口注释。 - [x] 更新 aclnnAddRmsNormQuantV2.md、V2 README 和头文件:明确仅 950 支持 zeroPoints2-only 及 scale=1 语义,修正 8 行 beta dtype,按多产品差异规范整理 README,并区分存量产品原生 V2 与 ACLNN V1 回退路径的 divMode=False 能力。 - [x] 更新 aclnnNorm.md:明确空 dim 数组的全维归约语义与输出 shape。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!10098 | 1 个月前 | |
AIDD拼写和标点问题修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !10060 merge master into master AIDD拼写和标点问题修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 AIDD拼写和标点问题修改 ## 关联的Issue 关联Issue #5680 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10060 | 1 个月前 | |
MultiAddRmsNormDynamicQuant算子fusion pass融合规则修复 Co-authored-by: wkyan<yanwenkai@huawei.com> # message auto-generated for no-merge-commit merge: !9573 merge 0831_fix into master MultiAddRmsNormDynamicQuant算子fusion pass融合规则修复 Created-by: wkyan Commit-by: wkyan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> MultiAddRmsNormDynamicQuant算子fusion pass融合规则修复 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5456 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9573 | 1 个月前 | |
perf(mvn_v2): 修复MVNV2 在部分多轴及大尾轴场景下的严重性能问题 Co-authored-by: Davon14272<liuwenda4@huawei.com> # message auto-generated for no-merge-commit merge: !10190 merge fix/mvnv2-multiaxis-performance into master perf(mvn_v2): 修复MVNV2 在部分多轴及大尾轴场景下的严重性能问题 Created-by: Davon14272 Commit-by: Davon14272 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 对适用的前缀规约 A-R-A 场景关闭串行 group 调度,改为普通多核任务分配。 - 增加 trailing-A 向量化路径: - 沿连续尾轴按 256 列切分。 - 使用二维 DMA 一次搬入 56 x 256 数据。 - mean、variance 和 normalize 全部在 UB 驻留数据上完成。 - 每个 tile 使用二维 DMA 一次写回。 - 任务数量由 280896 降至 1099。 - 专用路径仅匹配 FP32、shape (7,56,418,96)、axes=[1],其他场景继续使用原有通用 kernel。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#5738](https://gitcode.com/cann/ops-nn/issues/5738) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10190 | 1 个月前 | |
[cleancode] norm类算子C++语言规则告警整改 Co-authored-by: runqi_zhang<zhangrunqi2@huawei.com> # message auto-generated for no-merge-commit merge: !10000 merge test/codecheck-norm2 into master [cleancode] norm类算子C++语言规则告警整改 Created-by: runqi_zhang Commit-by: runqi_zhang Merged-by: cann-robot Description: ## 描述 仓内norm类算子存在大量C++语言规则类告警,对相应文件进行整改。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10000 | 1 个月前 | |
quantize_add_layer_norm算子支持950 Co-authored-by: boes129<chenqi185@huawei.com> # message auto-generated for no-merge-commit merge: !8234 merge feat/quantize_add_layer_norm_ascend950 into master quantize_add_layer_norm算子支持950 Created-by: boes129 Commit-by: boes129 Merged-by: cann-robot Description: ## 描述 **背景**: QuantizeAddLayerNorm 融合 (x1+x2+bias) → LayerNorm → 静态量化,输出 INT8 y 与残差 x,是 vllm-ascend W8A8 链路上 LayerNorm-quant 家族成员(同族 add_layer_norm_quant 已全量支持 950)。此前该算子仅支持 910B / 910_93 / Kirin,Ascend 950(arch35/regbase)无注册,属功能性缺口。本 PR 按家族标准模式补齐 950 支持:单提交 9b3f1af1d,18 个文件,+4077/−11,基于 upstream/master(6f805c527)。 **方法**:仿照兄弟算子 add_layer_norm_quant 已合入的 arch35 实现模式(混合法:kernel 分发入口 + 预编译二进制): - **登记**:def.cpp 新增 config_950,dtype 契约与 910B 完全一致(y 恒 INT8、x 跟随主路;fp16 主路→scales/zp=fp32、bf16 主路→scales/zp=bf16、fp32 主路→scales/zp=fp32),全部输入 .AutoContiguous()。910B / 910_93 / Kirin 配置与逻辑一行未动。 - **Tiling**:tiling.cpp 按家族标准骨架 CanUseRegbase 分流(950 → 新调度员;其余走原 910B 逻辑,仅函数名加 Membase 后缀,内容未改)。新增 tiling_arch35.cpp:12 个 tiling key(8001~8122 = 2 种 UB 策略 × 2 种 bias 形态 × 3 种量化模式),full_load(整行驻留、两遍统计,数值路径与 910B 一致)与 welford(列分块、单遍流式统计)双策略。 - **Kernel**:新增 _apt.cpp 12-key 分发入口 + arch35 三件(helper / full_load / welford);复用 add_layer_norm 的 arch35 共享头与 norm_common 归约原语(编译期源码级复用,运行时零依赖),op_host/CMakeLists.txt 声明 DEPENDENCIES add_layer_norm norm_common(norm 族 39 个算子的标准做法)。 - **预编译**:config/ascend950/binary.json 共 6 条(3 个 dtype 槽位 × zero_points 有无),simplified_key 与 GenSimplifiedKey 严格对齐。 - **测试与文书**:host tiling UT +12、kernel 冒烟 UT +3、golden 生成/比对脚本(numpy,补该算子无 golden 的历史缺口,真卡 ST 可直接复用)。 ## 关联的Issue 关联Issue #4496([Requirement|需求建议]: quantize_add_layer_norm 增加 Ascend 950 支持) **详细的算子设计方法在下面ISSUE中体现:** https://gitcode.com/cann/ops-nn/issues/4496 ## 测试 1. **host tiling UT**(伪 950 平台,无需真机):新增 12 例,覆盖 full_load/welford × bias 形态 × 量化模式的 key 落位(8001~8122)与核数断言;连同 910B 既有 infershape/dtype 2 例回归 → **14/14 PASSED**。 2. **kernel UT**(c310 模拟器):full_load / full_load fast-path(D=64)/ welford 三组形状 × 3 种量化模式,3 例**跑通冒烟**。说明:CANN 9.0.0-beta.2 模拟器不完整模拟量化系 regbase 指令流——同仓佐证:batch_norm 基线全绿且 0 条 unknown instr(模拟器本身健康),rms_norm_quant_v2 等 950 量化系算子同为此限制、其 kernel UT 即 run-only。数值正确性不由模拟器断言,golden 比对基建已备,交由真卡 ST 验证。 3. **全矩阵回归**(真实环境,三 SoC): | SoC | 结果 | |---|---| | ascend950 | 二进制全部产出;host UT 14 例全过;kernel UT 3 例冒烟通过 | | ascend910b | host UT 14 例全过;kernel UT 既有 6 例通过,无回归 | | ascend910_93 | 编译通过,binary_info_config 正确注册 QuantizeAddLayerNorm | 4. **终态复验**(2026-09-07,真实 950 环境,对最终单提交 9b3f1af1d 重新 clone 验证):HEAD 正确;binary.json = 6 条;构建恰好产出 **6 个 .o**(与 6 条 binary 一一对应);binary_info_config.json 含 QuantizeAddLayerNorm;UT 14+3 PASSED、0 [ FAILED ]。 构建命令:bash build.sh --soc=ascend950 --ops=quantize_add_layer_norm -u / --opkernel。 > **量化输出契约说明**:Ascend 950 硬件支持 FP8/INT4 等量化输出,本 PR 保持与 910B 语义及家族 950 先例(add_layer_norm_quant / layer_norm_quant)一致的 INT8 契约;若下游需要 FP8 输出,属算子接口演进,建议另立 issue 讨论。 ## 文档更新 - README.md:支持矩阵 Ascend 950PR / 950DT × → √。 - classify_rule.yaml:HPTG1 追加 3 类 arch35 路径备案(tiling_arch35.cpp / config/ascend950/ / op_kernel/arch35/)。 - docs/zh/op_list.md:各列为 SoC 无关维度,确认无需改动。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8234 | 1 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
add renorm for A5 ascendc Co-authored-by: liuyun_nj<liuyun90@h-partners.com> # message auto-generated for no-merge-commit merge: !10195 merge master into master add renorm for A5 ascendc Created-by: liuyun_nj Commit-by: liuyun_nj Merged-by: cann-robot Description: ## 描述 renorm算子支持A5 as实现,性能调优 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 泛化验证 ## 文档更新 NA ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10195 | 1 个月前 | |
AIDD拼写和标点问题修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !10060 merge master into master AIDD拼写和标点问题修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 AIDD拼写和标点问题修改 ## 关联的Issue 关联Issue #5680 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10060 | 1 个月前 | |
fix: 修复AddRmsNormDynamicMxQuant空round_mode并加固Rms算子回归 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !9723 merge fix/add-rms-norm-dynamic-mx-quant-null-round-mode into master fix: 修复AddRmsNormDynamicMxQuant空round_mode并加固Rms算子回归 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 AddRmsNormDynamicMxQuant 将 round_mode 声明为可选属性,默认值为 rint。ACLNN 调用传入 nullptr 时,Host Tiling 侧可能获取到空指针;原有参数校验直接将其判为失败,导致默认值契约无法生效。 本次修改: - 修复 AddRmsNormDynamicMxQuant:round_mode == nullptr 时按默认值 rint 解析,保持显式空串和其他非法字符串仍返回失败。V1、V2 接口共用该 Host Tiling 路径,因此同时生效。 - 为 AddRmsNormDynamicMxQuant 新增独立 Host Tiling 回归用例,确认属性指针确实为 nullptr,并验证可按 rint 正常选择 FP8 FullLoad 模板;保留原有 FP8 FullLoad 用例不变。 - 对 RmsNormDynamicMxQuant 做质量加固:生产实现原本已对空 round_mode 默认为 RINT,本次不改生产逻辑;新增独立 Tiling UT 校验缺失 attr 与序列化 TilingData 中的 RINT 默认值,并新增 aclnn API 空指针成功用例。 - 补充两个算子的 aclnn 资料和公共 API 头文件注释,明确 roundMode 传入空指针时采用默认值 rint,并同步修正相关错误场景描述。 ## 关联的Issue #5518 ## 测试 - AddRmsNormDynamicMxQuant 基线复现:省略 round_mode 的 Host UT 返回 GRAPH_FAILED,用例失败(0/1 通过)。 - AddRmsNormDynamicMxQuant 修复后定向回归:原 FP8 FullLoad 用例及新增空指针用例均通过(2/2);最新 upstream/master 基线上 Host UT 46/46 通过,API UT 19/19 通过;单算子生产代码行覆盖率 92.3% (611/662)。 - RmsNormDynamicMxQuant 修改前基线:Host UT 37/37 通过,API UT 22/22 通过;默认分支 rms_norm_dynamic_mx_quant_base_tiling.cpp:191 命中次数为 0。 - RmsNormDynamicMxQuant 加固后:Host UT 38/38 通过,API UT 23/23 通过;目标默认分支命中次数由 0 提升到 2,提取的单算子源码行覆盖率由 79.9% (434/543) 提升到 80.1% (435/543)。 - 本地 CI 定向门禁全部通过:Ascend 950 和 Ascend 910B(A2)的包编译、op_host UT、op_api UT,以及 Markdown 链接检查。 - pre-commit 全部通过,包括 clang-format、codespell、OAT 和 git diff --check。 ## 文档更新 - 更新 aclnnAddRmsNormDynamicMxQuant.md 和 aclnnAddRmsNormDynamicMxQuantV2.md,补充 roundMode 空指针默认语义并修正错误场景描述。 - 同步更新 aclnn_add_rms_norm_dynamic_mx_quant.h 中 V1/V2 接口的 roundMode 参数注释。 - 更新 aclnnRmsNormDynamicMxQuant.md 和 aclnn_rms_norm_dynamic_mx_quant.h,补充 roundMode == nullptr 时默认为 rint 的公开契约。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9723 | 1 个月前 | |
modified md files (aclnnRmsNormDynamicQuant.md and aclnnBatchNormElemt.md) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !10119 merge master into master modified md files (aclnnRmsNormDynamicQuant.md and aclnnBatchNormElemt.md) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Modify the support for non-continuous output parameters in aclnnRmsNormDynamicQuant.md and remove the redundant ">" in aclnnBatchNormElemt.md. ## 关联的Issue NA ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10119 | 1 个月前 | |
fix(rms_norm_grad): improve arch35 gradient correctness Co-authored-by: liangyuhua<liangyuhua4@huawei.com> # message auto-generated for no-merge-commit merge: !9874 merge fix/rmsnormgrad-arch35-precision into master fix(rms_norm_grad): improve arch35 gradient correctness Created-by: liangyuhua Commit-by: liangyuhua Merged-by: cann-robot Description: ## 描述 修复 Ascend 950 arch35/RegBase RmsNormGrad 的正确性与精度问题: 1. Empty 场景保留原有 UB 分块与 DataCopyPad 搬运逻辑,仅将 dgamma 的 NaN 初始化改为 0。 2. 在 Host Tiling 中修正 Split-D 的 bodyPart 计算,通过向上取整的半长和整数倍增确定分界,保证 D=2^k+1 等边界下前半段不少于后半段。 3. FullLoad 和 Split-D 的 dx 投影计算使用 Reg::MulAddDst 进行 FMA;通过负投影均值表达减法语义。 4. 修正测试 Golden,使 Empty 场景的 dgamma 为 0,并保证多维 dgamma 输出 shape 与 gamma 一致。 ## 关联的Issue 关联 Issue:https://gitcode.com/cann/ops-nn/issues/5561 ## 测试 - Ascend 950 单算子编译通过,5 个 dtype 组合二进制生成成功。 - Host Tiling UT 36/36 通过;保留原 D=8192 用例,并新增独立 D=8193 用例校验 bodyPart=8192。 - 仓库正式 Ascend 950 ST 48/48 通过,均为 BINARY_MATCH,精度与内存检查通过。 - 扩展定向泛化共 6000 条,结合正式分 dtype 容差和高精度真值复核,未发现修改后实现存在需要继续修复的精度问题。 - pre-commit 全部通过:clang-format、ruff、codespell、OAT 等检查通过。 ## 文档更新 无文档更新。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9874 | 1 个月前 | |
[cleancode] norm类算子C++语言规则告警整改 Co-authored-by: runqi_zhang<zhangrunqi2@huawei.com> # message auto-generated for no-merge-commit merge: !9815 merge test/codecheck-norm-split into master [cleancode] norm类算子C++语言规则告警整改 Created-by: runqi_zhang Commit-by: runqi_zhang Merged-by: cann-robot Description: ## 描述 仓内norm类算子存在大量C++语言规则类告警,对相应文件进行整改。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9815 | 1 个月前 | |
fix(norm): 修复 Ascend 950 RmsNormQuant 空 Tensor 校验缺失 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10240 merge fix/rms-norm-quant-empty-validation-950 into master fix(norm): 修复 Ascend 950 RmsNormQuant 空 Tensor 校验缺失 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 ### 修改前问题 Ascend 950(RegBase)上的 RmsNormQuant 系列缺少完整且统一的空 Tensor 校验: - 公共接口 aclnnRmsNormQuant 已检查空指针,但没有检查 IsEmpty();空 Tensor 可能先进入二维 gamma/beta 预处理,最终被报告为内部 reshape/contiguous 错误,而不是输入 shape 非法。 - aclnnRmsNormQuantV3 同样只覆盖空指针和基础 shape 关系,未覆盖有效输入、输出的空 Tensor。 - RmsNormQuantV2/V3 共用的 Ascend 950 tiling 只在较晚阶段检查 x/gamma 的部分零维场景,未统一覆盖其他输入和输出;GEIR 直接调用仍可能得到与实际非法输入不一致的报错。 本 PR 将空 Tensor 统一定义为 Ascend 950 上不支持的有效参数形态,在 ACLNN 和 GEIR tiling 两条入口都提前返回参数/shape 非法;空指针语义和非 RegBase 平台行为保持不变。 ### 逐文件修改说明 1. norm/rms_norm_quant/op_host/op_api/aclnn_rms_norm_quant.cpp - **修改前**:CheckParams 已统一检查必选 Tensor 是否为空指针,但未检查空 Tensor,且二维 gamma/beta 的 PreDealData 位于 shape 参数检查之前。 - **本次修改**:新增 CheckTensorNotEmpty/CheckNotEmpty,仅在 IsRegbase() 为 true 时,于 PreDealData 前检查 x、gamma、beta、scale、offset、y 是否为空 Tensor。 - **修改后**:Ascend 950 上任一有效输入/输出为空 Tensor时,API 在预处理前返回 ACLNN_ERR_PARAM_INVALID。原有 CheckParams 仍是唯一的空指针检查入口,不存在重复 CheckNotNull;A2/A3 等非 RegBase 路径不执行新增校验。 2. norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling.h - **修改前**:RegBase tiling 类没有统一的输入输出 shape size 校验接口。 - **本次修改**:声明 CheckInputOutputShapeSize()。 - **修改后**:RmsNormQuantV2/V3 共用 tiling 可以在维度关系和 tiling 参数计算前,通过单一入口校验空 Tensor。 3. norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling_regbase_base.cpp - **修改前**:只在 SetInputParams() 较晚阶段检查 x 的零维和 gamma 元素数为 0;scales1、已提供的 scales2/zero_points1/zero_points2/beta、y1/y2 以及 V3 的有效 rstd 未统一覆盖。 - **本次修改**:实现 CheckInputOutputShapeSize(),在可选输入依赖检查之后、维度与参数计算之前检查所有必选输入、已提供的可选输入和 y1/y2;仅当 V3 的 output_rstd=true 时检查 rstd。删除原来覆盖不完整且时机较晚的 x/gamma 空 shape 检查。 - **修改后**:V2/V3 的 Ascend 950 GEIR 入口在 tiling 计算前统一拒绝空 Tensor,避免后续除零或误导性的内部空指针类错误;output_rstd=false 时未生效的 rstd 空占位保持允许。 4. norm/rms_norm_quant_v2/tests/ut/op_host/test_aclnn_rms_norm_quant_v2.cpp - **修改前**:公共 aclnnRmsNormQuant 没有逐参数空 Tensor 用例,也没有非 RegBase 兼容性回归断言。 - **本次修改**:Ascend 950 上逐一将 x、gamma、beta、scale、offset、y 设为空,断言返回 ACLNN_ERR_PARAM_INVALID;同时增加 Ascend 910B(A2)和 Ascend 910_93(A3)空 x 对照用例。 - **修改后**:覆盖 950 的新错误码契约,并明确证明 A2/A3 仍保持修改前的 ACLNN_SUCCESS 历史行为。该文件沿用既有目录命名,验证的是公开接口 aclnnRmsNormQuant 在 950 路由到 V2 L0 后的行为。 5. norm/rms_norm_quant_v2/tests/ut/op_host/test_rms_norm_quant_v2_empty_tensor_tiling.cpp - **修改前**:没有直接调用生产 GetShapeAttrsInfo() 的共享 tiling 空 Tensor UT,API 层提前拦截无法覆盖 GEIR 直接调用。 - **本次修改**:新增 TilingContextFaker 真入口 UT,逐一覆盖 7 个输入位置、y1/y2 为空及正常 V2 场景;同时覆盖 V3 的空 rstd 在 output_rstd=true/false 两种状态下的行为。 - **修改后**:V2/V3 共用 RegBase tiling 的输入输出空 shape 分支均有回归保护;有效 rstd 为空时失败,未请求 rstd 时空占位成功。 6. norm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.cpp - **修改前**:V3 未检查空 Tensor,CheckParams 也未接收 offset/beta,无法覆盖已提供的可选输入。 - **本次修改**:新增空 Tensor 检查,并把 offset/beta 纳入 CheckParams;仅在 RegBase 平台检查 x、gamma、scale、已提供的 offset/beta、y,以及 outputRstd=true 时的 rstd。 - **修改后**:Ascend 950 上有效参数为空 Tensor 时统一返回 ACLNN_ERR_PARAM_INVALID;必选空指针仍返回原有 ACLNN_ERR_PARAM_NULLPTR,outputRstd=false 时 rstd 继续允许为空指针或空 Tensor 占位。 7. norm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.h - **修改前**:rstd 注释笼统写为“支持空 Tensor”,未体现其有效性取决于 outputRstd。 - **本次修改**:明确 outputRstd=true 时 rstd 不支持空 Tensor;outputRstd=false 时输出无效,允许空指针或空 Tensor 占位。 - **修改后**:接口头文件与代码行为一致。 8. norm/rms_norm_quant_v3/docs/aclnnRmsNormQuantV3.md - **修改前**:资料没有说清关闭 outputRstd 时能否用空 Tensor 占位。 - **本次修改**:把 rstd 的非空约束限定为 outputRstd=true,补充关闭输出时支持空指针或空 Tensor 占位。 - **修改后**:用户资料与头文件、API 校验和 tiling 契约一致。 9. norm/rms_norm_quant_v3/tests/ut/op_api/test_aclnn_rms_norm_quant_v3.cpp - **修改前**:V3 OpAPI UT 没有逐参数空 Tensor 覆盖,也未验证 rstd 的条件有效性。 - **本次修改**:逐一将 x、gamma、scale、offset、beta、y、rstd 设为空,验证 outputRstd=true 时返回 ACLNN_ERR_PARAM_INVALID;补充 outputRstd=false 且 rstd 为空占位时成功的用例。 - **修改后**:V3 API 的所有有效输入输出空 Tensor 分支,以及 rstd 条件契约均受到 UT 保护。 ### 兼容性结论 - ACLNN 新增校验显式受 IsRegbase() 保护;RmsNormQuantV2/V3 OpDef 的实现仅注册 Ascend 950。 - 本 PR 没有修改任何 kernel 或计算逻辑,只调整非法输入的校验阶段和错误码。 - A2/A3 不进入新增校验,且已用 Ascend 910B、Ascend 910_93 两个平台用例验证历史行为不变。 - 可选输入未提供(nullptr)仍允许;V3 未请求 rstd 时,其空指针/空 Tensor 占位仍允许。 ## 关联的Issue 关联 Issue #5772:https://gitcode.com/cann/ops-nn/issues/5772 ## 测试 - 最终提交基于最新 master;提交钩子、clang-format、codespell、OAT:9 个变更文件全部通过。 - OpHost 定向回归:42/42 PASS(含 V2/V3 tiling、InferShape,以及 A2/A3 行为保持用例)。 - OpAPI 定向回归:18/18 PASS(含 950 空 Tensor 错误码和 V3 条件 rstd 用例)。 - OpGraph 阶段:执行成功,本 PR 无 op_graph 变更,无新增相关用例。 - Kernel UT 门禁:本 PR 无 op_kernel 变更,按规则跳过。 - 单算子打包:rms_norm_quant、rms_norm_quant_v2、rms_norm_quant_v3 三个 .run 包均构建成功。 - Ascend 950 三算子联合打包:此前使用 --pkg --ops=rms_norm_quant,rms_norm_quant_v2,rms_norm_quant_v3 --soc=ascend950 -j8 完成 920 个 kernel 对象编译并成功产包;本轮官方 compile_ascend950_pkg.sh 因变更清单不含 kernel 文件按规则跳过。 - TTK ACLNN 真机回归(Ascend 950、使用本分支刷包):aclnnRmsNormQuant 500/500 PASS;aclnnRmsNormQuantV3 原始汇总 499/500,唯一差异为 INT4 打包值一个 nibble 相差 1 LSB,符合量化算子精度允许范围,固定种子单独重跑 1/1 PASS。 - TTK 空 Tensor 定向:V1/V3 均在 API 校验阶段返回 161002 (ACLNN_ERR_PARAM_INVALID),未进入 kernel。 - 全仓 scripts/ci/local_build.sh -j8 已执行;前置 JIT/Host 全仓编译被本机 CANN 9.2.0 与最新 master 的无关接口差异阻断:index/embedding、index/gather_v2 使用 OpImplRegisterV2::SetSupportPcieThrough(),当前包头文件没有该成员。本 PR 的上述定向 CI、单算子打包均通过,未出现 RmsNormQuant 编译或测试失败。 ## 文档更新 更新 aclnnRmsNormQuantV3 用户文档与接口头文件,明确 rstd 的非空约束仅在 outputRstd=true 时生效,关闭输出时允许空占位。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10240 | 1 个月前 | |
fix(norm): 修复 Ascend 950 RmsNormQuant 空 Tensor 校验缺失 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10240 merge fix/rms-norm-quant-empty-validation-950 into master fix(norm): 修复 Ascend 950 RmsNormQuant 空 Tensor 校验缺失 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 ### 修改前问题 Ascend 950(RegBase)上的 RmsNormQuant 系列缺少完整且统一的空 Tensor 校验: - 公共接口 aclnnRmsNormQuant 已检查空指针,但没有检查 IsEmpty();空 Tensor 可能先进入二维 gamma/beta 预处理,最终被报告为内部 reshape/contiguous 错误,而不是输入 shape 非法。 - aclnnRmsNormQuantV3 同样只覆盖空指针和基础 shape 关系,未覆盖有效输入、输出的空 Tensor。 - RmsNormQuantV2/V3 共用的 Ascend 950 tiling 只在较晚阶段检查 x/gamma 的部分零维场景,未统一覆盖其他输入和输出;GEIR 直接调用仍可能得到与实际非法输入不一致的报错。 本 PR 将空 Tensor 统一定义为 Ascend 950 上不支持的有效参数形态,在 ACLNN 和 GEIR tiling 两条入口都提前返回参数/shape 非法;空指针语义和非 RegBase 平台行为保持不变。 ### 逐文件修改说明 1. norm/rms_norm_quant/op_host/op_api/aclnn_rms_norm_quant.cpp - **修改前**:CheckParams 已统一检查必选 Tensor 是否为空指针,但未检查空 Tensor,且二维 gamma/beta 的 PreDealData 位于 shape 参数检查之前。 - **本次修改**:新增 CheckTensorNotEmpty/CheckNotEmpty,仅在 IsRegbase() 为 true 时,于 PreDealData 前检查 x、gamma、beta、scale、offset、y 是否为空 Tensor。 - **修改后**:Ascend 950 上任一有效输入/输出为空 Tensor时,API 在预处理前返回 ACLNN_ERR_PARAM_INVALID。原有 CheckParams 仍是唯一的空指针检查入口,不存在重复 CheckNotNull;A2/A3 等非 RegBase 路径不执行新增校验。 2. norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling.h - **修改前**:RegBase tiling 类没有统一的输入输出 shape size 校验接口。 - **本次修改**:声明 CheckInputOutputShapeSize()。 - **修改后**:RmsNormQuantV2/V3 共用 tiling 可以在维度关系和 tiling 参数计算前,通过单一入口校验空 Tensor。 3. norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling_regbase_base.cpp - **修改前**:只在 SetInputParams() 较晚阶段检查 x 的零维和 gamma 元素数为 0;scales1、已提供的 scales2/zero_points1/zero_points2/beta、y1/y2 以及 V3 的有效 rstd 未统一覆盖。 - **本次修改**:实现 CheckInputOutputShapeSize(),在可选输入依赖检查之后、维度与参数计算之前检查所有必选输入、已提供的可选输入和 y1/y2;仅当 V3 的 output_rstd=true 时检查 rstd。删除原来覆盖不完整且时机较晚的 x/gamma 空 shape 检查。 - **修改后**:V2/V3 的 Ascend 950 GEIR 入口在 tiling 计算前统一拒绝空 Tensor,避免后续除零或误导性的内部空指针类错误;output_rstd=false 时未生效的 rstd 空占位保持允许。 4. norm/rms_norm_quant_v2/tests/ut/op_host/test_aclnn_rms_norm_quant_v2.cpp - **修改前**:公共 aclnnRmsNormQuant 没有逐参数空 Tensor 用例,也没有非 RegBase 兼容性回归断言。 - **本次修改**:Ascend 950 上逐一将 x、gamma、beta、scale、offset、y 设为空,断言返回 ACLNN_ERR_PARAM_INVALID;同时增加 Ascend 910B(A2)和 Ascend 910_93(A3)空 x 对照用例。 - **修改后**:覆盖 950 的新错误码契约,并明确证明 A2/A3 仍保持修改前的 ACLNN_SUCCESS 历史行为。该文件沿用既有目录命名,验证的是公开接口 aclnnRmsNormQuant 在 950 路由到 V2 L0 后的行为。 5. norm/rms_norm_quant_v2/tests/ut/op_host/test_rms_norm_quant_v2_empty_tensor_tiling.cpp - **修改前**:没有直接调用生产 GetShapeAttrsInfo() 的共享 tiling 空 Tensor UT,API 层提前拦截无法覆盖 GEIR 直接调用。 - **本次修改**:新增 TilingContextFaker 真入口 UT,逐一覆盖 7 个输入位置、y1/y2 为空及正常 V2 场景;同时覆盖 V3 的空 rstd 在 output_rstd=true/false 两种状态下的行为。 - **修改后**:V2/V3 共用 RegBase tiling 的输入输出空 shape 分支均有回归保护;有效 rstd 为空时失败,未请求 rstd 时空占位成功。 6. norm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.cpp - **修改前**:V3 未检查空 Tensor,CheckParams 也未接收 offset/beta,无法覆盖已提供的可选输入。 - **本次修改**:新增空 Tensor 检查,并把 offset/beta 纳入 CheckParams;仅在 RegBase 平台检查 x、gamma、scale、已提供的 offset/beta、y,以及 outputRstd=true 时的 rstd。 - **修改后**:Ascend 950 上有效参数为空 Tensor 时统一返回 ACLNN_ERR_PARAM_INVALID;必选空指针仍返回原有 ACLNN_ERR_PARAM_NULLPTR,outputRstd=false 时 rstd 继续允许为空指针或空 Tensor 占位。 7. norm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.h - **修改前**:rstd 注释笼统写为“支持空 Tensor”,未体现其有效性取决于 outputRstd。 - **本次修改**:明确 outputRstd=true 时 rstd 不支持空 Tensor;outputRstd=false 时输出无效,允许空指针或空 Tensor 占位。 - **修改后**:接口头文件与代码行为一致。 8. norm/rms_norm_quant_v3/docs/aclnnRmsNormQuantV3.md - **修改前**:资料没有说清关闭 outputRstd 时能否用空 Tensor 占位。 - **本次修改**:把 rstd 的非空约束限定为 outputRstd=true,补充关闭输出时支持空指针或空 Tensor 占位。 - **修改后**:用户资料与头文件、API 校验和 tiling 契约一致。 9. norm/rms_norm_quant_v3/tests/ut/op_api/test_aclnn_rms_norm_quant_v3.cpp - **修改前**:V3 OpAPI UT 没有逐参数空 Tensor 覆盖,也未验证 rstd 的条件有效性。 - **本次修改**:逐一将 x、gamma、scale、offset、beta、y、rstd 设为空,验证 outputRstd=true 时返回 ACLNN_ERR_PARAM_INVALID;补充 outputRstd=false 且 rstd 为空占位时成功的用例。 - **修改后**:V3 API 的所有有效输入输出空 Tensor 分支,以及 rstd 条件契约均受到 UT 保护。 ### 兼容性结论 - ACLNN 新增校验显式受 IsRegbase() 保护;RmsNormQuantV2/V3 OpDef 的实现仅注册 Ascend 950。 - 本 PR 没有修改任何 kernel 或计算逻辑,只调整非法输入的校验阶段和错误码。 - A2/A3 不进入新增校验,且已用 Ascend 910B、Ascend 910_93 两个平台用例验证历史行为不变。 - 可选输入未提供(nullptr)仍允许;V3 未请求 rstd 时,其空指针/空 Tensor 占位仍允许。 ## 关联的Issue 关联 Issue #5772:https://gitcode.com/cann/ops-nn/issues/5772 ## 测试 - 最终提交基于最新 master;提交钩子、clang-format、codespell、OAT:9 个变更文件全部通过。 - OpHost 定向回归:42/42 PASS(含 V2/V3 tiling、InferShape,以及 A2/A3 行为保持用例)。 - OpAPI 定向回归:18/18 PASS(含 950 空 Tensor 错误码和 V3 条件 rstd 用例)。 - OpGraph 阶段:执行成功,本 PR 无 op_graph 变更,无新增相关用例。 - Kernel UT 门禁:本 PR 无 op_kernel 变更,按规则跳过。 - 单算子打包:rms_norm_quant、rms_norm_quant_v2、rms_norm_quant_v3 三个 .run 包均构建成功。 - Ascend 950 三算子联合打包:此前使用 --pkg --ops=rms_norm_quant,rms_norm_quant_v2,rms_norm_quant_v3 --soc=ascend950 -j8 完成 920 个 kernel 对象编译并成功产包;本轮官方 compile_ascend950_pkg.sh 因变更清单不含 kernel 文件按规则跳过。 - TTK ACLNN 真机回归(Ascend 950、使用本分支刷包):aclnnRmsNormQuant 500/500 PASS;aclnnRmsNormQuantV3 原始汇总 499/500,唯一差异为 INT4 打包值一个 nibble 相差 1 LSB,符合量化算子精度允许范围,固定种子单独重跑 1/1 PASS。 - TTK 空 Tensor 定向:V1/V3 均在 API 校验阶段返回 161002 (ACLNN_ERR_PARAM_INVALID),未进入 kernel。 - 全仓 scripts/ci/local_build.sh -j8 已执行;前置 JIT/Host 全仓编译被本机 CANN 9.2.0 与最新 master 的无关接口差异阻断:index/embedding、index/gather_v2 使用 OpImplRegisterV2::SetSupportPcieThrough(),当前包头文件没有该成员。本 PR 的上述定向 CI、单算子打包均通过,未出现 RmsNormQuant 编译或测试失败。 ## 文档更新 更新 aclnnRmsNormQuantV3 用户文档与接口头文件,明确 rstd 的非空约束仅在 outputRstd=true 时生效,关闭输出时允许空占位。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10240 | 1 个月前 | |
fix(norm): 修复 Ascend 950 RmsNormQuant 空 Tensor 校验缺失 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !10240 merge fix/rms-norm-quant-empty-validation-950 into master fix(norm): 修复 Ascend 950 RmsNormQuant 空 Tensor 校验缺失 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 ### 修改前问题 Ascend 950(RegBase)上的 RmsNormQuant 系列缺少完整且统一的空 Tensor 校验: - 公共接口 aclnnRmsNormQuant 已检查空指针,但没有检查 IsEmpty();空 Tensor 可能先进入二维 gamma/beta 预处理,最终被报告为内部 reshape/contiguous 错误,而不是输入 shape 非法。 - aclnnRmsNormQuantV3 同样只覆盖空指针和基础 shape 关系,未覆盖有效输入、输出的空 Tensor。 - RmsNormQuantV2/V3 共用的 Ascend 950 tiling 只在较晚阶段检查 x/gamma 的部分零维场景,未统一覆盖其他输入和输出;GEIR 直接调用仍可能得到与实际非法输入不一致的报错。 本 PR 将空 Tensor 统一定义为 Ascend 950 上不支持的有效参数形态,在 ACLNN 和 GEIR tiling 两条入口都提前返回参数/shape 非法;空指针语义和非 RegBase 平台行为保持不变。 ### 逐文件修改说明 1. norm/rms_norm_quant/op_host/op_api/aclnn_rms_norm_quant.cpp - **修改前**:CheckParams 已统一检查必选 Tensor 是否为空指针,但未检查空 Tensor,且二维 gamma/beta 的 PreDealData 位于 shape 参数检查之前。 - **本次修改**:新增 CheckTensorNotEmpty/CheckNotEmpty,仅在 IsRegbase() 为 true 时,于 PreDealData 前检查 x、gamma、beta、scale、offset、y 是否为空 Tensor。 - **修改后**:Ascend 950 上任一有效输入/输出为空 Tensor时,API 在预处理前返回 ACLNN_ERR_PARAM_INVALID。原有 CheckParams 仍是唯一的空指针检查入口,不存在重复 CheckNotNull;A2/A3 等非 RegBase 路径不执行新增校验。 2. norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling.h - **修改前**:RegBase tiling 类没有统一的输入输出 shape size 校验接口。 - **本次修改**:声明 CheckInputOutputShapeSize()。 - **修改后**:RmsNormQuantV2/V3 共用 tiling 可以在维度关系和 tiling 参数计算前,通过单一入口校验空 Tensor。 3. norm/rms_norm_quant_v2/op_host/rms_norm_quant_v2_tiling_regbase_base.cpp - **修改前**:只在 SetInputParams() 较晚阶段检查 x 的零维和 gamma 元素数为 0;scales1、已提供的 scales2/zero_points1/zero_points2/beta、y1/y2 以及 V3 的有效 rstd 未统一覆盖。 - **本次修改**:实现 CheckInputOutputShapeSize(),在可选输入依赖检查之后、维度与参数计算之前检查所有必选输入、已提供的可选输入和 y1/y2;仅当 V3 的 output_rstd=true 时检查 rstd。删除原来覆盖不完整且时机较晚的 x/gamma 空 shape 检查。 - **修改后**:V2/V3 的 Ascend 950 GEIR 入口在 tiling 计算前统一拒绝空 Tensor,避免后续除零或误导性的内部空指针类错误;output_rstd=false 时未生效的 rstd 空占位保持允许。 4. norm/rms_norm_quant_v2/tests/ut/op_host/test_aclnn_rms_norm_quant_v2.cpp - **修改前**:公共 aclnnRmsNormQuant 没有逐参数空 Tensor 用例,也没有非 RegBase 兼容性回归断言。 - **本次修改**:Ascend 950 上逐一将 x、gamma、beta、scale、offset、y 设为空,断言返回 ACLNN_ERR_PARAM_INVALID;同时增加 Ascend 910B(A2)和 Ascend 910_93(A3)空 x 对照用例。 - **修改后**:覆盖 950 的新错误码契约,并明确证明 A2/A3 仍保持修改前的 ACLNN_SUCCESS 历史行为。该文件沿用既有目录命名,验证的是公开接口 aclnnRmsNormQuant 在 950 路由到 V2 L0 后的行为。 5. norm/rms_norm_quant_v2/tests/ut/op_host/test_rms_norm_quant_v2_empty_tensor_tiling.cpp - **修改前**:没有直接调用生产 GetShapeAttrsInfo() 的共享 tiling 空 Tensor UT,API 层提前拦截无法覆盖 GEIR 直接调用。 - **本次修改**:新增 TilingContextFaker 真入口 UT,逐一覆盖 7 个输入位置、y1/y2 为空及正常 V2 场景;同时覆盖 V3 的空 rstd 在 output_rstd=true/false 两种状态下的行为。 - **修改后**:V2/V3 共用 RegBase tiling 的输入输出空 shape 分支均有回归保护;有效 rstd 为空时失败,未请求 rstd 时空占位成功。 6. norm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.cpp - **修改前**:V3 未检查空 Tensor,CheckParams 也未接收 offset/beta,无法覆盖已提供的可选输入。 - **本次修改**:新增空 Tensor 检查,并把 offset/beta 纳入 CheckParams;仅在 RegBase 平台检查 x、gamma、scale、已提供的 offset/beta、y,以及 outputRstd=true 时的 rstd。 - **修改后**:Ascend 950 上有效参数为空 Tensor 时统一返回 ACLNN_ERR_PARAM_INVALID;必选空指针仍返回原有 ACLNN_ERR_PARAM_NULLPTR,outputRstd=false 时 rstd 继续允许为空指针或空 Tensor 占位。 7. norm/rms_norm_quant_v3/op_api/aclnn_rms_norm_quant_v3.h - **修改前**:rstd 注释笼统写为“支持空 Tensor”,未体现其有效性取决于 outputRstd。 - **本次修改**:明确 outputRstd=true 时 rstd 不支持空 Tensor;outputRstd=false 时输出无效,允许空指针或空 Tensor 占位。 - **修改后**:接口头文件与代码行为一致。 8. norm/rms_norm_quant_v3/docs/aclnnRmsNormQuantV3.md - **修改前**:资料没有说清关闭 outputRstd 时能否用空 Tensor 占位。 - **本次修改**:把 rstd 的非空约束限定为 outputRstd=true,补充关闭输出时支持空指针或空 Tensor 占位。 - **修改后**:用户资料与头文件、API 校验和 tiling 契约一致。 9. norm/rms_norm_quant_v3/tests/ut/op_api/test_aclnn_rms_norm_quant_v3.cpp - **修改前**:V3 OpAPI UT 没有逐参数空 Tensor 覆盖,也未验证 rstd 的条件有效性。 - **本次修改**:逐一将 x、gamma、scale、offset、beta、y、rstd 设为空,验证 outputRstd=true 时返回 ACLNN_ERR_PARAM_INVALID;补充 outputRstd=false 且 rstd 为空占位时成功的用例。 - **修改后**:V3 API 的所有有效输入输出空 Tensor 分支,以及 rstd 条件契约均受到 UT 保护。 ### 兼容性结论 - ACLNN 新增校验显式受 IsRegbase() 保护;RmsNormQuantV2/V3 OpDef 的实现仅注册 Ascend 950。 - 本 PR 没有修改任何 kernel 或计算逻辑,只调整非法输入的校验阶段和错误码。 - A2/A3 不进入新增校验,且已用 Ascend 910B、Ascend 910_93 两个平台用例验证历史行为不变。 - 可选输入未提供(nullptr)仍允许;V3 未请求 rstd 时,其空指针/空 Tensor 占位仍允许。 ## 关联的Issue 关联 Issue #5772:https://gitcode.com/cann/ops-nn/issues/5772 ## 测试 - 最终提交基于最新 master;提交钩子、clang-format、codespell、OAT:9 个变更文件全部通过。 - OpHost 定向回归:42/42 PASS(含 V2/V3 tiling、InferShape,以及 A2/A3 行为保持用例)。 - OpAPI 定向回归:18/18 PASS(含 950 空 Tensor 错误码和 V3 条件 rstd 用例)。 - OpGraph 阶段:执行成功,本 PR 无 op_graph 变更,无新增相关用例。 - Kernel UT 门禁:本 PR 无 op_kernel 变更,按规则跳过。 - 单算子打包:rms_norm_quant、rms_norm_quant_v2、rms_norm_quant_v3 三个 .run 包均构建成功。 - Ascend 950 三算子联合打包:此前使用 --pkg --ops=rms_norm_quant,rms_norm_quant_v2,rms_norm_quant_v3 --soc=ascend950 -j8 完成 920 个 kernel 对象编译并成功产包;本轮官方 compile_ascend950_pkg.sh 因变更清单不含 kernel 文件按规则跳过。 - TTK ACLNN 真机回归(Ascend 950、使用本分支刷包):aclnnRmsNormQuant 500/500 PASS;aclnnRmsNormQuantV3 原始汇总 499/500,唯一差异为 INT4 打包值一个 nibble 相差 1 LSB,符合量化算子精度允许范围,固定种子单独重跑 1/1 PASS。 - TTK 空 Tensor 定向:V1/V3 均在 API 校验阶段返回 161002 (ACLNN_ERR_PARAM_INVALID),未进入 kernel。 - 全仓 scripts/ci/local_build.sh -j8 已执行;前置 JIT/Host 全仓编译被本机 CANN 9.2.0 与最新 master 的无关接口差异阻断:index/embedding、index/gather_v2 使用 OpImplRegisterV2::SetSupportPcieThrough(),当前包头文件没有该成员。本 PR 的上述定向 CI、单算子打包均通过,未出现 RmsNormQuant 编译或测试失败。 ## 文档更新 更新 aclnnRmsNormQuantV3 用户文档与接口头文件,明确 rstd 的非空约束仅在 outputRstd=true 时生效,关闭输出时允许空占位。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10240 | 1 个月前 | |
fix(nn): release resources on init failure in aclnn examples and docs Co-authored-by: wangjun03<wangjun01@nuaa.edu.cn> # message auto-generated for no-merge-commit merge: !8693 merge fix/init-failure-resource-release-nn into master fix(nn): release resources on init failure in aclnn examples and docs Created-by: wangjun03 Commit-by: wangjun03 Merged-by: cann-robot Description: ## 描述 修复 NN/Transformer 类算子调用示例在初始化失败场景下资源释放不完整的问题。 - aclrtSetDevice 失败时,在返回前调用 aclFinalize,释放已初始化的 ACL 资源。 - aclrtCreateStream 失败时,在返回前依次调用 aclrtResetDevice 和 aclFinalize,释放已设置的 Device 及 ACL 资源。 - 保留原有 CHECK_RET 写法和正常执行路径的资源释放顺序。 - 同步修改文档示例和对应的可执行示例源码,保证两处代码一致。 本次修改参考仓库内 PR #8603(aclnnSoftmax)的修复方式,仅补齐资源释放逻辑,不涉及算子 Tiling、Kernel 和计算功能变更。 ## 涉及算子 ### activation(4 个算子,8 个文件) - **SoftmaxV2**:aclnnSoftmax - **LogSoftmaxV2**:aclnnLogSoftmax - **SoftmaxGrad**:aclnnSoftmaxBackward - **LogSoftmaxGrad**:aclnnLogSoftmaxBackward ### norm(23 个算子,56 个文件) - **GroupNormGrad**:aclnnGroupNormBackward - **LpNormV2**:aclnnLinalgVectorNorm、aclnnNorm - **LayerNormV4**:aclnnLayerNorm、aclnnFastLayerNorm - **LayerNormGradV3**:aclnnLayerNormBackward - **AddLayerNorm**:aclnnAddLayerNorm - **AddLayerNormQuant**:aclnnAddLayerNormQuant - **AddRmsNorm**:aclnnAddRmsNorm - **AddRmsNormCast**:aclnnAddRmsNormCast - **AddRmsNormQuant**:aclnnAddRmsNormQuant - **AddRmsNormDynamicQuant**:aclnnAddRmsNormDynamicQuant、aclnnAddRmsNormDynamicQuantV2 - **AddRmsNormDynamicMxQuant**:aclnnAddRmsNormDynamicMxQuant - **RmsNormDynamicMxQuant**:aclnnRmsNormDynamicMxQuant - **RmsNormGradQuant**:aclnnRmsNormGradQuant - **RmsNormQuantV3**:aclnnRmsNormQuantV3 - **BatchNormV3**:aclnnBatchNorm、aclnnBatchNormElemt - **BatchNormGradV3**:aclnnBatchNormBackward、aclnnFastBatchNormBackward - **RmsNorm**:aclnnRmsNorm - **RmsNormGrad**:aclnnRmsNormGrad - **InplaceAddRmsNorm**:aclnnInplaceAddRmsNorm - **SyncBatchNormBackwardElemt**:aclnnBatchNormElemtBackward - **SyncBatchNormBackwardReduce**:aclnnBatchNormReduceBackward - **SyncBatchNormGatherStats**:aclnnSyncBatchNormGatherStats ### experimental 镜像(8 个文件) - experimental/activation: LogSoftmaxV2 - experimental/loss: SoftmaxGrad - experimental/norm: SyncBatchNormBackwardElemt、SyncBatchNormBackwardReduce、SyncBatchNormGatherStats ## 关联的 Issue Issue #4745 ## 测试 - git diff --check:通过。 - 本次仅修改调用示例的异常处理逻辑,未执行 NPU 运行测试。 ## 文档更新 - 更新上述算子 docs/ 目录下的 aclnn*.md 中的调用示例。 - 同步更新 examples/ 目录下的 test_aclnn_*.cpp 可执行示例源码。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8693 | 1 个月前 | |
fix(nn): release resources on init failure in aclnn examples and docs Co-authored-by: wangjun03<wangjun01@nuaa.edu.cn> # message auto-generated for no-merge-commit merge: !8693 merge fix/init-failure-resource-release-nn into master fix(nn): release resources on init failure in aclnn examples and docs Created-by: wangjun03 Commit-by: wangjun03 Merged-by: cann-robot Description: ## 描述 修复 NN/Transformer 类算子调用示例在初始化失败场景下资源释放不完整的问题。 - aclrtSetDevice 失败时,在返回前调用 aclFinalize,释放已初始化的 ACL 资源。 - aclrtCreateStream 失败时,在返回前依次调用 aclrtResetDevice 和 aclFinalize,释放已设置的 Device 及 ACL 资源。 - 保留原有 CHECK_RET 写法和正常执行路径的资源释放顺序。 - 同步修改文档示例和对应的可执行示例源码,保证两处代码一致。 本次修改参考仓库内 PR #8603(aclnnSoftmax)的修复方式,仅补齐资源释放逻辑,不涉及算子 Tiling、Kernel 和计算功能变更。 ## 涉及算子 ### activation(4 个算子,8 个文件) - **SoftmaxV2**:aclnnSoftmax - **LogSoftmaxV2**:aclnnLogSoftmax - **SoftmaxGrad**:aclnnSoftmaxBackward - **LogSoftmaxGrad**:aclnnLogSoftmaxBackward ### norm(23 个算子,56 个文件) - **GroupNormGrad**:aclnnGroupNormBackward - **LpNormV2**:aclnnLinalgVectorNorm、aclnnNorm - **LayerNormV4**:aclnnLayerNorm、aclnnFastLayerNorm - **LayerNormGradV3**:aclnnLayerNormBackward - **AddLayerNorm**:aclnnAddLayerNorm - **AddLayerNormQuant**:aclnnAddLayerNormQuant - **AddRmsNorm**:aclnnAddRmsNorm - **AddRmsNormCast**:aclnnAddRmsNormCast - **AddRmsNormQuant**:aclnnAddRmsNormQuant - **AddRmsNormDynamicQuant**:aclnnAddRmsNormDynamicQuant、aclnnAddRmsNormDynamicQuantV2 - **AddRmsNormDynamicMxQuant**:aclnnAddRmsNormDynamicMxQuant - **RmsNormDynamicMxQuant**:aclnnRmsNormDynamicMxQuant - **RmsNormGradQuant**:aclnnRmsNormGradQuant - **RmsNormQuantV3**:aclnnRmsNormQuantV3 - **BatchNormV3**:aclnnBatchNorm、aclnnBatchNormElemt - **BatchNormGradV3**:aclnnBatchNormBackward、aclnnFastBatchNormBackward - **RmsNorm**:aclnnRmsNorm - **RmsNormGrad**:aclnnRmsNormGrad - **InplaceAddRmsNorm**:aclnnInplaceAddRmsNorm - **SyncBatchNormBackwardElemt**:aclnnBatchNormElemtBackward - **SyncBatchNormBackwardReduce**:aclnnBatchNormReduceBackward - **SyncBatchNormGatherStats**:aclnnSyncBatchNormGatherStats ### experimental 镜像(8 个文件) - experimental/activation: LogSoftmaxV2 - experimental/loss: SoftmaxGrad - experimental/norm: SyncBatchNormBackwardElemt、SyncBatchNormBackwardReduce、SyncBatchNormGatherStats ## 关联的 Issue Issue #4745 ## 测试 - git diff --check:通过。 - 本次仅修改调用示例的异常处理逻辑,未执行 NPU 运行测试。 ## 文档更新 - 更新上述算子 docs/ 目录下的 aclnn*.md 中的调用示例。 - 同步更新 examples/ 目录下的 test_aclnn_*.cpp 可执行示例源码。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8693 | 1 个月前 | |
将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Co-authored-by: m0_71149169<1907825139@qq.com> # message auto-generated for no-merge-commit merge: !9291 merge norm-quant-microapi-to-reg into master 将norm,quant目录下 MicroAPI 命名空间统一替换为 Reg Created-by: m0_71149169 Commit-by: m0_71149169 Merged-by: cann-robot Description: ## 描述 MicroAPI → Reg 命名空间迁移: norm,quant CANN 头文件 kernel_macros.h 中存在命名空间别名 namespace MicroAPI = Reg;,MicroAPI 只是 Reg 的别名。为统一命名规范,将 nn 仓所有算子 kernel 代码中的 MicroAPI 替换为 Reg,并通过对比替换前后 binary .o 文件 MD5 验证替换无影响。 覆盖范围 - nn 主仓目录:norm,quant ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5098](https://gitcode.com/cann/ops-nn/issues/5098) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: norm,quant目录下MicroAPI → Reg 命名空间迁移 See merge request: cann/ops-nn!9291 | 1 个月前 | |
modified md file(aclnn*.md and README.md) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !7119 merge master into master modified md file(aclnn*.md and README.md) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 1. Updated the constraints on the C and group parameters in aclnnGroupNormBackward.md. 2. Updated the calculation formula and parameter types of the lp_norm_v2 operator, and updated the parameter description of aclnn. 3. Updated the case of parameter names in the README.md file of renorm. 4. Updated the calculation formula of sync_batch_norm_backward_elemt and added the constraints on the combination of data types in the README file. 5. Updated the attribute parameter types and default values in the README file of sync_batch_norm_backward_elemt. ## 关联的Issue [#3701](https://gitcode.com/cann/ops-nn/issues/3701) [#3702](https://gitcode.com/cann/ops-nn/issues/3702) [#3693](https://gitcode.com/cann/ops-nn/issues/3693) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 docs/zh/op_list.md norm/group_norm_grad/docs/aclnnGroupNormBackward.md norm/lp_norm_v2/README.md norm/lp_norm_v2/docs/aclnnNorm.md norm/renorm/README.md norm/sync_batch_norm_backward_elemt/README.md norm/sync_batch_norm_backward_elemt/docs/aclnnBatchNormElemtBackward.md norm/sync_batch_norm_backward_elemt/docs/aclnnBatchNormElemtBackward.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7119 | 3 个月前 | |
feat: rename op_api_def.h to op_api_def_nn.h Co-authored-by: chenqianyu<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !8360 merge rename_opapidef into master feat: rename op_api_def.h to op_api_def_nn.h Created-by: FishPotatoChen Commit-by: chenqianyu Merged-by: cann-robot Description: ## 描述 本次改动将 op_api/op_api_def.h 重命名为 op_api/op_api_def_nn.h,并同步更新了所有引用该头文件的源文件与测试文件中的 #include 路径,共涉及 161 个文件。 改动原因:将 op_api 定义头文件统一命名为 op_api_def_nn.h,以更好地体现其所属模块(NN 算子)的语义,便于后续与其他模块的头文件区分管理。 此外,在提交过程中发现 4 个文件(aclnn_foreach_addcmul_scalar_v2.cpp、aclnn_max_unpool3d.cpp、test_aclnn_addmv.cpp、test_aclnn_fast_batchnorm_backward.cpp)的许可证头使用了非标准的旧格式,导致 OAT 合规检查失败。本次一并将其更新为标准的 CANN 开源许可证头格式,确保通过合规校验。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4954 ## 测试 - 通过 pre-commit 钩子校验:trailing whitespace、end-of-file-fixer、clang-format 均通过 - 通过 OAT 合规检查(161 个文件全部通过) - 本次为头文件重命名改动,不涉及逻辑变更,编译依赖关系保持不变 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:头文件重命名与许可证头修复 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8360 | 1 个月前 | |
fix:重构runtime2_util.h Co-authored-by: chenqianyu<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !8841 merge rename_runtime2util into master fix:重构runtime2_util.h Created-by: FishPotatoChen Commit-by: chenqianyu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将 common/inc/op_api/runtime2_util.h 重命名为 common/inc/op_api/runtime2_util_nn.h,以避免与 CANN 仓内其他模块同名头文件产生命名冲突。 主要改动内容: 1. 重命名头文件 runtime2_util.h 为 runtime2_util_nn.h,并同步更新文件内的 doxygen 注释、头文件保护宏(CANN_OPS_BUILT_IN_OP_TILING_RUNTIME2_UTIL_NN_H_)以及文件末尾换行。 2. 批量更新所有引用该头文件的 26 个源文件(.h/.cpp)中的 #include "op_api/runtime2_util.h" 为 #include "op_api/runtime2_util_nn.h",涉及 activation、index、loss、norm 等 nn 算子目录。 3. 同步更新 common/inc/op_host/cache_runinfo.h 等公共头文件的引用,并更新版权年份至 2025-2026。 该改动为纯重命名重构,不涉及任何功能逻辑变更。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5037 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 由于改动仅涉及头文件重命名及引用路径更新,无功能逻辑变更,主要通过全量编译验证所有受影响算子可正确找到新头文件并编译通过。 - 编译范围覆盖 activation、index、loss、norm 等目录下受影响的 arch35 tiling 与 infershape 模块。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:重构代码 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8841 | 1 个月前 | |
Format update: Adjusted the license description format in all relevant files. Co-authored-by: jiangqi<jiangqi47@h-partners.com> # message auto-generated for no-merge-commit merge: !365 merge license5 into master Format update: Adjusted the license description format in all relevant files. Created-by: jiangqi2025 Commit-by: jiangqi Merged-by: turing_project1 Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!365 | 10 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 10 个月前 |