oil-gas-ops-prospect贡献指南:从提Issue到PR合入的开源协作全流程
【免费下载链接】oil-gas-ops-prospect面向油气勘探(oil & gas exploration)领域的昇腾自定义算子库。仓名即 oil-gas-ops(油气算子)+ prospect(勘探目标),面向地震成像、全波形反演等勘探计算场景项目地址: https://gitcode.com/cann/oil-gas-ops-prospect
oil-gas-ops-prospect 是面向油气勘探领域的昇腾自定义算子库,仓名即 oil-gas-ops(油气算子)+ prospect(勘探目标),覆盖地震成像、全波形反演等计算场景。本文是它的完整开源贡献指南:从提 Issue、认领任务,到本地自检、提交 PR、通过 CI 门禁,再到双 Committer 代码检视合入,带你走通这条全流程协作链路。
📋 贡献前准备:环境就绪与协议签署
在动手写代码之前,先完成 3 件准备工作:
- 签署 CLA 协议并了解行为准则:参与 CANN 社区贡献前,需先了解社区行为准则并完成 CLA(贡献者许可协议)签署;
- 克隆仓库:
git clone https://gitcode.com/cann/oil-gas-ops-prospect.git cd oil-gas-ops-prospect- 确认硬件环境:本仓当前面向Ascend 910B,算子在 NPU 上的精度、性能、显存必须在真实 910B 上验证通过,这是硬性要求。环境搭建可参考快速入门与环境部署。
📌 本仓归属 oil-gas-engineering SIG,完整流程详见贡献指南。
🐛 第一步:提 Issue——先讨论方案,再写代码
仓库明确要求:如果你的修改不是简单的 bug 修复,而涉及新增算子、新增接口、修改调用约定或改动构建流程,请务必先通过 Issue 讨论方案,以免代码被拒绝合入。拿不准是否属于"简单修复"时,同样建议先提 Issue。
贡献前判断你要做哪一类
| 贡献类型 | Issue 类型 | 关键材料 |
|---|---|---|
| 新增算子 | Requirement | 需求建议 | 业务背景、预期收益、设计方案 |
| 算子 Bug 修复 | Bug-Report | 缺陷反馈 | 复现 shape、版本信息、期望与实际结果 |
| 算子性能优化 | Requirement | 需求建议 | 优化点说明 + 设计方案 |
新增算子 Issue 要写什么
新建Requirement|需求建议类 Issue,一般包含三部分:
- 背景信息:来自哪个勘探业务场景(叠前偏移、RTM、FWI 等),当前用什么实现、瓶颈在哪;
- 价值/作用:预期加速比、显存收益或精度收益;
- 设计方案:算子数学定义、输入输出 shape/dtype/format、切分策略、目标 SOC。
Bug 类 Issue 建议附带的信息
- 复现用的 shape、dtype 与调用方式;
- CANN 版本、SOC 型号、
torch/torch_npu版本; - 期望结果与实际结果(含误差量级)。
认领任务:一句话/assign
需求评审通过后,在 Issue 评论框输入/assign @yourself即可认领任务。SIG 组会指派 Committer 对 Issue 进行评审,完成修改后在 Issue 中 @ 对应 Committer。
🧩 贡献新算子:按后端选对交付目录
本仓有三类算子后端,交付件不同,请先判断你的算子属于哪一类(完整说明见算子开发指南):
| 场景 | 后端 | 目录 |
|---|---|---|
| 精细控制核间切分与流水,追求极致性能 | AscendC(OPP.run包) | ascendc/operators/ |
| Python 快速表达、依赖 autograd、形态多变 | Triton-Ascend(whl) | triton-ascend/ |
| 组合现有 torch 算子即可表达 | Composite-Torch | composite-torch/ |
AscendC 算子的标准交付件结构
ascendc/operators/${op_name}/ ├── op_host/ # OpDef、InferShape、TilingFunc 及 Tiling 算法 └── op_kernel/ # kernel 入口与实现同时还需交付:manifest.tsv 中追加一行注册算子、ascendc/pybind/ 下的 Python API、tests/ut/op_host/ 下的切分 UT、tests/st/ 下的多 case aclnn 测试,以及 examples/aclnn/ 中的两段式小样例。
几条关键约定:
- 切分算法必须抽到
op_host/<op>_tiling_core.h,与平台无关,ophost UT 才能覆盖真实算法; - C++ 的 OpType 用 PascalCase(如
ComplexMul),aclnn 接口为aclnn+ OpType; - Python 接口用蛇形命名(如
complex_mul),不加npu_前缀。
Triton-Ascend 算子的交付件
triton-ascend/${op_family}/ ├── __init__.py # 对外导出 ├── triton_${op_family}.py # Triton kernel 与 autograd 封装 └── README.md # 算子说明kernel 需提供PyTorch 回退实现,并在 setup.py 中按算子名注册进入 whl。可参考现有实现 triton_fft_real.py。
精度要求:PR 里要附精度报告
新增或修改算子的 PR 需在描述中附上精度测试报告,报告格式直接复制 精度验收报告模板 逐项填写即可。
✅ 提交前本地自检:3 条命令守住质量底线
提 PR 之前,本地跑完这套自检:
bash build.sh --install bash build.sh -u --ut --st --precision --perf bash scripts/check_license_header.sh依次是:编译安装并冒烟、跑全部测试套件(切分、上板、精度、性能)、检查许可证头。测试分类说明见 tests/README.md。
合规检查同样不能漏:
- C++ 代码可用仓内
.clang-format格式化,符合社区 C++ 编程规范; - 所有新增源文件带Apache License 2.0许可证头;
- Markdown 文档语法符合规范。
🚀 提交 PR:模板填全、关联 Issue
提交 PR 时重点关注:
- 按 PR 模板填写本次 PR 的业务背景、目的、方案;
- PR 描述说明更改内容和原因,并关联对应 Issue;
- 检查 PR 标题是否清晰、是否已签署 CLA。
优化类 PR 还须在描述中给出优化前后的性能对比数据。
🛡️ CI 门禁与代码检视:合入前的最后两关
第一关:CI 门禁。通过评论compile指令触发开源仓门禁,当前门禁包含:代码编译、静态检查(codecheck 误报可提交 SIG 成员屏蔽)、UT 测试。依据 CI 结果修改后,在关联 Issue 中 @ 指派的 Committer。
第二关:代码检视。合入前需至少两名 Committer完成代码检视,并分别在 PR 中评论/lgtm与/approve。检视意见修改完成后,再次 @ 检视人即可等待合入。
🧭 全流程速查:一张表记住贡献链路
| 步骤 | 关键动作 | 常用指令/材料 |
|---|---|---|
| 1. 提 Issue | 阐明方案,先讨论后写码 | Requirement / Bug-Report |
| 2. 认领 | 评论认领任务 | /assign @yourself |
| 3. 开发 | 按后端交付件开发 | 参考目录结构 |
| 4. 自检 | 本地编译+测试+许可头 | build.sh -u全套件 |
| 5. PR | 填模板、关联 Issue | 附精度报告模板 |
| 6. CI | 触发门禁 | 评论compile |
| 7. 检视合入 | 双 Committer | /lgtm+/approve |
除了贡献代码,社区也欢迎你参与帮助解决他人 Issue:如果对应 Issue 需要代码修改,同样可以/assign认领并协助解决,共同优化易用性。
📚 延伸阅读
- CONTRIBUTING.md:完整贡献指南
- docs/zh/develop/operator_development_guide.md:算子开发指南
- docs/zh/develop/precision_acceptance_template.md:精度验收报告模板
- docs/zh/context/dir_structure.md:目录结构说明
- docs/zh/op_list.md:算子列表
- docs/zh/api_list.md:接口列表
- CHANGELOG.md:变更记录
【免费下载链接】oil-gas-ops-prospect面向油气勘探(oil & gas exploration)领域的昇腾自定义算子库。仓名即 oil-gas-ops(油气算子)+ prospect(勘探目标),面向地震成像、全波形反演等勘探计算场景项目地址: https://gitcode.com/cann/oil-gas-ops-prospect
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考