| fix(nn): release resources on init failure in aclnn examples and docs Co-authored-by: wangjun03<wangjun01@nuaa.edu.cn> # message auto-generated for no-merge-commit merge: !8693 merge fix/init-failure-resource-release-nn into master fix(nn): release resources on init failure in aclnn examples and docs Created-by: wangjun03 Commit-by: wangjun03 Merged-by: cann-robot Description: ## 描述 修复 NN/Transformer 类算子调用示例在初始化失败场景下资源释放不完整的问题。 - aclrtSetDevice 失败时,在返回前调用 aclFinalize,释放已初始化的 ACL 资源。 - aclrtCreateStream 失败时,在返回前依次调用 aclrtResetDevice 和 aclFinalize,释放已设置的 Device 及 ACL 资源。 - 保留原有 CHECK_RET 写法和正常执行路径的资源释放顺序。 - 同步修改文档示例和对应的可执行示例源码,保证两处代码一致。 本次修改参考仓库内 PR #8603(aclnnSoftmax)的修复方式,仅补齐资源释放逻辑,不涉及算子 Tiling、Kernel 和计算功能变更。 ## 涉及算子 ### activation(4 个算子,8 个文件) - **SoftmaxV2**:aclnnSoftmax - **LogSoftmaxV2**:aclnnLogSoftmax - **SoftmaxGrad**:aclnnSoftmaxBackward - **LogSoftmaxGrad**:aclnnLogSoftmaxBackward ### norm(23 个算子,56 个文件) - **GroupNormGrad**:aclnnGroupNormBackward - **LpNormV2**:aclnnLinalgVectorNorm、aclnnNorm - **LayerNormV4**:aclnnLayerNorm、aclnnFastLayerNorm - **LayerNormGradV3**:aclnnLayerNormBackward - **AddLayerNorm**:aclnnAddLayerNorm - **AddLayerNormQuant**:aclnnAddLayerNormQuant - **AddRmsNorm**:aclnnAddRmsNorm - **AddRmsNormCast**:aclnnAddRmsNormCast - **AddRmsNormQuant**:aclnnAddRmsNormQuant - **AddRmsNormDynamicQuant**:aclnnAddRmsNormDynamicQuant、aclnnAddRmsNormDynamicQuantV2 - **AddRmsNormDynamicMxQuant**:aclnnAddRmsNormDynamicMxQuant - **RmsNormDynamicMxQuant**:aclnnRmsNormDynamicMxQuant - **RmsNormGradQuant**:aclnnRmsNormGradQuant - **RmsNormQuantV3**:aclnnRmsNormQuantV3 - **BatchNormV3**:aclnnBatchNorm、aclnnBatchNormElemt - **BatchNormGradV3**:aclnnBatchNormBackward、aclnnFastBatchNormBackward - **RmsNorm**:aclnnRmsNorm - **RmsNormGrad**:aclnnRmsNormGrad - **InplaceAddRmsNorm**:aclnnInplaceAddRmsNorm - **SyncBatchNormBackwardElemt**:aclnnBatchNormElemtBackward - **SyncBatchNormBackwardReduce**:aclnnBatchNormReduceBackward - **SyncBatchNormGatherStats**:aclnnSyncBatchNormGatherStats ### experimental 镜像(8 个文件) - experimental/activation: LogSoftmaxV2 - experimental/loss: SoftmaxGrad - experimental/norm: SyncBatchNormBackwardElemt、SyncBatchNormBackwardReduce、SyncBatchNormGatherStats ## 关联的 Issue Issue #4745 ## 测试 - git diff --check:通过。 - 本次仅修改调用示例的异常处理逻辑,未执行 NPU 运行测试。 ## 文档更新 - 更新上述算子 docs/ 目录下的 aclnn*.md 中的调用示例。 - 同步更新 examples/ 目录下的 test_aclnn_*.cpp 可执行示例源码。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8693 | 25 天前 |
| fix(nn): release resources on init failure in aclnn examples and docs Co-authored-by: wangjun03<wangjun01@nuaa.edu.cn> # message auto-generated for no-merge-commit merge: !8693 merge fix/init-failure-resource-release-nn into master fix(nn): release resources on init failure in aclnn examples and docs Created-by: wangjun03 Commit-by: wangjun03 Merged-by: cann-robot Description: ## 描述 修复 NN/Transformer 类算子调用示例在初始化失败场景下资源释放不完整的问题。 - aclrtSetDevice 失败时,在返回前调用 aclFinalize,释放已初始化的 ACL 资源。 - aclrtCreateStream 失败时,在返回前依次调用 aclrtResetDevice 和 aclFinalize,释放已设置的 Device 及 ACL 资源。 - 保留原有 CHECK_RET 写法和正常执行路径的资源释放顺序。 - 同步修改文档示例和对应的可执行示例源码,保证两处代码一致。 本次修改参考仓库内 PR #8603(aclnnSoftmax)的修复方式,仅补齐资源释放逻辑,不涉及算子 Tiling、Kernel 和计算功能变更。 ## 涉及算子 ### activation(4 个算子,8 个文件) - **SoftmaxV2**:aclnnSoftmax - **LogSoftmaxV2**:aclnnLogSoftmax - **SoftmaxGrad**:aclnnSoftmaxBackward - **LogSoftmaxGrad**:aclnnLogSoftmaxBackward ### norm(23 个算子,56 个文件) - **GroupNormGrad**:aclnnGroupNormBackward - **LpNormV2**:aclnnLinalgVectorNorm、aclnnNorm - **LayerNormV4**:aclnnLayerNorm、aclnnFastLayerNorm - **LayerNormGradV3**:aclnnLayerNormBackward - **AddLayerNorm**:aclnnAddLayerNorm - **AddLayerNormQuant**:aclnnAddLayerNormQuant - **AddRmsNorm**:aclnnAddRmsNorm - **AddRmsNormCast**:aclnnAddRmsNormCast - **AddRmsNormQuant**:aclnnAddRmsNormQuant - **AddRmsNormDynamicQuant**:aclnnAddRmsNormDynamicQuant、aclnnAddRmsNormDynamicQuantV2 - **AddRmsNormDynamicMxQuant**:aclnnAddRmsNormDynamicMxQuant - **RmsNormDynamicMxQuant**:aclnnRmsNormDynamicMxQuant - **RmsNormGradQuant**:aclnnRmsNormGradQuant - **RmsNormQuantV3**:aclnnRmsNormQuantV3 - **BatchNormV3**:aclnnBatchNorm、aclnnBatchNormElemt - **BatchNormGradV3**:aclnnBatchNormBackward、aclnnFastBatchNormBackward - **RmsNorm**:aclnnRmsNorm - **RmsNormGrad**:aclnnRmsNormGrad - **InplaceAddRmsNorm**:aclnnInplaceAddRmsNorm - **SyncBatchNormBackwardElemt**:aclnnBatchNormElemtBackward - **SyncBatchNormBackwardReduce**:aclnnBatchNormReduceBackward - **SyncBatchNormGatherStats**:aclnnSyncBatchNormGatherStats ### experimental 镜像(8 个文件) - experimental/activation: LogSoftmaxV2 - experimental/loss: SoftmaxGrad - experimental/norm: SyncBatchNormBackwardElemt、SyncBatchNormBackwardReduce、SyncBatchNormGatherStats ## 关联的 Issue Issue #4745 ## 测试 - git diff --check:通过。 - 本次仅修改调用示例的异常处理逻辑,未执行 NPU 运行测试。 ## 文档更新 - 更新上述算子 docs/ 目录下的 aclnn*.md 中的调用示例。 - 同步更新 examples/ 目录下的 test_aclnn_*.cpp 可执行示例源码。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8693 | 25 天前 |
| fix(proto): 修复 norm/softmax 算子 proto 注释拼写/语法/描述错误 Co-authored-by: sun-yibo1<sunyibo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !9032 merge fix-proto-comment-typos into master fix(proto): 修复 norm/softmax 算子 proto 注释拼写/语法/描述错误 Created-by: sun-yibo1 Commit-by: sun-yibo1 Merged-by: cann-robot Description: ## 描述 修复 21 个算子 proto 头文件中 Doxygen 注释的拼写、语法、描述错误与公式括号不匹配问题。所有改动仅涉及注释文本,不改动任何 REG_OP 定义。 ### 改动原因 proto 头文件的 Doxygen 注释存在拼写错误、语法错误(冠词/单复数/主谓一致)、描述误导(输入描述与实际语义不符)以及 rstd 公式多余的右括号等问题,会误导接口使用者。 ### 改动方法 仅修改注释文本,不改动 REG_OP/INPUT/OUTPUT/ATTR/DATATYPE 等代码定义。同时按 pre-commit clang-format 要求对部分文件做格式化。 ### 涉及修复 **拼写错误:** - normlization→normalization、while→will(AddLayerNormQuant) - smooth_scales1/2→smooth_scale1/2(AddRmsNormDynamicQuant,4 处) - listBool→ListBool(AddRmsNormDynamicQuant/V2) - secend→second、opertaion→operation(AddRmsNormQuant) - reseluts→results(BatchNormGrad) - support→supported(BatchNormV3) - dype→type(GroupNormV2,4 处) - Layernorm→LayerNorm、中文或→or、全角,→ASCII(LayerNorm) - \file 文件名错误 nn_norm_ops.h→layer_norm_grad_proto.h(LayerNormGrad) **语法错误(~20 处):** - A optional→An optional(AddLayerNorm/InplaceAddRmsNorm/InstanceNorm) - A ND tensor→An ND tensor(SoftmaxV2/LogSoftmaxGrad/ConfusionSoftmaxGrad) - An required→A required(GroupNormV2) - support→supports(SoftmaxV2/BroadcastGradientArgs/AddRmsNormDynamicMxQuant) - 缺复数 s:input→inputs、output→outputs、group→groups(GroupNormGrad/V2) **描述错误:** - GroupNormGrad:x 输入描述从 the offset 改为 input tensor **公式括号(7 处):** - rstd 公式多余的右括号 ))→)(AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicMxQuant/AddRmsNormDynamicQuant/AddRmsNormQuant/AddRmsNormQuantV2/InplaceAddRmsNorm) ## 关联的Issue - #4989 ## 测试 - 仅注释修改,无代码变更,不影响编译与功能。 - pre-commit 全部 hook 通过(trailing-whitespace/end-of-file-fixer/clang-format/codespell/check-*/detect-private-key);OAT 合规检查 0 issues。 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9032 | 1 天前 |
| 【mc62】workspaceSize硬编码16M大小,替换为通过接口获取,ascendcPlatform.GetLibApiWorkSpaceSize(); Co-authored-by: xufeng12121<1074805447@qq.com> # message auto-generated for no-merge-commit merge: !10415 merge nn_work into master 【mc62】workspaceSize硬编码16M大小,替换为通过接口获取,ascendcPlatform.GetLibApiWorkSpaceSize(); Created-by: xufeng12121 Commit-by: xufeng12121 Merged-by: cann-robot Description: ## 描述 1. 背景:mc62算子workspace占用对比1951增大 2. 由于mc62代码和A5是onetrack, 所有workspacesize硬编码为16M, 在mc62上也同样是16M,asc 提供接口,对mc62进行区分,从原来的16M 变成1K,A5和A2大小不变。 3. 修改:算子侧tiling中硬编码为16M大小的workspacesize统一改为用接口获取。 GetLibApiWorkSpaceSize实现如下: const static uint32_t WORK_SPACE_SIZE_910B = 16 * 1024 * 1024; const static uint32_t WORK_SPACE_SIZE_950 = 16 * 1024 * 1024; const static uint32_t WORK_SPACE_SIZE = 1024; uint32_t PlatformAscendC::GetLibApiWorkSpaceSize(void) const { auto npuArch = GetCurNpuArch(); if (npuArch == NpuArch::DAV_RESV) { PF_LOGE("get platform failed, CurNpuArch is NpuArch::DAV_RESV"); return -1; } else if (npuArch == NpuArch::DAV_2201) { return WORK_SPACE_SIZE_910B; } else if (npuArch == NpuArch::DAV_3510) { return WORK_SPACE_SIZE_950; } return WORK_SPACE_SIZE; } ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5979 ## 测试 1.单算子框架测试通过 2.二级冒烟通过 文档更新 类型标签 - [x] Bug修复 See merge request: cann/ops-nn!10415 | 18 小时前 |
| fix(add_layer_norm): 修正 welford finalize 的归约系数精度 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !10097 merge aln_294 into master fix(add_layer_norm): 修正 welford finalize 的归约系数精度 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 修正 arch35(Regbase)平台上 add_layer_norm / add_layer_norm_quant 算子 Welford finalize 阶段的归约系数精度问题。 原实现中归约系数 reduceScale = 1.0f / cols_(单次浮点除法),在 Welford 并行归约迭代过程中累积舍入误差,导致 mean/rstd 输出精度下降。 ### 改动原因 add_layer_norm_regbase_welford.h 中 Welford finalize 阶段使用 reduceScale = 1.0f / cols_ 作为归约系数。该值为单次浮点除法结果,在并行归约的多次迭代中反复参与运算,累积舍入误差,影响 mean/rstd 的最终精度。非对齐场景(VFWelfordParallelFinalizeNonAlignSituation1/2/3)和对齐场景(VFWelfordParallelFinalizeAlign)均存在此问题。 ### 改动方法 将归约系数拆分为两部分,分离精确的 2 的幂倒数和修正系数: 1. **reduceScale_ = 1.0f / reducePowerOfTwo**(reducePowerOfTwo 为不小于 cols_ 的最小 2 的幂):2 的幂倒数在 IEEE 754 中精确表示,归约迭代中无舍入误差累积。 2. **reduceScaleCorrection_ = reducePowerOfTwo / cols_**:修正系数,在 DichotomyAdd 完成后通过 Muls 一次性修正。 最终数学等价:sum * (1/reducePowerOfTwo) * (reducePowerOfTwo/cols_) = sum / cols_,但精度提升:归约过程使用精确的 2 的幂倒数,仅最终一次 Muls 引入单次舍入。 具体变更: - **add_layer_norm_regbase_common.h**(+17 -7):VFWelfordParallelFinalizeNonAlignSituation1/2/3 及 dispatcher VFWelfordParallelFinalizeNonAlign 新增 reduceScaleCorrection 参数,在 DichotomyAdd 后对 mean/var 执行 Muls(..., reduceScaleCorrection, ...)。 - **add_layer_norm_regbase_welford.h**(+18 -6):新增 reduceScale_ / reduceScaleCorrection_ 成员,Init 中计算 reducePowerOfTwo;对齐场景同样拆分 scale = 1/powerOfTwo_(精确)+ scaleCorrection = powerOfTwo_/colsPerLoop_(修正),VFWelfordParallelFinalizeAlign 新增 scaleCorrection 参数并在 DichotomyAdd 后修正 mean/var;调用处改用预计算成员。 - **add_layer_norm_quant_regbase_helper.h**(+1 -1):quant 路径调用 VFWelfordParallelFinalizeNonAlign 时传 reduceScaleCorrection = 1.0f(quant 侧无需修正)。 涉及文件: - norm/add_layer_norm/op_kernel/arch35/add_layer_norm_regbase_common.h(+17 -7) - norm/add_layer_norm/op_kernel/arch35/add_layer_norm_regbase_welford.h(+18 -6) - norm/add_layer_norm_quant/op_kernel/arch35/add_layer_norm_quant_regbase_helper.h(+1 -1) ## 关联的Issue -https://gitcode.com/cann/ops-nn/pull/8804 ## 测试 - 在 arch35(Regbase)平台上验证 add_layer_norm / add_layer_norm_quant 算子 mean/rstd 输出精度提升。 - 覆盖对齐和非对齐 cols 场景。 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10097 | 9 天前 |
| fix(add_layer_norm_quant): 修复static量化空Tensor场景 Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !9903 merge alnq_empty into master fix(add_layer_norm_quant): 修复static量化空Tensor场景 Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 修复 aclnnAddLayerNormQuant 算子在 static 量化场景下空 Tensor 处理不完整的问题。 static 量化场景下 outScales 输出无实际意义(static 量化使用 input scales,不依赖 output scales)。原代码在 Regbase(Ascend950)架构上的空 Tensor 早返回判断条件为 outScales1Out->IsEmpty():当 x1 为空但 outScales1Out 不为空时,该条件不成立,算子未走早返回,继续执行导致问题。 ### 改动原因 aclnnAddLayerNormQuantGetWorkspaceSize 中 Regbase 架构的空 Tensor 早返回判断条件 outScales1Out->IsEmpty() 不适用于 static 量化场景:static 量化下 outScales 无实际意义,其是否为空不能作为空 Tensor 的判据。当 x1 为空但 outScales1Out 非空时,未走早返回路径,算子执行异常。 ### 改动方法 1. 引入 IsDynamicQuant(quantMode) 区分 dynamic/static 量化(已有函数)。 2. 新增 regbaseEmptySkip 判据:dynamic 量化看 outScales1Out->IsEmpty(),static 量化看 x1->IsEmpty(),将 Regbase 空 Tensor 早返回条件由 outScales1Out->IsEmpty() 改为 regbaseEmptySkip,正确覆盖 static 量化下 x1 为空tensor的场景。 3. 新增 2 个 UT 用例: - static_outer_axis_empty:x1={0,64}、gamma={64},验证 outer axis 为空时返回 ACL_SUCCESS 且 workspaceSize==0。 - static_normalized_axis_empty:x1={2,0}、gamma={0},验证归一化轴为空时返回 ACL_SUCCESS 且 workspaceSize==0。 4. 整理测试文件头部 license 文本格式。 涉及文件: - norm/add_layer_norm_quant/op_host/op_api/aclnn_add_layer_norm_quant.cpp(+3 -2) - norm/add_layer_norm_quant/tests/ut/op_host/op_api/test_aclnn_add_layer_norm_quant.cpp(+62 -6) ## 关联的Issue -https://gitcode.com/cann/ops-nn/issues/5639 ## 测试 - 新增 UT 用例 static_outer_axis_empty(x1={0,64})和 static_normalized_axis_empty(x1={2,0}),验证 static 量化场景下空 Tensor 返回 ACL_SUCCESS 且 workspaceSize==0。 - 测试环境:SocVersion::ASCEND950。 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9903 | 7 天前 |
| AddLayerNorm/AddLayerNormQuant/AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicQuant/AddRmsNormQuant/InplaceAddRmsNorm/RmsNorm/RmsNormGrad算子支持下一代芯片 Co-authored-by: cai-chengchao<caichengchao1@h-partners.com> # message auto-generated for no-merge-commit merge: !993 merge nn_ops_fix_1 into master AddLayerNorm/AddLayerNormQuant/AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicQuant/AddRmsNormQuant/InplaceAddRmsNorm/RmsNorm/RmsNormGrad算子支持下一代芯片 Created-by: cai-chengchao Commit-by: cai-chengchao Merged-by: cann-robot Description: ## 描述 AddLayerNorm/AddLayerNormQuant/AddRmsNorm/AddRmsNormCast/AddRmsNormDynamicQuant/AddRmsNormQuant/InplaceAddRmsNorm/RmsNorm/RmsNormGrad算子支持下一代芯片 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!993 | 7 个月前 |
| modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !6050 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Mofify redundant spaces, such as those between Chinese and English characters. ## 关联的Issue [#3317](https://gitcode.com/cann/ops-nn/issues/3317) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!6050 | 3 个月前 |