| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
add_cases Co-authored-by: zhaogrug<zhaohai16@h-partners.com> # message auto-generated for no-merge-commit merge: !7583 merge add_cases into master add_cases Created-by: zhaogrug Commit-by: zhaogrug Merged-by: cann-robot Description: ## 描述 新增仓内新版ttk用例 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue [#4223](https://gitcode.com/cann/ops-nn/issues/4223) <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 冒烟测试,本地验证 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:用例添加 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7583 | 1 个月前 | |
长尾算子接口资料产品支持情况修改 Co-authored-by: h1234515<huangzhiyuan21@huawei.com> # message auto-generated for no-merge-commit merge: !9034 merge A2A3 into master 长尾算子接口资料产品支持情况修改 Created-by: h1234515 Commit-by: h1234515 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 长尾算子接口资料产品支持情况修改 本次修改涉及 4 个算子的 README.md 文档,主要内容是更新产品支持矩阵,将多个 Atlas 产品的支持状态从 ×(不支持)改为 √(支持): ┌────────────┬─────────────────────────┬────────────────────────────────────────────────┐ │算子 │文件 │变更内容 │ ├────────────┼─────────────────────────┼────────────────────────────────────────────────┤ │EuclideanNor│norm/euclidean_norm/ │Atlas 200I/500 A2 推理产品、Atlas 推理系列产品、│ │m │README.md │Atlas 训练系列产品 → 支持 │ ├────────────┼─────────────────────────┼────────────────────────────────────────────────┤ │AdamApplyOne│optim/ │Atlas A3 系列、Atlas A2 系列、Atlas 200I/500 │ │Assign │adam_apply_one_assign/ │A2、Atlas 训练系列产品 → 支持 │ │ │README.md │ │ ├────────────┼─────────────────────────┼────────────────────────────────────────────────┤ │ActsULQ │quant/acts_ulq/README.md │Atlas 200I/500 A2 推理产品、Atlas 训练系列产品 │ │ │ │→ 支持 │ ├────────────┼─────────────────────────┼────────────────────────────────────────────────┤ │Dequantize │quant/dequantize/README. │Atlas 200I/500 A2 推理产品、Atlas 推理系列产品、│ │ │md │Atlas 训练系列产品 → 支持 │ └────────────┴─────────────────────────┴──────────────────────────────────────────────── ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5002 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> norm/euclidean_norm/README.md optim/adam_apply_one_assign/README.md quant/acts_ulq/README.md quant/dequantize/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9034 | 19 天前 | |
add_cases Co-authored-by: zhaogrug<zhaohai16@h-partners.com> # message auto-generated for no-merge-commit merge: !7583 merge add_cases into master add_cases Created-by: zhaogrug Commit-by: zhaogrug Merged-by: cann-robot Description: ## 描述 新增仓内新版ttk用例 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue [#4223](https://gitcode.com/cann/ops-nn/issues/4223) <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 冒烟测试,本地验证 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:用例添加 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7583 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
optim、pooling打标签 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !8311 merge master into master optim、pooling打标签 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 optim、pooling打标签 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8311 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
fix(update Ascend950 golden specs):HardSwishGradV2,HardSigmoid,ApplyAdagrad,InplaceSub算子golden优化 Co-authored-by: tianyu52<tianyu52@huawei.com> # message auto-generated for no-merge-commit merge: !8577 merge master into master fix(update Ascend950 golden specs):HardSwishGradV2,HardSigmoid,ApplyAdagrad,InplaceSub算子golden优化 Created-by: tianyu52 Commit-by: tianyu52 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> HardSwishGradV2,HardSigmoid,ApplyAdagrad,InplaceSub算子按照新的golden要求,优化golden代码 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> HardSwishGradV2,HardSigmoid,ApplyAdagrad,InplaceSub:golden验证OK,已完成相应算子的泛化用例验证。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8577 | 1 个月前 | |
docs: 修正apply_adagrad_d算子README调用说明误写为EluGrad Co-authored-by: caorenlei<caorenlei@huawei.com> # message auto-generated for no-merge-commit merge: !8792 merge 0817 into master docs: 修正apply_adagrad_d算子README调用说明误写为EluGrad Created-by: caorenlei Commit-by: caorenlei Merged-by: cann-robot Description: ## 描述 修正 apply_adagrad_d 算子 README 中调用说明的文档错误。调用说明表格中"图模式"行的说明文字错误地写成"构图方式调用EluGrad算子",实际应为"构图方式调用ApplyAdagradD算子"。 ### 改动原因 optim/apply_adagrad_d/README.md 第91行调用说明表格中,"图模式"行的说明文字误写为"构图方式调用EluGrad算子",与实际算子名称不符,导致文档描述与算子功能不一致。 ### 改动方法 将说明文字中的"EluGrad"修正为"ApplyAdagradD"。 ## 关联的Issue - [#4848](https://gitcode.com/cann/ops-nn/issues/4848) ## 测试 文档修改,无需代码测试。已人工核对修改前后内容,确认修正后描述与算子名称一致。 ## 文档更新 更新了 optim/apply_adagrad_d/README.md 文件,修正调用说明表格中的算子名称错误。 ## 类型标签 - [x] 文档更新 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8792 | 26 天前 | |
optim、pooling打标签 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !8311 merge master into master optim、pooling打标签 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 optim、pooling打标签 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8311 | 1 个月前 | |
refactor: rename APIs in ops-nn batch1 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8505 merge rename-api-batch1 into master refactor: rename APIs in ops-nn batch1 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 本 PR 对 ops-nn 仓库中 batch1 涉及的 10 个算子(norm 系列 8 个 + optim 系列 2 个)的 arch35 kernel 头文件进行 API 重命名,将旧版 MicroAPI/Reg-VF 接口名替换为 CANN 新版 SDK 对应的接口名,无任何逻辑改动。 ### 改动原因 CANN 新版 SDK 对 AscendC MicroAPI(351x 架构 Reg 矢量计算层)的接口命名进行了统一调整:统一地址空间限定符、按 Load/Store 方向拆分搬运 API、去废弃前缀。ops-nn 仓库需同步更新以匹配新版 SDK 头文件,避免编译警告/废弃提示,为后续架构迁移和新特性使能扫清障碍。 ### 改动方法 纯机械重命名,涉及 39 个 arch35 kernel 头文件(+2244 -2269),覆盖以下 13 类 API 替换: 1. __local_mem__ → __ubuf__(UB 地址空间限定符,1664 处) 2. DataCopy(Reg load 方向)→ LoadAlign(392 处) 3. DataCopy(Reg store 方向)→ StoreAlign(154 处) 4. ReduceSum → Reduce<ReduceType::SUM>(115 处) 5. MultiCopyConfig / MultiCopyLoopInfo / MultiCopyParams → NdDmaConfig / NdDmaLoopInfo / NdDmaParams 6. DataCopyUnAlignPre → LoadUnAlignPre、DataCopyUnAlign → LoadUnAlign / StoreUnAlign(按方向拆分)、DataCopyUnAlignPost → StoreUnAlignPost 7. UnalignReg → UnalignRegForLoad / UnalignRegForStore(按用途拆分) 8. CompareScalar → Compares(8 处) 9. DataCopyGather → Gather(8 处) 10. MaskAnd → And、MaskOr → Or、MaskPack → Pack(去 Mask 前缀) 11. ReduceMaxWithDataBlock → ReduceDataBlock<ReduceType::MAX>(2 处) GM↔UB 之间的 DataCopy 调用(5 处)保持不变,未被误改。 涉及的 10 个算子: - norm: add_layer_norm、add_layer_norm_quant、add_rms_norm、add_rms_norm_cast、add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_quant、batch_norm - optim: apply_adam_d、apply_adam_w ## 关联的Issue #4718 ## 测试 重命名后各算子需通过编译验证与原有算子精度/性能用例,确认无行为变化。 ## 文档更新 无文档更新。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8505 | 1 个月前 | |
fix(apply_adam_v2, fused_mul_apply_momentum): 修复FP16 Cast别名冲突、跨tile事件同步、infershape对齐canndev、inplace output shape直取input Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !9005 merge fix-adam-momentum-geir-issues into master fix(apply_adam_v2, fused_mul_apply_momentum): 修复FP16 Cast别名冲突、跨tile事件同步、infershape对齐canndev、inplace output shape直取input Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: PR 描述 标题: fix(apply_adam_v2, fused_mul_apply_momentum): 修复 FP16 Cast 别名冲突、跨 tile 事件同步、infershape 对齐 canndev 描述: 关联 Issue Closes #<issue_number> 修改内容 apply_adam_v2 1. 修复 FP16 in-place Cast 别名冲突 (VEC_ERROR) - 文件: op_kernel/arch35/apply_adam_v2_kernel.h - 改动: ProcessAdamFp16 和 ProcessMbartAdamFp16 中,用 B4 作为 FP16 中转缓冲,改为逐输入 CopyIn→B4(FP16)→Cast→B{target}(FP32) 模式,确保 Cast 的 src (B4) 和 dst (B{target}) 在不同 TBuf 上,消除别名冲突 - 新增: Process() 中 fetch evVtoMTE2 事件,前 3 个输入完成后通过 SetFlag/WaitFlag(V_MTE2) 释放 B4 供下一个输入复用 - 不变: Cast back (FP32→FP16) 保持 in-place(narrowing 安全) 2. output 名称对齐 canndev - 文件: op_host/apply_adam_v2_def.cpp - 改动: output 从 var_out/m_out/v_out 改为 var/m/v 3. infershape 对齐 canndev - 文件: op_host/apply_adam_v2_infershape.cpp - 改动: 从 InferShape4Elewise 改为内联实现 InferShape4InIdxAndOutVector 逻辑(output0,1,2 = input0 shape),包含 canndev 的 input shape 校验逻辑 4. tiling output shape 直取 input - 文件: op_host/arch35/apply_adam_v2_tiling_arch35.cpp - 改动: output shape 不再从 ctx_->GetOutputShape 读取,直接用 raw_input_shapes_[i](inplace 语义保证 outputi = inputi),绕过 GEIR infershape 推导问题 5. README 补充约束 - GEIR 模式不支持 -1/-2 动态 shape(canndev infershape 限制) fused_mul_apply_momentum 1. 修复 FP16 跨 tile V_MTE2 事件死锁 - 文件: op_kernel/arch35/fused_mul_apply_momentum_kernel.h - 改动: ProcessTile 结尾对 FP16 路径补上 SetFlag(V_MTE2),与下一 tile 开头的 WaitFlag(V_MTE2) 配对 - 影响范围: 仅 FP16 路径(if constexpr (IS_FP16)),FP32 不受影响 2. infershape 对齐 canndev - 文件: op_host/fused_mul_apply_momentum_infershape.cpp - 改动: 从 InferShape4Elewise 改为内联实现 InferShape4InIdxAndOutVector 逻辑(output0,1 = input0 shape) 3. tiling output shape 直取 input - 文件: op_host/arch35/fused_mul_apply_momentum_tiling_arch35.cpp - 改动: 同 apply_adam_v2,output shape 直取 rawInputShapes_[i] 4. def 补充 use_locking 属性 - 文件: op_host/fused_mul_apply_momentum_def.cpp - 改动: 添加 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false) 5. README 补充约束 - 同 apply_adam_v2 验证 - ApplyAdamV2 L0_004 (FP32, mbart_adam): Kernel 模式 PASS - FusedMulApplyMomentum L0_001 (FP16, standard): Kernel 模式 PASS(修复死锁后) - GEIR 模式: 非 -1/-2 shape 场景 inplace 检查通过;-1/-2 场景受 canndev infershape 限制不支持(README 已说明) See merge request: cann/ops-nn!9005 | 22 天前 | |
refactor: rename APIs in ops-nn batch1 (10 ops) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !8505 merge rename-api-batch1 into master refactor: rename APIs in ops-nn batch1 (10 ops) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 本 PR 对 ops-nn 仓库中 batch1 涉及的 10 个算子(norm 系列 8 个 + optim 系列 2 个)的 arch35 kernel 头文件进行 API 重命名,将旧版 MicroAPI/Reg-VF 接口名替换为 CANN 新版 SDK 对应的接口名,无任何逻辑改动。 ### 改动原因 CANN 新版 SDK 对 AscendC MicroAPI(351x 架构 Reg 矢量计算层)的接口命名进行了统一调整:统一地址空间限定符、按 Load/Store 方向拆分搬运 API、去废弃前缀。ops-nn 仓库需同步更新以匹配新版 SDK 头文件,避免编译警告/废弃提示,为后续架构迁移和新特性使能扫清障碍。 ### 改动方法 纯机械重命名,涉及 39 个 arch35 kernel 头文件(+2244 -2269),覆盖以下 13 类 API 替换: 1. __local_mem__ → __ubuf__(UB 地址空间限定符,1664 处) 2. DataCopy(Reg load 方向)→ LoadAlign(392 处) 3. DataCopy(Reg store 方向)→ StoreAlign(154 处) 4. ReduceSum → Reduce<ReduceType::SUM>(115 处) 5. MultiCopyConfig / MultiCopyLoopInfo / MultiCopyParams → NdDmaConfig / NdDmaLoopInfo / NdDmaParams 6. DataCopyUnAlignPre → LoadUnAlignPre、DataCopyUnAlign → LoadUnAlign / StoreUnAlign(按方向拆分)、DataCopyUnAlignPost → StoreUnAlignPost 7. UnalignReg → UnalignRegForLoad / UnalignRegForStore(按用途拆分) 8. CompareScalar → Compares(8 处) 9. DataCopyGather → Gather(8 处) 10. MaskAnd → And、MaskOr → Or、MaskPack → Pack(去 Mask 前缀) 11. ReduceMaxWithDataBlock → ReduceDataBlock<ReduceType::MAX>(2 处) GM↔UB 之间的 DataCopy 调用(5 处)保持不变,未被误改。 涉及的 10 个算子: - norm: add_layer_norm、add_layer_norm_quant、add_rms_norm、add_rms_norm_cast、add_rms_norm_dynamic_mx_quant、add_rms_norm_dynamic_quant、add_rms_norm_quant、batch_norm - optim: apply_adam_d、apply_adam_w ## 关联的Issue #4718 ## 测试 重命名后各算子需通过编译验证与原有算子精度/性能用例,确认无行为变化。 ## 文档更新 无文档更新。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:API 重命名重构 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8505 | 1 个月前 | |
test: 更新deep_norm_grad等4个算子golden测试数据 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !8582 merge codex/golden-upstream-rebased into master test: 更新deep_norm_grad等4个算子golden测试数据 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 4 个算子的 golden 测试数据。 | 算子 | 变化 | |------|------| | deep_norm_grad | +61 -4 | | apply_adam_w_quant | +113 -28 | | dynamic_quant_update_scatter | +3 -3 | | dynamic_quant_update_scatter_v2 | +6 -2 | ## 类型标签 - [x] 测试 ## 关联的Issue - #4730 See merge request: cann/ops-nn!8582 | 1 个月前 | |
clean_code 代码重复率整改 Co-authored-by: zhuzemao<zhuzemao1@h-partners.com> # message auto-generated for no-merge-commit merge: !8694 merge clean_code into master clean_code 代码重复率整改 Created-by: zhuzemao Commit-by: zhuzemao Merged-by: cann-robot Description: ## 描述 clean_code 代码重复率整改 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4802 ## 测试 不涉及 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8694 | 29 天前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
[CANNBot] apply_ftrl_v2算子增加异常拦截校验 Co-authored-by: chen_chenn<chenchen167@huawei.com> # message auto-generated for no-merge-commit merge: !8371 merge ApplyFtrlV2 into master [CANNBot] apply_ftrl_v2算子增加异常拦截校验 Created-by: chen_chenn Commit-by: chen_chenn Merged-by: cann-robot Description: ## 描述 apply_ftrl_v2算子增加异常拦截校验 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4828 ## 测试 TTK ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8371 | 26 天前 | |
clean_code 代码重复率整改 Co-authored-by: zhuzemao<zhuzemao1@h-partners.com> # message auto-generated for no-merge-commit merge: !8694 merge clean_code into master clean_code 代码重复率整改 Created-by: zhuzemao Commit-by: zhuzemao Merged-by: cann-robot Description: ## 描述 clean_code 代码重复率整改 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4802 ## 测试 不涉及 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8694 | 29 天前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
[CANNBot] 修复apply_keras_momentum标量输入时shape(var)!=shape(accum)的tiling报错 Co-authored-by: chen_chenn<chenchen167@huawei.com> # message auto-generated for no-merge-commit merge: !8913 merge fix_applyKerasMomentum into master [CANNBot] 修复apply_keras_momentum标量输入时shape(var)!=shape(accum)的tiling报错 Created-by: chen_chenn Commit-by: chen_chenn Merged-by: cann-robot Description: ## 描述 修复apply_keras_momentum标量输入时shape(var)!=shape(accum)的tiling报错 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4914 ## 测试 TTK ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8913 | 23 天前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
TF plugin 迁移2 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7586 merge nn2 into master TF plugin 迁移2 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin 迁移 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7586 | 1 个月前 | |
add_ops_fused_adamw Co-authored-by: jisongyuan<jisongyuan@h-partners.com> # message auto-generated for no-merge-commit merge: !7851 merge master into master add_ops_fused_adamw Created-by: ji-songyuan Commit-by: jisongyuan Merged-by: cann-robot Description: ## 描述 新增融合优化器算子 fused_adamw,提升大规模参数更新性能 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 功能概述 本次PR为ops-nn算子库新增了融合优化器算子的aclnn接口 aclnnFusedAdamw和融合算子fused_adamw。该算子将AdamW优化器的多个计算内核(如梯度更新、一阶/二阶矩估计、权重衰减等)融合为单个kernel内核,旨在减少内存访问次数和内核启动开销,为大规模深度学习模型的训练提供更高效的参数更新能力。 2. 计算公式 corr1 = 1 - β1ᵗ corr2 = 1 - β2ᵗ m_new = β1 * m + (1 - β1) * grad v_new = β2 * v + (1 - β2) * (grad * grad) m_hat = m_new / corr1 v_hat = v_new / corr2 denom = sqrt(v_hat) + eps param_new = param - lr * ( m_hat / denom + weight_decay * param ) 3. 输入输出  ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4847](https://gitcode.com/cann/ops-nn/issues/4847) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 泛化case测试500 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> optim/fused_adamw/README.md optim/fused_adamw/docs/aclnnFusedAdamw.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7851 | 25 天前 | |
feat: add verification on FusedMulApplyKerasMomentum Co-authored-by: niukang_hw<niukang1@huawei.com> # message auto-generated for no-merge-commit merge: !8268 merge dev_fused_mul_apply_keras_momentum into master feat: add verification on FusedMulApplyKerasMomentum Created-by: niukang_hw Commit-by: niukang_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8268 | 1 个月前 | |
fix(apply_adam_v2, fused_mul_apply_momentum): 修复FP16 Cast别名冲突、跨tile事件同步、infershape对齐canndev、inplace output shape直取input Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !9005 merge fix-adam-momentum-geir-issues into master fix(apply_adam_v2, fused_mul_apply_momentum): 修复FP16 Cast别名冲突、跨tile事件同步、infershape对齐canndev、inplace output shape直取input Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: PR 描述 标题: fix(apply_adam_v2, fused_mul_apply_momentum): 修复 FP16 Cast 别名冲突、跨 tile 事件同步、infershape 对齐 canndev 描述: 关联 Issue Closes #<issue_number> 修改内容 apply_adam_v2 1. 修复 FP16 in-place Cast 别名冲突 (VEC_ERROR) - 文件: op_kernel/arch35/apply_adam_v2_kernel.h - 改动: ProcessAdamFp16 和 ProcessMbartAdamFp16 中,用 B4 作为 FP16 中转缓冲,改为逐输入 CopyIn→B4(FP16)→Cast→B{target}(FP32) 模式,确保 Cast 的 src (B4) 和 dst (B{target}) 在不同 TBuf 上,消除别名冲突 - 新增: Process() 中 fetch evVtoMTE2 事件,前 3 个输入完成后通过 SetFlag/WaitFlag(V_MTE2) 释放 B4 供下一个输入复用 - 不变: Cast back (FP32→FP16) 保持 in-place(narrowing 安全) 2. output 名称对齐 canndev - 文件: op_host/apply_adam_v2_def.cpp - 改动: output 从 var_out/m_out/v_out 改为 var/m/v 3. infershape 对齐 canndev - 文件: op_host/apply_adam_v2_infershape.cpp - 改动: 从 InferShape4Elewise 改为内联实现 InferShape4InIdxAndOutVector 逻辑(output0,1,2 = input0 shape),包含 canndev 的 input shape 校验逻辑 4. tiling output shape 直取 input - 文件: op_host/arch35/apply_adam_v2_tiling_arch35.cpp - 改动: output shape 不再从 ctx_->GetOutputShape 读取,直接用 raw_input_shapes_[i](inplace 语义保证 outputi = inputi),绕过 GEIR infershape 推导问题 5. README 补充约束 - GEIR 模式不支持 -1/-2 动态 shape(canndev infershape 限制) fused_mul_apply_momentum 1. 修复 FP16 跨 tile V_MTE2 事件死锁 - 文件: op_kernel/arch35/fused_mul_apply_momentum_kernel.h - 改动: ProcessTile 结尾对 FP16 路径补上 SetFlag(V_MTE2),与下一 tile 开头的 WaitFlag(V_MTE2) 配对 - 影响范围: 仅 FP16 路径(if constexpr (IS_FP16)),FP32 不受影响 2. infershape 对齐 canndev - 文件: op_host/fused_mul_apply_momentum_infershape.cpp - 改动: 从 InferShape4Elewise 改为内联实现 InferShape4InIdxAndOutVector 逻辑(output0,1 = input0 shape) 3. tiling output shape 直取 input - 文件: op_host/arch35/fused_mul_apply_momentum_tiling_arch35.cpp - 改动: 同 apply_adam_v2,output shape 直取 rawInputShapes_[i] 4. def 补充 use_locking 属性 - 文件: op_host/fused_mul_apply_momentum_def.cpp - 改动: 添加 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false) 5. README 补充约束 - 同 apply_adam_v2 验证 - ApplyAdamV2 L0_004 (FP32, mbart_adam): Kernel 模式 PASS - FusedMulApplyMomentum L0_001 (FP16, standard): Kernel 模式 PASS(修复死锁后) - GEIR 模式: 非 -1/-2 shape 场景 inplace 检查通过;-1/-2 场景受 canndev infershape 限制不支持(README 已说明) See merge request: cann/ops-nn!9005 | 22 天前 | |
feat: add verification on FusedMulApplyMomentumExtern Co-authored-by: niukang_hw<niukang1@huawei.com> # message auto-generated for no-merge-commit merge: !8265 merge dev_fused_mul_apply_momentum_extern into master feat: add verification on FusedMulApplyMomentumExtern Created-by: niukang_hw Commit-by: niukang_hw Merged-by: cann-robot Description: ## 描述 此 PR 为 FusedMulApplyMomentumExtern 算子新增了 Tiling 阶段的校验逻辑。主要在两个层面进行了扩展:一是在 fused_mul_apply_momentum_extern_tiling_arch35.cpp 中添加了输入张量的秩(rank)上限检查和各输入的数据类型(dtype)规则校验;二是新增了一个完整的异常测试文件 test_geir_fused_mul_apply_momentum_extern_exception.cpp,覆盖了不支持的数据类型、GEIR Cast 插入、9 维张量拒绝以及形状维度不匹配等场景。 主要改动 1、Tiling 层秩校验:在 GetShapeAttrsInfo 函数中新增 varShape->GetStorageShape().GetDimNum() > 8 的检查,当输入张量的维度超过 8 时直接返回 GRAPH_FAILED。 2、Tiling 层 dtype 校验:新增对全部 7 个输入的逐项数据类型检查——var 必须为 FP32;accum、lr、x1、momentum、x2 必须同为 FP32/FP16/BF16 之一且相互一致;var_copy 在 accum 为 BF16 时须为 BF16,否则须为 FP16。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4630 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8265 | 1 个月前 | |
clean_code 代码重复率整改 Co-authored-by: zhuzemao<zhuzemao1@h-partners.com> # message auto-generated for no-merge-commit merge: !8694 merge clean_code into master clean_code 代码重复率整改 Created-by: zhuzemao Commit-by: zhuzemao Merged-by: cann-robot Description: ## 描述 clean_code 代码重复率整改 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4802 ## 测试 不涉及 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8694 | 29 天前 | |
feat(optim): add InplaceApplyAdaMax operator for Ascend950 Co-authored-by: Miao_Haifeng<miaohaifeng@huawei.com> # message auto-generated for no-merge-commit merge: !8919 merge inplace_apply_ada_max_code_review into master feat(optim): add InplaceApplyAdaMax operator for Ascend950 Created-by: Almost_CANN Commit-by: Miao_Haifeng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 功能说明 - **算子功能**:执行AdaMax优化器的单步参数更新。AdaMax是Adam优化器的变体,使用无穷范数 $L_{\infty}$ 代替二阶矩估计,对权重 var、一阶矩m、无穷范数v进行更新。输出端口名 var/m/v 与输入同名(GE inplace 别名),框架将输出内存别名到输入内存,实现原地更新。 - **计算公式**: 给定时间步 $t$ 的梯度 $g_t$,衰减系数 $\beta_1, \beta_2$,学习率 $lr$,数值稳定常数 $\epsilon$,以及外部传入的偏差校正因子 $\beta_1^t$: $$ \begin{aligned} m_{t} &= \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t \\ v_{t} &= \max(\beta_2 \cdot v_{t-1},\ |g_t|) \\ var_{t} &= var_{t-1} - \frac{lr}{1 - \beta_1^t} \cdot \frac{m_t}{v_t + \epsilon} \end{aligned} $$ 算子原型:9输入 + 3输出 (var/m/v,输出名与输入同名 = GE inplace 别名) + 1属性 (use_locking)。对齐 canndev REG_OP(ApplyAdaMaxD)。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了ops-nn/docs/zh/op_list.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8919 | 19 天前 | |
[CANNBOT]SoftMarginLossGrad, threshold_grad_v2_d ,acts_ulq_input_grad算子异常拦截和golden补充 Co-authored-by: gcw_YBIAEfqJ<wangweidong15@huawei.com> # message auto-generated for no-merge-commit merge: !8158 merge ThresholdGradV2D into master [CANNBOT]SoftMarginLossGrad, threshold_grad_v2_d ,acts_ulq_input_grad算子异常拦截和golden补充 Created-by: gcw_YBIAEfqJ Commit-by: gcw_YBIAEfqJ Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> SoftMarginLossGrad, threshold_grad_v2_d ,acts_ulq_input_grad算子异常拦截和golden补充 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4500 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8158 | 1 个月前 | |
修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !8857 merge codex/transfer-test-adagrad-exception-fix into master 修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题。 主要改动如下: 1. 完善 InplaceApplyAdagradDA Host Tiling 校验: - 校验 var Rank 范围为0~8; - 校验所有输入和输出均为 ND format; - 校验 gradient_accumulator、gradient_squared_accumulator、grad 与 var 的 Shape 完全一致; - 校验 lr、l1、l2、global_step 的 Shape 必须为 [1]; - 校验 var、gradient_accumulator、gradient_squared_accumulator、grad、lr、l1、l2 均为 FLOAT/FLOAT16,且 dtype 与 var 一致; - 校验 global_step 为 INT32或INT64。 2. 修正 InplaceApplyAdagradDA 算子信息库签名: - FLOAT、FLOAT16 分别与 INT32、INT64 global_step 组成完整的4组合法签名; - 移除 global_step dtype 与其他输入 dtype 的错误固定配对关系。 3. 完善 InplaceApplyAdagradV2 Host Tiling 校验: - 校验 var Rank 范围为0~8; - 校验所有输入均为 FLOAT; - 校验输入和输出均为 ND format; - 校验 accum、grad 与 var 的 Shape 完全一致; - 校验 lr 的 Shape 必须为 [1]。 4. 完善两个算子的 GE IR example 5. 补充并统一 Ascend950 Host UT,更新 InplaceApplyAdagradDA README 中 global_step dtype组合及0~8维约束。 本 PR 不修改两个算子的 Kernel 计算实现和性能路径。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4666 ## 测试 - Ascend950 Host UT:38/38 PASS - InplaceApplyAdagradDA:22/22 PASS - InplaceApplyAdagradV2:16/16 PASS - GE IR exception:51/51 PASS - InplaceApplyAdagradDA:36/36 PASS - InplaceApplyAdagradV2:15/15 PASS - 41个非法输入在目标 Kernel 前被拒绝; - 10个合法输入或GE自动Cast场景成功执行。 - 静态 GE IR example:PASS。 - 动态 Shape: - unknown-dim -1:两个算子分别3/3 PASS; - unknown-rank [-2]:两个算子分别3/3 PASS。 - TTK Kernel回归: - InplaceApplyAdagradDA:dynamic 520/520 PASS,binary 520/520 PASS; - InplaceApplyAdagradV2:dynamic 497/497 PASS、binary 497/497。 - Ascend950 JIT包生成成功、SHA256校验成功,并在独立目录安装成功。 - pre-commit、clang-format、codespell、OAT、git diff check全部通过。 - 冒烟通过 ## 文档更新 更新 optim/inplace_apply_adagrad_da/README.md: - 明确 global_step 在FLOAT/FLOAT16输入下均支持INT32、INT64; - 将输入维度范围明确为0~8维。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8857 | 22 天前 | |
修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题 Co-authored-by: zhongheng<m202474569@hust.edu.cn> # message auto-generated for no-merge-commit merge: !8857 merge codex/transfer-test-adagrad-exception-fix into master 修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题 Created-by: zhongheng Commit-by: zhongheng Merged-by: cann-robot Description: ## 描述 修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题。 主要改动如下: 1. 完善 InplaceApplyAdagradDA Host Tiling 校验: - 校验 var Rank 范围为0~8; - 校验所有输入和输出均为 ND format; - 校验 gradient_accumulator、gradient_squared_accumulator、grad 与 var 的 Shape 完全一致; - 校验 lr、l1、l2、global_step 的 Shape 必须为 [1]; - 校验 var、gradient_accumulator、gradient_squared_accumulator、grad、lr、l1、l2 均为 FLOAT/FLOAT16,且 dtype 与 var 一致; - 校验 global_step 为 INT32或INT64。 2. 修正 InplaceApplyAdagradDA 算子信息库签名: - FLOAT、FLOAT16 分别与 INT32、INT64 global_step 组成完整的4组合法签名; - 移除 global_step dtype 与其他输入 dtype 的错误固定配对关系。 3. 完善 InplaceApplyAdagradV2 Host Tiling 校验: - 校验 var Rank 范围为0~8; - 校验所有输入均为 FLOAT; - 校验输入和输出均为 ND format; - 校验 accum、grad 与 var 的 Shape 完全一致; - 校验 lr 的 Shape 必须为 [1]。 4. 完善两个算子的 GE IR example 5. 补充并统一 Ascend950 Host UT,更新 InplaceApplyAdagradDA README 中 global_step dtype组合及0~8维约束。 本 PR 不修改两个算子的 Kernel 计算实现和性能路径。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4666 ## 测试 - Ascend950 Host UT:38/38 PASS - InplaceApplyAdagradDA:22/22 PASS - InplaceApplyAdagradV2:16/16 PASS - GE IR exception:51/51 PASS - InplaceApplyAdagradDA:36/36 PASS - InplaceApplyAdagradV2:15/15 PASS - 41个非法输入在目标 Kernel 前被拒绝; - 10个合法输入或GE自动Cast场景成功执行。 - 静态 GE IR example:PASS。 - 动态 Shape: - unknown-dim -1:两个算子分别3/3 PASS; - unknown-rank [-2]:两个算子分别3/3 PASS。 - TTK Kernel回归: - InplaceApplyAdagradDA:dynamic 520/520 PASS,binary 520/520 PASS; - InplaceApplyAdagradV2:dynamic 497/497 PASS、binary 497/497。 - Ascend950 JIT包生成成功、SHA256校验成功,并在独立目录安装成功。 - pre-commit、clang-format、codespell、OAT、git diff check全部通过。 - 冒烟通过 ## 文档更新 更新 optim/inplace_apply_adagrad_da/README.md: - 明确 global_step 在FLOAT/FLOAT16输入下均支持INT32、INT64; - 将输入维度范围明确为0~8维。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8857 | 22 天前 | |
[CANNBot] InplaceApplyCenteredRMSProp算子增加异常拦截校验 Co-authored-by: chen_chenn<chenchen167@huawei.com> # message auto-generated for no-merge-commit merge: !8365 merge inplace_apply_centered_rms_prop into master [CANNBot] InplaceApplyCenteredRMSProp算子增加异常拦截校验 Created-by: chen_chenn Commit-by: chen_chenn Merged-by: cann-robot Description: ## 描述 InplaceApplyCenteredRMSProp算子增加异常拦截校验 a. 算子支持小于9维tensor b. 原型和信息库保持一致,包括参数必选/可选属性 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4708 ## 测试 ttk ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [ x] AI辅助编写 See merge request: cann/ops-nn!8365 | 1 个月前 | |
fix inplace_apply_keras_momentum 注册图模式接口修复 Co-authored-by: Davon14272<liuwenda4@huawei.com> # message auto-generated for no-merge-commit merge: !8877 merge fix/inplace-apply-keras-momentum-infer-dtype into master fix inplace_apply_keras_momentum 注册图模式接口修复 Created-by: Davon14272 Commit-by: Davon14272 Merged-by: cann-robot Description: ## 描述 这是算子安装/注册问题一算子opinfo已注册(能找到算子),但 op_proto的infer_datatype函数缺失或 .so未加 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4893](https://gitcode.com/cann/ops-nn/issues/4893) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8877 | 25 天前 | |
fix: InplaceApplyMentarum FP32 path var_out accuracy exception Co-authored-by: niukang_hw<niukang1@huawei.com> # message auto-generated for no-merge-commit merge: !8566 merge dev_inplace_apply_momentum into master fix: InplaceApplyMentarum FP32 path var_out accuracy exception Created-by: niukang_hw Commit-by: niukang_hw Merged-by: cann-robot Description: ## 描述 ### 1. 问题描述 InplaceApplyMomentum 算子 FP32 dtype 下 var_out 输出精度异常。TTK 100 条白盒用例中 42 条失败(PassRate 58%),失败模式为 var_out=FAIL, accum_out=PASS。FP16/BF16 路径不受影响。多核场景(65536元素/43核)下两个输出均错误。 根因有两个: - FP32 路径将 Vector 计算结果直接从 VECIN TQue buffer 执行 DataCopyPad(MTE3),缺少 V→MTE3 同步,写出未更新的脏数据 - 标量 lr/momentum 通过黑名单 API GlobalTensor::GetValue() 直接从 GM 读取,多核并发读取导致标量值错误 ### 2. 环境信息 - NPU: Ascend950PR (DAV_3510, arch35) - CANN: 9.0.0 - 算子仓: ops-nn, optim/inplace_apply_momentum - TTK: ops-test-kit 3.0.0 ### 3. 重现步骤 bash # 1. 编译安装算子 cd <ops-nn repo> source /usr/local/Ascend/cann-9.0.0/set_env.sh bash build.sh --ops=inplace_apply_momentum --soc=ascend950 cd build_out && bash cann-ops-nn-custom_linux-x86_64.run --install-path=/usr/local/Ascend/cann-9.0.0/opp --quiet --install-for-all # 2. 运行 TTK 测试(float32, shape=(65536,), 43核) cd <ops-test-kit> python3 -m ttk kernel -i <test_csv> \ --plugin <golden_dir> \ -t iam_012 --single-log # 3. 观察结果 # DYN_GOLD: FAIL,PASS (var_out=FAIL, accum_out=PASS) # precision_metrics: mere=0.0008, mare=7.83, threshold=0.0001220703125 最小复现:var=[1.0], accum=[0.5], lr=[0.01], grad=[0.1], momentum=[0.9], dtype=float32,golden 期望 var_out=0.9945,实际 kernel 输出 var_out=0(脏数据)。 ### 4. 预期结果 100 条白盒用例全部 PASS(PassRate 100%),var_out 与 golden tf.raw_ops.ResourceApplyMomentum 在容差范围内一致(FP32 rtol=1e-4)。 ### 5. 日志 / 截图 === 修复前 === TTK Test Summary: Total=100, PASS=58, FAIL=42, PassRate=58% iam_012 (float32, shape=(65536,), 43核): out[0] (var_out): mere=0.0008, mare=7.83, th=0.000122, FAIL out[1] (accum_out): mere=0.006, mare=37.0, th=0.000122, FAIL === 修复后 === TTK Test Summary: Total=100, PASS=100, FAIL=0, PassRate=100% 修复涉及两个文件: - op_kernel/arch35/inplace_apply_momentum.h:FP32 路径新增 VECOUT TQue 输出;标量读取从 GetValue() 改为 DataCopyPad+LocalTensor.GetValue() - op_host/arch35/inplace_apply_momentum_tiling_arch35.cpp:FP32_UB_BYTES_PER_ELEM 从 16 调整为 24 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4737 ## 测试 修复后,TTK Test Summary: Total=100, PASS=100, FAIL=0, PassRate=100% ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8566 | 1 个月前 | |
feat: add verification on InplaceApplyPowerSign Co-authored-by: niukang_hw<niukang1@huawei.com> # message auto-generated for no-merge-commit merge: !8262 merge dev_inplace_apply_power_sign into master feat: add verification on InplaceApplyPowerSign Created-by: niukang_hw Commit-by: niukang_hw Merged-by: cann-robot Description: ## 描述 此 PR 为 InplaceApplyPowerSign 算子的 Tiling 阶段新增了输入校验逻辑,主要包括输入张量的维度上限检查(rank ≤ 8)以及所有 7 个输入之间 dtype 一致性的校验,并添加了两个 GEIR 异常拦截测试文件来覆盖这些校验路径。 主要改动: 1、新增 CheckInputRankLimit 函数:在 inplace_apply_power_sign_tiling.cpp 中增加了对单个输入的 rank 检查,若维度数超过 8 则返回 GRAPH_FAILED,用于拦截 9 维及以上张量。 2、在 GetShapeAttrsInfo 中加入 rank 和 dtype 一致性校验:循环检查全部 7 个输入(var、m、lr、logbase、sign_decay、beta、grad)的 rank 是否超限,并增加循环校验所有输入的 dtype 是否与 var 的 dtype 一致,不一致则报错返回。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4631 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8262 | 1 个月前 | |
feat(optim): add InplaceApplyProximalAdagrad operator Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !8332 merge inplace_apply_proximal_adagrad into master feat(optim): add InplaceApplyProximalAdagrad operator Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: ## PR: feat(optim): add InplaceApplyProximalAdagrad operator ### 概述 新增 InplaceApplyProximalAdagrad 算子,实现 Proximal Adagrad 优化器的参数更新(FOBOS 近端算法),结合 Adagrad 自适应学习率与 L1/L2 近端正则化,用于深度学习训练中反向传播后的参数更新阶段。算子基于 Ascend C 开发,支持 Ascend950 (arch35/DAV_3510) 平台,仅支持 GEIR 图模式调用。 基于 ApplyProximalAdagrad V1 演进,将单输出 algorithmic inplace 设计升级为**双显式 inplace 输出**(var / accum),完整反映 Proximal Adagrad 算法的 inplace 更新语义,对齐弃用版 ApplyProximalAdagradD 的双输出端口设计。 ### 算子功能 实现 Proximal Adagrad 单步参数更新(FOBOS 五步公式): $$ \begin{aligned} \text{accum}_t &= \text{accum}_{t-1} + \text{grad}_t^2 \\ \eta_t &= \frac{\text{lr}}{\sqrt{\text{accum}_t}} \\ \text{prox}_t &= \text{var}_{t-1} - \eta_t \cdot \text{grad}_t \\ \text{var}_t &= \frac{\text{sign}(\text{prox}_t)}{1 + \eta_t \cdot \text{l2}} \cdot \max\!\left(|\text{prox}_t| - \eta_t \cdot \text{l1},\ 0\right) \end{aligned} $$ 当 L1 = 0 时简化为: $$ \text{var}_t = \frac{\text{prox}_t}{1 + \eta_t \cdot \text{l2}} $$ 其中 $var$ 为模型参数,$accum$ 为梯度平方累积量,$lr$ 为学习率,$l1/l2$ 为正则化强度,$grad$ 为当前梯度。 **关键特性**: - **L1 软阈值产生稀疏性**:当 $|prox| \leq \eta \cdot l1$ 时权重直接置零,适用于需要稀疏模型的场景 - **Adagrad 自适应学习率**:对低频特征使用更大学习率,适合稀疏特征训练 - **Inplace 语义**:var/accum 均原地更新,V2 将两者显式暴露为输出端口 - **L1=0 双层快速路径**:编译期 HAS_L1 + 运行时 l1==0 双层优化,跳过 sign/软阈值计算 - **FP16/BF16 Cast up**:半精度输入内部 Cast 到 FP32 计算,结果 Cast 回原始精度 ### 对标竞品 | 竞品 | 接口 | 说明 | |------|------|------| | TensorFlow | tf.raw_ops.ApplyProximalAdagrad | 功能对标,CANN 显式暴露 var/accum 双输出 | | PyTorch | 无原生实现 | PyTorch 优化器在 Python 层实现,不在 ATen 注册 | ### 支持规格 | 项目 | 支持情况 | |------|---------| | **数据类型** | float16, float32, bfloat16 | | **数据格式** | ND | | **平台** | Ascend950 (arch35) | | **调用模式** | GEIR 图模式 | | **输出端口** | 2 个显式 inplace 输出 (var + accum) | | **TensorFlow 兼容** | 对标 ApplyProximalAdagrad / ResourceApplyProximalAdagrad | ### 交付件清单 optim/inplace_apply_proximal_adagrad/ ├── CMakeLists.txt # 构建配置 ├── README.md # 算子文档 ├── examples/ │ ├── test_geir_inplace_apply_proximal_adagrad.cpp # GEIR 示例 │ └── arch35/ │ └── test_geir_inplace_apply_proximal_adagrad.cpp # arch35 GEIR 示例 ├── op_graph/ │ ├── CMakeLists.txt │ ├── inplace_apply_proximal_adagrad_proto.h # GEIR 原型定义 │ └── inplace_apply_proximal_adagrad_graph_infer.cpp # 图模式 InferDataType ├── op_host/ │ ├── inplace_apply_proximal_adagrad_def.cpp # 算子定义(6输入2输出) │ ├── inplace_apply_proximal_adagrad_infershape.cpp # 形状推导(含accum输出) │ └── arch35/ │ ├── inplace_apply_proximal_adagrad_tiling_arch35.h # Tiling 类声明 │ └── inplace_apply_proximal_adagrad_tiling_arch35.cpp # Tiling 计算 ├── op_kernel/ │ ├── inplace_apply_proximal_adagrad.cpp # Kernel 入口(8参数含accum_out) │ └── arch35/ │ ├── inplace_apply_proximal_adagrad.h # Kernel 实现(计算逻辑零改动复用V1) │ ├── inplace_apply_proximal_adagrad_struct.h # 模板参数声明 │ └── inplace_apply_proximal_adagrad_tiling_data.h # Tiling 数据结构 └── tests/ └── ut/ └── op_host/ ├── test_inplace_apply_proximal_adagrad_infershape.cpp # InferShape UT └── arch35/ └── test_inplace_apply_proximal_adagrad_tiling_arch35.cpp # Tiling UT ### 测试验证 #### 单元测试 (UT) - **覆盖范围**:InferShape + Tiling - **通过率**:100% #### GEIR 端对端验证 - **状态**:✅ 通过 - **验证内容**:图编译 + 图执行 + 输出正确性 - **精度标准**:商用标准(双标杆 Ratio),L0 级(MARE Ratio≤10) - **Golden 标杆**:TensorFlow tf.raw_ops.ResourceApplyProximalAdagrad - **覆盖范围**: - 数据类型:FP32 / FP16 / BF16 - L1 强度:0(快速路径)/ 非0(稀疏路径) - 特殊场景:空 Tensor、大 shape、标量输入 ### 代码质量 - ✅ 文件头格式统一(Copyright + Generated By CANNBot) - ✅ Tiling 校验使用 OP_LOGE 统一日志格式 - ✅ 算子定义属性添加 AttrType(OPTIONAL) 与原型对齐 - ✅ dtype 校验改用 OP_CHECK_IF + OP_LOGE 格式 - ✅ 魔鬼数字常量化(kVecRegBytes, kAlignBytes, kPadVarGrad, kPadAccum 等) - ✅ Kernel 计算逻辑 100% 复用 ApplyProximalAdagrad V1,零改动 - ✅ Tiling 策略 100% 复用 ApplyProximalAdagrad V1,零改动 - ✅ clang-format 格式化 ### 编译验证 bash cd ops-nn bash build.sh --soc=ascend950 --pkg --ops=inplace_apply_proximal_adagrad -j16 # 输出 ✅ 编译成功 ✅ 生成算子包:cann-ops-nn-custom_linux-x86_64.run ### 关键实现细节 #### 1. 版本关系 | 版本 | 算子名 | 输出端口 | Kernel 实现 | 状态 | |------|--------|---------|------------|------| | 弃用版 | ApplyProximalAdagradD | 2 | TBE (Python) | DEPRECATED | | V1 | ApplyProximalAdagrad | 1 | Ascend C (C++) | 推荐使用 | | **V2(本次)** | **InplaceApplyProximalAdagrad** | **2** | **Ascend C(复用V1)** | **本次交付** | #### 2. Kernel 实现 - **架构**:TQue 双缓冲 + TBuf scratch,完全复用 ApplyProximalAdagrad V1 - **模板参数**:(D_T_VAR, PAD_TAIL, HAS_L1),3 dtype × 2 pad × 2 L1 = 12 变体 - **五步公式**: 1. accum' = accum + grad² 2. eta = lr * rsqrt(accum') 3. prox = var - eta * grad 4. (l1>0) 软阈值: sign(prox) * max(|prox|-eta*l1, 0); (l1=0) 跳过 5. var' = prox_hat / (1 + eta*l2) #### 3. 精度策略 - **FP32**:原生计算,无转换 - **FP16**:Cast→FP32 计算→Cast 回(CAST_RINT) - **BF16**:Cast→FP32 计算→Cast 回(CAST_ROUND),标量加载走 Vector Cast workaround #### 4. Tiling 实现 - **多核切分**:blockFactor = CeilAlign(CeilDiv(total, coreNum), ubBlockSize) - **UB 切分**:按 co-resident buffer 占用计算 ubFactor - **TilingKey**:(dType, padTail, hasL1),默认 hasL1=1(标量在 GM 不可 host 读取) #### 5. 尾部 Padding - **var / grad**:pad 0,grad=0 保持 accum 不变 - **accum**:pad 1,Rsqrt(1)=1 避免 +Inf→NaN ### 依赖与限制 - **依赖**:CANN 9.0.0 - **限制**: - 仅支持 GEIR 图模式(无 ACLNN 接口) - 仅支持 Ascend950 (arch35) - var、accum、grad 三者 shape/dtype 必须完全一致 - lr、l1、l2 为 0-D 或 1-element 标量 - 不支持空 Tensor(0 元素) - use_locking 属性为 TensorFlow 兼容保留 ### Checklist - [x] 代码符合 ops-nn 内置算子标准 - [x] 文件头格式统一 - [x] Tiling 校验规范化(OP_LOGE + OP_CHECK_IF) - [x] 单元测试通过 - [x] GEIR 端对端验证通过 - [x] 编译安装验证通过 - [x] 文档完整(README + 示例) - [x] clang-format 格式化 - [x] Kernel 计算逻辑复用 V1(零改动) - [x] Tiling 策略复用 V1(零改动) See merge request: cann/ops-nn!8332 | 30 天前 | |
foreach/lamb/scatter类部分算子补齐A5输入校验和资料说明 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !7419 merge master into master foreach/lamb/scatter类部分算子补齐A5输入校验和资料说明 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 foreach/lamb/scatter类部分算子资料描述不清晰,补齐A5输入校验和资料说明 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4075 ## 测试 不涉及 ## 文档更新 foreach/lamb/scatter类部分算子README文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7419 | 1 个月前 | |
fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8767 merge fix/scatter-noncontig-and-lamb-infershape into master fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 长尾算子问题优化:scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4865 ## 测试 不涉及 ## 文档更新 README ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8767 | 25 天前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 1 个月前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 1 个月前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 1 个月前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 1 个月前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 1 个月前 | |
fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8112 merge fix/op-binary-json-missing into master fix: 补齐 4 算子 ascend950 binary.json 注册配置,修正 GroupNormSiluQuant 动态 rank 推导与 23 个算子 golden 参照失真 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 修复三类「已声明的能力与实际产物不一致」的缺陷:注册配置缺失、动态 rank 推导缺失、测试参照(golden)与算子实现不一致。 ### 一、4 个算子在 ascend950 上缺失 binary.json 注册配置 NonZeroWithValue、MultilabelMarginLoss、PoissonNllLoss、MultiAddRmsNormDynamicQuant 的 *_def.cpp 均已执行 this->AICore().AddConfig("ascend950", ...),但 op_host/config/ascend950/*_binary.json 缺失(前 3 个算子 op_host/config/ 目录整体为空,MultiAddRmsNormDynamicQuant 仅有 ascend910b/、ascend910_93/)。 **改动原因**(依据仓库构建脚本,非推断): - cmake/custom_kernel.cmake:17-23:add_custom_kernel_library 以 if(EXISTS ${binary_json}) 为进入门槛,配置缺失时该算子被整体 continue 跳过,ascend950 kernel 不进入编译与打包; - cmake/func.cmake:656-666:拿不到 binary.json 时退化为 get_op_type_from_op_name 按算子名推断 op_type; - cmake/ut.cmake:459-476:numFiles EQUAL 0 分支同样退化为「下划线切分 + 首字母大写」推断 opType,与 OP_ADD() 注册的真实 op_type 不再有强绑定。 **改动方法**:逐算子按其 _def.cpp 的 DataType / Format 注册列表对齐补齐配置文件,bin 数与 dtype 组合严格一一对应: | 算子 | 新增配置文件 | bin 数 | dtype 组合依据 | |------|-------------|:------:|---------------| | NonZeroWithValue | index/non_zero_with_value/op_host/config/ascend950/non_zero_with_value_binary.json | 12 | non_zero_with_value_def.cpp 中 xDataType 的 12 类:double / float / float16 / int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / bool;value 跟随 x,index / count 恒 int32(与 indexDataType、countDataType 一致)。attr:transpose(bool) / dtype(int) | | MultilabelMarginLoss | loss/multilabel_margin_loss/op_host/config/ascend950/multilabel_margin_loss_binary.json | 6 | multilabel_margin_loss_def.cpp 中 ascend950 独立的 regbaseConfig(xy6 / tgt6 / ist6):x、y ∈ {float32, float16, bfloat16},is_target 前 3 组保持 GE 原型的 int32、后 3 组跟随 self(对应 _v2 后缀 bin) | | PoissonNllLoss | loss/poisson_nll_loss/op_host/config/ascend950/poisson_nll_loss_binary.json | 2 | poisson_nll_loss_def.cpp 中 {DT_FLOAT16, DT_FLOAT};attr:log_input(true) / full(false) / eps(1e-8) / reduction("mean") | | MultiAddRmsNormDynamicQuant | norm/multi_add_rms_norm_dynamic_quant/op_host/config/ascend950/multi_add_rms_norm_dynamic_quant_binary.json | 2 | float16 / bfloat16 两组;x1 为 dynamic 输入,smooth_scale1 / smooth_scale2 为 optional,输出 y1/y2 int8、x/y 跟随输入、scale1/scale2 float32;optional_input_mode: gen_placeholder 与同算子既有 ascend910b / ascend910_93 配置保持一致 | ### 二、GroupNormSiluQuant:补齐 -2 动态 rank 推导,资料补空 Tensor 支持声明 **改动原因**:group_norm_silu_quant_def.cpp:67 的 ascend950 config_regbase 已声明 DynamicRankSupportFlag(true),但 group_norm_silu_quant_infershape.cpp 中无对应分支。x 为 UNKNOWN_RANK(-2)时,x_shape->GetDim(0) 取到的是 -2 这个标记值本身,mean / rstd 被推成非法的 (-2, num_groups)。 **改动方法**: - op_host/group_norm_silu_quant_infershape.cpp:引入 util/shape_util.h,在取 num_groups 之前插入 Ops::Base::IsUnknownRank(*x_shape) 判断,命中则对 y / mean / rstd 三个输出统一 Ops::Base::SetUnknownRank() 后直接返回 GRAPH_SUCCESS。 - tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp:新增 2 个用例。 - infershape_unknown_rank_x:x = {-2},断言三个输出均为 {-2}; - infershape_empty_tensor_each_axis:逐轴各一例(N 轴 {0,320,16,16}、C 轴 {4,0,16,16}、HW 轴 {4,320,0,16}),断言 y 与 x 同形、mean/rstd 为 (dims[0], 32)。 ### 三、23 个算子 golden.py 改用竞品 torch 算子拼接,并修正与算子实现不一致之处 **改动原因**:golden 红线 R3 要求 golden 只能由「竞品接口实现」或「竞品算子拼接实现」,禁止 numpy 纯公式——纯公式与被测 kernel 容易犯同一类错误,用与 kernel 一样有损的参照去比对,会把精度短板伪装成达标。 **改动方法**:23 个 tests/assets/golden.py 中,21 个新增 import torch 并改为 torch 张量算子拼接(numpy 仅保留 I/O 与 dtype 转换);foreach_a_cos_inplace、foreach_log_inplace 原本已是 torch 实现,本次仅做内存优化。除改用 torch 外,同步修正了以下与算子实现不一致之处(均为参照失真,会掩盖或误报 kernel 问题): - **标量一律落在 float32**:Python float 是 fp64,标量运算会把整条链路抬到双精度,而算子在 fp32 上算(A2 的 TBE compute 里 dtype='float32',arch35 DAG 计算类型 U = float)。 - **foreach_addcmul_list 整数分支**:改用未经 float32 抹位的原始整数标量——1564714939 过一道 fp32 会变成 1564714880。 - **foreach_addcmul_list 三因子结合序**:改为 (x2*x3) 先乘、再乘标量。数学上乘积与结合序无关,但 fp32 中间量下不等价:scalars 取极值(如 3.35e38)时 (x2*scalars) 先冲破 fp32 上限变成 inf,而 x2*x3 为小量、再乘 scalars 并不溢出。 - **lamb_update_with_lr 的 clip**:改用 torch.minimum / torch.maximum——内核走 Vec::Min / Vec::Max 硬件指令、传播 NaN,而 Python 内置 min/max 是比较语义、会静默丢弃 NaN。 - **lamb_apply_weight_assign 运算序列**:改为 ratio*(update*lr),与 A2 的 vmul(update,lr) 再 vmul(ratio,·) 及 arch35 DAG 一致;README.md 公式同步加括号标明结合顺序(原写法在 update 与 lr 同时较大时会先溢出成 inf)。 - **lamb_apply_weight_assign / foreach_addcdiv_list 的除法**:补 Subnormal 归零。A2 的 Div 无 config 参数、只有单指令一条路,arch35 默认 DivAlgo::INTRINSIC 亦对 Subnormal 做 FTZ;golden 在 CPU 上默认保留 Subnormal 会给出算子不会产出的值。 - **lamb_apply_optimizer_assign 偏差校正**:改用 exp(log(b)*steps),与 arch35 DAG 的 Log / Mul / Exp 三条指令一致,不再用 Python 幂运算。 - **scatter_list 散射写入**:按平坦偏移下发,不使用 Tensor.index_copy_。算子把 indice 直接当线性偏移用、不做边界检查也无负索引回绕语义(README「indice值域:不支持索引越界」),而 index_copy_ 只接受 [0, axis_size) 的索引、遇负索引直接抛异常中断整轮用例;原 numpy 花式索引则会把 [-size,-1] 静默回绕到尾部,给出算子不会产出的结果。同时工作 dtype 改用原生 dtype 而非一律转 float32:ScatterList 是纯拷贝算子、输出应与输入逐位相同,而 def 注册了 DT_INT32 / DT_INT64,fp32 尾数只有 24 位装不下 2^30 量级整数(实测 2^30+100 经 float32 中转变成 2^30+128,静默丢 28);仅 bfloat16 因 numpy 无原生类型走 fp32 桥接(拷贝无损)。 - **group_norm_silu_quant 刻意不用 F.group_norm**:该层级 API 带 BN 系列的训练态保护(Expected more than 1 value per channel when training),每通道只剩 1 个元素时直接拒收(2 维输入 (N,C) 且 group=C 即触发,实测 case00608 崩),而算子本身 elemNum=1 合法。改用 torch.var_mean / torch.rsqrt / torch.addcmul / F.silu / torch.round+torch.clamp 拼接,语义等价且不带该限制,同样满足红线 R3。 - **foreach 系 fp32 提升不再无谓复制缓冲**:astype(np.float32, copy=False)。单份 GB 级的大用例(32 张量、5.37 亿元素)无谓复制会把进程推向 OOM;下游 torch 算子均非原地、不改写输入,复用安全。 ## 关联的Issue 关联Issue #4483 https://gitcode.com/cann/ops-nn/issues/4483 ## 测试 - **新增 UT**:norm/group_norm_silu_quant/tests/ut/op_host/arch35/test_group_norm_silu_quant_infershape.cpp 新增 infershape_unknown_rank_x、infershape_empty_tensor_each_axis 两个用例,覆盖 -2 动态 rank 与 N/C/HW 三个轴各自为 0 的空 Tensor 场景。 - **golden 回归**:23 个算子的 tests/assets/golden.py 变更由各自 TTK 用例集回归验证。作者记录:foreach_addcmul_list 修正三因子结合序后,此前因 fp32 中间量溢出成 inf 而失败的 bf16 用例集(8192 个元素中 7361 个 |x2*scalars| 超 fp32 上限)达到 100/100 通过。 - **binary.json**:4 份新增配置的 bin 数与 dtype / format / attr 组合均与对应 _def.cpp 的注册列表逐项核对一致(12 / 6 / 2 / 2)。 ## 文档更新 - norm/group_norm_silu_quant/README.md、norm/group_norm_silu_quant/docs/aclnnGroupNormSiluQuant.md:self 参数的约束列由 - 补充为「支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。」 - optim/lamb_apply_weight_assign/README.md:计算公式由 $input\_param - input2 \times ratio \times input3$ 改为 $input\_param - ratio \times (input3 \times input2)$,加括号标明与算子实现一致的结合顺序。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8112 | 1 个月前 | |
fix(lars_v2_update): add dtype and rank validation in TilingFunc Co-authored-by: Miao_Haifeng<miaohaifeng@huawei.com> # message auto-generated for no-merge-commit merge: !8209 merge fix-lars-v2-update-tiling-exception into master fix(lars_v2_update): add dtype and rank validation in TilingFunc Created-by: Almost_CANN Commit-by: Miao_Haifeng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 增加LarsV2Update算子的dtype和dim检查 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> TTK、UT ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8209 | 1 个月前 | |
docs(sgd): fix non-standard scalar shape description in README Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !8512 merge fix/issue-4680-sgd-readme into master docs(sgd): fix non-standard scalar shape description in README Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 修改 optim/sgd/README.md 中 learning_rate 和 momentum 参数的 shape 描述,将不符合文档标准的 "shape须为0维标量,或元素总数为1的tensor(如[1]、[1,1])" 改为标准的 "标量(元素个数为1)",与仓库其他算子的描述风格对齐。 ## 关联的Issue Fixes #4680 ## 测试 仅文档修改,无代码逻辑变更,无需测试。 ## 文档更新 更新了 optim/sgd/README.md 中 learning_rate 和 momentum 参数的 shape 约束描述。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8512 | 1 个月前 | |
docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8571 merge doc into master docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 更新16个算子README,新增支持Atlas A2/A3系列产品 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4785 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8571 | 29 天前 | |
docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8571 merge doc into master docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 更新16个算子README,新增支持Atlas A2/A3系列产品 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4785 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8571 | 29 天前 | |
docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8571 merge doc into master docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 更新16个算子README,新增支持Atlas A2/A3系列产品 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4785 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8571 | 29 天前 | |
docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8571 merge doc into master docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 更新16个算子README,新增支持Atlas A2/A3系列产品 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4785 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8571 | 29 天前 | |
docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8571 merge doc into master docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 更新16个算子README,新增支持Atlas A2/A3系列产品 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4785 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8571 | 29 天前 | |
docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8571 merge doc into master docs: 更新16个算子README,新增支持Atlas A2/A3系列产品 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 更新16个算子README,新增支持Atlas A2/A3系列产品 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4785 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8571 | 29 天前 | |
Format update: Adjusted the license description format in all relevant files. Co-authored-by: jiangqi<jiangqi47@h-partners.com> # message auto-generated for no-merge-commit merge: !365 merge license5 into master Format update: Adjusted the license description format in all relevant files. Created-by: jiangqi2025 Commit-by: jiangqi Merged-by: turing_project1 Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!365 | 8 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 19 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 26 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 22 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 29 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 26 天前 | ||
| 29 天前 | ||
| 1 个月前 | ||
| 23 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 25 天前 | ||
| 1 个月前 | ||
| 22 天前 | ||
| 1 个月前 | ||
| 29 天前 | ||
| 19 天前 | ||
| 1 个月前 | ||
| 22 天前 | ||
| 22 天前 | ||
| 1 个月前 | ||
| 25 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 30 天前 | ||
| 1 个月前 | ||
| 25 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 8 个月前 |