| [CANNBot]新增 SmoothL1LossGrad 算子 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !7609 merge cherry-pick-mr-7549-1784254711505-auto into master [CANNBot]新增 SmoothL1LossGrad 算子 Created-by: zhaozhongyao Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 SmoothL1LossGrad 算子 ### SmoothL1LossGrad SmoothL1Loss 的反向梯度算子,计算公式 gradient = clamp((predict - label) / sigma, -1, 1) * dout。对差值先钳位到 [-sigma, sigma] 再归一化到 [-1, 1],最后乘以上游梯度 dout。sigma 等价 PyTorch smooth_l1_loss 的 beta 参数,控制 L1 与 L2 之间的平滑过渡阈值。reduction='none'(逐元素,无归约),mean/sum 归约由前向 SmoothL1Loss 承担。 - 输入:predict、label、dout(3 输入,同 shape/dtype) - 输出:gradient(shape/dtype 与 predict 一致,无广播) - 属性:sigma(Float,默认 1.0,取值需大于 0,等价 PyTorch beta) - 数据类型:FLOAT16、FLOAT、BFLOAT16 计算公式: $$ gradient = clamp\left(\frac{predict - label}{sigma},\ -1,\ 1\right) \times dout $$ 5 步指令链实现(先钳位后归一化,规避除零): $$ \begin{aligned} diff &= predict - label \\ c &= clamp(diff,\ -sigma,\ sigma) \\ gradient &= c \times \frac{1}{sigma} \times dout \end{aligned} $$ 原型对齐 CANNDEV SmoothL1LossGrad(nn_norm_ops.h:328-334):输入输出结构、sigma 属性、dtype 矩阵、reduction='none' 语义完全一致。 ### 关键设计 - **RegBase VF 5 步链**:Sub → Mins(σ) → Maxs(-σ) → Muls(1/σ) → Mul(dout),fp16/fp32 原 dtype 直算(precision_reduce=false,对齐 CANNDEV ini),无升精度 - **BF16 cast-compute**:DAV_3510 bisheng backend 不支持 bf16 标量 vmins/vmaxs/vmuls,升 fp32 直算(Cast bf16→fp32 → 5 步链 float 标量 → Cast fp32→bf16 CAST_RINT),fp32 中间量驻寄存器不落 UB - **3 TilingKey dtype 分发**:单一 dtype 维度,ASCENDC_TPL_ARGS_DECL 模板编程,3 键与 dtype 一一对应 - **workspace=0**:纯逐元素运算,无中间 Buffer - **空 Tensor 守卫**:blockNum=0 时 kernel 入口 return,不发起 GM 读写 - **核守卫**:GetBlockIdx >= blockNum 时直接 return,冗余核不进入 Init/Process ACLNNTYPE=aclnn_exclude,不上库 aclnn 接口,仅交付 GE IR 图模式通路(对齐 loss 仓 mse_loss_grad 等无 aclnn 先例)。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4114 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> <!--描述进行了哪些测试来验证你的改动。--> NPU 上板测试(Ascend950DT_9582 / arch35 / CANN 9.0.0) | 测试项 | 结果 | 详情 | |--------|------|------| | Kernel Binary | 3 个 .o ✅ | fp16/bf16/fp32 各一 | | TTK kernel(白盒) | 900/900 PASS (100%) ✅ | 3 TilingKey 全覆盖,3 dtype × 多 shape × 多 boundary | | GEIR graph | 7/7 PASS ✅ | err=0 | | E2E Torch 通路 | 3/3 PASS ✅ | fp32×2 + fp16×1(经 torch_npu F.smooth_l1_loss autograd,走 CANNDEV V2 aclnnSmoothL1LossBackward) | | 精度标准 | 双千双万 ✅ | fp16/bf16=1e-3、fp32=1e-4 | | 三方精度(双标杆 Ratio L1) | 900/900 PASS ✅ | NPU vs GPU(A100),MARE≤5.0/MERE≤1.5/RMSE≤1.5 全达标 | | 三方性能(NPU vs GPU) | 800/800 NPU 更快 ✅ | 几何平均加速比 0.213(NPU 平均 1.96us vs GPU 10.22us),100 个空 tensor 用例 GPU 无数据 | | 性能(msprof) | MTE2 主导 ✅ | 带宽 2.7-3.8 TB/s(57-80%),icache <2.7%,64 核全并行 | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 loss/smooth_l1_loss_grad/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7609 | 1 天前 |
| 批量修改md中冗余空格 Co-authored-by: wuyao51511<wuyao61@h-partners.com> # message auto-generated for no-merge-commit merge: !6027 merge master into master 批量修改md中冗余空格 Created-by: wuyao51511 Commit-by: wuyao51511 Merged-by: cann-robot Description: ## 描述 文档空格问题清理 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!6027 | 1 个月前 |
| 整改quick_start中错误的代码 Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !7584 merge master into master 整改quick_start中错误的代码 Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 QUICKSTART.md中部分代码已和AddExample中的代码存在区别,本次修改同步更新QUICKSTART.md中引用自AddExample中的代码 ## 关联的Issue [#3755](https://gitcode.com/cann/ops-nn/issues/3755) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 https://gitcode.com/cann/ops-nn/blob/master/docs/QUICKSTART.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7584 | 1 天前 |
| 新增aclnn索引文件,同时修改md低错 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !7441 merge master into master 新增aclnn索引文件,同时修改md低错 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增aclnn索引大纲md,用于官网在线发布 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#4062](https://gitcode.com/cann/ops-nn/issues/4062) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> OK ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增menu_aclnn_api.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7441 | 5 天前 |