本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
编译任务机器规格调整以及冒烟脚本调整 Co-authored-by: chenyajie<chenyajie6@huawei.com> # message auto-generated for no-merge-commit merge: !8787 merge master into master 编译任务机器规格调整以及冒烟脚本调整 Created-by: yajie_caroline Commit-by: chenyajie Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8787 | 2 个月前 | |
fix: 日志规范性整改 Co-authored-by: duxinlei<duxinlei@h-partners.com> # message auto-generated for no-merge-commit merge: !9059 merge 0824LogModify into master fix: 日志规范性整改 Created-by: duxinlei Commit-by: duxinlei Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 给activation/pooling/index下部分算子做日志规范性整改,修改pr拼写错误、内容错误、关键信息泄露问题; 仅对loge内容做修改,其余部分为pre-commmit格式修改; ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue #5185 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> david冒烟 obp冒烟 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9059 | 2 个月前 | |
update download ops-test-kit and update case for st Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9537 merge ci into master update download ops-test-kit and update case for st Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 1. 更新ops_st_test.sh脚本中下载ops-test-kit的方式,由原有的配置make文件下载,改为直接用git clone下载 2. 针对线上CI模式,不返回失败,在正式上线前不阻塞CI 3. 更新非量化mm类用例,减少执行时间 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue #4426 ## 测试 <!--描述进行了哪些测试来验证你的改动。-->  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9537 | 2 个月前 | |
修复mamtul类算子原型宏隔离问题 Co-authored-by: jgx12<jingaoxiang@huawei.com> # message auto-generated for no-merge-commit merge: !9438 merge matmul_yuan into master 修复mamtul类算子原型宏隔离问题 Created-by: jgx12 Commit-by: jgx12 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 在 common/inc/op_graph/op_nn_proto_extend.h 中为三个 matmul 类算子的原型注册添加条件编译宏防护,避免这些算子定义在多次包含或与外部定义冲突时出现重复注册问题。改动方式一致:将算子原有的注释文档移到宏防护之外(注释内容本身未变),将 REG_OP 注册体包裹在 #ifndef/#define/#endif 宏防护中 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5263 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 无 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9438 | 2 个月前 | |
fix(npu_alloc_float_status): 修复geir示例构图问题 Co-authored-by: qq_52056150<24171214023@stu.xidian.edu.cn> # message auto-generated for no-merge-commit merge: !9187 merge fix_npu_alloc_float_status_geir into master fix(npu_alloc_float_status): 修复geir示例构图问题 Created-by: wkkk0528 Commit-by: qq_52056150 Merged-by: cann-robot Description: ## 描述 修复 NPUAllocFloatStatus 算子 geir 示例(test_geir_npu_alloc_float_status.cpp)的构图问题: 1. 移除当前 CANN 头文件布局中不存在的 experiment_ops.h 引用(编译 fatal error) 2. 适配无输入算子的 GE IR 构图:Graph::SetInputs 不允许空 inputs,且与图输入不连通的节点会在建图时被裁剪,导致算子节点丢失、RunGraph 返回 0 个输出。增加 op::Data 占位输入并通过 AddControlInput 控制边将算子挂载到图上,构图改为 SetInputs().SetOutputs() 链式调用 ## 关联的issue https://gitcode.com/cann/ops-nn/issues/5179 ## 测试 已通过冒烟测试和example编译测试 ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述 See merge request: cann/ops-nn!9187 | 2 个月前 | |
Temporarily shielding the fm_partload scenario. Co-authored-by: ray-shaw<shaorui4@huawei.com> # message auto-generated for no-merge-commit merge: !9519 merge master_829 into master Temporarily shielding the fm_partload scenario. Created-by: ray-shaw Commit-by: ray-shaw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 卷积算子临时屏蔽smallkernel模板中 L1不全载场景,因为该场景在K轴全载时的L1 pingpong实现存在流水串行问题,导致性能劣化。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue #5346 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地测试精度pass,性能劣化问题解决 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9519 | 2 个月前 | |
docs(scatter): 修正6个aclnn接口Ascend 950确定性描述 Co-authored-by: zhang-wenbo-beat<zhangwenbo67@huawei.com> # message auto-generated for no-merge-commit merge: !9500 merge determinstic_check into master docs(scatter): 修正6个aclnn接口Ascend 950确定性描述 Created-by: zhang-wenbo-beat Commit-by: zhang-wenbo-beat Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> **改动原因**:nn仓部分算子资料中描述为"默认确定性实现",但经核实 Ascend 950PR/950DT(arch35)上实际 kernel 采用多核写-写竞争或原子累加实现,在 index/indices 存在重复元素时多次执行结果可能不一致,资料与实现不符。 **核实方法与结论**(基于 arch35 op_host tiling 分核逻辑与 op_kernel 写入方式逐一分析): | 接口 | 950 默认 kernel 行为 | 证据 | |---|---|---| | aclnnIndexCopy&aclnnInplaceIndexCopy | 按 updates 分核, var[varDataIdx]=updates[i] 裸写,重复 index 写序不定 | scatter_update_simt.h:82 | | aclnnInplacePut | accumulate=false 走 ScatterNdUpdate 裸写;=true 走 ScatterNdAdd 原子累加 | scatter_nd_update_simt.h:53 | | aclnnInplaceScatterUpdate | SIMT/SIMD 裸写 GM,重复索引写序不定 | scatter_simt.h:38 | | aclnnScatterNd / aclnnScatterNdUpdate | 默认走 isSimdNonDeterminstic_/simt 裸写分支 | scatter_nd_update_tiling_regbase.cpp:267 | | aclnnTfScatterAdd | 默认走 ScatterAdd/ScatterNdAdd 原子累加 | scatter_nd_add_simt.h:53 | **改动方法**: 1. docs/zh/op_api_list.md:上述 6 个接口的"确定性说明(Ascend 950)"列由"默认确定性实现"修正为"默认非确定性实现,支持配置开启";A2/A3 列**保持原值不动**(本轮仅核实 950)。 2. 各接口 md 的约束说明中,按芯片类型(term 标签)补充确定性说明:950 默认非确定性的成因、aclrtSetSysParamOpt 开启确定性后仍生效的具体条件(dtype、索引维度、元素个数等,与 tiling 中 GetDeterministic() 分支条件一致),以及 A2/A3 的既有口径。 同时核实确认无误、未改动的关联接口:aclnnScatter/ScatterValue/ScatterAdd(A2/A3 arch22 按输出分核顺序处理)、aclnnIndexAdd/V2、aclnnInplaceMaskedScatter(prefix-sum 分配)、IndexFill 系列、RepeatInterleave 系列、Gather 系列、Bucketize、AvgPool2d/3d(清零+单实数加数的对齐原子加)。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5347 无(资料与实现一致性巡检)。 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 仅文档改动(md-only),pre-push 门禁自动识别并跳过编译/UT。 - 已通读 6 个 md 的修改,确认:term 标签 npu/id 与文件内既有标签无冲突(新块使用 id9/id10)、950 说明中的开启条件与 tiling 代码分支条件一一对应、表格 950 列与 md 结论一致。 - codespell/pre-commit 全部通过(曾误报 "scatter nd add" 中的 nd,已改写为 ScatterNdAdd)。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - docs/zh/op_api_list.md:6 行接口列表的 950 确定性列修正 - index/scatter_update/docs/aclnnIndexCopy&aclnnInplaceIndexCopy.md - index/scatter_nd_update/docs/aclnnInplacePut.md - index/scatter_nd_update/docs/aclnnScatterNdUpdate.md - index/scatter_nd/docs/aclnnScatterNd.md - index/scatter/docs/aclnnInplaceScatterUpdate.md - index/tf_scatter_add/docs/aclnnTfScatterAdd.md 以上 6 个接口 md 均在约束说明中按芯片类型补充确定性说明。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9500 | 2 个月前 | |
modify examples/fast_kernel_launch_example/README.md Co-authored-by: yolic<chenyuning1@huawei.com> # message auto-generated for no-merge-commit merge: !9440 merge 0828_torch_readme into master modify examples/fast_kernel_launch_example/README.md Created-by: yolic Commit-by: yolic Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改 examples/fast_kernel_launch_example/README.md,新增soc说明 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#5302](https://gitcode.com/cann/ops-nn/issues/5302) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了 examples/fast_kernel_launch_example/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9440 | 2 个月前 | |
Refactor turbo_quant_compress_latent to support DeepSeek-V4 Co-authored-by: wangbin207<wangbin207@huawei.com> Co-authored-by: root<qjgggsse@126.com> # message auto-generated for no-merge-commit merge: !9311 merge master into master Refactor turbo_quant_compress_latent to support DeepSeek-V4 Created-by: wangbin207 Commit-by: wangbin207;root Merged-by: cann-robot Description: # 描述 扩展 experimental/quant/turbo_quant_compress_latent/,为 Atlas A2(ascend910b)和 Atlas A3(ascend910_93)提供 DeepSeek-V4 TurboQuant 4bit KV latent 压缩能力。 本次改动保留 GLM 原有 output_mode=0 语义,新增 DeepSeek-V4 使用的 output_mode=1 compact corrected slot。 text norm_i = sqrt(sum_d latent[i][d]^2 + eps) u[i][d] = latent[i][d] / norm_i nibble[i][d] = argmin_c |u[i][d] - centroids[c]| slot[i][k] = nibble[i][2k] | (nibble[i][2k+1] << 4) mode 0 保持 320B 对齐布局,scale 为 float16(norm_i);mode 1 输出 258B compact corrected slot: text correctedScale_i = norm_i / sqrt(sum_d centroids[nibble[i][d]]^2 + eps) 当 headDim=512 时: | 模式 | 布局 | 大小 | | --- | --- | ---: | | mode 0 | 256B packed nibble + 2B norm + 62B padding | 320B | | mode 1 | 256B packed nibble + 2B corrected scale | 258B | ## 关联的Issue [扩展TurboQuant4bit算子以支持DeepSeek V4系列模型][(https://gitcode.com/cann/ops-nn/issues/4942) # 测试 测试环境:CANN 9.0.1;A2 使用 ascend910b package;当前空闲物理 die 8-15 对应逻辑设备 4-7,真机运行时为 ascend910_93,使用匹配的 A3 package 完成验证。 ## 构建 bash bash build.sh --pkg --soc=ascend910b --ops=turbo_quant_compress_latent --experimental --vendor_name=customize bash build.sh --pkg --soc=ascend910_93 --ops=turbo_quant_compress_latent --experimental --vendor_name=customize A2 package 构建通过,生成 .run 包、aclnn header、proto 和 kernel binary;A3 cross-build 通过。 ## UT | 套件 | 结果 | | --- | --- | | tests/ut/op_host | **22/22 PASS** | | tests/ut/op_kernel | **24/24 PASS** | Host 层覆盖默认 mode 0、显式 mode 1、动态 token/head 维、slot size、tiling 字段、空 Tensor、非法 headDim、非法 centroid 数、非法 mode 和非法 rank。 Kernel ICPU UT 覆盖 mode 0 回归、mode 1 多核切分、尾核、batch 尾块、最大 batch、空 Tensor、uniform、gauss_lat、全部 centroid offset、NaN/Inf 混合输入以及 258B 行间距。 摘要: text total=24, pass=24, fail=0, timeout=0 ## Golden 与精度判据 golden 脚本位于: text tests/ut/op_kernel/turbo_quant_compress_latent_data/ gen_data.py golden.py compare_data.py golden 按 kernel 运算顺序复刻 FP32 L2 reduce、归一化、中点边界计数、码本选择、corrected-scale 规约、FP16 cast 和 int4 pack。 本算子输出为 UINT8,有限输入采用逐字节比较:packed nibble 和 mode 1 corrected scale 的 FP16 bit pattern 必须一致,mode 0 padding 必须全零;非有限输入比较 IEEE 类别。 已生成 mode 1 shape 矩阵: text 0 1 2 3 4 8 12 16 20 24 28 40 41 64 127 128 512 1000 1024 2048 4096 4097 8192 16384 65536 ## 性能 本次已完成 mode 0/1 真机精度和大输入验证;尚未新增 profiler 性能数据,性能 profiling 不影响逐字节正确性结论。 mode 1 相比 mode 0 的额外计算来自 selected centroid 向量选择、centroid norm 规约和 corrected scale 计算。slot payload 从 320B 降至 258B,减少 DeepSeek-V4 KV cache padding;端到端收益需要与读取侧融合 Attention 一起评估。 ## 文档更新 - 更新 experimental/quant/turbo_quant_compress_latent/README.md; - 更新 docs/aclnnTurboQuantCompressLatent.md; - 更新 aclnn 调用示例; - 更新 PyTorch eager、Meta 和图模式说明; - 补充 mode 0/1 布局、corrected scale 语义和约束说明。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9311 | 2 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 2 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 2 个月前 | |
fix(index): prevent InplaceAdd uint32 loop overflow Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !9545 merge fix/inplace-add-uint32-loop-overflow into master fix(index): prevent InplaceAdd uint32 loop overflow Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 修复 InplaceAdd Ascend 950 kernel 在超大合法 shape 下可能卡死的问题。 累加阶段使用 uint32_t grid-stride 循环时,原判断只保证扁平地址不超过 UINT32_MAX,没有为循环末尾的 element += stride 预留空间。当 accTotal 位于 32 位上界前最后 stride - 1 个元素的区间内时,循环变量会 发生无符号回绕,导致循环无法退出。 本次将 32 位累加路径的安全条件收紧为: text widest <= UINT32_MAX && accTotal <= UINT32_MAX - stride + 1 超过该上限的极窄边界区间复用现有 uint64_t 路径。普通 shape 继续使用原 32 位热路径,SIMT 循环内未增加分支。 ## 关联的Issue 无。 ## 测试 - [x] 修复前使用 Ascend 950PR release binary 实机复现: n=k=65535、rowSize=65537、accTotal=UINT32_MAX,TTK 命中 blockDim=56 后报告 AIC Task TIMEOUT。 - [x] 边界算术检查:stride=57344 时安全上限为 4294909952;原反例 4294967295 改走 64 位路径。 - [x] 仓库 pre-commit 全部通过(clang-format、codespell、OAT 等)。 - [x] 修复源码单算子 JIT 构建、部署成功,部署侧源码与仓内源码 SHA-256 一致。 - [x] 修复后同一超大 shape 使用 --clean-dyn 实机复测:动态编译成功,shape、 blockDim=56 及 tiling data 与修复前一致;kernel 正常返回,STATUS: PASS、 DYN_MEM: OK,OK,未再出现 AIC Task TIMEOUT。该用例关闭 golden,只验证卡死消失和 内存安全。 - [x] FP32 普通小 shape JIT 数值回归通过,DYN_GOLD: PASS、STATUS: PASS、 DYN_MEM: OK,OK。 ## 文档更新 无需更新用户文档;问题复现与根因已记录在本地问题档案。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9545 | 2 个月前 | |
fix(arch35): 修复 ArgMaxGrad inner>1 时 UB 地址非对齐崩溃, 并完成 4 算子检视意见整改 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9460 merge fix/code-check-4ops-v2 into master fix(arch35): 修复 ArgMaxGrad inner>1 时 UB 地址非对齐崩溃, 并完成 4 算子检视意见整改 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 覆盖 ArgMaxGrad / ChamferDistance / SoftmaxFocalLoss / SoftmaxFocalLossGrad 四个算子的 arch35(Ascend950PR) 交付整改, 其中包含一处真机实测出的内核崩溃缺陷修复。 ### 1. ArgMaxGrad: 修复 inner>1 时 UB 地址非对齐导致的 aivec 崩溃(核心缺陷) **现象**: kernel 泛化 1224 例中 102 例 NO_OUTPUT, 设备侧 plog 报 errcode:(340) The address for VEC to access UB is not aligned, subErrType: 0x4。 **根因**: 多行合并路径下 GenAssist() 逐行写 assist: cpp AscendC::Duplicate(assistL[r * inner_], kStart + r, inner_); // 目的地址 = r * inner_ * sizeof(int32_t) 字节 inner_(被选轴之后所有维的乘积)不是 8 的整数倍时, 该地址不落在 32B 边界, 触发 VEC 访问 UB 非对齐。 inner_ == 1 时走 CreateVecIndex、偏移恒为 0, 故只在 inner_ > 1 暴露; 而 inner_ > 1 是 dimension 不指向最后一维时的常态(泛化用例集中占 62%)。 **修复**: 多行合并只在 assist 行跨度 32B 对齐时启用, 否则退回单行路径(偏移恒为 0, 天然对齐): cpp const bool assistRowAligned = ((inner_ * sizeof(int32_t)) % BLOCK_SIZE == 0); rowsPerChunk_ = (assistRowAligned && rowElems_ > 0 && rowElems_ <= chunkAlign) ? (chunkAlign / rowElems_) : 1; 对齐的形状仍走合并路径、性能不变; 不对齐的形状退回单行路径, 功能正确优先。 ### 2. ArgMaxGrad: UB buffer 大小改由 host 一次算准, 内核不再二次对齐 原实现由内核对 host 下发的 colsPerChunk 再做一次 CeilAlign, 并自行乘 sizeof(T) 推算各 buffer 字节数 —— 内核实际占用会偏离 host 的 UB 预算。现改为: - host 依 UB 容量与向量寄存器宽度算出 tBufBytes / i32BufBytes / maskBufBytes / selBufBytes 并下发; - host 增加 UB 总量自检, 超限直接 tiling 失败, 不让内核去踩; - 内核 InitBuffer 全部透传, 零算术。 ### 3. ArgMaxGrad: 交付对象更正为不带 D 的 ArgMaxGrad(对齐 A2 原型) 目录、文件名、原型、def、tiling、kernel、UT、用例集整体由 arg_max_grad_d 改名为 arg_max_grad, 并同步 classify_rule.yaml 与 docs/zh/op_list.md 中对 D 版的引用。assist 输入改为内核自生成。 ### 4. ChamferDistance: ReduceMin 结果的两处还原(真机实测缺陷) - NaN 下标语义: ReduceMin 被段内 NaN 污染后给回的不是首个 NaN 的下标, 与 torch.min 不一致, 改为自行扫出首个 NaN(仅 NaN 分支进入, 不影响热路径); - +inf 被截断成 FLT_MAX: ReduceMin 内部累加器初值为 FLT_MAX, Min(FLT_MAX, +inf) 仍为 FLT_MAX, 导致整段距离为 +inf 时输出 3.4028235e38; 竞品(torch / pytorch3d)与 A2 在同一输入下 均给 +inf。 ### 5. SoftmaxFocalLoss / SoftmaxFocalLossGrad: 检视意见整改 arch35 tiling、原型头、def 按检视意见整改, 补充 op_host UT。 另修复 SoftmaxFocalLossGrad 的 golden: 内核 ParseReduction 先 tolower 再比对(对齐 A2 的 reduction.lower()), 而 golden 原按字面比较 reduction == "mean", 导致 reduction='MEAN' 时 内核缩放了 1/numel 而 golden 未缩放, 判定假红。 ### 6. 判据分档 三个 loss 算子的 tests/assets/golden.py 移除 Spec.tolerance 中钉死的 standard 声明。 TTK 默认即按输出逐个路由判据(浮点走 stat_rel_err 的 CANN 标准阈值, 整数走 binary_equal); 在 kernel spec 上声明 cross_check 会让 kernel 泛化档也去做三方比对, 既把泛化绑上远端环境, 也会在内核未真正执行时用三方结果掩盖失败。三方比对归 invoke 通路档, 由命令行 --compare cross_check 指定, 不写进插件。ArgMaxGrad 的 binary_equal 声明保留: 纯选择算子输出为原值散射, 逐位相等是 其正确语义, 非默认路由可推导。 ## 关联的Issue 关联Issue #5310 ## 测试 真机验证环境: Ascend950PR, CANN 9.1.0 / 9.2.0, TTK kernel 通路(-d=false -b=release, 测部署 binary)。 | 算子 | kernel 泛化 | 说明 | |---|---|---| | ArgMaxGrad | **1224 / 1224 PASS** | 修复前同一用例集 102 例 NO_OUTPUT(errcode 340) | | ChamferDistance | 1323 / 1323 PASS | 含新补的 36 例极值域用例(值域 ±2e19, 专测 inf 截断) | | SoftmaxFocalLoss | 1198 / 1198 PASS | — | | SoftmaxFocalLossGrad | 1120 PASS + 9 例判据争议 | 9 例最差元素绝对误差为 fp16 1 ULP(5.96e-08), 属 stat_rel_err 在次正规数上的相对误差放大 | 补充说明: - 上述结果均为**真上设备执行**并完成 golden 比对(结果 CSV 的 precision_metrics 含 standard/mere/mare); 不使用 --no-prof(该开关只准备数据不执行内核, 结果全为 SUPPRESSED 却报 PASS)。 - ArgMaxGrad 空张量 16 例(空 outer / 空 D / 空 inner / 全空 × 4 dtype)单独验证通过, 输出形状与输入 一致、0 元素、与 golden 一致。 - ArgMaxGrad host UT 23/23 通过。 ## 文档更新 更新了 index/arg_max_grad/README.md、loss/chamfer_distance/README.md、 loss/softmax_focal_loss/README.md、loss/softmax_focal_loss_grad/README.md, 以及 classify_rule.yaml 与 docs/zh/op_list.md 中对 ArgMaxGradD 的引用。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9460 | 2 个月前 | |
update download ops-test-kit and update case for st Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9537 merge ci into master update download ops-test-kit and update case for st Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 1. 更新ops_st_test.sh脚本中下载ops-test-kit的方式,由原有的配置make文件下载,改为直接用git clone下载 2. 针对线上CI模式,不返回失败,在正式上线前不阻塞CI 3. 更新非量化mm类用例,减少执行时间 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue #4426 ## 测试 <!--描述进行了哪些测试来验证你的改动。-->  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9537 | 2 个月前 | |
fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Co-authored-by: tianqiguang<tianqiguang@huawei.com> # message auto-generated for no-merge-commit merge: !9459 merge master into master fix: 移除 BatchNorm3DGrad/BatchNormGradExt2 的 BFLOAT16 支持,BatchNorm 系列新增 Atlas 200I/500 A2 支持 Created-by: tianqiguang Commit-by: tianqiguang Merged-by: cann-robot Description: ## 描述 更新 BatchNorm 系列算子,主要包含: - 移除 BatchNorm3DGrad / BatchNormGradExt2 的 BFLOAT16(bfloat16)数据类型支持:def.cpp 中 y_backprop/x/x_backprop 仅保留 FLOAT16/FLOAT32,proto.h 同步更新,并删除含 bfloat16 的预编译 binary 配置(batch_norm3_d_grad_binary.json / batch_norm_grad_ext2_binary.json)。 - 三个 BatchNorm 算子(BatchNorm3D/BatchNorm3DGrad/BatchNormGradExt2)新增 Atlas 200I/500 A2 推理产品支持(README 产品支持表由 × 改为 √)。 - 新增图模式调用样例:test_geir_batch_norm3d_grad.cpp、test_geir_batch_norm_grad_ext2.cpp。 - BNTrainingReduceGrad 新增 TensorFlow framework 插件(framework/bn_training_reduce_grad_tf_plugin.cpp)。 - 同步更新 tiling、infershape、golden.py 及相应单测。 ## 关联的Issue - #5355 ## 测试 - 更新 infershape 单测:test_batch_norm3d_infershape.cpp、test_batch_norm3_d_grad_infershape.cpp、test_batch_norm_grad_ext2_infershape.cpp - 更新 tiling 单测:test_bn_training_reduce_grad_tiling.cpp - 更新 golden 数据:golden.py ## 文档更新 - 更新 batch_norm3_d/batch_norm3_d_grad/batch_norm_grad_ext2 的 README(Atlas 200I/500 A2 支持、调用样例链接) ## 类型标签 - [x] Bug修复 - [x] 新特性 ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!9459 | 2 个月前 | |
adam_apply_one_assign 算子geir测试用例修改 Co-authored-by: h1234515<huangzhiyuan21@huawei.com> # message auto-generated for no-merge-commit merge: !9253 merge adam_apply_one_assign_geir into master adam_apply_one_assign 算子geir测试用例修改 Created-by: h1234515 Commit-by: h1234515 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> adam_apply_one_assign 算子geir用例修改 跑bash build.sh --run_example adam_apply_one_assign graph --soc=ascend950时报错,将geir用例的static_cast<float*>改为(float*) ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5233 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> bash build.sh --run_example adam_apply_one_assign graph --soc=ascend950 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9253 | 2 个月前 | |
fix: 日志规范性整改 Co-authored-by: duxinlei<duxinlei@h-partners.com> # message auto-generated for no-merge-commit merge: !9059 merge 0824LogModify into master fix: 日志规范性整改 Created-by: duxinlei Commit-by: duxinlei Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 给activation/pooling/index下部分算子做日志规范性整改,修改pr拼写错误、内容错误、关键信息泄露问题; 仅对loge内容做修改,其余部分为pre-commmit格式修改; ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue #5185 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> david冒烟 obp冒烟 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9059 | 2 个月前 | |
修复SwigluBackwardMxQuantWithDualAxis算子的Aclnn文档描述 Co-authored-by: ZhangWei1176<zhangwei1176@huawei.com> # message auto-generated for no-merge-commit merge: !9495 merge swiglu_doc into master 修复SwigluBackwardMxQuantWithDualAxis算子的Aclnn文档描述 Created-by: ZhangWei1176 Commit-by: ZhangWei1176 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复 aclnnSwigluBackwardMxQuantWithDualAxis 文档描述: 1、x 使用说明「最后一维必须为偶数」→「必须能被64整除」,与约束说明及 tiling 校验对齐 2、mxscale1Out.shape[-2] 公式 (ceil(N/32)+2-1)/2 → (ceil(2N/32)+1)/2(≡ceil(2N/64),原公式误将 2N 写为 N) 3、错误码表删除空 <tr></tr>,rowspan="4" → "3" 4、量化分组公式删除多余外层花括号 $\{\{V_i\}\}$ → $\{V_i\}$ ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5328 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> aclnnSwigluBackwardMxQuantWithDualAxis.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9495 | 2 个月前 | |
upload st of thnn_fused_lstm_cell | 2 个月前 | |
update download ops-test-kit and update case for st Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9537 merge ci into master update download ops-test-kit and update case for st Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 1. 更新ops_st_test.sh脚本中下载ops-test-kit的方式,由原有的配置make文件下载,改为直接用git clone下载 2. 针对线上CI模式,不返回失败,在正式上线前不阻塞CI 3. 更新非量化mm类用例,减少执行时间 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue #4426 ## 测试 <!--描述进行了哪些测试来验证你的改动。-->  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9537 | 2 个月前 | |
add ut example Co-authored-by: zhangquanxin<zhangquanxin7@h-partners.com> # message auto-generated for no-merge-commit merge: !9308 merge conver_percent into master add ut example Created-by: zhangquanxin Commit-by: zhangquanxin Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 该 PR(add ut example)主要是为算子 tiling 逻辑补充/扩展单元测试示例,未涉及生产代码改动。其一,在 quant_batch_matmul_v4 的 per-group basic API tiling 测试 test_quant_batch_matmul_v4_pergroup_basic_api_tiling.cpp 中引入 variant 参数化机制,将原先写死的 transA、transB、groupSize、各输入/输出 dtype、x1Format、hasBias 等改为可配置,从而覆盖多种非法参数与边界场景;其二,重写 weight_quant_batch_matmul_v2 的 iterbatch tiling 测试 test_weight_quant_batch_matmul_v2_iterbatch_tiling.cpp,支持解析 enableUncache 与独立的权重 batch 维度,并新增 ASW(L2 uncache)与广播相关用例,扩大对 SetDisableL2cache、CalL1Tiling/GetBroadCastInfo 等分支的覆盖。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> issue https://gitcode.com/cann/ops-nn/issues/5266 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ut测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9308 | 2 个月前 | |
add_rms_norm_dynamic_mx_quant算子新增可选输入x3及torch extension适配 Co-authored-by: wangqi_ai<wangqi195@hisilicon.com> # message auto-generated for no-merge-commit merge: !8520 merge feat/add_rms_norm_dynamic_mx_quant_x0 into master add_rms_norm_dynamic_mx_quant算子新增可选输入x3及torch extension适配 Created-by: wangqi_ai Commit-by: wangqi_ai Merged-by: cann-robot Description: ## 描述 为 add_rms_norm_dynamic_mx_quant 算子新增可选输入 x3,支持 x = (x3+x1)+x2 三路残差加法融合。x3 位于 beta 之后(输入索引 4),dtype 为 {FLOAT16, BFLOAT16}。当 x3 缺省时算子行为与 V1 完全一致;当 x3 传入时,计算公式变为 x = (x3+x1)+x2,加法顺序匹配残差加法语义。 同时新增 aclnnAddRmsNormDynamicMxQuantV2 两段式 API,将 FP8/FP4 分离 kernel 统一为模板类,修复 SPLIT_R pipeline race,并补充全量泛化测试。 torch_extension 层接口从算子私有目录迁移至 nn 仓公共目录并更名为 add_rms_norm_dynamic_quant(去掉 mx,为后续多量化类型统一接口预留);ST 用例 CSV 按 TTK 规范迁入 tests/st/arch35/。 ### 改动原因 大模型推理场景中,RmsNorm 前的 Add 常需融合三路输入(残差 x3 + x1 + x2)。原算子仅支持两路(x1+x2),上层需额外调用一次 torch.add 再传入算子,引入一次额外的 GM 搬入搬出。本 MR 将三路加法融合进 kernel 内部,在 fp32 域完成累加,减少一次 kernel launch 和数据搬运。 ### 改动方法 **1. proto/def — 新增 x3 可选输入** - add_rms_norm_dynamic_mx_quant_proto.h: 在 beta 之后新增 .OPTIONAL_INPUT(x3, ...),dtype {DT_FLOAT16, DT_BF16} - add_rms_norm_dynamic_mx_quant_def.cpp: x3 声明为 OPTIONAL,tilingKey 增加 HAS_X3 维度 - add_rms_norm_dynamic_mx_quant_binary.json: 二进制配置新增 x3 输入绑定 **2. op_api — V2 两段式 API** - 新增 aclnnAddRmsNormDynamicMxQuantV2GetWorkspaceSize / aclnnAddRmsNormDynamicMxQuantV2 - 抽取 GetWorkspaceSizeImpl 共享逻辑:V1 传 x3=nullptr,V2 透传 x3 - CheckNotNull 不校验 x3(nullptr 合法,等价 V1);tiling 层 CheckX3Input() 校验 x3 存在时 shape/dtype 必须与 x1 一致 **3. tiling — HAS_X3 编译期模板参数 + GE const-compile fallback** - HAS_X3 作为编译期模板参数(非 tiling data 运行时字段),编译器消除所有 x3 运行时分支 - HAS_X3=false 变体保留用于二进制向后兼容(V1 API 复用原二进制) - tilingKey 从 5 → 10 variant(COMPUTE_MODE × Y_DATA_TYPE × HAS_X3) - 抽取 PostTilingImpl + GetTilingKeyCommon 到基类(DRY) - tiling_reduce_empty_arch35.cpp: 补充 perCorePerLoopElements < ubAlignElems 的 FloorAlign 归零 fallback 处理 - **GE const-compile fallback**(移植自 add_layer_norm_quant 模式):CompileInfo 新增 4 字段 isRegbase/vRegSize/ubBlockSize/sysWorkspaceSize,TilingPrepare 预存;CanUseRegbase/GetPlatformInfo/GetWorkspaceSize 在 platformInfo==null(GE 编译期)时从 CompileInfo 读取,解决 PreSmoke ATK const-compile 失败 **4. kernel — 统一 FP8/FP4 + 修复 SPLIT_R race** - 统一 kernel:将 4 个分离类合并为 2 个统一类,通过 IsFP4Type<T_Y> type trait 编译期推导 FP8/FP4 分支,if constexpr 消除运行时开销。净减约 916 行重复代码 - 删除死代码:移除未调用的 MxQuantDeletePadData - 修复 SPLIT_R MTE2→V pipeline race:Phase1 写 x_out 到 GM(MTE3),Phase2 读回(MTE2)。替换粗粒度 PipeBarrier 为精确的 MTE3_MTE2 + MTE2_V event flag - 修复加法顺序:(x3+x1)+x2,匹配残差加法语义 **5. torch_extension — 迁移公共目录 + 接口更名** - 代码从算子私有目录 norm/add_rms_norm_dynamic_mx_quant/torch_extension/ 迁移至 nn 仓公共目录 torch_extension/cann_ops_nn/ops/norm/add_rms_norm_dynamic_quant/,便于后续多个量化场景算子共用该 torch 接口 - torch API 更名为 add_rms_norm_dynamic_quant(去掉 mx,为后续扩展其他量化类型的统一接口预留;底层 aclnn API 名 aclnnAddRmsNormDynamicMxQuantV2 与 GE 算子名 AddRmsNormDynamicMxQuant 保持不变) - csrc/add_rms_norm_dynamic_quant.cpp: C++ binding(始终走 V2 API,x3 为 None 时传 nullptr 等价 V1) - add_rms_norm_dynamic_quant.py: Python wrapper(schema/meta/PrivateUse1,meta 校验 FP4 scale_alg==0 与 C++ 一致) - graph_convert_add_rms_norm_dynamic_quant.py: torchair dynamo GE 图转换,含 FP4 打包后处理(Reshape→Bitcast→Reshape 链将 GE 层未打包 FP4 输出转为 torch 层 uint8 打包) **6. ST 用例规范化(TTK 目录与命名约定)** - 用例 CSV 从 tests/assets/ 迁移至 tests/st/arch35/,按 TTK 规范命名:ttk_kernel/ttk_aclnn/ttk_e2e/ttk_geir_add_rms_norm_dynamic_mx_quant_st.csv,CI(ops_st_test.sh)可自动发现执行 - golden.py 适配新版 TTK:删除手写 FrameworkApiInfoKeeper.register() 参数注册(签名改由算子自带 schema 自动解析),__spec__ 注册 4 段名 torch.ops.cann_ops_nn.add_rms_norm_dynamic_quant - golden 新增 pre_compare 钩子:将 NPU 侧 uint8 打包 FP4 输出解包为 float4,使比对走 requant 判据 - 修复 golden bf16 输入静默提升为 fp32 的问题(位保留 view 转换),消除 SPLIT_R 边界场景 mxscale 1-bit 级偏差 **7. 文档** - 新增 aclnnAddRmsNormDynamicMxQuantV2.md,格式对齐 V1 文档 - README 更新 torch_extension 调用说明(包名 cann_ops_nn、接口名、新代码路径) ## 测试 ### 精度验证(TTK 框架,Ascend950PR,上机实测) - Kernel 模式:105/105 PASS(10 tilingKey variant × 边界场景,86 条含 x3) - ACLNN 模式:105/105 PASS(V1 + V2 API × 全 dstType/scaleAlg/roundMode 组合,105 条含 x3/V2) - E2E 模式(torch extension 标准包 cann_ops_nn,接口名 add_rms_norm_dynamic_quant):41/41 PASS(V1/V2 × FP8_E4M3/E5M2/FP4_E2M1/E1M2 × SPLIT_R 边界/bfloat16/beta=None/1D-4D,4 输出 y/x/mxscale/rstd 全比对) - GEIR 模式:18 条用例 - golden.py 合并 e2e spec(__spec__ + torch<->numpy 适配),--plugin tests 一条参数通吃 kernel/aclnn/e2e 三模式 ### torch_extension 套件(pytest,上机实测) - 104 passed, 0 skipped:全 tilingKey 变体、图模式(torchair + torch.compile)、FP4/FP8、fp16/bf16、SPLIT_R 性能基准 - FP4 性能用例改为偶数 R 参数化收集(替代运行时 skip,报告无跳过项) ### 端到端上机验证(Ascend950PR + CANN 9.2.0) - CMake 裁剪单算子 + build.sh --pkg --soc=ascend950 --vendor_name=custom_nn 整包编译,run 包安装后 torch.ops.cann_ops_nn.add_rms_norm_dynamic_quant JIT 编译执行通过 - 冒烟数值验证:rstd 误差 5.96e-08、x_out 达 fp16 精度上限、FP4 打包输出 shape/dtype 正确 ### UT(CMake 编译) - test_aclnn_add_rms_norm_dynamic_mx_quant.cpp: 17 个 TEST_F - test_add_rms_norm_dynamic_mx_quant_tiling.cpp: 33 个 TEST_F(新增 tiling_prepare_stores_const_compile_fields 验证 TilingPrepare 预存 GE const-compile fallback 字段;同步 UT 镜像 CompileInfo 至 6 字段,修复 OOB 越界读;更正 7 个 tiling-key 期望值,**全量 45 UT PASS**) - test_add_rms_norm_dynamic_mx_quant_apt.cpp: 5 个 TEST_F ### 代码质量 - golden.py monkey-patch 加版本锁 assert(上游 dynamic_mx_quant golden API 变更时 fail-fast) - pre-commit 全部通过(clang-format / ruff-check / ruff-format / codespell) ## 文档更新 - 新增 docs/aclnnAddRmsNormDynamicMxQuantV2.md - 更新 docs/zh/menu_aclnn_api.md、docs/zh/op_api_list.md - 更新 README.md ## 关联的Issue - #4693(需求:新增可选输入 x3) - #4939(需求:torch extension 适配) ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!8520 | 2 个月前 | |
md大模型检测低错修复 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !9420 merge master into master md大模型检测低错修复 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> md aidd大模型检测低错修复 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5254 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> acl*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9420 | 2 个月前 | |
修改matmul 算子atoll 异常反馈判断 Co-authored-by: chenqi317<chenqi317@huawei.com> # message auto-generated for no-merge-commit merge: !7083 merge master into master 修改matmul 算子atoll 异常反馈判断 Created-by: chenqi317 Commit-by: chenqi317 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改matmul 算子atoll 异常反馈判断,异常时返回默认值 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/3882 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7083 | 3 个月前 | |
动态库解耦 Co-authored-by: 18811725231<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !8927 merge master into master 动态库解耦 Created-by: yang-di52 Commit-by: 18811725231 Merged-by: cann-robot Description: ## 描述 本 PR 旨在将算子侧代码与 legacy 动态库(libophost_comm_legacy.so)解耦:LegacyCommonMgr 新增 isSupported_ 支持位与 IsSupport() 接口,依据编译宏 ASCEND_COMPUTE_UNIT 判断当前 SoC 版本是否属于受支持集合 SUPPORTED_VERS(ascend910b、ascend910_93、ascend310p、ascend310b、ascend910),仅受支持时才 dlopen 加载 legacy 库;各 legacy 封装接口在不受支持时提前短路返回,matmul 系列算子的 tiling 流程同步改为容忍 legacy 能力缺失而不再硬失败,并配套调整 CMake 编译宏与 UT 测试。 ## 关联的Issue [5093](https://gitcode.com/cann/ops-nn/issues/5093) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8927 | 2 个月前 | |
aclnnQuantMatmulWeightNz 补充WeightQuantPreProcess接口aclnn资料 Co-authored-by: renzetao<renzetao2@huawei.com> # message auto-generated for no-merge-commit merge: !8866 merge data_revise into master aclnnQuantMatmulWeightNz 补充WeightQuantPreProcess接口aclnn资料 Created-by: renzetao Commit-by: renzetao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> aclnnQuantMatmulWeightNz补充weightQuantPreProcess的调用example ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4898](https://gitcode.com/cann/ops-nn/issues/4898) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> bash build.sh --run_example 测试通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> aclnnQuantMatmulWeightNz.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8866 | 2 个月前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !8149 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 修改AIDD扫描的核心资料问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#3939](https://gitcode.com/cann/ops-nn/issues/3939) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8149 | 2 个月前 | |
update download ops-test-kit and update case for st Co-authored-by: he_kan<hekan4@huawei.com> # message auto-generated for no-merge-commit merge: !9537 merge ci into master update download ops-test-kit and update case for st Created-by: he_kan Commit-by: he_kan Merged-by: cann-robot Description: ## 描述 1. 更新ops_st_test.sh脚本中下载ops-test-kit的方式,由原有的配置make文件下载,改为直接用git clone下载 2. 针对线上CI模式,不返回失败,在正式上线前不阻塞CI 3. 更新非量化mm类用例,减少执行时间 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue #4426 ## 测试 <!--描述进行了哪些测试来验证你的改动。-->  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9537 | 2 个月前 | |
产品文档中png文件改为英文名 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !8300 merge master into master 产品文档中png文件改为英文名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 产品文档中的png图片名由中文改为英文 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#4260](https://gitcode.com/cann/ops-nn/issues/4260) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> png和相关的link md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8300 | 2 个月前 | |
init | 1 年前 | |
add hard_sigmoid for ascend950 Co-authored-by: tianyu52<tianyu52@huawei.com> # message auto-generated for no-merge-commit merge: !7874 merge master into master add hard_sigmoid for ascend950 Created-by: tianyu52 Commit-by: tianyu52 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> add hard_sigmoid for ascend950 hard_sigmoid适配950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> UT/ST pass ; ops-test-kit 测试900+ 用例pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> activation/hard_sigmoid/README.md activation/hard_sigmoid/docs/aclnnHardsigmoid&aclnnInplaceHardsigmoid.md docs/zh/op_api_list.md docs/zh/op_api_list.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7874 | 3 个月前 | |
cannsim改名为npusim Co-authored-by: liangbinglong<liangbinglong@huawei.com> # message auto-generated for no-merge-commit merge: !8349 merge master into master cannsim改名为npusim Created-by: liangbinglong Commit-by: liangbinglong Merged-by: cann-robot Description: ## 描述 经TSC评审,cannsim工具正式更名为npusim,相关命令行、资料同步刷新,cannsim作为别名兼容一段时间,需要尽快切换 ## 关联的Issue NA ## 测试 使用最新链接版本测试,相关命令行已经全部更名为npusim ## 文档更新 更新doc下面的调优部分文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8349 | 2 个月前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !8149 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 修改AIDD扫描的核心资料问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#3939](https://gitcode.com/cann/ops-nn/issues/3939) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8149 | 2 个月前 | |
fix Third_Party_Open_Source_Software_List.yaml Co-authored-by: liuyufan0725<liuyufan9@huawei.com> # message auto-generated for no-merge-commit merge: !1879 merge fix_yaml into master fix Third_Party_Open_Source_Software_List.yaml Created-by: liuyufan0725 Commit-by: liuyufan0725 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新三方依赖清单Third_Party_Open_Source_Software_List.yaml 1、增加protobuf 2、将nlohmann/json修改为json ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#1042](https://gitcode.com/cann/ops-nn/issues/1042) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 不涉及 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了Third_Party_Open_Source_Software_List.yaml ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!1879 | 8 个月前 | |
【描 述】 eigen update to 5.0.0 Co-authored-by: j00427146<jialimin1@huawei.com> # message auto-generated for no-merge-commit merge: !1152 merge master into master 【描 述】 eigen update to 5.0.0 Created-by: jialimin1 Commit-by: j00427146 Merged-by: cann-robot Description: ## 描述 现开源软件eigen 3.4.0 EOM,Eigen 从3.4.0版本升级到5.0.0,解决生命周期问题。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-nn/issues/975 https://gitcode.com/cann/ops-nn/issues/389 ## 测试   ## 文档更新 SECURITY.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:Update Eigen to 5.0.0 See merge request: cann/ops-nn!1152 | 8 个月前 | |
fix(build): 修复run_example默认模式判断libascendcl.so时[ ]缺空格导致错误链接-lacl_rt的问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !9181 merge index_example into master fix(build): 修复run_example默认模式判断libascendcl.so时[ ]缺空格导致错误链接-lacl_rt的问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复run_example默认模式判断libascendcl.so时[ ]缺空格导致错误链接-lacl_rt的问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5128 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9181 | 2 个月前 | |
解决QuantBatchMatmulV3算子的UT覆盖率问题 Co-authored-by: liyinghao10<liyinghao10@h-partners.com> # message auto-generated for no-merge-commit merge: !9516 merge ut_coverage into master 解决QuantBatchMatmulV3算子的UT覆盖率问题 Created-by: liyinghao10 Commit-by: liyinghao10 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复QuantBatchMatmulV3算子的UT覆盖率问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#5248](https://gitcode.com/cann/ops-nn/issues/5248) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 不涉及 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9516 | 2 个月前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !8149 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 修改AIDD扫描的核心资料问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#3939](https://gitcode.com/cann/ops-nn/issues/3939) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8149 | 2 个月前 | |
调整nn仓第三方依赖 Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !7845 merge pr_6933 into master 调整nn仓第三方依赖 Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 1. 文档声称 install_deps.sh 可一键安装所有列出的基础依赖("上述依赖可通过项目脚本一键安装"),但实际脚本仅安装了 GCC、CMake、pigz、dos2unix、patch,未安装 googletest(文档明确列为基础依赖项之一),开发者需手动下载源码、编译并安装 googletest,与文档"一键安装"的描述不符 2. python requirements多两个不需要的依赖 ### 主要修改 为install_deps.sh 增加了安装gtest的功能 删除requirements中多余的两个依赖 ## 关联的Issue [#4256](https://gitcode.com/cann/ops-nn/issues/4256) [#4154](https://gitcode.com/cann/ops-nn/issues/4154) ## 测试  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7845 | 3 个月前 | |
调整nn仓第三方依赖 Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !7845 merge pr_6933 into master 调整nn仓第三方依赖 Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 1. 文档声称 install_deps.sh 可一键安装所有列出的基础依赖("上述依赖可通过项目脚本一键安装"),但实际脚本仅安装了 GCC、CMake、pigz、dos2unix、patch,未安装 googletest(文档明确列为基础依赖项之一),开发者需手动下载源码、编译并安装 googletest,与文档"一键安装"的描述不符 2. python requirements多两个不需要的依赖 ### 主要修改 为install_deps.sh 增加了安装gtest的功能 删除requirements中多余的两个依赖 ## 关联的Issue [#4256](https://gitcode.com/cann/ops-nn/issues/4256) [#4154](https://gitcode.com/cann/ops-nn/issues/4154) ## 测试  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7845 | 3 个月前 | |
Remove the dependency asc-tool Co-authored-by: cong-jiyu<congjiyu@h-partners.com> # message auto-generated for no-merge-commit merge: !5220 merge eng into master Remove the dependency asc-tool Created-by: cong-jiyu Commit-by: cong-jiyu Merged-by: cann-robot Description: ## 描述 Remove the dependency asc-tool ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 工程编译验证 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5220 | 5 个月前 |
ops-nn
🔥Latest News
- [2026/05] 优化kernel编译配置项,减少simplified_key和ascendc_config配置文件(!3330)。
- [2026/05] 引入ops-tensor,基于分层结构优化Cube类算子,减少偏移量计算和简化指令参数(!5036)。
- [2026/05] 发布生态算子的精度验收标准(!4572)。
- [2026/03] 开源算子支持下一代芯片:Ascend950PR(!450)。
- [2026/03] 新增<<<>>>的算子开发样例(!620)。
- [2026/03] 低bit类算子和融合算子支持更多数据类型:fp8/mxfp8/hifp8/mxfp4等,并支持pertensor/perchannel/pertoken/pergroup/perblock等不同量化和组合方式:全量化融合算子:quant_batch_matmul_v4,伪量化融合算子:weight_quant_batch_matmul_v2。
- [2026/03] 支持SIMD/SIMT新同构编程算子实现:[MapIndex](#660),[ScatterSub](#710)。
- [2026/01] 新增QuickStart,指导新手零基础入门算子项目部署(支持Docker环境)、算子开发和贡献流程。
- [2025/12] 开源算子支持Ascend 950PR/Ascend 950DT/KirinX90,可以通过NPU Simulator仿真工具开发调试;优化指南类文档,聚焦算子开发指南,明确最小交付件和关键示例代码,针对Ascend/samples仓算子提供迁移本项目的指导;新支持稀疏4:2量化matmul算子,针对稀疏矩阵开启硬件加速能力。
- [2025/11] 新支持算子index_fill、masked_scatter、scatter、tf_scatter_add、fused_cross_entropy_loss_with_max_sum。
- [2025/10] 新增experimental目录,完善贡献指南,支持开发者调试并贡献自定义算子。
- [2025/09] ops-nn项目首次上线,开源算子支持Atlas A2/A3系列产品。
🚀概述
ops-nn是CANN(Compute Architecture for Neural Networks)算子库中提供神经网络计算能力的高阶算子库,包括matmul类、activation类等算子,算子库架构图如下:

📌版本配套
本项目源码会跟随CANN软件版本发布,关于CANN软件版本与本项目标签的对应关系请参阅release仓库中的相应版本说明。 请注意,为确保您的源码定制开发顺利进行,请选择配套的CANN版本与Gitcode标签源码,使用master分支可能存在版本不匹配的风险。
🛠️环境准备
环境部署是体验本项目能力的前提,请先完成NPU驱动、CANN包安装等,确保环境正常。
⬇️源码下载
环境准备好后,下载与CANN版本配套的分支源码,通用命令如下,${tag_version}替换为分支标签名。以9.0.0分支源码下载为例:
# 通用命令:git clone -b ${tag_version} https://gitcode.com/cann/ops-nn.git
git clone -b 9.0.0 https://gitcode.com/cann/ops-nn.git
说明:若环境中已存在配套分支源码,可跳过本步骤,例如CANNLab默认已提供最新版本CANN对应的源码。
📖学习教程
💬相关信息
PS:本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。