| Files | Last commit | Last update |
|---|---|---|
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 | 4 months ago | |
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 | 4 months ago | |
legacy下线:整改NN算子图模式注册与日志规范 Co-authored-by: zhouxuan78<zhouxuan78@huawei.com> # message auto-generated for no-merge-commit merge: !8388 merge master into master legacy下线:整改NN算子图模式注册与日志规范 Created-by: zhouxuan78 Commit-by: zhouxuan78 Merged-by: cann-robot Description: ## 描述 本 PR 用于 ops-nn 仓 Legacy 下线整改,补齐部分算子的直调/图模式注册、InferShape / InferDataType 拆分、日志规范整改及必要的编译/预提交问题修复。 1. 补齐多个算子的 op_graph 侧 InferDataType / graph infer 注册文件,并同步补充对应 CMakeLists.txt: - 如 FastGeluV2、HardShrinkGrad、HardSigmoidGrad、HardSwish、HardSwishGrad、Selu、SeluGrad、Shrink、SoftplusGrad、SoftplusV2、SoftplusV2Grad、Softsign、SoftsignGrad、SmoothL1Loss、SoftMarginLoss、LpNormUpdateV2、ApplyFtrlV2、ApplyMomentum、ApplyRMSProp 等。 2. 调整部分算子的 op_host infer 文件: - 将 InferDataType 逻辑从 infershape 文件中拆分/迁移到 op_graph 侧; - 保留 InferShape 逻辑,避免 shape/type 混在同一处注册; - 收敛 IndexCheck infershape 日志,仅保留入口日志。 3. 补充 SoftMarginLoss 图模式原型: - 新增 loss/soft_margin_loss/op_graph/soft_margin_loss_proto.h; - 新增 OPS_PROTO_DEF_SOFTMARGINLOSS 去重宏,避免重复注册; - 补充 SoftMarginLoss 的 op_graph/CMakeLists.txt 和 graph infer 注册。 4. 日志整改: - 为 Arch35 tiling 入口补充统一入口日志; - 对本 PR 修改范围内新增/调整的外部输入错误日志,按规范使用 OP_LOGE_FOR_INVALID_* 系列上报接口; - 收敛部分过多的 tiling / infershape 日志打印,避免循环或冗余打印。 5. 回退/收敛不属于本次整改范围的 Softshrink 重命名相关改动: - Softshrink -> SoftShrink 的命名调整不放在本 PR 中,后续单独 PR 处理。 6. 修复 pre-commit 格式问题: - 按仓库 .clang-format 修复格式; - 不修改 .pre-commit-config.yaml。 影响范围 主要影响 activation、index、loss、norm、optim、quant、vfusion 等目录下 Legacy 下线相关算子的 op_graph 注册、InferDataType 拆分、tiling 入口日志和错误日志规范。 ## 变更内容 ## 关联的Issue ## 测试 ## 文档更新 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:Legacy包下线整改 See merge request: cann/ops-nn!8388 | 2 months ago | |
fix(bnll): improve log1p precision Co-authored-by: aqt666<2016141505@qq.com> # message auto-generated for no-merge-commit merge: !9327 merge fix/bnll-log1p-precision into master fix(bnll): improve log1p precision Created-by: aqt666 Commit-by: aqt666 Merged-by: cann-robot Description: ## 描述 修复 BNLL 在小指数值区域计算 log(1 + exp(-abs(x))) 时的精度损失。 原实现直接执行 Adds(1, e) + Ln。当 e 较小时,1 + e 的 float32 舍入会放大最终误差。本次修改参考 CANN softplus_v2 的补偿式 log1p 实现: log1p(e) = log(1 + e) * e / ((1 + e) - 1) 当 1 + e == 1 时回退为 e,同时调整 Mul、Div 的缓冲使用方式,避免输入输出缓冲别名问题。 本次仅修改: activation/bnll/op_kernel/arch35/bnll.h 不涉及接口、tiling、shape推导和数据类型支持变更。 ## 关联的Issue 关联 Issue [#5235](https://gitcode.com/cann/ops-nn/issues/5235) ## 测试 测试环境: - SoC:Ascend950DT_9592 - CANN:9.2.0 - TTK:3.0.0 - 测试模式:Kernel Bin release - 比对方式:--compare close - Golden模式:Promote 测试结果: - 全量用例:1096/1096 PASS - float32:548/548 PASS - float16:548/548 PASS - 覆盖标量、空Tensor、非对齐长度、多维shape、阈值附近数值及极值场景 - 真实RTX 4060 CUDA输出与NPU输入通过SHA256 strict一致性校验 - 未发现超过既定 rtol=0.003, atol=1e-6 容差的数值错误 ## 文档更新 无文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9327 | 2 months ago | |
fix(golden): avoid overflow in unselected BNLL branches Co-authored-by: Ethan_Zou<tianjun.zou@foxmail.com> # message auto-generated for no-merge-commit merge: !11477 merge fix/bnll-golden-branch-overflow-20261007 into master fix(golden): avoid overflow in unselected BNLL branches Created-by: Ethan_Zou Commit-by: Ethan_Zou Merged-by: cann-robot Description: ## 当前版权规范修正 按仓库贡献规范及上游同类文件模板修正新增文件版权声明;当前唯一源提交 f73c7a132130e24548591ce7f57494fc8044ce13。相对上一提交,本次只改版权声明行,所有其他代码及许可证文字逐字一致。原提交的 CI 结果保留为历史记录;当前 SHA 的新流水线需重新核对,不能用旧结果代替。 ## 描述 Fixes #6373。BNLL NumPy Kernel golden用np.where实现分段,但两个分支 先求值,大输入会在未选exp分支溢出,-inf在未选分支中产生invalid。 默认错误策略下结果通常仍正确,但有无意义RuntimeWarning;严格 warnings/NumPy错误策略导致golden生成失败。本PR只修Host参考计算, 不报告NPU输出错误。 使用max(x,0)+log1p(exp(-abs(x))),所有exp输入非正,与仓内arch35 kernel的稳定形式一致;保留float64中间精度、输入dtype/shape及特殊值。 AST确认唯一生产语义修改是result表达式;其余为原生Ruff等价格式。 未改kernel/tiling、容差、门禁或检查规则。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6373 ## 测试 仓库根目录: sh python3 activation/bnll/tests/assets/test_bnll_golden_branch_overflow.py pre-commit run --files activation/bnll/tests/assets/golden.py \ activation/bnll/tests/assets/test_bnll_golden_branch_overflow.py \ activation/bnll/README.md Host Python3.12.14/NumPy2.3.5/CPU Torch2.14.1:同一最终测试32个场景, 基线20异常/12控制,修复32通过/0skip。Profile确认每轮32次实际注册 bnll_golden调用,未复制逻辑或mock计算。FP16/FP32,RuntimeWarning 作为错误及NumPy overflow/invalid='raise'两策略;大正负标量、有限 极值向量、矩阵、inf/-inf/NaN、普通值、空向量及(2,0)空矩阵。 CPU TorchDouble logaddexp独立参考;检查dtype/shape/精确数值/输入字节。 underflow仍ignore,与本项overflow/invalid无关,未宣称任意全raise策略。 三修改文件全部适用原生基础/Ruffcheck+format/codespell/OATwrapper 通过,OAT0非法类型/版权头;BSDsed兼容warning保留。clang按类型无 适用文件,无C++修改。没有TTK设备执行、CANN完整构建、算子UT或 NPU精度/性能结果。原生pre-push-build未安装,未通过任何旁路选项跳过。 基线95b0d8c04245d7136125b7b4e9b2c1dc83c5b0e0;源提交 f73c7a132130e24548591ce7f57494fc8044ce13,只有一个 Ethan_Zou提交。若CI需修复将amend保持一个。 查重6181唯一全状态Issue+最新首100、332开放PR4页。#5235的kernel 小指数精度补偿及#10934的24文件设备精度/tiling/UT修改均不同,后者 没有修改该注册golden。保留原Huawei版权,新测试真实Ethan2026CANN2。 ## 文档更新 BNLL README新增Host命令、稳定公式及验证范围说明。 ## 类型标签 - [x] Bug修复 - [x] 文档更新 - [ ] 新特性 - [ ] 性能优化 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写:Codex调查、修复和Host验证;/compile后回查CI。 ## 当前 CI 核验 源 SHA f73c7a132130e24548591ce7f57494fc8044ce13,远端源提交数 1。流水线 52aa87cc439b45f88f07447e6d52b655 已 COMPLETED,64/64 任务完成,0 条件跳过;本地新增 Host golden 回归范围见上方,未将该回归声称为远端 NPU 精度测试。 See merge request: cann/ops-nn!11477 | 21 days ago | |
[CANNBOT]bnll, celu, relu6, apply_adadelta, apply_adamax, apply_proximal_gradient_descent, apply_rms_prop适配Ascend950 Ascendc实现 Co-authored-by: gcw_YBIAEfqJ<wangweidong15@huawei.com> # message auto-generated for no-merge-commit merge: !5303 merge 0525 into master [CANNBOT]bnll, celu, relu6, apply_adadelta, apply_adamax, apply_proximal_gradient_descent, apply_rms_prop适配Ascend950 Ascendc实现 Created-by: gcw_YBIAEfqJ Commit-by: gcw_YBIAEfqJ Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ┌──────────────────────────────┬────────┬─────────────────────────────────────────────────────────┐ │ 算子 │ 类型 │ 关键公式 │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ BNLL │ 激活 │ $\ln(1+e^x)$ │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ Celu │ 激活 │ 正区常数 $3\alpha_3$,负区 $\alpha_1(e^{x/\alpha_2}-1)$ │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ Relu6 │ 激活 │ $\min(\max(x,0),6)$ │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ ApplyAdadelta │ 优化器 │ 自适应学习率,$\sqrt{accum_update}/\sqrt{accum}$ 缩放 │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ ApplyAdaMax │ 优化器 │ Adam 变体,$L_\infty$ 替代二阶矩 │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ ApplyProximalGradientDescent │ 优化器 │ SGD + L1/L2 近端算子 │ ├──────────────────────────────┼────────┼─────────────────────────────────────────────────────────┤ │ ApplyRMSProp │ 优化器 │ 梯度平方滑动平均 + 动量 │ └──────────────────────────────┴────────┴─────────────────────────────────────────────────────────┘ ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/2884 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> OBP冒烟: 二级冒烟: ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5303 | 5 months ago | |
fix(golden): avoid overflow in unselected BNLL branches Co-authored-by: Ethan_Zou<tianjun.zou@foxmail.com> # message auto-generated for no-merge-commit merge: !11477 merge fix/bnll-golden-branch-overflow-20261007 into master fix(golden): avoid overflow in unselected BNLL branches Created-by: Ethan_Zou Commit-by: Ethan_Zou Merged-by: cann-robot Description: ## 当前版权规范修正 按仓库贡献规范及上游同类文件模板修正新增文件版权声明;当前唯一源提交 f73c7a132130e24548591ce7f57494fc8044ce13。相对上一提交,本次只改版权声明行,所有其他代码及许可证文字逐字一致。原提交的 CI 结果保留为历史记录;当前 SHA 的新流水线需重新核对,不能用旧结果代替。 ## 描述 Fixes #6373。BNLL NumPy Kernel golden用np.where实现分段,但两个分支 先求值,大输入会在未选exp分支溢出,-inf在未选分支中产生invalid。 默认错误策略下结果通常仍正确,但有无意义RuntimeWarning;严格 warnings/NumPy错误策略导致golden生成失败。本PR只修Host参考计算, 不报告NPU输出错误。 使用max(x,0)+log1p(exp(-abs(x))),所有exp输入非正,与仓内arch35 kernel的稳定形式一致;保留float64中间精度、输入dtype/shape及特殊值。 AST确认唯一生产语义修改是result表达式;其余为原生Ruff等价格式。 未改kernel/tiling、容差、门禁或检查规则。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6373 ## 测试 仓库根目录: sh python3 activation/bnll/tests/assets/test_bnll_golden_branch_overflow.py pre-commit run --files activation/bnll/tests/assets/golden.py \ activation/bnll/tests/assets/test_bnll_golden_branch_overflow.py \ activation/bnll/README.md Host Python3.12.14/NumPy2.3.5/CPU Torch2.14.1:同一最终测试32个场景, 基线20异常/12控制,修复32通过/0skip。Profile确认每轮32次实际注册 bnll_golden调用,未复制逻辑或mock计算。FP16/FP32,RuntimeWarning 作为错误及NumPy overflow/invalid='raise'两策略;大正负标量、有限 极值向量、矩阵、inf/-inf/NaN、普通值、空向量及(2,0)空矩阵。 CPU TorchDouble logaddexp独立参考;检查dtype/shape/精确数值/输入字节。 underflow仍ignore,与本项overflow/invalid无关,未宣称任意全raise策略。 三修改文件全部适用原生基础/Ruffcheck+format/codespell/OATwrapper 通过,OAT0非法类型/版权头;BSDsed兼容warning保留。clang按类型无 适用文件,无C++修改。没有TTK设备执行、CANN完整构建、算子UT或 NPU精度/性能结果。原生pre-push-build未安装,未通过任何旁路选项跳过。 基线95b0d8c04245d7136125b7b4e9b2c1dc83c5b0e0;源提交 f73c7a132130e24548591ce7f57494fc8044ce13,只有一个 Ethan_Zou提交。若CI需修复将amend保持一个。 查重6181唯一全状态Issue+最新首100、332开放PR4页。#5235的kernel 小指数精度补偿及#10934的24文件设备精度/tiling/UT修改均不同,后者 没有修改该注册golden。保留原Huawei版权,新测试真实Ethan2026CANN2。 ## 文档更新 BNLL README新增Host命令、稳定公式及验证范围说明。 ## 类型标签 - [x] Bug修复 - [x] 文档更新 - [ ] 新特性 - [ ] 性能优化 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写:Codex调查、修复和Host验证;/compile后回查CI。 ## 当前 CI 核验 源 SHA f73c7a132130e24548591ce7f57494fc8044ce13,远端源提交数 1。流水线 52aa87cc439b45f88f07447e6d52b655 已 COMPLETED,64/64 任务完成,0 条件跳过;本地新增 Host golden 回归范围见上方,未将该回归声称为远端 NPU 精度测试。 See merge request: cann/ops-nn!11477 | 21 days ago |
BNLL
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
- 算子功能:激活函数BNLL(Binomial Normal Log Likelihood),即数值稳定版本的softplus。
- 计算公式:
BNLL(x)=ln(1+ex)BNLL(x) = \ln(1 + e^x) BNLL(x)=ln(1+ex)
等价分段实现(保证数值稳定性):
yi={xi+ln(1+e−xi)if xi>0ln(1+exi)otherwisey_i = \begin{cases} x_i + \ln(1 + e^{-x_i}) & \text{if } x_i > 0 \\ \ln(1 + e^{x_i}) & \text{otherwise} \end{cases} yi={xi+ln(1+e−xi)ln(1+exi)if xi>0otherwise
参数说明
| 参数名 | 输入/输出 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 公式中的'x',表示BNLL激活函数的输入张量。支持空Tensor,维度支持0-8。 | FLOAT16、FLOAT32 | ND |
| y | 输出 | 表示x经BNLL计算得到的输出张量,shape和dtype与输入x一致。 | FLOAT16、FLOAT32 | ND |
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| GE图模式 | test_geir_bnll.cpp | 通过GE IR接口方式调用BNLL算子。 |
Golden 的 Host 回归
NumPy Kernel golden 使用 max(x, 0) + log1p(exp(-abs(x))),指数输入始终非正,避免 np.where 同时求值未选分支时产生溢出;保留原有 float64 中间精度及输入 dtype/shape,正负无穷和 NaN 按公式传播。
运行 python3 activation/bnll/tests/assets/test_bnll_golden_branch_overflow.py 可检查真实注册 golden,在 RuntimeWarning 作为错误和 NumPy overflow/invalid 严格模式下验证大值、普通值、标量、矩阵及空输入,使用 CPU Torch logaddexp 独立参考。仅验证 Host golden;不代表 TTK 设备执行、CANN 构建、NPU 算子精度或性能验证。