| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[CANNBot]新增Relu6D算子 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !7444 merge cherry-pick-mr-7375-1783929445662-auto into master [CANNBot]新增Relu6D算子 Created-by: zhaozhongyao Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 新增 Relu6D 算子 ### Relu6D 带缩放系数的 ReLU6 激活函数,对输入张量逐元素执行两步 clamp 操作——先 max(x, 0) 下截断消除负值,再 min(·, 6*scale) 上截断限制上界,输出值域为 [0, 6*scale]。当 scale = 1.0(默认)时等价于标准 ReLU6。适用于 MobileNet 系列等轻量级视觉网络的激活层,限制激活值范围、提升低精度量化(FP16/INT8)场景的数值稳定性。 - 输入:x(单输入) - 输出:y(shape/dtype 与 x 一致,无广播、无类型提升) - 属性:scale(Float,默认 1.0;上界阈值 = 6*scale) - 数据类型:FLOAT16、BFLOAT16、FLOAT、INT32 计算公式: $$ y = \min(\max(x,\ 0),\ 6 \cdot scale) $$ 等价分段定义: $$ y = \begin{cases} 0 & x \le 0 \\ x & 0 < x < 6 \cdot scale \\ 6 \cdot scale & x \ge 6 \cdot scale \end{cases} $$ 原型对齐 CANNDEV Relu6D(nonlinear_fuc_ops.h):输入输出结构、scale 属性、RealNumberType() dtype 声明完全一致。 ### 关键设计 - **RegBase VF 两步 clamp**:Step 1 Reg::Maxs(·, 0) 下截断(VECIN→VECOUT 非原地),Step 2 Reg::Mins(·, 6*scale) 上截断(VECOUT 原地)。fp16/fp32/int32 原 dtype 直算,无升精度 - **BF16 cast-compute**:backend 不支持 bf16 标量 clamp,升 fp32 直算(Cast bf16→fp32 → Maxs/Mins → Cast fp32→bf16 CAST_RINT),精度无损 - **4 TilingKey dtype 分发**:单一 dtype 维度,ASCENDC_TPL_ARGS_DECL 模板编程,4 键与 dtype 一一对应 - **workspace=0**:纯逐元素运算,无中间 Buffer - **空 Tensor 守卫**:dim0=0 时 blockNum=0,kernel 首行 return,不发起 GM 读写 ACLNNTYPE=aclnn_exclude。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [Relu6D 算子支持 Ascend950 ascendc 实现](https://gitcode.com/cann/ops-nn/issues/4022) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> NPU 上板测试 | 测试项 | 结果 | 详情 | |--------|------|------| | Kernel Binary | 4 个 .o ✅ | fp16/bf16/fp32/int32 各一 | | TTK aclnn | 472/472 PASS (100%) ✅ | 481 总用例,9 个 L2 负向用例为设计内正确拒绝 | | TTK kernel(白盒) | 648/648 PASS (100%) ✅ | 4 TilingKey 全覆盖 | | UT | 26/26 PASS ✅ | op_host 21(infershape 7 + tiling 14)+ op_kernel 5 | | E2E 通路 | 通过 ✅ | GE IR + Torch 双通路均 PASS | | 精度标准 | 双千双万 ✅ | fp16/bf16=1e-3、fp32=1e-4、int32 bitwise | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 activation/relu6_d/README.md - 更新 docs/zh/op_list.md(添加 relu6_d 算子登记) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7444 | 1 个月前 | |
修复 Relu6D def 驱动 dtype 及算子原型重复定义问题 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !8640 merge codex/relu6d-transfer-test-fixes into master 修复 Relu6D def 驱动 dtype 及算子原型重复定义问题 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本 PR 修复 ops-transfer-test-scan 检查发现的以下转测准入问题: 1. 修复 Relu6D“def 驱动 dtype”问题。 - 移除 Relu6D tiling key 中的 dtype 模板声明和 dtype 分发逻辑。 - Host tiling 统一设置固定 tiling key 0。 - Kernel 入口直接使用 def 生成的 DTYPE_X 实例化 KernelRelu6D<DTYPE_X>。 - 更新 Relu6D Host UT 和 Kernel UT,使测试逻辑与 def 驱动 dtype 的实现保持一致。 修复后,FP16、FP32、INT32、BF16 四种类型均可通过 def 配置生成并完成正式二进制编译。 2. 修复 Relu6D 和 SmoothL1LossGrad 重复定义问题。 参考 PR 8552 的处理方式,不删除已有 REG_OP 定义,而是增加统一的宏保护: - Relu6D:OPS_PROTO_DEF_RELU6D - SmoothL1LossGrad:OPS_PROTO_DEF_SMOOTHL1LOSSGRAD 宏保护已添加至对应算子 proto 及公共扩展头,避免多份 proto 合并或共同包含时重复展开同名算子定义。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4780 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 完成以下验证: 1. Relu6D Host/Proto UT - 24/24 通过。 - 覆盖 FP16、FP32、INT32、BF16、空 Tensor、标量、不同 shape、非法 dtype、非法 format、9D shape 和不同 scale 等场景。 - 成功验证 tiling key 固定为 0。 2. Relu6D Kernel UT - 5/5 通过。 - 覆盖 FP32、FP16、INT32、BF16 以及 FP32 多轮循环场景。 - 测试过程中输入数据和 golden 数据均成功生成。 3. Proto 合并及编译 - Relu6D 本地 proto、SmoothL1LossGrad 本地 proto 与公共扩展 proto 合并并编译成功。 - 未出现算子原型重复定义错误。 4. Relu6D 正式二进制编译 - Ascend950PR_9599 编译成功。 - 成功生成 FP16、FP32、INT32、BF16 四种 dtype 的独立二进制产物。 - 最终结果:[SUCCESS] Build binary success! 5. 冒烟已过 6. 代码检查 - git diff --check 通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8640 | 19 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 19 天前 |