如何向CANN ops-math开源社区贡献你的第一个自定义算子experimental目录到PR全流程【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-mathCANN ops-math 是昇腾 NPU 数学类基础计算算子库涵盖张量形态变换conversion、数学运算math、随机数生成random等类别让网络在 NPU 上加速计算。本文面向新手手把手带你走完自定义算子开源贡献全流程从创建 Issue、在experimental目录开发验证算子到提交 PR、通过 CI 门禁直至合入。全程约 5 个关键步骤读完即可动手。为什么选择 ops-math 的 experimental 目录起步对于第一次贡献算子的开发者官方推荐的起点是experimental用户自定义算子目录原因有三优势说明交付件最简只需 Kernel 实现 测试文件 README无需 Tiling、op_host 等完整交付件流程成熟项目于 2025/10 起正式支持该目录贡献社区有明确的评审与合入机制路径明确SIG 成员会为你分配合适的分类路径如experimental/math按目录放置即可experimental 目录当前包含三个分类子目录详见 docs/zh/install/dir_structure.mdexperimental ├── conversion # 用户开发的 conversion 类算子 ├── math # 用户开发的 math 类算子 └── random # 用户开发的 random 类算子一图看懂算子贡献全流程完整的贡献过程共 6 个环节详见 CONTRIBUTING.md创建 Issue 需求→ 提出算子想法与设计方案需求评审→ 申报 Ops-basic SIG 议题评审通过后获得贡献目录本地开发→ 在 experimental 对应分类目录实现并验证算子PR 提交→ 按交付件要求向目标分支提交 PRCI 门禁→ 触发 compile 指令通过编译、静态检查、UT、冒烟测试检视合入→ Committer 检视/lgtm→ Maintainer 最终审核/approve合入第一步创建 Issue 提出算子需求⚠️关键提醒若你的修改属于新增特性、新增接口等非简单 bug 修复务必先通过 Issue 讨论方案否则代码可能被拒绝合入。新建一个Requirement|需求建议类 Issue内容建议包含背景信息算子要解决什么问题来自哪个框架或模型场景价值/作用为什么社区需要这个算子设计方案输入输出定义、数据流、Kernel 实现思路创建后需申报 SIG 议题并参加 Ops-basic SIG 评审需求紧急时可联系 Maintainer 申请临时评审。评审通过后SIG 成员会为你分配具体的贡献目录例如experimental/math。第二步本地开发你的第一个自定义算子1. 准备环境与源码先完成 NPU 驱动、CANN 包安装等环境部署然后下载与 CANN 版本配套的分支源码注意master 分支可能存在版本不匹配风险# ${tag_version} 替换为分支标签名例如 9.0.0 git clone -b ${tag_version} https://gitcode.com/cann/ops-math.git cd ops-math2. 按最简交付件搭建算子目录生态算子的交付件结构非常轻量在experimental/${op_class}下按如下规则放置文件${op_class} # 算子分类如 math ├── ${op_name} # 算子名目录 │ ├── ${op_name}.cpp # 算子 Kernel 实现文件 │ ├── tests │ │ └── test_${op_name}.py # 算子测试文件 │ ├── CMakeLists.txt # 算子编译配置文件 │ └── README.md # 算子 README 文档必选3. 编译验证先跑通示例算子再上手建议先按快速入门指南编译运行add_example示例算子验证环境闭环编译 → 安装 → 运行样例bash build.sh --pkg --soc${soc_version} --opsadd_example -j16确认环境正常后替换为你的算子名即可按同样流程编译、安装、验证。如果你偏好 PyTorch Extension 方式开发单文件完成算子 框架适配、用语法启动核函数可参考轻量级高性能工程模板 examples/fast_kernel_launch_example/README.md。第三步提交 PR 并通关 CI 门禁提交前合规自检清单代码符合《C 编程规范》本地编译通过算子满足精度标准生态算子开源精度标准README 文档语法规范已签署 CLA 协议PR 标题清晰、描述指明更改内容和原因并关联对应 IssueCI 门禁一条命令触发PR 提交后通过评论compile指令触发开源仓门禁检查项包括代码编译静态检查codecheck 误报请提交给 SIG 成员屏蔽UT 测试冒烟测试门禁全部通过后在关联的 Issue 中 Committer 进入人工环节。第四步检视与合入Committer 检视反馈检视意见按意见修改后再次 CommitterMaintainer 合入Committer 通过后标注/lgtmMaintainer 最终审核无问题后标注/approve合入 PR 至此你的第一个自定义算子正式进入 CANN ops-math 开源仓库。新手常见坑位速查常见问题规避方法PR 被拒合入提交前未走 Issue 方案评审务必先评审后开发编译失败源码与 CANN 版本不配套选用配套标签分支而非随意使用 master找不到 ASCEND_HOME_PATH编译前未配置 CANN 环境变量source .../set_env.sh交付件缺失README 文档为必选项代码需包含 Kernel 实现与测试文件延伸阅读快速入门编译、开发、调试、验证全闭环贡献指南五大贡献场景详解项目目录结构standard 算子完整交付件参考Fast Kernel Launch单文件高性能算子开发模板完成第一个算子只是开始——项目同样欢迎 Bug 修复、算子优化和文档纠错类贡献欢迎在 Issue 与讨论区参与交流一起把 NPU 算子生态做得更好【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考