| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 | 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 | 1 个月前 | |
修复AdaLayerNormQuant跑UT报错的问题 Co-authored-by: chenhaijie1423<chenhaijie2@h-partners.com> # message auto-generated for no-merge-commit merge: !8147 merge AdaLayerNormQuant into master 修复AdaLayerNormQuant跑UT报错的问题 Created-by: chenhaijie1423 Commit-by: chenhaijie1423 Merged-by: cann-robot Description: ## 描述 修复AdaLayerNormQuant跑UT报错的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4207 ## 测试 只修改了UT,算子本身实现没有修改,UT运行OK ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8147 | 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 | 1 个月前 | |
refactor: rename APIs in ops-nn batch1 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8505 merge rename-api-batch1 into master refactor: rename APIs in ops-nn batch1 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 本 PR 对 ops-nn 仓库中 batch1 涉及的 10 个算子(norm 系列 8 个 + optim 系列 2 个)的 arch35 kernel 头文件进行 API 重命名,将旧版 MicroAPI/Reg-VF 接口名替换为 CANN 新版 SDK 对应的接口名,无任何逻辑改动。 ### 改动原因 CANN 新版 SDK 对 AscendC MicroAPI(351x 架构 Reg 矢量计算层)的接口命名进行了统一调整:统一地址空间限定符、按 Load/Store 方向拆分搬运 API、去废弃前缀。ops-nn 仓库需同步更新以匹配新版 SDK 头文件,避免编译警告/废弃提示,为后续架构迁移和新特性使能扫清障碍。 ### 改动方法 纯机械重命名,涉及 39 个 arch35 kernel 头文件(+2244 -2269),覆盖以下 13 类 API 替换: 1. __local_mem__ → __ubuf__(UB 地址空间限定符,1664 处) 2. DataCopy(Reg load 方向)→ LoadAlign(392 处) 3. DataCopy(Reg store 方向)→ StoreAlign(154 处) 4. ReduceSum → Reduce<ReduceType::SUM>(115 处) 5. MultiCopyConfig / MultiCopyLoopInfo / MultiCopyParams → NdDmaConfig / NdDmaLoopInfo / NdDmaParams 6. DataCopyUnAlignPre → LoadUnAlignPre、DataCopyUnAlign → LoadUnAlign / StoreUnAlign(按方向拆分)、DataCopyUnAlignPost → StoreUnAlignPost 7. UnalignReg → UnalignRegForLoad / UnalignRegForStore(按用途拆分) 8. CompareScalar → Compares(8 处) 9. DataCopyGather → Gather(8 处) 10. MaskAnd → And、MaskOr → Or、MaskPack → Pack(去 Mask 前缀) 11. ReduceMaxWithDataBlock → ReduceDataBlock<ReduceType::MAX>(2 处) GM↔UB 之间的 DataCopy 调用(5 处)保持不变,未被误改。 涉及的 10 个算子: - norm: add_layer_norm、add_layer_norm_quant、add_rms_norm、add_rms_norm_cast、add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_quant、batch_norm - optim: apply_adam_d、apply_adam_w ## 关联的Issue #4718 ## 测试 重命名后各算子需通过编译验证与原有算子精度/性能用例,确认无行为变化。 ## 文档更新 无文档更新。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8505 | 23 天前 | |
AddLayerNormGrad算子实现Ascend 950支持 Co-authored-by: zhaosusu<zhaosusu1@h-partners.com> # message auto-generated for no-merge-commit merge: !7925 merge master into master AddLayerNormGrad算子实现Ascend 950支持 Created-by: zhaosusu Commit-by: zhaosusu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> AddLayerNormGrad算子实现Ascend 950支持,进行性能优化。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4845](https://gitcode.com/cann/ops-nn/issues/4845) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地泛化2000条用例精度通过,性能通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7925 | 16 天前 | |
修正 add_layer_norm_quant 算子形状校验日志中的拼写错误,将 not equat 更正为 not equal Co-authored-by: Chen_HaoWen<chenhaowen12@huawei.com> # message auto-generated for no-merge-commit merge: !8699 merge fix/issue-4532-equal-typo into master 修正 add_layer_norm_quant 算子形状校验日志中的拼写错误,将 not equat 更正为 not equal Created-by: Chen_HaoWen Commit-by: Chen_HaoWen Merged-by: cann-robot Description: ## 修改说明 - 修正 add_layer_norm_quant 算子形状校验日志中的拼写错误,将 not equat 更正为 not equal。 - 同步修正默认 tiling 与 Arch35 tiling 实现中的日志文案。 ## 关联 Issue Refs #4532 ## 验证 - 通过 git diff --check。 - 已确认 C++ 源码中不再残留 not equat。 - 已触发远端编译与门禁检查。 ## 风险 - 仅修改日志文本及文件末尾换行,不改变运行逻辑。 - 本 PR 仅处理 issue 中的拼写项,因此使用 Refs 关联,不自动关闭 issue。 See merge request: cann/ops-nn!8699 | 21 天前 | |
docs: fix errors in aclnn API examples Co-authored-by: Chen_HaoWen<chenhaowen12@huawei.com> # message auto-generated for no-merge-commit merge: !7883 merge docs-fix-md-20260723-master into master docs: fix errors in aclnn API examples Created-by: Chen_HaoWen Commit-by: Chen_HaoWen Merged-by: cann-robot Description: ## 描述 修正 master 分支中 aclnn API 文档及对应 examples 的文本错误,保证文档代码片段与示例源文件一致: - 修正 aclnnAddLayerNormQuantV2 日志中的 aclrtSetDevicefailed 和 Deviceto 拼写问题。 - 将 aclnnInplaceRenorm 调用失败日志中的接口名由 aclnnRenorm 修正为 aclnnInplaceRenorm。 - 修正 aclnnRmsNormQuant 示例中的接口名注释,并移除未使用的 aclScalar 描述。 - 同步更新 3 个文档文件和 3 个 examples 文件,不涉及算子功能逻辑变更。 ## 关联的Issue Closes #4287 ## 测试 - 已执行 git diff --check origin/master...HEAD,检查通过。 - 已定点检查 6 个目标文件,确认旧错误文本不再残留。 - 本次仅修改文档代码片段、日志字符串和注释,未运行算子构建或功能测试。 ## 文档更新 - norm/add_layer_norm_quant_v2/docs/aclnnAddLayerNormQuantV2.md - norm/add_layer_norm_quant_v2/examples/test_aclnn_add_layer_norm_quant_v2.cpp - norm/renorm/docs/aclnnRenorm&aclnnInplaceRenorm.md - norm/renorm/examples/test_aclnn_inplace_renorm.cpp - norm/rms_norm_quant/docs/aclnnRmsNormQuant.md - norm/rms_norm_quant/examples/test_aclnn_rms_norm_quant.cpp ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7883 | 1 个月前 | |
refactor: rename APIs in ops-nn batch1 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8505 merge rename-api-batch1 into master refactor: rename APIs in ops-nn batch1 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 本 PR 对 ops-nn 仓库中 batch1 涉及的 10 个算子(norm 系列 8 个 + optim 系列 2 个)的 arch35 kernel 头文件进行 API 重命名,将旧版 MicroAPI/Reg-VF 接口名替换为 CANN 新版 SDK 对应的接口名,无任何逻辑改动。 ### 改动原因 CANN 新版 SDK 对 AscendC MicroAPI(351x 架构 Reg 矢量计算层)的接口命名进行了统一调整:统一地址空间限定符、按 Load/Store 方向拆分搬运 API、去废弃前缀。ops-nn 仓库需同步更新以匹配新版 SDK 头文件,避免编译警告/废弃提示,为后续架构迁移和新特性使能扫清障碍。 ### 改动方法 纯机械重命名,涉及 39 个 arch35 kernel 头文件(+2244 -2269),覆盖以下 13 类 API 替换: 1. __local_mem__ → __ubuf__(UB 地址空间限定符,1664 处) 2. DataCopy(Reg load 方向)→ LoadAlign(392 处) 3. DataCopy(Reg store 方向)→ StoreAlign(154 处) 4. ReduceSum → Reduce<ReduceType::SUM>(115 处) 5. MultiCopyConfig / MultiCopyLoopInfo / MultiCopyParams → NdDmaConfig / NdDmaLoopInfo / NdDmaParams 6. DataCopyUnAlignPre → LoadUnAlignPre、DataCopyUnAlign → LoadUnAlign / StoreUnAlign(按方向拆分)、DataCopyUnAlignPost → StoreUnAlignPost 7. UnalignReg → UnalignRegForLoad / UnalignRegForStore(按用途拆分) 8. CompareScalar → Compares(8 处) 9. DataCopyGather → Gather(8 处) 10. MaskAnd → And、MaskOr → Or、MaskPack → Pack(去 Mask 前缀) 11. ReduceMaxWithDataBlock → ReduceDataBlock<ReduceType::MAX>(2 处) GM↔UB 之间的 DataCopy 调用(5 处)保持不变,未被误改。 涉及的 10 个算子: - norm: add_layer_norm、add_layer_norm_quant、add_rms_norm、add_rms_norm_cast、add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_quant、batch_norm - optim: apply_adam_d、apply_adam_w ## 关联的Issue #4718 ## 测试 重命名后各算子需通过编译验证与原有算子精度/性能用例,确认无行为变化。 ## 文档更新 无文档更新。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8505 | 23 天前 | |
fix(add_rms_norm_cast): correct doc formula to match kernel implementation Co-authored-by: liangyuhua<liangyuhua4@huawei.com> # message auto-generated for no-merge-commit merge: !8689 merge fix/add_rms_norm_cast_doc_formula into master fix(add_rms_norm_cast): correct doc formula to match kernel implementation Created-by: liangyuhua Commit-by: liangyuhua Merged-by: cann-robot Description: ## 描述 修正 aclnnAddRmsNormCast.md 文档中计算公式的 y1Out/y2Out 计算顺序错误,使其与 kernel 实际实现一致。 当前文档公式写为 y1Out = float(y2Out),即先算 y2Out(b16 RmsNorm 结果)再 cast 到 y1Out(float32)。但实际 kernel 实现(add_rms_norm_cast_regbase_common.h:172-179)是先在 float32 上算出 RmsNorm 结果 y1Out,再 cast 到 b16 得到 y2Out。 修改内容: - 公式:x_i = float(x1) + float(x2) → y1Out = RmsNorm(x_i) → y2Out = cast(y1Out) - y1Out 参数描述:归一化后经过类型转换 → 归一化后的(y1Out 是 RmsNorm 主结果) - y2Out 参数描述:归一化后的 → 归一化后经过类型转换(y2Out 是 cast 结果) ## 关联的Issue 关联 Issue #4796:https://gitcode.com/cann/ops-nn/issues/4796 ## 测试 - pre-commit 全部通过(trailing-whitespace / end-of-file-fixer / codespell / OAT Compliance Check) - 仅修改文档,不涉及代码逻辑变更 ## 文档更新 更新了 norm/add_rms_norm_cast/docs/aclnnAddRmsNormCast.md 的计算公式和参数说明描述。 ## 类型标签 - [x] 文档更新 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8689 | 20 天前 | |
fix(norm): add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、rms_norm_dynamic_mx_quant 四个算子 950(arch35) 路径 VL / UB block 派生化,移除剩余写死常量 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8438 merge pr/vl-ubblock-dynamic-950 into master fix(norm): add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、rms_norm_dynamic_mx_quant 四个算子 950(arch35) 路径 VL / UB block 派生化,移除剩余写死常量 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 按硬编码扫描规则检视 add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_dynamic_quant_v2、rms_norm_dynamic_mx_quant 四个算子,修复 **950(arch35) 路径上剩余的 VL(64/128/256) 与 UB block(32/8) 写死常量**,改为由平台接口 Ops::Base::GetVRegSize() / Ops::Base::GetUbBlockSize() 派生。 **本 PR 严格限定在 950/regbase 路径,不影响 A2/A3。** 平台归属分析: | 改动位置 | 平台归属 | |---|---| | add_rms_norm_dynamic_mx_quant/** | def.cpp 仅注册 ascend950 → 整体 950 专属 | | rms_norm_dynamic_mx_quant/** | def.cpp 仅注册 ascend950 → 整体 950 专属 | | add_rms_norm_dynamic_quant/op_host/arch35/** | 仅 regbase 分支进入;A2/A3 走 op_host/arch22/**,本 PR 未动 | | add_rms_norm_dynamic_quant/op_kernel/arch35/** | 仅 ascend950 config 通过 opFile.value 绑定;A2/A3、kirin 走 op_kernel/*.h,本 PR 未动 | ### 具体改动 **1. add_rms_norm_dynamic_mx_quant** - op_host/..._tiling.h:删除未使用的 B32_BLOCK_NUM = 8;删除 COL_ALIGN_NUM = 64 - op_host/..._tiling_base_arch35.cpp:numColAlign_ 改用 vecLengthFP32_ 对齐(vecLengthFP32_ 在 GetShapeAttrsInfo() 中先于 SetInputParams() 赋值,顺序已确认) - op_kernel/arch35/..._common.h: - OUT_ELE_NUM_ONE_BLK 由 VECTOR_LENGTH / sizeof(half) / 2 派生 - AR_RECOMPUTE_SUM_BUFFER_BYTES 由 UB_BLOCK_SIZE 派生(与 host 侧 cacheBufSize = (cacheId + 1) * ubBlockSize_ 语义一致) - MxQuantComputeScalecuBLAS 中 SixtyFour / ThirtyTwo 两个魔数改为 scaleNumPerLoop = VL_F32 与 mxScaleStride = VL_F32 / 2(同文件 OCP 版本本就是这么写的) **2. add_rms_norm_dynamic_quant(仅 arch35)** - op_host/arch35/..._tiling_arch35.h:TilingParams 新增 ubBlockSize / b32BlockNum / b8BlockNum - op_host/arch35/..._tiling_arch35.cpp:删除 B32_BLOCK_NUM = 8、BLOCK_SIZE = 32,12 处使用点统一改为平台派生值;ONCE_VECTOR_SIZE = 256 按 rule.md §1(明确点名禁止写死)一并删除,改由 LEVEL_MERGE_PARALLEL(=4) * tilingParams.vecLength 推导 —— 950 上 4 × 64 = 256,与原字面量一致 - op_kernel/arch35/..._regbase_common.h:BLOCK_SIZE / B32_BLOCK_NUM / B8_BLOCK_NUM 由 Ops::Base::GetUbBlockSize() 派生;ALIGN_32_FACTOR 派生后与 BLOCK_SIZE 完全同值、名字也不再成立,直接删除,唯一使用点(..._regbase_split_reduce.h 的 calCount)改用 BLOCK_SIZE - op_kernel/arch35/..._regbase_single_row.h:ELEM_PER_REP_FP32 由 V_LENGTH 派生,>>6 / &0x3f 改为除法/取模;AscendC::Max 与 WholeReduceMax 的 repeat stride 字面量 8 改为 BLOCK_PER_REP = VL_SIZE / GetUbBlockSize()。WholeReduceMax 的 (dstRepStride, srcBlkStride, srcRepStride) = (8, 1, 8) 语义**逐参数保持不变** **3. rms_norm_dynamic_mx_quant** - op_kernel/arch35/..._common.h:OUT_ELE_NUM_ONE_BLK 由 VL_B16 / 2 派生 **4. add_rms_norm_dynamic_quant_v2** - op_host/arch35 与 op_kernel/arch35 扫描无写死项,**未改动** ### 未改动、判为可接受或需人工确认的项 | 项 | 判断依据 | |---|---| | MX_BLOCK_SIZE_32 / MX_BLOCK_SIZE_DOUBLE | MX 量化协议块大小,非 UB block | | ALIGN_FACTOR_512 / ALING_FACTOR_512 / RETAINED_SIZE_256 | cacheline / UB 预留 | | ULONG_BIT_LEN = 64、CONST_SIXTY_THREE = 63 | __builtin_clzl 位宽,非 VL | | CONST_EIGHT / CONST_SIXTEEN / CONST_THIRTY_TWO | 向上取 2 的幂的移位量 | | ROW_FACTOR = 128、baseN_{64}、baseM_{128}、MAX_DIM_CNT | tiling 策略起点值 / shape 维度上限,属功能常量 | ### 残留风险(本 PR 未消除,需后续整改) host 侧 levelbuf 预算改为派生后,它与 kernel 侧两个仍写死为 256 的常量之间形成了一个 **没有任何编译期检查兜底**的三方相等关系: | 常量 | 位置 | 作用 | 能否在本 PR 内改 | |---|---|---|---| | 本 PR 的 LEVEL_MERGE_PARALLEL * vecLength | add_rms_norm_dynamic_quant/op_host/arch35 | UB 预算 | 已改为派生 | | RmsNorm::ONCE_VECTOR_SIZE | norm/rms_norm/op_kernel/rms_norm_base.h:48 | level1/2/3Buf_ 的 InitBuffer 尺寸 | **否** —— 该头文件被 A2/A3 kernel include,rms_norm_base.h:187 在 __CCE_AICORE__ == 220 路径上把它当 repStride 用,改动会溢出到 A2/A3 | | NormCommon::ONCE_VECTOR_SIZE | norm_common/op_kernel/reduce_common_regbase.h:71 | 传给 LevelMergeRstd 的 count 与分支阈值 | 技术上可以(arch35 专属),但被约 15 个 norm 算子的 arch35 kernel 共用,回归面远超本 PR | 950 上三者都是 256,行为无变化。方向性风险:若后续平台 VRegSize < 256B,host 侧会**低估** level buffer 的 UB 占用。已在 host 侧注释中把这条不变量和两个字面量的位置写明,留待 rms_norm / norm_common 侧统一整改时一并消除。 ## 关联的Issue #4662 ## 测试 - 所有新引入的 constexpr 派生表达式抽出到独立 static_assert 程序校验:在 950 参数(VRegSize = 256 B,UB block = 32 B)下取值与原字面量**逐个完全一致**(64 / 128 / 256 / 32 / 8) - add_rms_norm_dynamic_quant 全量编译(host + arch35 kernel,dav-3510 后端)通过,**零 error**,binary 正常产出并部署 - **未跑 TTK / 真机**:本 PR 所有改动均为取值不变的等价替换,建议合入前仍补一轮 arch35 的 ST/TTK ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码可移植性整改(去除 VL / UB block 硬编码) ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8438 | 21 天前 | |
fix(norm): add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、rms_norm_dynamic_mx_quant 四个算子 950(arch35) 路径 VL / UB block 派生化,移除剩余写死常量 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8438 merge pr/vl-ubblock-dynamic-950 into master fix(norm): add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、rms_norm_dynamic_mx_quant 四个算子 950(arch35) 路径 VL / UB block 派生化,移除剩余写死常量 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 按硬编码扫描规则检视 add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_dynamic_quant_v2、rms_norm_dynamic_mx_quant 四个算子,修复 **950(arch35) 路径上剩余的 VL(64/128/256) 与 UB block(32/8) 写死常量**,改为由平台接口 Ops::Base::GetVRegSize() / Ops::Base::GetUbBlockSize() 派生。 **本 PR 严格限定在 950/regbase 路径,不影响 A2/A3。** 平台归属分析: | 改动位置 | 平台归属 | |---|---| | add_rms_norm_dynamic_mx_quant/** | def.cpp 仅注册 ascend950 → 整体 950 专属 | | rms_norm_dynamic_mx_quant/** | def.cpp 仅注册 ascend950 → 整体 950 专属 | | add_rms_norm_dynamic_quant/op_host/arch35/** | 仅 regbase 分支进入;A2/A3 走 op_host/arch22/**,本 PR 未动 | | add_rms_norm_dynamic_quant/op_kernel/arch35/** | 仅 ascend950 config 通过 opFile.value 绑定;A2/A3、kirin 走 op_kernel/*.h,本 PR 未动 | ### 具体改动 **1. add_rms_norm_dynamic_mx_quant** - op_host/..._tiling.h:删除未使用的 B32_BLOCK_NUM = 8;删除 COL_ALIGN_NUM = 64 - op_host/..._tiling_base_arch35.cpp:numColAlign_ 改用 vecLengthFP32_ 对齐(vecLengthFP32_ 在 GetShapeAttrsInfo() 中先于 SetInputParams() 赋值,顺序已确认) - op_kernel/arch35/..._common.h: - OUT_ELE_NUM_ONE_BLK 由 VECTOR_LENGTH / sizeof(half) / 2 派生 - AR_RECOMPUTE_SUM_BUFFER_BYTES 由 UB_BLOCK_SIZE 派生(与 host 侧 cacheBufSize = (cacheId + 1) * ubBlockSize_ 语义一致) - MxQuantComputeScalecuBLAS 中 SixtyFour / ThirtyTwo 两个魔数改为 scaleNumPerLoop = VL_F32 与 mxScaleStride = VL_F32 / 2(同文件 OCP 版本本就是这么写的) **2. add_rms_norm_dynamic_quant(仅 arch35)** - op_host/arch35/..._tiling_arch35.h:TilingParams 新增 ubBlockSize / b32BlockNum / b8BlockNum - op_host/arch35/..._tiling_arch35.cpp:删除 B32_BLOCK_NUM = 8、BLOCK_SIZE = 32,12 处使用点统一改为平台派生值;ONCE_VECTOR_SIZE = 256 按 rule.md §1(明确点名禁止写死)一并删除,改由 LEVEL_MERGE_PARALLEL(=4) * tilingParams.vecLength 推导 —— 950 上 4 × 64 = 256,与原字面量一致 - op_kernel/arch35/..._regbase_common.h:BLOCK_SIZE / B32_BLOCK_NUM / B8_BLOCK_NUM 由 Ops::Base::GetUbBlockSize() 派生;ALIGN_32_FACTOR 派生后与 BLOCK_SIZE 完全同值、名字也不再成立,直接删除,唯一使用点(..._regbase_split_reduce.h 的 calCount)改用 BLOCK_SIZE - op_kernel/arch35/..._regbase_single_row.h:ELEM_PER_REP_FP32 由 V_LENGTH 派生,>>6 / &0x3f 改为除法/取模;AscendC::Max 与 WholeReduceMax 的 repeat stride 字面量 8 改为 BLOCK_PER_REP = VL_SIZE / GetUbBlockSize()。WholeReduceMax 的 (dstRepStride, srcBlkStride, srcRepStride) = (8, 1, 8) 语义**逐参数保持不变** **3. rms_norm_dynamic_mx_quant** - op_kernel/arch35/..._common.h:OUT_ELE_NUM_ONE_BLK 由 VL_B16 / 2 派生 **4. add_rms_norm_dynamic_quant_v2** - op_host/arch35 与 op_kernel/arch35 扫描无写死项,**未改动** ### 未改动、判为可接受或需人工确认的项 | 项 | 判断依据 | |---|---| | MX_BLOCK_SIZE_32 / MX_BLOCK_SIZE_DOUBLE | MX 量化协议块大小,非 UB block | | ALIGN_FACTOR_512 / ALING_FACTOR_512 / RETAINED_SIZE_256 | cacheline / UB 预留 | | ULONG_BIT_LEN = 64、CONST_SIXTY_THREE = 63 | __builtin_clzl 位宽,非 VL | | CONST_EIGHT / CONST_SIXTEEN / CONST_THIRTY_TWO | 向上取 2 的幂的移位量 | | ROW_FACTOR = 128、baseN_{64}、baseM_{128}、MAX_DIM_CNT | tiling 策略起点值 / shape 维度上限,属功能常量 | ### 残留风险(本 PR 未消除,需后续整改) host 侧 levelbuf 预算改为派生后,它与 kernel 侧两个仍写死为 256 的常量之间形成了一个 **没有任何编译期检查兜底**的三方相等关系: | 常量 | 位置 | 作用 | 能否在本 PR 内改 | |---|---|---|---| | 本 PR 的 LEVEL_MERGE_PARALLEL * vecLength | add_rms_norm_dynamic_quant/op_host/arch35 | UB 预算 | 已改为派生 | | RmsNorm::ONCE_VECTOR_SIZE | norm/rms_norm/op_kernel/rms_norm_base.h:48 | level1/2/3Buf_ 的 InitBuffer 尺寸 | **否** —— 该头文件被 A2/A3 kernel include,rms_norm_base.h:187 在 __CCE_AICORE__ == 220 路径上把它当 repStride 用,改动会溢出到 A2/A3 | | NormCommon::ONCE_VECTOR_SIZE | norm_common/op_kernel/reduce_common_regbase.h:71 | 传给 LevelMergeRstd 的 count 与分支阈值 | 技术上可以(arch35 专属),但被约 15 个 norm 算子的 arch35 kernel 共用,回归面远超本 PR | 950 上三者都是 256,行为无变化。方向性风险:若后续平台 VRegSize < 256B,host 侧会**低估** level buffer 的 UB 占用。已在 host 侧注释中把这条不变量和两个字面量的位置写明,留待 rms_norm / norm_common 侧统一整改时一并消除。 ## 关联的Issue #4662 ## 测试 - 所有新引入的 constexpr 派生表达式抽出到独立 static_assert 程序校验:在 950 参数(VRegSize = 256 B,UB block = 32 B)下取值与原字面量**逐个完全一致**(64 / 128 / 256 / 32 / 8) - add_rms_norm_dynamic_quant 全量编译(host + arch35 kernel,dav-3510 后端)通过,**零 error**,binary 正常产出并部署 - **未跑 TTK / 真机**:本 PR 所有改动均为取值不变的等价替换,建议合入前仍补一轮 arch35 的 ST/TTK ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码可移植性整改(去除 VL / UB block 硬编码) ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8438 | 21 天前 | |
AddRmsNormDynamicQuant support int4 / AddRmsNormDynamicQuantV2 support Ascend 950 Co-authored-by: liiu-qii<liuqi330@huawei.com> # message auto-generated for no-merge-commit merge: !8125 merge dev_ardq_v1 into master AddRmsNormDynamicQuant support int4 / AddRmsNormDynamicQuantV2 support Ascend 950 Created-by: liiu-qii Commit-by: liiu-qii Merged-by: cann-robot Description: ## 描述 AddRmsNormDynamicQuantV1算子:1、支持output_mask控制输出逻辑,逻辑与A2/A3逻辑对齐;2、支持int4输出类型;3、tiling UT整改; AddRmsNormDynamicQuantV2算子:1、支持Ascend 950 实现;2、迁移 fussion_pass; ## 关联的Issue [#4479](https://gitcode.com/cann/ops-nn/issues/4479) ## 测试 已编包验证所有涉及通路:1、已有守护用例;2、新增功能用例;3、冒烟通过; ## 文档更新 1、修改AddRmsNormDynamicQuant算子aclnnAddRmsNormDynamicQuant.md、aclnnAddRmsNormDynamicQuantV2.md和README.md文档; 2、修改AddRmsNormDynamicQuantV2算子的READEME.md文档。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8125 | 1 个月前 | |
fix(norm): AddRmsNormQuant / RmsNormQuantV2 arch35 tiling/kernel 去除 UB block 与 VL 硬编码 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8436 merge fix/norm-regbase-vl-hardcode into master fix(norm): AddRmsNormQuant / RmsNormQuantV2 arch35 tiling/kernel 去除 UB block 与 VL 硬编码 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 AddRmsNormQuant / RmsNormQuantV2 的 **regbase(arch35) 路径**把一批平台参数写成了字面量:UB block 大小(32B)、一个 block 容纳的 b32/b8 元素数(8/32)、一次向量操作长度(256B)、全载上限(16384)、align space(256B)。本 PR 改为从平台接口推导: - host 侧: Ops::Base::GetUbBlockSize(context) / Ops::Base::GetVRegSize(context) - kernel 侧:platform::GetUbBlockSize() / GetVRegSize() **当前平台这两个接口返回 32B / 256B,因此本次改动数值全等价,无行为变更:** | 原字面量 | 改后表达式 | 值 | |---|---|---| | R_MAX_VALUE = 16384 | 2 * vecLength * vecLength * 2 | 16384 | | LEVEL_BUFFER_CNT * ONCE_VECTOR_SIZE * sizeof(float) | 3 * 2 * 2 * vecLength * sizeof(float) | 3072 | | B32_BLOCK_NUM * sizeof(float) | ubBlockSize | 32 | | ALIGN_SPACE = 256 | ALIGN_SPACE_BLOCK_NUM * ubBlockSize | 256 | 目的是 UB block 或 VL 变化时不必再逐处翻找字面量。 另外把 kernel 侧 align 成员的默认初值由 32 改为 0,避免 tiling 未下发时静默回落到一个硬编码值。 ## 范围 **只涉及 arch35 / regbase 路径,910 / 310 的 tiling 与 kernel 未触碰。** 本 PR 与 dtype 组合校验的整改(另一个 PR:fix/norm-dtype-check-binary-json)在语义上完全独立,逐 hunk 无交叉;两者已本地验证可无冲突合并,合入顺序不限。 ## 关联的Issue #4663 ## 测试 本地 UT(build.sh -u --ophost --opapi --soc=ascend950,5 个算子): - op_host:69 passed - op_api:25 passed 因本 PR 数值全等价,UT 结果与 baseline 一致,未新增/修改任何用例。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:去除平台参数硬编码,行为等价的可维护性重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8436 | 21 天前 | |
code check Co-authored-by: cai-chengchao<caichengchao1@h-partners.com> # message auto-generated for no-merge-commit merge: !8384 merge code_check_0807 into master code check Created-by: cai-chengchao Commit-by: cai-chengchao 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!8384 | 25 天前 | |
算子插件迁移 Co-authored-by: welt_lester<songlizhe1@h-partners.com> Co-authored-by: x00842564<xuyanke@huawei.com> # message auto-generated for no-merge-commit merge: !8474 merge master into master 算子插件迁移 Created-by: welt_lester Commit-by: x00842564;welt_lester Merged-by: cann-robot Description: ## 描述 落实issue #4279,将adaptive_avg_pool2d、adaptive_max_pool2d、ascend_anti_quant、ascend_dequant、ascend_quant、batch_mat_mul_v3、batch_norm、celu_v2、instance_norm_v3、ascend_quant、log_softmax_v2、mat_mul_v3、unique_with_counts_and_sorting这13个算子对应的插件从common\src\framework迁出到各自算子目录新建的\framework目录下。 ## 关联的Issue [Bug-Report|缺陷反馈]: 有对应算子的插件不应该放到公共目录 [#4279](https://gitcode.com/cann/ops-nn/issues/4279) ## 测试 compile、本地验证build通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码重构(算子插件归属迁移,落实 #4279 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8474 | 18 天前 | |
docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !8709 merge fix-bn-groupnorm-deterministic-doc into master docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 修改内容 修正 aclnnBatchNorm、aclnnBatchNormElemt、aclnnBatchNormBackward、aclnnGroupNormBackward、aclnnRmsNormGrad、aclnnRmsNormGradQuant 六个算子文档中 A5(Ascend 950) 确定性计算描述与代码实际行为不符的问题。 close #4890 ## 问题分析 原描述为「默认非确定性实现,支持通过 aclrtCtxSetSysParamOpt 开启确定性」,未区分芯片版本。代码核查表明: A5(Ascend 950) 的 arch35/regbase kernel 使用 SyncAll 做核间同步,无 SetAtomicAdd;regbase tiling 不检查 GetDeterministic(),不读取 aclrtCtxSetSysParamOpt 设置。因此 A5 实际为默认确定性实现,且不支持通过 aclrtCtxSetSysParamOpt 开启确定性。 ## 代码依据 | 算子 | A5 GetDeterministic() | A5 SetAtomicAdd | A5 同步机制 | |------|-----------------------|-----------------|-------------| | aclnnBatchNorm | 否 | 否 | SyncAll | | aclnnBatchNormElemt | 否 | 否 | 无跨核归约 | | aclnnBatchNormBackward | 否 | 否 | SyncAll | | aclnnGroupNormBackward | 否 | 是(workspace写入) | SyncAll+二分树归约 | | aclnnRmsNormGrad | 否 | 否 | SyncAll | | aclnnRmsNormGradQuant | 否 | 否 | 无跨核归约 | > GroupNormBackward A5 虽使用 SetAtomicAdd 写 workspace,但 SPLIT_COUNT=2 保证每个 workspace slot 仅 2 个核写入,浮点加法交换律(a+b==b+a)保证结果确定;stage2 用 SyncAll + 二分树归约,最终输出无 atomic add。 ## 修改方案 仅修改 A5(Ascend 950) 描述,区分芯片版本描述: | 算子 | A5 描述 | |------|---------| | aclnnBatchNorm | → 默认确定性实现 | | aclnnBatchNormElemt | → 默认确定性实现 | | aclnnBatchNormBackward | → 默认确定性实现 | | aclnnGroupNormBackward | → 默认确定性实现 | | aclnnRmsNormGrad | → 默认确定性实现 | | aclnnRmsNormGradQuant | → 默认确定性实现 | ## 涉及文件 - norm/batch_norm_v3/docs/aclnnBatchNorm.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_elemt/docs/aclnnBatchNormElemt.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_grad_v3/docs/aclnnBatchNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/group_norm_grad/docs/aclnnGroupNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad/docs/aclnnRmsNormGrad.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad_quant/docs/aclnnRmsNormGradQuant.md — 仅 A5 支持,改为默认确定性实现 - docs/zh/op_api_list.md — 同步修正上述 6 个算子的 A5 列 See merge request: cann/ops-nn!8709 | 17 天前 | |
refactor: rename APIs in ops-nn batch2 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8567 merge rename-api-batch2 into master refactor: rename APIs in ops-nn batch2 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 对 ops-nn 仓 10 个算子的 arch35 kernel 进行 AscendC MicroAPI 重命名整改,涉及以下 API 映射: - __local_mem__ → __ubuf__(地址空间限定符) - DataCopy(load 方向) → LoadAlign - DataCopy(store 方向) → StoreAlign - ReduceSum → Reduce<ReduceType::SUM> - ReduceMax → Reduce<ReduceType::MAX> - Copy → Move - DataCopyGather → Gather - UnalignReg → UnalignRegForStore / UnalignRegForLoad 涉及算子(10 个): - activation/clipped_swiglu - activation/confusion_softmax_grad - index/broadcast_gradient_args - loss/binary_cross_entropy - loss/cross_entropy_loss - loss/cross_entropy_loss_grad - norm/batch_norm_grad - norm/batch_norm_grad_v3 - norm/batch_norm_v3 - quant/dequant_swiglu_quant 共修改 53 个 arch35 kernel 头文件,纯 API 重命名,无逻辑变更。 ## 关联的Issue ## 测试 纯 API 重命名整改,编译验证通过;无新增测试用例。 ## 文档更新 无需更新文档。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8567 | 21 天前 | |
docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !8709 merge fix-bn-groupnorm-deterministic-doc into master docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 修改内容 修正 aclnnBatchNorm、aclnnBatchNormElemt、aclnnBatchNormBackward、aclnnGroupNormBackward、aclnnRmsNormGrad、aclnnRmsNormGradQuant 六个算子文档中 A5(Ascend 950) 确定性计算描述与代码实际行为不符的问题。 close #4890 ## 问题分析 原描述为「默认非确定性实现,支持通过 aclrtCtxSetSysParamOpt 开启确定性」,未区分芯片版本。代码核查表明: A5(Ascend 950) 的 arch35/regbase kernel 使用 SyncAll 做核间同步,无 SetAtomicAdd;regbase tiling 不检查 GetDeterministic(),不读取 aclrtCtxSetSysParamOpt 设置。因此 A5 实际为默认确定性实现,且不支持通过 aclrtCtxSetSysParamOpt 开启确定性。 ## 代码依据 | 算子 | A5 GetDeterministic() | A5 SetAtomicAdd | A5 同步机制 | |------|-----------------------|-----------------|-------------| | aclnnBatchNorm | 否 | 否 | SyncAll | | aclnnBatchNormElemt | 否 | 否 | 无跨核归约 | | aclnnBatchNormBackward | 否 | 否 | SyncAll | | aclnnGroupNormBackward | 否 | 是(workspace写入) | SyncAll+二分树归约 | | aclnnRmsNormGrad | 否 | 否 | SyncAll | | aclnnRmsNormGradQuant | 否 | 否 | 无跨核归约 | > GroupNormBackward A5 虽使用 SetAtomicAdd 写 workspace,但 SPLIT_COUNT=2 保证每个 workspace slot 仅 2 个核写入,浮点加法交换律(a+b==b+a)保证结果确定;stage2 用 SyncAll + 二分树归约,最终输出无 atomic add。 ## 修改方案 仅修改 A5(Ascend 950) 描述,区分芯片版本描述: | 算子 | A5 描述 | |------|---------| | aclnnBatchNorm | → 默认确定性实现 | | aclnnBatchNormElemt | → 默认确定性实现 | | aclnnBatchNormBackward | → 默认确定性实现 | | aclnnGroupNormBackward | → 默认确定性实现 | | aclnnRmsNormGrad | → 默认确定性实现 | | aclnnRmsNormGradQuant | → 默认确定性实现 | ## 涉及文件 - norm/batch_norm_v3/docs/aclnnBatchNorm.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_elemt/docs/aclnnBatchNormElemt.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_grad_v3/docs/aclnnBatchNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/group_norm_grad/docs/aclnnGroupNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad/docs/aclnnRmsNormGrad.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad_quant/docs/aclnnRmsNormGradQuant.md — 仅 A5 支持,改为默认确定性实现 - docs/zh/op_api_list.md — 同步修正上述 6 个算子的 A5 列 See merge request: cann/ops-nn!8709 | 17 天前 | |
docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !8709 merge fix-bn-groupnorm-deterministic-doc into master docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 修改内容 修正 aclnnBatchNorm、aclnnBatchNormElemt、aclnnBatchNormBackward、aclnnGroupNormBackward、aclnnRmsNormGrad、aclnnRmsNormGradQuant 六个算子文档中 A5(Ascend 950) 确定性计算描述与代码实际行为不符的问题。 close #4890 ## 问题分析 原描述为「默认非确定性实现,支持通过 aclrtCtxSetSysParamOpt 开启确定性」,未区分芯片版本。代码核查表明: A5(Ascend 950) 的 arch35/regbase kernel 使用 SyncAll 做核间同步,无 SetAtomicAdd;regbase tiling 不检查 GetDeterministic(),不读取 aclrtCtxSetSysParamOpt 设置。因此 A5 实际为默认确定性实现,且不支持通过 aclrtCtxSetSysParamOpt 开启确定性。 ## 代码依据 | 算子 | A5 GetDeterministic() | A5 SetAtomicAdd | A5 同步机制 | |------|-----------------------|-----------------|-------------| | aclnnBatchNorm | 否 | 否 | SyncAll | | aclnnBatchNormElemt | 否 | 否 | 无跨核归约 | | aclnnBatchNormBackward | 否 | 否 | SyncAll | | aclnnGroupNormBackward | 否 | 是(workspace写入) | SyncAll+二分树归约 | | aclnnRmsNormGrad | 否 | 否 | SyncAll | | aclnnRmsNormGradQuant | 否 | 否 | 无跨核归约 | > GroupNormBackward A5 虽使用 SetAtomicAdd 写 workspace,但 SPLIT_COUNT=2 保证每个 workspace slot 仅 2 个核写入,浮点加法交换律(a+b==b+a)保证结果确定;stage2 用 SyncAll + 二分树归约,最终输出无 atomic add。 ## 修改方案 仅修改 A5(Ascend 950) 描述,区分芯片版本描述: | 算子 | A5 描述 | |------|---------| | aclnnBatchNorm | → 默认确定性实现 | | aclnnBatchNormElemt | → 默认确定性实现 | | aclnnBatchNormBackward | → 默认确定性实现 | | aclnnGroupNormBackward | → 默认确定性实现 | | aclnnRmsNormGrad | → 默认确定性实现 | | aclnnRmsNormGradQuant | → 默认确定性实现 | ## 涉及文件 - norm/batch_norm_v3/docs/aclnnBatchNorm.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_elemt/docs/aclnnBatchNormElemt.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_grad_v3/docs/aclnnBatchNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/group_norm_grad/docs/aclnnGroupNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad/docs/aclnnRmsNormGrad.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad_quant/docs/aclnnRmsNormGradQuant.md — 仅 A5 支持,改为默认确定性实现 - docs/zh/op_api_list.md — 同步修正上述 6 个算子的 A5 列 See merge request: cann/ops-nn!8709 | 17 天前 | |
BNInferGrad算子问题修复 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !8302 merge bn_infer_grad into master BNInferGrad算子问题修复 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 本 PR 修复 BNInferGrad 在转测准入检查中发现的 Golden、数据格式、Shape/Rank 异常拦截及 UT 构建问题,并按 runtime proto.h 的数据格式语义完善 Ascend950 实现。 主要修改: - 对齐格式契约:原型逻辑格式支持 NCHW、NHWC、NC1HWC0;Ascend950 Vector 分支仅支持属于 ND 类格式的 NCHW、NHWC,并显式拒绝 NC1HWC0。 - 按数据格式识别 C 轴:NCHW 取第 2 维,NHWC 取最后一维;校验 scale、batch_variance 均为一维 FP32 Tensor,且长度等于 C 轴大小。 - 完善 Tiling 输入/输出校验:拦截不支持的 dtype/format、输入间格式不一致、输出 shape/dtype/format 与 grads 不一致,以及 grads rank 不在 2~5 范围内等异常场景。 - 修复空 Tensor Golden:空输入直接返回同 shape、同 dtype 的空输出,避免调用 PyTorch BatchNorm backward 时出现异常。 - 更新 NCHW/NHWC GEIR 示例、Tiling UT、README,并修复 op_host UT CMake 对 arch35 用例的收集问题。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4595 ## 测试 - bash build.sh -u --cov --ophost -f pr_filelist.txt -j16:通过 - Ascend950 Tiling UT:29/29 通过 - InferShape UT:3/3 通过 - 行覆盖率:87.5%(537/614) - 函数覆盖率:92.9%(144/155) - 静态 GEIR:NCHW FP16、NHWC BF16 场景通过 - 动态 GEIR:动态 Shape、动态 Rank 场景通过 - git diff --check:通过 - PR 当前检查状态:api-check-pass、ci-pipeline-passed ## 文档更新 - 更新 norm/bn_infer_grad/README.md,补充原型格式、Ascend950 Vector 格式限制、C 轴规则及输出约束。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8302 | 29 天前 | |
BatchNormReduce算子在ascend 950 NPU上支持ascendc实现 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !8543 merge bn_training_reduce into master BatchNormReduce算子在ascend 950 NPU上支持ascendc实现 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 本 PR 为 BNTrainingReduce 算子在 Ascend 950PR/Ascend 950DT(arch35)新增 AscendC 实现。算子对四维 NCHW 输入沿 N、H、W 轴归约,按通道输出元素和 sum 与平方和 square_sum。 主要改动: - 新增 BNTrainingReduce 算子原型、OpDef 注册及图级 InferShape/InferDataType;输入支持 FLOAT16、BFLOAT16、FLOAT + NCHW,两个输出固定为 FLOAT + ND,Shape 为 [C]。 - 新增 arch35 Host Tiling,实现基于 Shape、DType、UB 容量和核数的多核切分,覆盖 normal、group、tail 和 empty 等执行分支。 - 新增 AscendC Kernel,实现 sum_c = Σ(n,h,w) x[n,c,h,w] 与 square_sum_c = Σ(n,h,w) x[n,c,h,w]^2;FLOAT16/BFLOAT16 输入按 FLOAT 精度执行平方与累加,并处理空 Tensor。 - 调整 ACLNN 文件目录与构建配置,新增 Ascend 950 ACLNN 两段式调用示例。 - 新增 GEIR 静态/动态 Shape、未知 Rank、数据类型/格式/非法输入及特殊值场景的验证代码。 - 更新算子 README、aclnnBatchNormReduce 产品支持说明和中英文算子清单。 本次变更共涉及 27 个文件,新增 6373 行、删除 33 行。 ## 关联的Issue 关联 Issue #4715:https://gitcode.com/cann/ops-nn/issues/4715 ## 测试 已补充以下验证资产: - ACLNN:新增 aclnnBatchNormReduceGetWorkspaceSize + aclnnBatchNormReduce 两段式调用示例。 - GEIR:新增静态/动态 Shape 与未知 Rank 执行框架,覆盖 FLOAT16、BFLOAT16、FLOAT、NCHW 输入、FLOAT/ND 输出、空 Tensor、NaN/Inf 及非法 Rank/Format/DType 等场景。 - Host/API UT:同步修正 ACLNN UT 的 include 路径以适配目录调整。 当前 PR 描述未附可独立核对的全量执行报告;最终结果以仓库 CI、复测记录及未解决检视意见闭环为准。 ## 文档更新 - 更新 norm/bn_training_reduce/README.md,补充功能、公式、参数、约束和调用说明。 - 更新 norm/bn_training_reduce/docs/aclnnBatchNormReduce.md,声明 Ascend 950PR/Ascend 950DT 支持。 - 更新 docs/zh/op_api_list.md、docs/zh/op_list.md 及对应英文算子清单。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8543 | 17 天前 | |
[bugfix] 修复bn_training_update_v2算子资料格式问题 Co-authored-by: justsheldon<taoxudong@huawei.com> # message auto-generated for no-merge-commit merge: !8766 merge master into master [bugfix] 修复bn_training_update_v2算子资料格式问题 Created-by: justsheldon Commit-by: justsheldon Merged-by: cann-robot Description: ## 描述 修复bn_training_update_v2算子资料格式问题,将html中不兼容md格式的 x调整为<code>x</code> <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 仅资料格式修改,不涉及测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了ops-nn/norm/bn_training_update_v2/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8766 | 18 天前 | |
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 | 1 个月前 | |
test: 更新7个算子golden测试数据 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !8510 merge master into master test: 更新7个算子golden测试数据 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 7 个算子的 golden(准确度基准)测试数据,同步最新参考值。 | 模块 | 算子 | 文件 | 变化 | |------|------|------|------| | loss | cosine_embedding_loss | golden.py | +56 | | loss | fused_cross_entropy_loss_with_max_sum | golden.py | +145 | | norm | deep_norm | golden.py | +59 | | norm | deep_norm_grad | golden.py | +77 | | optim | apply_adam_w_quant | golden.py | +68 | | quant | dynamic_quant_update_scatter | golden.py | +54 | | quant | dynamic_quant_update_scatter_v2 | golden.py | +56 | ## 测试 - CI golden 数据一致性验证 ## 类型标签 - [x] 测试 ## 关联的Issue - #4683 See merge request: cann/ops-nn!8510 | 24 天前 | |
test: 更新deep_norm_grad等4个算子golden测试数据 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !8582 merge codex/golden-upstream-rebased into master test: 更新deep_norm_grad等4个算子golden测试数据 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 4 个算子的 golden 测试数据。 | 算子 | 变化 | |------|------| | deep_norm_grad | +61 -4 | | apply_adam_w_quant | +113 -28 | | dynamic_quant_update_scatter | +3 -3 | | dynamic_quant_update_scatter_v2 | +6 -2 | ## 类型标签 - [x] 测试 ## 关联的Issue - #4730 See merge request: cann/ops-nn!8582 | 23 天前 | |
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 | 1 个月前 | |
EuclideanNorm,AscendAntiQuant 资料增加A2/A3的支持 | 16 天前 | |
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 | 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 | 1 个月前 | |
docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !8709 merge fix-bn-groupnorm-deterministic-doc into master docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 修改内容 修正 aclnnBatchNorm、aclnnBatchNormElemt、aclnnBatchNormBackward、aclnnGroupNormBackward、aclnnRmsNormGrad、aclnnRmsNormGradQuant 六个算子文档中 A5(Ascend 950) 确定性计算描述与代码实际行为不符的问题。 close #4890 ## 问题分析 原描述为「默认非确定性实现,支持通过 aclrtCtxSetSysParamOpt 开启确定性」,未区分芯片版本。代码核查表明: A5(Ascend 950) 的 arch35/regbase kernel 使用 SyncAll 做核间同步,无 SetAtomicAdd;regbase tiling 不检查 GetDeterministic(),不读取 aclrtCtxSetSysParamOpt 设置。因此 A5 实际为默认确定性实现,且不支持通过 aclrtCtxSetSysParamOpt 开启确定性。 ## 代码依据 | 算子 | A5 GetDeterministic() | A5 SetAtomicAdd | A5 同步机制 | |------|-----------------------|-----------------|-------------| | aclnnBatchNorm | 否 | 否 | SyncAll | | aclnnBatchNormElemt | 否 | 否 | 无跨核归约 | | aclnnBatchNormBackward | 否 | 否 | SyncAll | | aclnnGroupNormBackward | 否 | 是(workspace写入) | SyncAll+二分树归约 | | aclnnRmsNormGrad | 否 | 否 | SyncAll | | aclnnRmsNormGradQuant | 否 | 否 | 无跨核归约 | > GroupNormBackward A5 虽使用 SetAtomicAdd 写 workspace,但 SPLIT_COUNT=2 保证每个 workspace slot 仅 2 个核写入,浮点加法交换律(a+b==b+a)保证结果确定;stage2 用 SyncAll + 二分树归约,最终输出无 atomic add。 ## 修改方案 仅修改 A5(Ascend 950) 描述,区分芯片版本描述: | 算子 | A5 描述 | |------|---------| | aclnnBatchNorm | → 默认确定性实现 | | aclnnBatchNormElemt | → 默认确定性实现 | | aclnnBatchNormBackward | → 默认确定性实现 | | aclnnGroupNormBackward | → 默认确定性实现 | | aclnnRmsNormGrad | → 默认确定性实现 | | aclnnRmsNormGradQuant | → 默认确定性实现 | ## 涉及文件 - norm/batch_norm_v3/docs/aclnnBatchNorm.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_elemt/docs/aclnnBatchNormElemt.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_grad_v3/docs/aclnnBatchNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/group_norm_grad/docs/aclnnGroupNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad/docs/aclnnRmsNormGrad.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad_quant/docs/aclnnRmsNormGradQuant.md — 仅 A5 支持,改为默认确定性实现 - docs/zh/op_api_list.md — 同步修正上述 6 个算子的 A5 列 See merge request: cann/ops-nn!8709 | 17 天前 | |
refactor: EXEC_OPAPI_CMD 迁移为 CANN_OPS_OPB_SYN_EXEC_ACLNN 并升级 opbase Co-authored-by: yuyuanfeng<yuyuanfeng1@huawei.com> # message auto-generated for no-merge-commit merge: !8648 merge master into master refactor: EXEC_OPAPI_CMD 迁移为 CANN_OPS_OPB_SYN_EXEC_ACLNN 并升级 opbase Created-by: yuyuanfeng Commit-by: yuyuanfeng Merged-by: cann-robot Description: ## 描述 将 6 个 fallback 算子从旧宏 EXEC_OPAPI_CMD 迁移到 opbase 新宏 CANN_OPS_OPB_SYN_EXEC_ACLNN(显式传入 ctx 首参),并升级 opbase 依赖以引入新宏。 改动原因: - opbase 已将 EXEC_OPAPI_CMD 参数化并重命名为 CANN_OPS_OPB_SYN_EXEC_ACLNN(旧宏仅保留一行转发兼容),跟随 opbase 接口演进,显式传入 ctx。 改动方法: - 6 个算子的 op_graph fallback 实现统一改为 CANN_OPS_OPB_SYN_EXEC_ACLNN(ctx, ...):foreach_add_list、scatter_list、group_norm_silu、trans_quant_param_v2、quant_batch_matmul_inplace_add、quant_batch_matmul_v3 - cmake/third_party/opbase.cmake 中 OPBASE_TAG_ID 由 bd20a12e 升级至 40cc7bed ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4782 ## 测试 本地编译 6 个算子验证(ascend910b) ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:重构/接口迁移 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8648 | 21 天前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 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 | 29 天前 | |
modified md files (update product labels) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !8256 merge master into master modified md files (update product labels) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Update product labels. ## 关联的Issue [#4574](https://gitcode.com/cann/ops-nn/issues/4574) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 norm/group_norm_swish_grad/docs/aclnnGroupNormSwishGrad.md norm/rms_norm_quant_v3/docs/aclnnRmsNormQuantV3.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8256 | 1 个月前 | |
feat: softmax/group_norm 系列算子添加 FormatAgnostic 格式匹配模式并重构 softmax_grad 编译信息获取接口 Co-authored-by: zhuzixian-lr<zhuzixian1@h-partners.com> # message auto-generated for no-merge-commit merge: !8083 merge softmax_bin into master feat: softmax/group_norm 系列算子添加 FormatAgnostic 格式匹配模式并重构 softmax_grad 编译信息获取接口 Created-by: zhuzixian-lr Commit-by: zhuzixian-lr Merged-by: cann-robot Description: ## 描述 本 PR 为 softmax 和 group_norm 系列算子在 ascend950 平台的 binary JSON 配置中添加 format_match_mode: FormatAgnostic 格式匹配模式,使这些算子能够以格式无关方式接收输入/输出张量。同时重构 softmax_grad 算子的编译信息获取接口,将 reinterpret_cast 强制类型转换替换为类型安全的模板 API。 ### 改动原因 当前 softmax/group_norm 系列算子的 ascend950 binary JSON 配置未设置 format_match_mode,在格式匹配时存在限制。仓库中其他算子(如 relu_grad_v2、gelu_grad、log_sigmoid_grad、hard_swish_grad_v2、swiglu_group 等)已广泛使用 FormatAgnostic 模式,本 PR 将该模式统一扩展至 softmax/group_norm 系列,保持一致性。 ### 改动方法 **1. Binary JSON 配置变更(6 个算子,ascend950 平台)** 为以下算子的所有输入和输出张量添加 "format_match_mode": "FormatAgnostic" 字段: | 算子 | 配置文件 | binary 变体数 | 数据类型 | 张量数 | |------|----------|:---:|------|:---:| | ConfusionSoftmaxGrad | activation/confusion_softmax_grad/op_host/config/ascend950/confusion_softmax_grad_binary.json | 3 | bfloat16 / float16 / float32 | 9 | | LogSoftmaxGrad | activation/log_softmax_grad/op_host/config/ascend950/log_softmax_grad_binary.json | 3 | float16 / bfloat16 / float32 | 9 | | SoftmaxGrad | activation/softmax_grad/op_host/config/ascend950/softmax_grad_binary.json | 3 | float16 / float32 / bfloat16 | 9 | | SoftmaxV2 | activation/softmax_v2/op_host/config/ascend950/softmax_v2_binary.json | 4 | bfloat16 / float16 / float16_to_float32 / float32 | 8 | | GroupNormGrad | norm/group_norm_grad/op_host/config/ascend950/group_norm_grad_binary.json | 5 | fp32 / fp16 / bf16 / fp16_f32 / bf16_f32 | 40 | | GroupNormV2 | norm/group_norm_v2/op_host/config/ascend950/group_norm_v2_binary.json | 5 | fp16 / fp32 / bf16 / bf16_f32 / fp16_f32 | 30 | 共 105 个张量条目添加了 FormatAgnostic 格式匹配模式。 **2. C++ 接口重构** activation/softmax_grad/op_host/arch35/softmax_grad_tiling_base.cpp 中 GetPlatformInfo() 方法: - 将 reinterpret_cast<const SoftmaxGradCompileInfo*>(context_->GetCompileInfo()) 替换为 context->GetCompileInfo<SoftmaxGradCompileInfo>() - 使用类型安全的模板 API 替代不安全的强制类型转换 **3. 其他变更** - 新增 .opencode/opencode.json(opencode 工具配置文件) ## 关联的Issue - #4469 ## 测试 - 验证各算子 binary JSON 配置文件格式正确性 - 验证 FormatAgnostic 模式下算子能够正确匹配不同格式的输入/输出张量 - 验证 softmax_grad 编译信息获取接口重构后功能正常 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8083 | 17 天前 | |
test(golden): 升级 INInferV2 TestSpec Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8513 merge fix/in-infer-v2-golden-spec-update into master test(golden): 升级 INInferV2 TestSpec Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本次仅更新 norm/in_infer_v2/tests/assets/golden.py: - 引入 __spec__ TestSpec 注册,kernel 与 GEIR 共用 in_infer_v2 算子键和 Spec。 - 使用 Promote 感知的 Torch CPU true-value,保留框架提供的 FP64 输入,不再强制降为 FP32。 - 增加独立 Torch third-party composition,按 arch35 kernel 的 FP32 运算顺序执行,并配置 FP16/FP32 cross_check 容差。 - 保留兼容旧加载器的 __golden__,并与 TestSpec 复用同一计算核心。 - 删除无真实接口支撑的 ACLNN golden 注册;该算子配置为 ACLNNTYPE aclnn_exclude,不新增 ACLNN 或 e2e 通路。 ## 关联的Issue 关联 Issue #4684:https://gitcode.com/cann/ops-nn/issues/4684 ## 测试 - pre-commit run --files norm/in_infer_v2/tests/assets/golden.py:通过。 - Python AST/import、TestSpec 惰性加载与注册检查:通过。 - FP16/FP32、gamma/beta 有无、不同 rank/统计量 shape、Promote 输出 dtype 与 third-party 本地语义检查:通过。 - TTK 用例校验:100/100 valid;覆盖 FP16/FP32 各 50 条、gamma/beta 有无、rank 2~5、epsilon 与 inner 边界。 - TTK kernel release binary + Promote 双向精度验证:100/100 PASS;三个输出均 PASS,内存越界检查 100/100 PASS。 - TTK GEIR release 集成冒烟:FP16 无 gamma/beta 与 FP32 有 gamma/beta 共 2/2 PASS,三个输出均 PASS。 ## 文档更新 无,本次仅更新 golden 测试资产。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:测试 golden 规范升级 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8513 | 24 天前 | |
feat(in_training_reduce_v2): sub-R分组折叠解除规约轴R的上限 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8862 merge feat/in-training-reduce-v2-lift-r-limit into master feat(in_training_reduce_v2): sub-R分组折叠解除规约轴R的上限 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 解除 INTrainingReduceV2 规约轴长度 R 的上限。 ### 问题 sub-R 分块路径把 numChunks = ceil(R / rFactor) 个部分和**全部常驻 UB**,于是"输入分块双缓冲"与"随 R 增长的部分和数组"争抢同一块 UB: 2·e·rFactor + 8·(R/rFactor) ≤ usable ⟹ e·R ≤ (usable/8)² (e = 元素字节宽度) 按 Ascend 950 的 ub_size=253952 复算 DoSubRTiling() 并二分求临界点,上限为 **FLOAT32 R ≤ 249,892,864 / FLOAT16 R ≤ 500,797,440**(均约 0.93 GiB 输入),超出即在 Host Tiling 阶段返回失败。上游反馈的用例 InTrainingReduceV2_L1_upboundary_highpre_047(N=1, C=1, R=4294967296)正是因此失败: EZ9999: sub-R tiling requires N, C, R and N*C to fit in uint32: N=1 C=1 R=4294967296. [FUNC:CheckSubRNarrowable][FILE:in_training_reduce_v2_tiling_ar_full_reduce_arch35.cpp][LINE:127] 这个上限并非硬件或算法固有,而是实现耦合。同族对照支持"该能力本应具备":canndev 的 A2/A3 实现(TBE tuple_reduce)在类型与架构上均不设 R 上限;本仓 batch_norm_v3 的 block_split_r 也通过分级归约避开了同样的耦合。 ### 方案:分组折叠 给部分和缓存一个**固定**的分组预算:每 chunksPerGroup 个 chunk 折叠一次,结果写入 carry 槽并参与下一组的树形折叠,使 UB 占用与 R 完全解耦。 runningFold = 0 for g in [0, numGroups): for c in [0, chunksInGroup): CopyIn / ReduceChunk → partial[c] foldCnt = chunksInGroup + (g > 0 ? 1 : 0) # g>0 时含上一组的 carry FoldGroupSubR(partial[0, foldCnt)) → 末组写输出,否则写下一组的 carry 槽 实测 UB 用量恒为 **253,056 / 253,440 字节**,R 从 2.6×10⁸ 到 4.29×10⁹ 完全不变。**R 不再有上限,仅受设备内存约束。** ### 三点设计取舍 1. **保留原有求解作为快路径。** 装得下即 numGroups == 1,tiling 参数与 Kernel 行为逐位不变,存量 shape 零影响;分组仅在原本会被拒绝的 R 上启用。TTK 851 条泛化用例**全部走快路径**,这既解释了它们全绿,也印证了改造对存量行为无影响。 2. **chunksPerGroup 取"VL 对齐值 − 1"**,使 CeilAlign(chunksPerGroup + 1, VL) 恰好等于该对齐值,carry 槽不额外多吃一个 VL —— 分组路径的 UB 开销为零。 3. **carry 与本组 chunk 走同一次向量折叠**,而非标量顺序累加,精度优于顺序加。 ### 附带 sub-R 路径的 numN / numC / numR / perCoreCnt 由 uint32_t 放宽到 uint64_t,并移除 CheckSubRNarrowable() 中对 numR 的守卫(N / C / N×C 的 uint32 约束保留)。顺带修正 ar_full_reduce.h 中 perCoreCnt_ 的隐式收窄(同段其余字段均有显式 static_cast)。 README 未作改动:R 的上限是被**删除**的,不是被补充的,「约束说明」无需新增条目。 ## 关联的Issue 关联Issue #4872 —— 该 Issue 原诉求是把 R 上限写入文档;排查后确认上限可解除,故改为直接解除,Issue 将同步说明。原 PR !8838(文档化该上限)已因此关闭。 ## 测试 **op_host UT:22/22 通过** 新增 / 改写: - ..._sub_r_r_over_uint32_015:R=2³²(即上游失败用例的 R),改造前被拒,现须出 tiling - ..._sub_r_r_far_over_uint32_fp16_017:R=2³⁴ fp16,验证上限是"解除"而非"抬高一档" - ..._sub_r_nc_over_uint32_rejected_018:N×C=2³²,验证 N/C 的 uint32 守卫仍生效 - ..._sub_r_grouped_fold_2e9_014:原为"断言拒绝",改为"断言分组后接受" - 新增 ExpectSubRSelfConsistent():断言 numChunks/tailLen/numGroups/tailChunks 彼此自洽,且 Kernel 按该组参数申请的 UB 不越界 - 存量用例 013 / 016 增加 numGroups == 1 断言,守住"快路径不变" **TTK kernel 泛化:851 / 851 全部 PASS**(Ascend 950PR_9579) | 项 | 结果 | |---|---| | precision_status | PASS × 851,0 FAIL | | bin_precision | 100.0%,100.0% × 851 | | bin_compile_s | BINARY_MATCH × 851(跑的是部署的预编译 .o,非 JIT 兜底) | | memory_oob | PASS × 851 | 命令:ttk kernel -i in_training_reduce_v2_full.csv -d=false -b=release --compare close --plugin <op>/tests/assets **超限用例实测**(这批是唯一能覆盖新增分组路径的用例,851 条泛化全部走快路径) | R | dtype | numGroups | 结果 | |---:|---|---:|---| | 260,000,000 | fp32 | 2 | PASS,精度 100% | | 600,000,000 | fp32 | 3 | PASS,精度 100% | | 520,000,000 | fp16 | 2 | PASS,精度 100% | | 1,200,000,000 | fp16 | 3 | 跑批中 | | 4,294,967,296 | fp16 | 9 | 跑批中 | | 4,294,967,296 | fp32 | 18 | 跑批中 | 前三条均已超过改造前的上限(改造前会被 Host Tiling 拒绝)。后三条规模较大(fp64 golden 需 32 GiB),结果出来后补充到评论。 **本地门禁**:pre-commit 全项 Passed(含 clang-format / codespell / OAT 合规)。 ## 文档更新 无。R 的上限被解除而非文档化,README 无需改动。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8862 | 17 天前 | |
fix(arch35): 修复 InTrainingUpdateGrad NDC1HWC0 与 MultiAddRmsNormDynamicQuant 动态输入取值;8 算子 golden 适配三方对比 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8492 merge fix/op-binary-json-missing into master fix(arch35): 修复 InTrainingUpdateGrad NDC1HWC0 与 MultiAddRmsNormDynamicQuant 动态输入取值;8 算子 golden 适配三方对比 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 按照ttk最新支持规范更新ttk golden ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4685 ## 测试 st ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8492 | 24 天前 | |
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !7592 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Optimized the function description and parameter description. Optimized the calculation formula. Modified the description of interface invoking, deleted repeated content, and corrected parameter names. ## 关联的Issue [#4236](https://gitcode.com/cann/ops-nn/issues/4236) ## 测试 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!7592 | 1 个月前 | |
fix: 修复RmsNorm系列算子example中CHECK_RET宏多余分号及License Header格式 Co-authored-by: liangyuhua<liangyuhua4@huawei.com> # message auto-generated for no-merge-commit merge: !8356 merge fix/rms_norm_check_ret_cpp into master fix: 修复RmsNorm系列算子example中CHECK_RET宏多余分号及License Header格式 Created-by: liangyuhua Commit-by: liangyuhua Merged-by: cann-robot Description: ## 描述 修复 RmsNorm、RmsNormGrad、AddRmsNorm、AddRmsNormCast、InplaceAddRmsNorm 五个算子 example cpp 文件中 CHECK_RET 宏调用处 return ret;); 的多余分号问题,改为 return ret);。 涉及文件(examples): | 算子 | 文件 | |------|------| | RmsNorm | examples/test_aclnn_rms_norm.cpp | | RmsNormGrad | examples/test_aclnn_rms_norm_grad.cpp | | AddRmsNorm | examples/test_aclnn_add_rms_norm.cpp | | AddRmsNormCast | examples/test_aclnn_add_rms_norm_cast.cpp | | InplaceAddRmsNorm | examples/test_aclnn_inplace_add_rms_norm.cpp | 同时修正 5 个 cpp 文件的 License Header 格式以通过 OAT 合规检查(原格式与 OAT.xml 中 licensematcher 定义不匹配)。 ## 关联的Issue - #4619 ## 测试 - 已通过 pre-commit 全部检查(clang-format、codespell、OAT Compliance Check 均 Passed) ## 文档更新 - 无(本 PR 仅修改 example cpp 文件) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8356 | 29 天前 | |
refactor: rename APIs in ops-nn batch3 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8568 merge rename-api-batch3 into master refactor: rename APIs in ops-nn batch3 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 对 ops-nn 仓 10 个算子的 arch35 kernel 进行 AscendC MicroAPI 重命名整改,涉及以下 API 映射: - __local_mem__ → __ubuf__(地址空间限定符) - DataCopy(load 方向) → LoadAlign - DataCopy(store 方向) → StoreAlign - ReduceSum → Reduce<ReduceType::SUM> - DataCopyUnAlign → StoreUnAlign - DataCopyUnAlignPost → StoreUnAlignPost - UnalignReg → UnalignRegForStore / UnalignRegForLoad 涉及算子(10 个): - activation/log_softmax_grad - activation/log_softmax_v2 - loss/kl_div_loss_grad - norm/group_norm_grad - norm/group_norm_v2 - norm/instance_norm - norm/layer_norm_grad - norm/layer_norm_grad_v3 - norm/layer_norm_v3 - norm/layer_norm_v4 共修改 45 个 arch35 kernel 头文件,纯 API 重命名,无逻辑变更。 ## 关联的Issue ## 测试 纯 API 重命名整改,编译验证通过;无新增测试用例。 ## 文档更新 无需更新文档。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8568 | 21 天前 | |
InTrainingUpdateGrad\MultiAddRmsNormDynamicQuant\MultilabelMarginLoss\InstanceNormGrad 算子精度优化 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8723 merge fix/op-binary-json-missing into master InTrainingUpdateGrad\MultiAddRmsNormDynamicQuant\MultilabelMarginLoss\InstanceNormGrad 算子精度优化 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 fix(arch35): 修复 InTrainingUpdateGrad NDC1HWC0 与 MultiAddRmsNormDynamicQuant 动态输入取值;MultilabelMarginLoss A5 独立 tiling 与归约精度;InstanceNormGrad UB 记账与缓冲下发;8 算子 golden 适配三方对比 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4818 ## 测试 ut/st ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8723 | 18 天前 | |
算子插件迁移 Co-authored-by: welt_lester<songlizhe1@h-partners.com> Co-authored-by: x00842564<xuyanke@huawei.com> # message auto-generated for no-merge-commit merge: !8474 merge master into master 算子插件迁移 Created-by: welt_lester Commit-by: x00842564;welt_lester Merged-by: cann-robot Description: ## 描述 落实issue #4279,将adaptive_avg_pool2d、adaptive_max_pool2d、ascend_anti_quant、ascend_dequant、ascend_quant、batch_mat_mul_v3、batch_norm、celu_v2、instance_norm_v3、ascend_quant、log_softmax_v2、mat_mul_v3、unique_with_counts_and_sorting这13个算子对应的插件从common\src\framework迁出到各自算子目录新建的\framework目录下。 ## 关联的Issue [Bug-Report|缺陷反馈]: 有对应算子的插件不应该放到公共目录 [#4279](https://gitcode.com/cann/ops-nn/issues/4279) ## 测试 compile、本地验证build通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码重构(算子插件归属迁移,落实 #4279 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8474 | 18 天前 | |
InTrainingUpdateGrad\MultiAddRmsNormDynamicQuant\MultilabelMarginLoss\InstanceNormGrad 算子精度优化 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8723 merge fix/op-binary-json-missing into master InTrainingUpdateGrad\MultiAddRmsNormDynamicQuant\MultilabelMarginLoss\InstanceNormGrad 算子精度优化 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 fix(arch35): 修复 InTrainingUpdateGrad NDC1HWC0 与 MultiAddRmsNormDynamicQuant 动态输入取值;MultilabelMarginLoss A5 独立 tiling 与归约精度;InstanceNormGrad UB 记账与缓冲下发;8 算子 golden 适配三方对比 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4818 ## 测试 ut/st ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8723 | 18 天前 | |
modifed md file (README.md of the layer_norm operator) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !8213 merge master into master modifed md file (README.md of the layer_norm operator) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Modify the default value of epsilon in the README.md file of the layer_norm operator. ## 关联的Issue [#2932](https://gitcode.com/cann/ops-nn/issues/2932) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 norm/layer_norm/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8213 | 1 个月前 | |
fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Co-authored-by: sun-yibo1<sunyibo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !8735 merge fix/norm-layer-lp-log-quality into master fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Created-by: sun-yibo1 Commit-by: sun-yibo1 Merged-by: cann-robot Description: ## 描述 本PR对 ops-nn 仓库中 layer_norm / lp_norm 系列算子的日志消息进行质量修复,仅修改日志字符串,不涉及任何功能逻辑变更。 ### 改动原因 代码审计发现该系列算子日志存在复制粘贴导致的op名错误、拼写错误、日志参数引用错误等问题。 ### 改动方法 - layer_norm_grad_infershape.cpp:82 — 复制粘贴 InferDataType4GridSampler3DGrad → InferDataTypeLayerNormGrad - layer_norm_grad_v3_infershape.cpp:82 — 同上 → InferDataTypeLayerNormGradV3 - aclnn_layer_norm_backward.cpp:158 — 缺少 Backward:aclnnLayerNorm → aclnnLayerNormBackward - layer_norm_v3_infershape.cpp:70 — 结束日志缺少 V3 后缀 - layer_norm_v3_tiling_base.cpp:316 — normlize → normalize - layer_norm_v3_tiling_arch35.cpp — Unknow → Unknown(5处) - layer_norm_v4_infershape.cpp:37 — return unsuccess → return unsuccessful - layer_norm_v4_infershape.cpp:93 — 结束日志缺少 V4 后缀 - lp_norm_v2_tiling_arch35.cpp:431 — 错误日志参数 compileInfo->ubSize → 局部变量 ubSize 注:layer_norm_v4_common_tiling.cpp 和 layer_norm_v4_merge_n_tiling.cpp 的修改已撤销,不在本PR范围内。 ## 关联的Issue #4817 ## 测试 本次修改仅涉及日志字符串,不影响算子功能逻辑,无需额外功能测试。 ## 文档更新 无文档更新。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8735 | 18 天前 | |
fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Co-authored-by: sun-yibo1<sunyibo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !8735 merge fix/norm-layer-lp-log-quality into master fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Created-by: sun-yibo1 Commit-by: sun-yibo1 Merged-by: cann-robot Description: ## 描述 本PR对 ops-nn 仓库中 layer_norm / lp_norm 系列算子的日志消息进行质量修复,仅修改日志字符串,不涉及任何功能逻辑变更。 ### 改动原因 代码审计发现该系列算子日志存在复制粘贴导致的op名错误、拼写错误、日志参数引用错误等问题。 ### 改动方法 - layer_norm_grad_infershape.cpp:82 — 复制粘贴 InferDataType4GridSampler3DGrad → InferDataTypeLayerNormGrad - layer_norm_grad_v3_infershape.cpp:82 — 同上 → InferDataTypeLayerNormGradV3 - aclnn_layer_norm_backward.cpp:158 — 缺少 Backward:aclnnLayerNorm → aclnnLayerNormBackward - layer_norm_v3_infershape.cpp:70 — 结束日志缺少 V3 后缀 - layer_norm_v3_tiling_base.cpp:316 — normlize → normalize - layer_norm_v3_tiling_arch35.cpp — Unknow → Unknown(5处) - layer_norm_v4_infershape.cpp:37 — return unsuccess → return unsuccessful - layer_norm_v4_infershape.cpp:93 — 结束日志缺少 V4 后缀 - lp_norm_v2_tiling_arch35.cpp:431 — 错误日志参数 compileInfo->ubSize → 局部变量 ubSize 注:layer_norm_v4_common_tiling.cpp 和 layer_norm_v4_merge_n_tiling.cpp 的修改已撤销,不在本PR范围内。 ## 关联的Issue #4817 ## 测试 本次修改仅涉及日志字符串,不影响算子功能逻辑,无需额外功能测试。 ## 文档更新 无文档更新。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8735 | 18 天前 | |
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 | 1 个月前 | |
fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Co-authored-by: sun-yibo1<sunyibo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !8735 merge fix/norm-layer-lp-log-quality into master fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Created-by: sun-yibo1 Commit-by: sun-yibo1 Merged-by: cann-robot Description: ## 描述 本PR对 ops-nn 仓库中 layer_norm / lp_norm 系列算子的日志消息进行质量修复,仅修改日志字符串,不涉及任何功能逻辑变更。 ### 改动原因 代码审计发现该系列算子日志存在复制粘贴导致的op名错误、拼写错误、日志参数引用错误等问题。 ### 改动方法 - layer_norm_grad_infershape.cpp:82 — 复制粘贴 InferDataType4GridSampler3DGrad → InferDataTypeLayerNormGrad - layer_norm_grad_v3_infershape.cpp:82 — 同上 → InferDataTypeLayerNormGradV3 - aclnn_layer_norm_backward.cpp:158 — 缺少 Backward:aclnnLayerNorm → aclnnLayerNormBackward - layer_norm_v3_infershape.cpp:70 — 结束日志缺少 V3 后缀 - layer_norm_v3_tiling_base.cpp:316 — normlize → normalize - layer_norm_v3_tiling_arch35.cpp — Unknow → Unknown(5处) - layer_norm_v4_infershape.cpp:37 — return unsuccess → return unsuccessful - layer_norm_v4_infershape.cpp:93 — 结束日志缺少 V4 后缀 - lp_norm_v2_tiling_arch35.cpp:431 — 错误日志参数 compileInfo->ubSize → 局部变量 ubSize 注:layer_norm_v4_common_tiling.cpp 和 layer_norm_v4_merge_n_tiling.cpp 的修改已撤销,不在本PR范围内。 ## 关联的Issue #4817 ## 测试 本次修改仅涉及日志字符串,不影响算子功能逻辑,无需额外功能测试。 ## 文档更新 无文档更新。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8735 | 18 天前 | |
fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Co-authored-by: sun-yibo1<sunyibo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !8735 merge fix/norm-layer-lp-log-quality into master fix(log): 修复 layer_norm/lp_norm 系列算子日志复制粘贴op名、拼写、格式符及错误日志参数 Created-by: sun-yibo1 Commit-by: sun-yibo1 Merged-by: cann-robot Description: ## 描述 本PR对 ops-nn 仓库中 layer_norm / lp_norm 系列算子的日志消息进行质量修复,仅修改日志字符串,不涉及任何功能逻辑变更。 ### 改动原因 代码审计发现该系列算子日志存在复制粘贴导致的op名错误、拼写错误、日志参数引用错误等问题。 ### 改动方法 - layer_norm_grad_infershape.cpp:82 — 复制粘贴 InferDataType4GridSampler3DGrad → InferDataTypeLayerNormGrad - layer_norm_grad_v3_infershape.cpp:82 — 同上 → InferDataTypeLayerNormGradV3 - aclnn_layer_norm_backward.cpp:158 — 缺少 Backward:aclnnLayerNorm → aclnnLayerNormBackward - layer_norm_v3_infershape.cpp:70 — 结束日志缺少 V3 后缀 - layer_norm_v3_tiling_base.cpp:316 — normlize → normalize - layer_norm_v3_tiling_arch35.cpp — Unknow → Unknown(5处) - layer_norm_v4_infershape.cpp:37 — return unsuccess → return unsuccessful - layer_norm_v4_infershape.cpp:93 — 结束日志缺少 V4 后缀 - lp_norm_v2_tiling_arch35.cpp:431 — 错误日志参数 compileInfo->ubSize → 局部变量 ubSize 注:layer_norm_v4_common_tiling.cpp 和 layer_norm_v4_merge_n_tiling.cpp 的修改已撤销,不在本PR范围内。 ## 关联的Issue #4817 ## 测试 本次修改仅涉及日志字符串,不影响算子功能逻辑,无需额外功能测试。 ## 文档更新 无文档更新。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8735 | 18 天前 | |
fix: inplace_apply_keras_momentum/lp_norm_update 属性标记为 OPTIONAL 与 REG_OP 行为对齐 Co-authored-by: Davon14272<liuwenda4@huawei.com> # message auto-generated for no-merge-commit merge: !8161 merge proto into master fix: inplace_apply_keras_momentum/lp_norm_update 属性标记为 OPTIONAL 与 REG_OP 行为对齐 Created-by: Davon14272 Commit-by: Davon14272 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将inplace_apply_keras_momentum/lp_norm_update 算子的kernel定义文件与proto文件中的属性定义不一致,需要和proto文件对齐,改为可选属性 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4498](https://gitcode.com/cann/ops-nn/issues/4498) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8161 | 1 个月前 | |
[CANNBot] lp_norm_update_v2算子增加异常拦截校验 Co-authored-by: chen_chenn<chenchen167@huawei.com> # message auto-generated for no-merge-commit merge: !8367 merge LpNormUpdateV2 into master [CANNBot] lp_norm_update_v2算子增加异常拦截校验 Created-by: chen_chenn Commit-by: chen_chenn Merged-by: cann-robot Description: ## 描述 lp_norm_update_v2算子增加异常拦截校验 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4829 ## 测试 TTK ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8367 | 18 天前 | |
docs: add batch invariant descriptions Co-authored-by: zhang-song-rui<zhangsongrui@h-partners.com> # message auto-generated for no-merge-commit merge: !8642 merge docs/batch-invariant-description into master docs: add batch invariant descriptions Created-by: zhang-song-rui Commit-by: zhang-song-rui Merged-by: cann-robot Description: ## 描述 补充Ascend 950 Batch一致性文档说明: - aclnnSoftmax、aclnnLogSoftmax、aclnnNorm和aclnnLinalgVectorNorm默认非Batch一致性实现,支持通过aclrtSetSysParamOpt(ACL_OPT_DETERMINISTIC, 3)开启Batch一致性。 - 开启后,非归约轴的计算结果与所在批次大小、位置无关;归约轴不支持Batch一致性。 - 开启Batch一致性后,性能可能存在劣化。 - Batch一致性说明作为独立约束补充,不修改现有确定性计算说明。 本PR仅修改接口文档,不涉及算子Tiling、Kernel和示例代码变更。 ## 关联的Issue 无。 ## 测试 - git diff --check:通过。 - pre-commit:通过。 - codespell:通过。 - OAT Compliance Check:通过。 - GitCode Git Hooks:通过。 - 本次仅修改文档,未执行NPU运行测试。 ## 文档更新 - activation/softmax_v2/docs/aclnnSoftmax.md - activation/log_softmax_v2/docs/aclnnLogSoftmax.md - norm/lp_norm_v2/docs/aclnnNorm.md - norm/lp_norm_v2/docs/aclnnLinalgVectorNorm.md ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8642 | 18 天前 | |
kernel ut 增加防卡死超时,快速模式,覆盖率控制 Co-authored-by: chenqi317<chenqi317@huawei.com> # message auto-generated for no-merge-commit merge: !8187 merge master into master kernel ut 增加防卡死超时,快速模式,覆盖率控制 Created-by: chenqi317 Commit-by: chenqi317 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 提交总结:kernel ut 增加防卡死超时、快速模式、覆盖率控制 **修改背景**:Kernel UT 存在单测卡死导致整套测试挂起、运行慢(addr2line 符号化耗时)、gcov 覆盖率始终链接带来不必要开销等问题。 **修改方案**: 1. **防卡死超时**:新增 run_kernel_ut.sh,按 case 逐个执行并用 timeout 限时(默认 120s,--ut_timeout 可配),超时即标记失败并继续,避免单点卡死阻塞全流程。 2. **快速模式**:新增 --ut_mode=fast/debug。fast 模式关闭符号化(注入 fake addr2line 跳过慢解析)、改用 -g0 -O2,用于快速验证;debug 模式保留 -g 与符号化,用于开发调试。 3. **覆盖率控制**:将 ut.cmake 中 gcov 的无条件链接改为 $<$<BOOL:${ENABLE_COVERAGE}>:gcov> 条件链接,仅在开启覆盖率时引入; 4. **修复失败的kernel ut**:TensorFlow 依赖替换为md_dtypes, 修复部分block 越界,缺少SetKernelMode 设置导致核获取错误等问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4606 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 通过kernel ut 测试,bash build.sh -u --opkernel --ut_mode=fast --ut_timeout=60 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8187 | 28 天前 | |
fix(arch35): 修复 InTrainingUpdateGrad NDC1HWC0 与 MultiAddRmsNormDynamicQuant 动态输入取值;8 算子 golden 适配三方对比 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8492 merge fix/op-binary-json-missing into master fix(arch35): 修复 InTrainingUpdateGrad NDC1HWC0 与 MultiAddRmsNormDynamicQuant 动态输入取值;8 算子 golden 适配三方对比 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 按照ttk最新支持规范更新ttk golden ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4685 ## 测试 st ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8492 | 24 天前 | |
perf: optimize CalculateSquareReduceSumCommon tail loop for instruction-level parallelism Co-authored-by: liangyuhua<liangyuhua4@huawei.com> # message auto-generated for no-merge-commit merge: !8181 merge perf/optimize-calculate-square-reduce-sum into master perf: optimize CalculateSquareReduceSumCommon tail loop for instruction-level parallelism Created-by: liangyuhua Commit-by: liangyuhua Merged-by: cann-robot Description: ## 描述 优化 reduce_common_regbase.h 中 CalculateSquareReduceSumCommon 函数的 tail 循环,提升指令级并行度。 ### 改动内容 1. **重排 Load/Mul 指令顺序**:Load x → Mul x → Load xFold → Mul xFold(原为 Load x → Load xFold → Mul x → Mul xFold),使 x 的 Mul 可以与 xFold 的 Load 重叠执行。 2. **合并 tail 两阶段循环为统一循环**:将原来的 tailFullLoops(整除迭代)+ tailRemain(余数迭代)两阶段循环替换为统一的 tailCeilLoops 循环,使用 UpdateMask(sregTail) 自动递减掩码,无需单独处理余数。 3. **移除 ShiftLefts 调用**:原代码用 ShiftLefts(.., pregLoop) 将越界元素清零,现在 UpdateMask 已正确处理掩码,不再需要。 4. **重命名循环变量**:firstFlodWithOutAddLoops 提升可读性。 ## 关联的Issue #4505 ## 测试 在 Ascend950 上使用 TTK (ops-test-kit) 对 6 个 rmsnorm 系列算子进行了全面验证,每个算子 50 条 case,共 300 条,覆盖 CalculateSquareReduceSumCommon 的所有分支。 ### 分支覆盖 - **LAST_LOOP_NUMS=1** (reduceBranchNum 129~8192):26 条/算子 - **LAST_LOOP_NUMS=2** (reduceBranchNum 8193~16384):24 条/算子 - **tail 场景**:单次部分迭代、单次完整迭代、多次完整迭代、多次部分迭代,4 种全覆盖 - **dtype 覆盖**:fp16 + bf16 - **add_rms_norm_dynamic_mx_quant**:fp8 (e4m3fn/e5m2) + fp4 (e2m1) 两条路径全覆盖 ### 性能对比结果 每个算子 50 条 case,--run 5 中位数逐条对比。对首轮退化 case 用 --run 20 复检降噪,复检结果替换首轮结果: | 算子 | 用例数 | 提升 | 退化 | 持平 | 精度PASS | 平均变化 | |------|--------|------|------|------|---------|---------| | rms_norm | 50 | 39 | 11 | 0 | YES | -2.6% | | add_rms_norm_cast | 50 | 29 | 20 | 1 | YES | -0.3% | | add_rms_norm_quant | 50 | 37 | 13 | 0 | YES | -1.9% | | add_rms_norm_dynamic_quant | 50 | 24 | 24 | 2 | YES | -0.1% | | rms_norm_quant_v2 | 50 | 40 | 10 | 0 | YES | -2.0% | | add_rms_norm_dynamic_mx_quant | 50 | 34 | 15 | 1 | YES | -0.7% | | **TOTAL** | **300** | **203** | **93** | **4** | **YES** | **-1.3%** | - 所有 300 条 case 精度检查通过(rms_norm 和 add_rms_norm_cast 有 golden plugin 验证,其余编译执行 PASS) - 性能提升的 case(203,68%)远多于退化的 case(93,31%),总体平均提升 1.3% - 退化的 case 幅度均在 ±2% 以内,属于测量噪声范围 ## 文档更新 无需更新文档。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8181 | 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 | 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 | 1 个月前 | |
docs: fix errors in aclnn API examples Co-authored-by: Chen_HaoWen<chenhaowen12@huawei.com> # message auto-generated for no-merge-commit merge: !7883 merge docs-fix-md-20260723-master into master docs: fix errors in aclnn API examples Created-by: Chen_HaoWen Commit-by: Chen_HaoWen Merged-by: cann-robot Description: ## 描述 修正 master 分支中 aclnn API 文档及对应 examples 的文本错误,保证文档代码片段与示例源文件一致: - 修正 aclnnAddLayerNormQuantV2 日志中的 aclrtSetDevicefailed 和 Deviceto 拼写问题。 - 将 aclnnInplaceRenorm 调用失败日志中的接口名由 aclnnRenorm 修正为 aclnnInplaceRenorm。 - 修正 aclnnRmsNormQuant 示例中的接口名注释,并移除未使用的 aclScalar 描述。 - 同步更新 3 个文档文件和 3 个 examples 文件,不涉及算子功能逻辑变更。 ## 关联的Issue Closes #4287 ## 测试 - 已执行 git diff --check origin/master...HEAD,检查通过。 - 已定点检查 6 个目标文件,确认旧错误文本不再残留。 - 本次仅修改文档代码片段、日志字符串和注释,未运行算子构建或功能测试。 ## 文档更新 - norm/add_layer_norm_quant_v2/docs/aclnnAddLayerNormQuantV2.md - norm/add_layer_norm_quant_v2/examples/test_aclnn_add_layer_norm_quant_v2.cpp - norm/renorm/docs/aclnnRenorm&aclnnInplaceRenorm.md - norm/renorm/examples/test_aclnn_inplace_renorm.cpp - norm/rms_norm_quant/docs/aclnnRmsNormQuant.md - norm/rms_norm_quant/examples/test_aclnn_rms_norm_quant.cpp ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7883 | 1 个月前 | |
refactor: rename APIs in ops-nn batch4 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8569 merge rename-api-batch4 into master refactor: rename APIs in ops-nn batch4 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 对 ops-nn 仓 10 个算子的 arch35 kernel 进行 AscendC MicroAPI 重命名整改,涉及以下 API 映射: - __local_mem__ → __ubuf__(地址空间限定符) - DataCopy(load 方向) → LoadAlign - DataCopy(store 方向) → StoreAlign - ReduceSum → Reduce<ReduceType::SUM> - DataCopyUnAlign → StoreUnAlign - DataCopyUnAlignPost → StoreUnAlignPost - UnalignReg → UnalignRegForStore / UnalignRegForLoad 涉及算子(10 个): - activation/softmax_cross_entropy_with_logits - activation/softmax_grad - activation/softmax_v2 - loss/nll_loss - loss/sparse_softmax_cross_entropy_with_logits - norm/rms_norm - norm/rms_norm_dynamic_mx_quant - norm/rms_norm_grad - norm/rms_norm_grad_quant - norm/rms_norm_quant_v2 共修改 38 个 arch35 kernel 头文件,纯 API 重命名,无逻辑变更。 ## 关联的Issue ## 测试 纯 API 重命名整改,编译验证通过;无新增测试用例。 ## 文档更新 无需更新文档。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8569 | 22 天前 | |
fix(norm): add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、rms_norm_dynamic_mx_quant 四个算子 950(arch35) 路径 VL / UB block 派生化,移除剩余写死常量 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8438 merge pr/vl-ubblock-dynamic-950 into master fix(norm): add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、rms_norm_dynamic_mx_quant 四个算子 950(arch35) 路径 VL / UB block 派生化,移除剩余写死常量 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 按硬编码扫描规则检视 add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_dynamic_quant_v2、rms_norm_dynamic_mx_quant 四个算子,修复 **950(arch35) 路径上剩余的 VL(64/128/256) 与 UB block(32/8) 写死常量**,改为由平台接口 Ops::Base::GetVRegSize() / Ops::Base::GetUbBlockSize() 派生。 **本 PR 严格限定在 950/regbase 路径,不影响 A2/A3。** 平台归属分析: | 改动位置 | 平台归属 | |---|---| | add_rms_norm_dynamic_mx_quant/** | def.cpp 仅注册 ascend950 → 整体 950 专属 | | rms_norm_dynamic_mx_quant/** | def.cpp 仅注册 ascend950 → 整体 950 专属 | | add_rms_norm_dynamic_quant/op_host/arch35/** | 仅 regbase 分支进入;A2/A3 走 op_host/arch22/**,本 PR 未动 | | add_rms_norm_dynamic_quant/op_kernel/arch35/** | 仅 ascend950 config 通过 opFile.value 绑定;A2/A3、kirin 走 op_kernel/*.h,本 PR 未动 | ### 具体改动 **1. add_rms_norm_dynamic_mx_quant** - op_host/..._tiling.h:删除未使用的 B32_BLOCK_NUM = 8;删除 COL_ALIGN_NUM = 64 - op_host/..._tiling_base_arch35.cpp:numColAlign_ 改用 vecLengthFP32_ 对齐(vecLengthFP32_ 在 GetShapeAttrsInfo() 中先于 SetInputParams() 赋值,顺序已确认) - op_kernel/arch35/..._common.h: - OUT_ELE_NUM_ONE_BLK 由 VECTOR_LENGTH / sizeof(half) / 2 派生 - AR_RECOMPUTE_SUM_BUFFER_BYTES 由 UB_BLOCK_SIZE 派生(与 host 侧 cacheBufSize = (cacheId + 1) * ubBlockSize_ 语义一致) - MxQuantComputeScalecuBLAS 中 SixtyFour / ThirtyTwo 两个魔数改为 scaleNumPerLoop = VL_F32 与 mxScaleStride = VL_F32 / 2(同文件 OCP 版本本就是这么写的) **2. add_rms_norm_dynamic_quant(仅 arch35)** - op_host/arch35/..._tiling_arch35.h:TilingParams 新增 ubBlockSize / b32BlockNum / b8BlockNum - op_host/arch35/..._tiling_arch35.cpp:删除 B32_BLOCK_NUM = 8、BLOCK_SIZE = 32,12 处使用点统一改为平台派生值;ONCE_VECTOR_SIZE = 256 按 rule.md §1(明确点名禁止写死)一并删除,改由 LEVEL_MERGE_PARALLEL(=4) * tilingParams.vecLength 推导 —— 950 上 4 × 64 = 256,与原字面量一致 - op_kernel/arch35/..._regbase_common.h:BLOCK_SIZE / B32_BLOCK_NUM / B8_BLOCK_NUM 由 Ops::Base::GetUbBlockSize() 派生;ALIGN_32_FACTOR 派生后与 BLOCK_SIZE 完全同值、名字也不再成立,直接删除,唯一使用点(..._regbase_split_reduce.h 的 calCount)改用 BLOCK_SIZE - op_kernel/arch35/..._regbase_single_row.h:ELEM_PER_REP_FP32 由 V_LENGTH 派生,>>6 / &0x3f 改为除法/取模;AscendC::Max 与 WholeReduceMax 的 repeat stride 字面量 8 改为 BLOCK_PER_REP = VL_SIZE / GetUbBlockSize()。WholeReduceMax 的 (dstRepStride, srcBlkStride, srcRepStride) = (8, 1, 8) 语义**逐参数保持不变** **3. rms_norm_dynamic_mx_quant** - op_kernel/arch35/..._common.h:OUT_ELE_NUM_ONE_BLK 由 VL_B16 / 2 派生 **4. add_rms_norm_dynamic_quant_v2** - op_host/arch35 与 op_kernel/arch35 扫描无写死项,**未改动** ### 未改动、判为可接受或需人工确认的项 | 项 | 判断依据 | |---|---| | MX_BLOCK_SIZE_32 / MX_BLOCK_SIZE_DOUBLE | MX 量化协议块大小,非 UB block | | ALIGN_FACTOR_512 / ALING_FACTOR_512 / RETAINED_SIZE_256 | cacheline / UB 预留 | | ULONG_BIT_LEN = 64、CONST_SIXTY_THREE = 63 | __builtin_clzl 位宽,非 VL | | CONST_EIGHT / CONST_SIXTEEN / CONST_THIRTY_TWO | 向上取 2 的幂的移位量 | | ROW_FACTOR = 128、baseN_{64}、baseM_{128}、MAX_DIM_CNT | tiling 策略起点值 / shape 维度上限,属功能常量 | ### 残留风险(本 PR 未消除,需后续整改) host 侧 levelbuf 预算改为派生后,它与 kernel 侧两个仍写死为 256 的常量之间形成了一个 **没有任何编译期检查兜底**的三方相等关系: | 常量 | 位置 | 作用 | 能否在本 PR 内改 | |---|---|---|---| | 本 PR 的 LEVEL_MERGE_PARALLEL * vecLength | add_rms_norm_dynamic_quant/op_host/arch35 | UB 预算 | 已改为派生 | | RmsNorm::ONCE_VECTOR_SIZE | norm/rms_norm/op_kernel/rms_norm_base.h:48 | level1/2/3Buf_ 的 InitBuffer 尺寸 | **否** —— 该头文件被 A2/A3 kernel include,rms_norm_base.h:187 在 __CCE_AICORE__ == 220 路径上把它当 repStride 用,改动会溢出到 A2/A3 | | NormCommon::ONCE_VECTOR_SIZE | norm_common/op_kernel/reduce_common_regbase.h:71 | 传给 LevelMergeRstd 的 count 与分支阈值 | 技术上可以(arch35 专属),但被约 15 个 norm 算子的 arch35 kernel 共用,回归面远超本 PR | 950 上三者都是 256,行为无变化。方向性风险:若后续平台 VRegSize < 256B,host 侧会**低估** level buffer 的 UB 占用。已在 host 侧注释中把这条不变量和两个字面量的位置写明,留待 rms_norm / norm_common 侧统一整改时一并消除。 ## 关联的Issue #4662 ## 测试 - 所有新引入的 constexpr 派生表达式抽出到独立 static_assert 程序校验:在 950 参数(VRegSize = 256 B,UB block = 32 B)下取值与原字面量**逐个完全一致**(64 / 128 / 256 / 32 / 8) - add_rms_norm_dynamic_quant 全量编译(host + arch35 kernel,dav-3510 后端)通过,**零 error**,binary 正常产出并部署 - **未跑 TTK / 真机**:本 PR 所有改动均为取值不变的等价替换,建议合入前仍补一轮 arch35 的 ST/TTK ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码可移植性整改(去除 VL / UB block 硬编码) ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8438 | 21 天前 | |
fix: torch ops cpp sources Co-authored-by: cong-jiyu<congjiyu@h-partners.com> # message auto-generated for no-merge-commit merge: !8489 merge torch into master fix: torch ops cpp sources Created-by: cong-jiyu Commit-by: cong-jiyu Merged-by: cann-robot Description: ## 描述 本次PR主要修复了 Torch 算子 C++ 源码的路径管理问题,将原本按算子类别(如 activation、matmul、norm、quant)分目录存放的 .cpp 文件统一扁平化到 csrc/ 根目录。同时简化了 OpBuilder 基类,移除 category 参数及相关路径拼接逻辑,并增强了 JIT 编译阶段的错误诊断能力和构建过程中的文件清理机制。 主要改动 OpBuilder 基类重构:移除 __init__ 中的 category 参数,resolve_source 方法简化为直接返回 csrc/{cpp_filename},不再拼接子目录;各子类 sources() 方法统一改用 self.resolve_source("xxx.cpp") 替代原有的硬编码子目录路径。 load 方法增强:新增 ninja 可用性检查,若未安装则抛出明确的 RuntimeError;JIT 编译失败时提供包含常见原因(CANN toolkit 未 source、缺少编译器、缺少 ninja)的诊断信息。 setup.py 打包逻辑适配:_non_python_files 和 _collect_op 中 .cpp 文件的收集路径从 csrc/<category>/ 调整为 csrc/;BuildPyWithOps 新增对 csrc 子目录的处理,构建时清理不属于当前选中算子的残留 .cpp 文件。 install_requires 依赖调整:移除 torch>=2.6.0 和 torch_npu,新增 ninja 作为安装依赖。 ## 关联的Issue [#4690](https://gitcode.com/cann/ops-nn/issues/4690) ## 测试 本地编译构建,查看build目录下的目录层级 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8489 | 23 天前 | |
docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !8709 merge fix-bn-groupnorm-deterministic-doc into master docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 修改内容 修正 aclnnBatchNorm、aclnnBatchNormElemt、aclnnBatchNormBackward、aclnnGroupNormBackward、aclnnRmsNormGrad、aclnnRmsNormGradQuant 六个算子文档中 A5(Ascend 950) 确定性计算描述与代码实际行为不符的问题。 close #4890 ## 问题分析 原描述为「默认非确定性实现,支持通过 aclrtCtxSetSysParamOpt 开启确定性」,未区分芯片版本。代码核查表明: A5(Ascend 950) 的 arch35/regbase kernel 使用 SyncAll 做核间同步,无 SetAtomicAdd;regbase tiling 不检查 GetDeterministic(),不读取 aclrtCtxSetSysParamOpt 设置。因此 A5 实际为默认确定性实现,且不支持通过 aclrtCtxSetSysParamOpt 开启确定性。 ## 代码依据 | 算子 | A5 GetDeterministic() | A5 SetAtomicAdd | A5 同步机制 | |------|-----------------------|-----------------|-------------| | aclnnBatchNorm | 否 | 否 | SyncAll | | aclnnBatchNormElemt | 否 | 否 | 无跨核归约 | | aclnnBatchNormBackward | 否 | 否 | SyncAll | | aclnnGroupNormBackward | 否 | 是(workspace写入) | SyncAll+二分树归约 | | aclnnRmsNormGrad | 否 | 否 | SyncAll | | aclnnRmsNormGradQuant | 否 | 否 | 无跨核归约 | > GroupNormBackward A5 虽使用 SetAtomicAdd 写 workspace,但 SPLIT_COUNT=2 保证每个 workspace slot 仅 2 个核写入,浮点加法交换律(a+b==b+a)保证结果确定;stage2 用 SyncAll + 二分树归约,最终输出无 atomic add。 ## 修改方案 仅修改 A5(Ascend 950) 描述,区分芯片版本描述: | 算子 | A5 描述 | |------|---------| | aclnnBatchNorm | → 默认确定性实现 | | aclnnBatchNormElemt | → 默认确定性实现 | | aclnnBatchNormBackward | → 默认确定性实现 | | aclnnGroupNormBackward | → 默认确定性实现 | | aclnnRmsNormGrad | → 默认确定性实现 | | aclnnRmsNormGradQuant | → 默认确定性实现 | ## 涉及文件 - norm/batch_norm_v3/docs/aclnnBatchNorm.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_elemt/docs/aclnnBatchNormElemt.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_grad_v3/docs/aclnnBatchNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/group_norm_grad/docs/aclnnGroupNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad/docs/aclnnRmsNormGrad.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad_quant/docs/aclnnRmsNormGradQuant.md — 仅 A5 支持,改为默认确定性实现 - docs/zh/op_api_list.md — 同步修正上述 6 个算子的 A5 列 See merge request: cann/ops-nn!8709 | 17 天前 | |
docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !8709 merge fix-bn-groupnorm-deterministic-doc into master docs(norm): 修正 6 个 aclnn 算子 A5 确定性计算描述 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: ## 修改内容 修正 aclnnBatchNorm、aclnnBatchNormElemt、aclnnBatchNormBackward、aclnnGroupNormBackward、aclnnRmsNormGrad、aclnnRmsNormGradQuant 六个算子文档中 A5(Ascend 950) 确定性计算描述与代码实际行为不符的问题。 close #4890 ## 问题分析 原描述为「默认非确定性实现,支持通过 aclrtCtxSetSysParamOpt 开启确定性」,未区分芯片版本。代码核查表明: A5(Ascend 950) 的 arch35/regbase kernel 使用 SyncAll 做核间同步,无 SetAtomicAdd;regbase tiling 不检查 GetDeterministic(),不读取 aclrtCtxSetSysParamOpt 设置。因此 A5 实际为默认确定性实现,且不支持通过 aclrtCtxSetSysParamOpt 开启确定性。 ## 代码依据 | 算子 | A5 GetDeterministic() | A5 SetAtomicAdd | A5 同步机制 | |------|-----------------------|-----------------|-------------| | aclnnBatchNorm | 否 | 否 | SyncAll | | aclnnBatchNormElemt | 否 | 否 | 无跨核归约 | | aclnnBatchNormBackward | 否 | 否 | SyncAll | | aclnnGroupNormBackward | 否 | 是(workspace写入) | SyncAll+二分树归约 | | aclnnRmsNormGrad | 否 | 否 | SyncAll | | aclnnRmsNormGradQuant | 否 | 否 | 无跨核归约 | > GroupNormBackward A5 虽使用 SetAtomicAdd 写 workspace,但 SPLIT_COUNT=2 保证每个 workspace slot 仅 2 个核写入,浮点加法交换律(a+b==b+a)保证结果确定;stage2 用 SyncAll + 二分树归约,最终输出无 atomic add。 ## 修改方案 仅修改 A5(Ascend 950) 描述,区分芯片版本描述: | 算子 | A5 描述 | |------|---------| | aclnnBatchNorm | → 默认确定性实现 | | aclnnBatchNormElemt | → 默认确定性实现 | | aclnnBatchNormBackward | → 默认确定性实现 | | aclnnGroupNormBackward | → 默认确定性实现 | | aclnnRmsNormGrad | → 默认确定性实现 | | aclnnRmsNormGradQuant | → 默认确定性实现 | ## 涉及文件 - norm/batch_norm_v3/docs/aclnnBatchNorm.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_elemt/docs/aclnnBatchNormElemt.md — 分架构描述,A5 改为默认确定性实现 - norm/batch_norm_grad_v3/docs/aclnnBatchNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/group_norm_grad/docs/aclnnGroupNormBackward.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad/docs/aclnnRmsNormGrad.md — 分架构描述,A5 改为默认确定性实现 - norm/rms_norm_grad_quant/docs/aclnnRmsNormGradQuant.md — 仅 A5 支持,改为默认确定性实现 - docs/zh/op_api_list.md — 同步修正上述 6 个算子的 A5 列 See merge request: cann/ops-nn!8709 | 17 天前 | |
规范化修改产品术语名 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 | 29 天前 | |
fix(norm): AddRmsNormQuant / RmsNormQuantV2 arch35 tiling/kernel 去除 UB block 与 VL 硬编码 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8436 merge fix/norm-regbase-vl-hardcode into master fix(norm): AddRmsNormQuant / RmsNormQuantV2 arch35 tiling/kernel 去除 UB block 与 VL 硬编码 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 AddRmsNormQuant / RmsNormQuantV2 的 **regbase(arch35) 路径**把一批平台参数写成了字面量:UB block 大小(32B)、一个 block 容纳的 b32/b8 元素数(8/32)、一次向量操作长度(256B)、全载上限(16384)、align space(256B)。本 PR 改为从平台接口推导: - host 侧: Ops::Base::GetUbBlockSize(context) / Ops::Base::GetVRegSize(context) - kernel 侧:platform::GetUbBlockSize() / GetVRegSize() **当前平台这两个接口返回 32B / 256B,因此本次改动数值全等价,无行为变更:** | 原字面量 | 改后表达式 | 值 | |---|---|---| | R_MAX_VALUE = 16384 | 2 * vecLength * vecLength * 2 | 16384 | | LEVEL_BUFFER_CNT * ONCE_VECTOR_SIZE * sizeof(float) | 3 * 2 * 2 * vecLength * sizeof(float) | 3072 | | B32_BLOCK_NUM * sizeof(float) | ubBlockSize | 32 | | ALIGN_SPACE = 256 | ALIGN_SPACE_BLOCK_NUM * ubBlockSize | 256 | 目的是 UB block 或 VL 变化时不必再逐处翻找字面量。 另外把 kernel 侧 align 成员的默认初值由 32 改为 0,避免 tiling 未下发时静默回落到一个硬编码值。 ## 范围 **只涉及 arch35 / regbase 路径,910 / 310 的 tiling 与 kernel 未触碰。** 本 PR 与 dtype 组合校验的整改(另一个 PR:fix/norm-dtype-check-binary-json)在语义上完全独立,逐 hunk 无交叉;两者已本地验证可无冲突合并,合入顺序不限。 ## 关联的Issue #4663 ## 测试 本地 UT(build.sh -u --ophost --opapi --soc=ascend950,5 个算子): - op_host:69 passed - op_api:25 passed 因本 PR 数值全等价,UT 结果与 baseline 一致,未新增/修改任何用例。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:去除平台参数硬编码,行为等价的可维护性重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8436 | 21 天前 | |
modified md files (update product labels) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !8256 merge master into master modified md files (update product labels) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Update product labels. ## 关联的Issue [#4574](https://gitcode.com/cann/ops-nn/issues/4574) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 norm/group_norm_swish_grad/docs/aclnnGroupNormSwishGrad.md norm/rms_norm_quant_v3/docs/aclnnRmsNormQuantV3.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8256 | 1 个月前 | |
add cases Co-authored-by: zhaogrug<zhaohai16@h-partners.com> # message auto-generated for no-merge-commit merge: !8026 merge the_rest_of_cases into master add cases Created-by: zhaogrug Commit-by: zhaogrug Merged-by: cann-robot Description: ## 描述 新增仓内新版ttk用例 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue [#4386](https://gitcode.com/cann/ops-nn/issues/4386) <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 冒烟测试,本地验证 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:用例添加 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8026 | 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 | 1 个月前 | |
refactor: rename AscendC MicroAPIs in 4 arch35 operator kernels (batch5) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8429 merge rename-api-batch5 into master refactor: rename AscendC MicroAPIs in 4 arch35 operator kernels (batch5) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 对 4 个算子的 arch35 kernel 实现进行 AscendC MicroAPI 接口重命名,以同步 AscendC SDK 新版本的 API 命名规范。 ### 改动原因 AscendC SDK 新版本对 MicroAPI 接口命名进行了系统性调整(地址空间限定符统一、加载/存储方向接口拆分、Mask 相关接口去前缀化等),算子代码需同步更新以使用新 API 名称,旧名称将在后续版本废弃。 ### 改动方法 纯机械重命名,不涉及任何逻辑变更。共修改 7 个文件,333 行增 + 333 行删(一一对应替换)。 ### 涉及算子(4 个) | 算子 | 目录 | 修改文件数 | |------|------|-----------| | unique_consecutive | index/unique_consecutive | 1 | | sync_batch_norm_gather_stats | norm/sync_batch_norm_gather_stats | 2 | | swiglu_mx_quant | quant/swiglu_mx_quant | 3 | | swiglu_mx_quant_with_dual_axis | quant/swiglu_mx_quant_with_dual_axis | 1 | ### 变更文件列表(7 个) | 文件 | +行 | -行 | |------|-----|-----| | index/unique_consecutive/op_kernel/arch35/unique_consecutive_helper.h | 83 | 83 | | norm/sync_batch_norm_gather_stats/op_kernel/arch35/sync_batch_norm_gather_stats_n_full_load.h | 22 | 22 | | norm/sync_batch_norm_gather_stats/op_kernel/arch35/sync_batch_norm_gather_stats_n_not_full_load.h | 52 | 52 | | quant/swiglu_mx_quant/op_kernel/arch35/swiglu_mx_quant_axis_last.h | 13 | 13 | | quant/swiglu_mx_quant/op_kernel/arch35/swiglu_mx_quant_axis_not_last.h | 6 | 6 | | quant/swiglu_mx_quant/op_kernel/arch35/swiglu_mx_quant_common.h | 96 | 96 | | quant/swiglu_mx_quant_with_dual_axis/op_kernel/arch35/swiglu_mx_quant_with_dual_axis_regbase.h | 61 | 61 | | **合计** | **333** | **333** | ### API 改名映射 | 旧 API | 新 API | 说明 | |--------|--------|------| | __local_mem__ | __ubuf__ | 地址空间限定符统一(128 处) | | MicroAPI::DataCopy(加载)/ 裸 DataCopy | MicroAPI::LoadAlign / LoadAlign | 对齐加载 | | MicroAPI::DataCopy(存储) | MicroAPI::StoreAlign | 对齐存储 | | MicroAPI::DataCopyUnAlign(加载) | MicroAPI::LoadUnAlign | 非对齐加载 | | MicroAPI::DataCopyUnAlign(存储) | MicroAPI::StoreUnAlign | 非对齐存储 | | MicroAPI::DataCopyUnAlignPre | MicroAPI::LoadUnAlignPre | 非对齐加载预处理 | | MicroAPI::DataCopyUnAlignPost | MicroAPI::StoreUnAlignPost | 非对齐存储后处理(8 处) | | MicroAPI::CompareScalar | MicroAPI::Compares | 标量比较(41 处) | | MicroAPI::MaskAnd | MicroAPI::And | Mask 按位与(11 处) | | MicroAPI::MaskUnPack | MicroAPI::UnPack | Mask 解包(16 处) | | MicroAPI::MaskPack | MicroAPI::Pack | Mask 打包 | | MicroAPI::GatherMask(函数) | MicroAPI::Squeeze | GatherMask 函数更名(GatherMaskMode 枚举不变) | | MicroAPI::UnalignReg | MicroAPI::UnalignRegForLoad / MicroAPI::UnalignRegForStore | 按加载/存储方向拆分 | ## 关联的Issue - #4652 https://gitcode.com/cann/ops-nn/issues/4652 ## 测试 - 二进制一致性验证:对重命名前后的 7 个 kernel 分别编译生成 .o 文件,逐字节对比无差异,确认重命名为纯机械替换、不影响生成代码。 - 无新增/删除逻辑,无需补充功能测试用例。 ## 文档更新 无。本次为纯 API 重命名,不涉及接口语义或使用方式变化。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:重构(AscendC API 重命名同步) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8429 | 24 天前 | |
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 | 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 | 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 | 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 | 8 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 23 天前 | ||
| 16 天前 | ||
| 21 天前 | ||
| 1 个月前 | ||
| 23 天前 | ||
| 20 天前 | ||
| 21 天前 | ||
| 21 天前 | ||
| 1 个月前 | ||
| 21 天前 | ||
| 25 天前 | ||
| 18 天前 | ||
| 17 天前 | ||
| 21 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 29 天前 | ||
| 17 天前 | ||
| 18 天前 | ||
| 1 个月前 | ||
| 24 天前 | ||
| 23 天前 | ||
| 1 个月前 | ||
| 16 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 17 天前 | ||
| 21 天前 | ||
| 1 个月前 | ||
| 29 天前 | ||
| 1 个月前 | ||
| 17 天前 | ||
| 24 天前 | ||
| 17 天前 | ||
| 24 天前 | ||
| 1 个月前 | ||
| 29 天前 | ||
| 21 天前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 1 个月前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 1 个月前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 1 个月前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 28 天前 | ||
| 24 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 22 天前 | ||
| 21 天前 | ||
| 23 天前 | ||
| 17 天前 | ||
| 17 天前 | ||
| 29 天前 | ||
| 21 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 24 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 8 个月前 |