【昇腾CANN】community仓库:参与开源社区的正确姿势
【昇腾CANN】community仓库:参与开源社区的正确姿势
【昇腾CANN】community仓库:参与开源社区的正确姿势

前言
两年前第一次给CANN开源社区提PR,紧张得手心冒汗。后来发现社区氛围特别好,Reviewer很友善,改了几轮就合入了。这篇文章就来讲讲怎么参与CANN社区,从提Issue到合入PR的全流程。
一、community仓库定位
community是昇腾CANN开源社区的治理仓库,它不提供代码,它提供的是参与社区的规则和指南。
按照仓库的README,它的核心定位是:
- 管理CANN社区的开源治理规则
- 提供开发者贡献指南(如何提Issue、提PR、Code Review规范等)
- 维护社区活动(竞赛、Meetup、技术分享等)
- 管理社区决策流程(比如新仓库准入、重大API变更等)
这个仓库在CANN五层架构里比较特殊,它不属于任何一层,而是社区的"宪法+办事大厅"。
仓库地址:https://atomgit.com/cann/community
二、参与社区的正确的姿势
1. 先逛一圈,了解规矩
第一次参与开源社区,别急着提PR。先花半小时逛逛仓库,了解社区的规矩。
必读文件:
CONTRIBUTING.md:贡献指南,告诉你怎么提Issue、怎么提PR、Code Review规范等。CODE_OF_CONDUCT.md:行为准则,告诉你社区提倡什么、反对什么。GOVERNANCE.md:治理规则,告诉你社区怎么决策(比如新仓库准入、重大API变更等)。
这些文件你可以不背下来,但至少要知道它们存在,需要的时候能找到。
2. 从提Issue开始
第一次参与,建议从提Issue开始。Issue就是"问题报告"或"功能请求",门槛低,不容易出错。
提Issue的正确姿势:
# Issue标题:ops-nn的MatMul算子在大矩阵上性能不佳
## 问题描述
在batch_size=128, seq_len=512, hidden_dim=1024的场景下,ops-nn的MatMul算子延迟为15ms,而PyTorch原生torch.matmul只有10ms。
## 复现步骤
1. 克隆ops-nn仓库
2. 运行benchmark/matmul_benchmark.py
3. 观察输出中的延迟数据
## 环境信息
- CANN版本:8.0
- NPU型号:Ascend 910
- 驱动版本:23.0.0
## 可能的优化方向
1. 启用算子融合(MatMul+Add+ReLU)
2. 优化内存访问模式(当前实现有不必要的显存读写)
3. 使用更激进的循环展开
## 附加信息
已上传benchmark结果的截图(见附件)。
这个Issue写得很清楚:问题描述、复现步骤、环境信息、可能的优化方向、附加信息。Reviewer一看就明白,处理起来也快。
3. 提PR(Pull Request)
如果你能自己修Bug或加功能,可以提PR。PR就是"代码变更请求",需要经过Code Review才能合入。
提PR的正确姿势:
-
Fork仓库:去AtomGit上Fork你要改的仓库(比如ops-nn)。
-
创建分支:别在
main分支上改,创建一个新分支。
# 克隆你的Fork
git clone https://atomgit.com/your_username/ops-nn.git
cd ops-nn
# 创建新分支
git checkout -b fix/matmul_performance
- 改代码:在这个分支上改代码。
比如你优化了MatMul算子的性能,改了kernels/matmul_kernel.py文件。
- 提交变更:提交你的改动,写清楚的commit message。
git add kernels/matmul_kernel.py
git commit -m "优化MatMul算子性能:启用融合+优化内存访问
- 启用MatMul+Add+ReLU融合(减少显存读写)
- 优化内存访问模式(使用Shared Memory缓存)
- 性能提升:延迟从15ms降到9ms(测试环境:Ascend 910)
Closes #123" # 关联Issue编号
- 推送分支:把你的分支推送到你的Fork。
git push origin fix/matmul_performance
- 创建PR:去AtomGit上点"Compare & pull request",填写PR描述。
PR描述模板(来自CONTRIBUTING.md):
## 变更说明
启用了MatMul+Add+ReLU融合,优化了内存访问模式。
## 关联Issue
Closes #123
## 测试说明
运行了benchmark/matmul_benchmark.py,结果如下:
- 优化前:15ms
- 优化后:9ms
- 提升:40%
## Checklist
- [x] 代码符合仓库的编码规范
- [x] 添加了单元测试
- [x] 所有测试通过
- [x] 更新了相关文档
- 等待Review:等Committer来Review你的代码。他们可能会提修改意见,你需要按要求修改。
# 修改代码后,继续提交到同一个分支
git add .
git commit -m "根据Review意见修改:添加性能测试截图"
git push origin fix/matmul_performance
- 合入:Review通过后,Committer会合入你的PR。恭喜,你成为CANN社区的贡献者了!
三、社区角色与晋升路径
CANN社区有一套角色体系,你的权限会随着贡献增加而提升。
1. Contributor(贡献者)
获取条件:合入至少1个PR。
权限:
- 可以提Issue
- 可以提PR
- 可以评论别人的PR
成长建议:
- 从简单的Bug修复开始(比如文档错别字、单元测试缺失等)
- 积极参与Code Review,学习别人的代码
- 关注社区的Issue列表,找适合自己的任务
2. Committer(提交者)
获取条件:合入至少5个有质量的PR,并且通过社区评审。
权限:
- 可以Review别人的PR
- 可以合入别人的PR(有Committer权限的仓库)
- 可以参与社区决策投票
成长建议:
- 持续贡献高质量代码(不光是修Bug,还要加功能、做优化)
- 积极参与社区讨论(在Issue、PR、邮件列表中发言)
- 帮助新手Contributor(Review他们的PR,回答他们的问题)
3. Maintainer(维护者)
获取条件:对某个仓库有长期、重大的贡献,并且通过社区评审。
权限:
- 可以管理仓库(合并PR、打Tag、管理分支等)
- 可以决定仓库的技术方向
- 可以提名新的Committer
成长建议:
- 成为某个仓库的"管家",负责它的长期维护
- 参与社区治理(比如新仓库准入评审、重大API变更讨论等)
- 代表社区参加活动(比如开源峰会、技术Meetup等)
四、社区活动与资源
1. 竞赛活动
CANN社区定期举办竞赛,比如"算子优化挑战赛"、"模型迁移大赛"等。参加竞赛不仅能练手,还有机会拿奖金。
竞赛信息会发布在community仓库的events/目录下,也会在昇腾社区论坛宣传。
2. 技术Meetup
社区每季度会办一次线上/线下Meetup,邀请贡献者分享技术心得。你可以从中学习到很多实战经验。
Meetup的信息和录播会发布在community仓库的meetups/目录下。
3. 新手任务
社区会定期标注一些"新手友好"的Issue,适合第一次参与的人。这些Issue通常比较简单,而且会有老手Contributor来指导你。
寻找新手任务的方法:
# 在AtomGit上搜索Issue,标签选"good first issue"
或者直接在community仓库的good-first-issues.md文件中找。
五、常见问题与解决方案
问题1:PR被Reviewer要求大改
解决方案:
- 别灰心,这是常态。大改说明Reviewer很认真,你的代码有提升空间。
- 按Reviewer的要求改,如果有不同意见,可以在PR评论里讨论。
- 改完之后,Committer会重新Review。通常改个2-3轮就能合入。
问题2:不知道从何下手贡献
解决方案:
- 从"新手友好"Issue开始(标签:
good first issue)。 - 从文档入手,改错别字、补示例代码、完善API说明等。
- 从测试入手,补充单元测试、集成测试等。
- 从简单Bug入手,比如边界条件处理不当、错误信息不准确等。
问题3:提了PR没人理
解决方案:
- 先等等,Committer可能比较忙。通常1周内会有回复。
- 如果超过1周没回复,可以在PR里
@对应的Committer,提醒他们Review。 - 如果还是没回复,可以去昇腾社区论坛发帖询问。
六、总结
参与开源社区是个技术+社交的过程。你不仅要写得出代码,还要懂得怎么和人合作。
community这个仓库就是你的"办事指南",它告诉你社区的规则、贡献的流程、角色的晋升路径等。
别被"开源贡献"这个词吓到。你不需要是技术大牛才能参与,改个文档错别字也是贡献。重要的是迈出第一步:提个Issue,或者提个改错别字的PR。
等你合入第一个PR,收到那封"Your pull request has been merged"的邮件时,那种成就感,真的很爽。
所以,别犹豫了。去AtomGit上Fork一个CANN仓库,找个"新手友好"Issue,开始你的开源贡献之旅。
遇到问题就在community仓库提Issue,社区的老手会帮你。大家一起努力,把CANN生态建设得更好。
仓库地址再发一遍(防止你没记住):https://atomgit.com/cann/community
希望这篇文章对你有帮助。如果有其他问题,欢迎在评论区讨论。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)