| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 完善 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !8281 merge codex/transfer-test-exception into master fix: 完善 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本 PR 完善 Ascend950 上 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖。 主要改动: - Relu6D: - 增加输入 rank 0~8 约束; - 增加输入 x 和输出 y 的 ND 格式校验; - 完善非法 dtype 错误信息; - 补充静态数值校验、动态 Shape/Rank example 和异常 GEIR example。 - SmoothL1LossGrad: - 增加 predict、label、dout 独立的 dtype 和 ND 格式校验; - 增加输出 gradient 格式校验; - 完善三输入 dtype/Shape 一致性和 sigma > 0 校验; - 增加 rank 0~8 约束; - 补充静态数值校验、动态 Shape/Rank example 和异常 GEIR example。 - 扩充两个算子的 Ascend950 Host UT,覆盖合法输入和 dtype、format、rank、属性、Shape 等异常场景。 本 PR 不修改 Kernel 计算公式和性能策略。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4585 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - Relu6D Host UT:24/24 PASS; - SmoothL1LossGrad Host UT:15/15 PASS; - 合计 Host UT:39/39 PASS; - GEIR 异常用例:19/19 行为符合预期,17 个拒绝用例均在 Tiling 失败且无目标 Kernel,2 个合法 Cast 用例启动目标 Kernel并验证输出; - 两个算子的 static GEIR 均 PASS; - 每个算子的 unknown-dim -1:3/3 PASS;unknown-rank [-2]:3/3 PASS; - custom vendor/dynamic module 路由、输出 Shape/dtype/数值及真实 Kernel launch 均通过; - pre-commit、clang-format 18、codespell、OAT、git diff --check 均 PASS。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 本 PR 不涉及用户接口文档更新。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8281 | 23 天前 | |
修复 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 | 16 天前 | |
修复 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 | 16 天前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 6 天前 | |
修复 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 | 16 天前 | |
[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,InplaceApplyAdagradDA,InplaceApplyAdagradV2产品支持情况 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !9404 merge codex/fix-readme-product-support into master 修改Relu6D,InplaceApplyAdagradDA,InplaceApplyAdagradV2产品支持情况 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 复核并修正以下算子 README 中的产品支持情况: - Relu6D:支持 Ascend 950PR/Ascend 950DT、Atlas A3、Atlas A2。 - InplaceApplyAdagradDA:历史软件包中的接口名称与当前 OpType 不同,不能作为当前算子的产品支持证据;仅 Ascend 950PR/Ascend 950DT 标记为支持。 - InplaceApplyAdagradV2:历史软件包中的接口名称与当前 OpType 不同,不能作为当前算子的产品支持证据;仅 Ascend 950PR/Ascend 950DT 标记为支持。 本次仅调整 README 产品支持表中的 √/×,不修改算子实现及其他文档内容。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5273 ## 测试 - 精确检查五个算子的六行产品表:Relu6D、SmoothL1LossGrad 为 √√√×××;两个 Inplace 算子均为 √×××××。 - 检查 PR 净 diff 仅包含 Relu6D 及两个 Inplace 算子 README 的产品支持状态变更;SmoothL1LossGrad 与目标分支一致,无净差异。 - 检查 PR 分支相对目标 master 仅包含 1 个提交。 - 执行 git diff --check,检查通过。 - 执行 README 全量格式校验;报告项均为文档原有的参数表或调用方式格式问题,本次遵循仅修改产品支持情况的范围未处理。 - 本次为纯文档修改,未执行运行时测试。 ## 文档更新 - 更新 activation/relu6_d/README.md。 - 更新 optim/inplace_apply_adagrad_da/README.md。 - 更新 optim/inplace_apply_adagrad_v2/README.md。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9404 | 5 天前 |
Relu6D
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
- 算子功能:带缩放系数的ReLU6激活函数(Relu6D),对输入张量逐元素先做下截断(负值置0)、再做上截断(限制到
6*scale),输出值域为[0, 6*scale]。当scale = 1.0(默认)时等价于标准ReLU6。适用于MobileNet系列等轻量级视觉网络的激活层,限制激活值范围、提升低精度量化场景的数值稳定性。 - 计算公式:
Relu6D(x)=min(max(x, 0), 6⋅scale)Relu6D(x) = \min(\max(x,\ 0),\ 6 \cdot scale) Relu6D(x)=min(max(x, 0), 6⋅scale)
其中 xxx 为输入张量,scalescalescale 为阈值缩放系数(默认 1.01.01.0),yyy 为输出张量,值域 [0, 6⋅scale][0,\ 6 \cdot scale][0, 6⋅scale]。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 输入特征张量,对应公式中x。 | FLOAT16、FLOAT、INT32、BFLOAT16 | ND |
| y | 输出 | 输出张量,对应公式中y,shape和dtype与输入x一致。 | FLOAT16、FLOAT、INT32、BFLOAT16 | ND |
| scale | 可选属性 | 阈值缩放系数,对应公式中scale,上界阈值 = 6*scale。默认值1.0(对应标准ReLU6)。 | FLOAT | - |
约束说明
- 输入x和输出y的shape必须相同。
- 最高支持8维张量。
- 支持动态shape与动态rank。
- scale约束:上界阈值为
6*scale;scale = 0时上界为0,输出恒为0;scale < 0时上界6*scale < 0,输出恒等于6*scale(均为数学上合法的边界语义)。int32下阈值按截断向零。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| GE图模式 | test_geir_relu6_d.cpp | 通过算子IR构图方式调用Relu6D算子。 |