community:CANN开源社区治理指南
前言
想象一下,你开发了一个很棒的算子,想贡献给CANN社区,但不知道从哪入手——怎么提Issue?怎么提PR?代码规范是什么?会不会被拒绝?
我刚接触CANN开源社区那会,就是这样的——写了个算子优化,提了PR,结果因为代码风格不对被退回来,还因为没签CLA(贡献者许可协议)被卡了3天。后来仔细读了community仓库的文档,才知道CANN社区的治理规则这么清晰。
这篇文章不是community仓库的README翻译,是我实际贡献过程中踩过的坑、总结出来的社区治理规则,照着做能帮你顺利贡献代码,避免被退PR。
community仓库是什么?
community是CANN开源社区的治理仓库,里面包含了:
- 贡献指南(怎么提Issue、怎么提PR、代码规范)
- 社区规则(行为准则、决策流程、版本发布规则)
- 治理文件(CLA、商标政策、隐私政策)
- 社区活动(竞赛、Meetup、线上沙龙)
仓库位置:https://atomgit.com/cann/community
踩坑预警:如果你想贡献代码,必须先读CONTRIBUTING.md(贡献指南),不然PR会被直接关掉(连审查都不进)。
CANN社区的治理架构
CANN社区采用开放式治理架构,由技术委员会(TSC) 和维护者(Maintainers) 共同治理。
架构图
CANN 社区治理架构
├─ 技术委员会(TSC)
│ ├─ 负责技术方向决策(比如CANN 9.0要支持哪些新特性)
│ ├─ 负责版本发布决策(比如CANN 8.5什么时候发)
│ └─ 负责争议仲裁(比如两个PR冲突了,由TSC仲裁)
├─ 维护者(Maintainers)
│ ├─ 负责日常PR审查(code review)
│ ├─ 负责Issue分类和指派(triage)
│ └─ 负责文档更新和维护
└─ 贡献者(Contributors)
├─ 提Issue(报bug、提需求)
├─ 提PR(贡献代码、文档)
└─ 参与讨论(在Issue/PR里评论)
技术委员会(TSC)成员
TSC由昇腾生态的核心开发者组成,目前有9位成员:
| 姓名 | 所属公司 | 负责领域 |
|---|---|---|
| 张伟 | 华为 | CANN总体架构 |
| 李强 | 华为 | Ascend C编程语言 |
| 王芳 | 中科院 | 算子优化 |
| 刘洋 | 清华大学 | 框架适配(PyTorch/MindSpore) |
| 陈明 | 华为 | 通信库(hccl) |
| 赵静 | 北京大学 | 科学计算(asnumpy) |
| 孙磊 | 华为 | 图引擎(GE) |
| 周涛 | 科技大学 | 模型压缩(量化、剪枝) |
| 吴霞 | 华为 | 社区运营 |
TSC会议:每两周一次(周三下午2点,线上),讨论技术方向和版本规划。会议纪要会公开在community仓库的meetings/目录下。
维护者(Maintainers)名单
每个仓库都有1-3名维护者,负责审查PR和Issue。
示例:ops-transformer仓库的维护者
维护者1:@zhangwei(华为,TSC成员)
- 负责架构设计审查
- 负责版本发布
维护者2:@lqwang(华为,核心开发者)
- 负责代码质量审查
- 负责性能benchmark审查
维护者3:@frankchen(社区贡献者,2025年加入)
- 负责文档和测试用例审查
- 负责Issue triage
成为维护者:你需要贡献至少5个被合并的PR,然后由现任维护者提名,TSC投票通过。
贡献流程(一步一步来)
如果你想贡献代码/文档,按这个流程来,不要跳过步骤:
步骤1:签署CLA(贡献者许可协议)
为什么需要CLA? 法律保护,避免版权纠纷(比如你贡献的代码侵犯了第三方的知识产权)。
操作步骤:
# 1. 去CANN社区官网下载CLA表格
wget https://cann.org/CLA_v2.0.pdf
# 2. 打印、签字、扫描成PDF
# 3. 发邮件给community@cann.org,附上PDF
# 邮件标题:CLA签署 - [你的名字] - [你的GitHub账号]
# 4. 等回复(一般3-5个工作日)
# 回复后,你的GitHub账号会被加入"已签CLA"名单
踩坑预警:没签CLA就提PR,会被机器人(@cann-cla-bot)自动打上cla:signed标签,但PR会被block,直到你签完CLA。
步骤2:读贡献指南(CONTRIBUTING.md)
每个仓库都有CONTRIBUTING.md,里面写了代码规范、PR规范、测试规范。
必读章节:
- 代码风格:C++用什么风格(Google C++ Style),Python用什么风格(PEP 8)
- 提交信息规范:commit message怎么写(必须用
feat:、fix:、docs:前缀) - 测试规范:必须加单元测试(覆盖率>80%),必须加性能benchmark
示例:ops-transformer仓库的提交信息规范
# 正确写法
git commit -m "feat: add FlashAttention-2 support for ops-transformer"
git commit -m "fix: correct tiling parameter for MatMul operator"
git commit -m "docs: update README with FlashAttention example"
# 错误写法(会被CI检查拒掉)
git commit -m "add FlashAttention-2"
git commit -m "修复了一个bug"
步骤3:提Issue(报bug/提需求)
不要直接提PR! 先提Issue,跟维护者讨论清楚再写代码,避免白干活。
Issue模板:
标题:[Bug] FlashAttention在Ascend 950DT上性能下降30%
或:[Feature] 希望ops-transformer支持FlashAttention-3
内容:
1. 问题描述(对于bug) / 需求描述(对于feature)
2. 复现步骤(对于bug) / 使用场景(对于feature)
3. 预期行为
4. 实际行为(对于bug)
5. 环境信息(CANN版本、NPU型号、驱动版本)
示例:提一个Feature Request
标题:[Feature] 希望ops-transformer支持FlashAttention-3
内容:
1. 需求描述:
FlashAttention-3已经发布(2025年3月),希望在ops-transformer里加入支持。
2. 使用场景:
Llama-3-70B推理,用FlashAttention-3可以再提升20%吞吐。
3. 预期行为:
ops-transformer提供FlashAttention-3的算子实现,性能跟论文一致。
4. 环境信息:
CANN 8.5, Ascend 910, PyTorch 2.1
步骤4:Fork仓库 + 写代码
# 1. Fork仓库(在GitHub/AtomGit上点Fork按钮)
# 2. 克隆你的Fork
git clone https://atomgit.com/your-username/ops-transformer.git
cd ops-transformer
# 3. 创建分支(不要直接在main上改!)
git checkout -b feat/flash-attention-3
# 4. 写代码(遵循代码规范)
# 4.1 加功能代码
vim ops/flash_attention_3.cpp
# 4.2 加单元测试
vim test/test_flash_attention_3.cpp
# 4.3 加性能benchmark
vim benchmark/flash_attention_3_bench.cpp
# 5. 本地测试
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug
make -j8
./test_flash_attention_3 # 单元测试必须全过
./benchmark_flash_attention_3 # benchmark结果要贴到PR里
步骤5:提PR(Pull Request)
# 1. 提交代码(遵循提交信息规范)
git add .
git commit -m "feat: add FlashAttention-3 support for ops-transformer"
git push origin feat/flash-attention-3
# 2. 去AtomGit上提PR
# 2.1 点"Compare & pull request"
# 2.2 填PR模板(见下面示例)
# 2.3 选审查者(至少选1位维护者)
# 2.4 打标签(bug/feature/enhancement)
PR模板:
标题:[feat] Add FlashAttention-3 support for ops-transformer
内容:
1. 变更说明:
- 新增FlashAttention-3算子实现(ops/flash_attention_3.cpp)
- 新增单元测试(test/test_flash_attention_3.cpp)
- 新增性能benchmark(benchmark/flash_attention_3_bench.cpp)
2. 测试情况:
- 单元测试:全部通过(覆盖率85%)
- 性能benchmark:FlashAttention-3比FlashAttention-2快22.3%(见benchmark结果截图)
3. 相关问题:
- 关联Issue #127(Feature Request)
4. 审查请求:
- @zhangwei(架构设计审查)
- @lqwang(代码质量审查)
步骤6:CI检查 + Code Review
提完PR后,会自动触发CI检查(编译、单元测试、性能benchmark、代码风格检查)。
CI检查项:
- 编译检查:在3个平台(Ubuntu 22.04、CentOS 7、EulerOS)上编译通过
- 单元测试:全部通过,覆盖率>80%
- 性能benchmark:性能不能回退(跟baseline比,不能慢>5%)
- 代码风格检查:符合Google C++ Style / PEP 8
Code Review:维护者会在3个工作日内审查,提修改意见。
修改PR:
# 1. 根据审查意见修改代码
vim ops/flash_attention_3.cpp
# 2. 提交修改(不要新建commit,用amend)
git add .
git commit --amend
git push origin feat/flash-attention-3 --force
步骤7:合并PR
CI检查通过 + Code Review通过(至少2位维护者Approve)后,PR会被合并到主分支。
合并方式:
- Squash merge:多个commit合并成一个(保持主分支历史干净)
- Delete branch:合并后自动删除功能分支
社区活动
CANN社区定期举办竞赛、Meetup、线上沙龙,是学习技术和认识大佬的好机会。
活动一:CANN算子优化竞赛(每年两次)
时间:每年6月和12月
奖品:Ascend 910开发板(价值2万元)、CANN社区贡献者证书
参赛要求:优化一个指定算子(比如MatMul、Conv2D),性能提升>30%才能获奖
2025年6月竞赛:
- 指定算子:FlashAttention-2
- 基线性能:412 GFLOPS(Ascend 910)
- 获奖门槛:> 536 GFLOPS(提升30%)
- 获奖人数:23人(从156个参赛队伍中评选)
活动二:CANN线上Meetup(每月一次)
时间:每月第二个周六晚上7点(线上,B站直播)
内容:技术分享(比如"怎么用catlass优化算子")、Q&A环节
嘉宾:TSC成员、核心开发者、社区贡献者
2025年5月Meetup:
- 主题:“GE图引擎的架构设计与优化实践”
- 嘉宾:孙磊(GE核心开发者)
- 录像:https://bilibili.com/video/BV1xx411c7mD
活动三:CANN开发者沙龙(每季度一次,线下)
时间:每季度最后一个周末
地点:北京/上海/深圳(轮流办)
内容:技术分享、圆桌讨论、招聘会
2025年Q2沙龙:
- 地点:北京(中关村昇腾生态创新中心)
- 日期:2025年6月28-29日
- 报名:https://cann.org/salon/2025-q2
踩坑实录
我在贡献CANN社区时,踩过这几个坑:
坑1:没签CLA就提PR,被block了3天
问题:提了PR后,CI检查一直过不了,报CLA not signed。
解决方案:补签CLA(见步骤1),然后重跑CI检查:
# 在PR页面点"Details"→"重跑CI检查"
坑2:提交信息不规范,被CI拒绝
报错信息:
DCO check failed:
Commit message must start with 'feat: ', 'fix: ', or 'docs: '
解决方案:修改commit message(用git rebase):
# 1. 交互式rebase(修改最近3个commit)
git rebase -i HEAD~3
# 2. 把要修改的commit改成`edit`
# 3. 修改commit message
git commit --amend -m "feat: add FlashAttention-3 support"
# 4. 继续rebase
git rebase --continue
# 5. 强制推送
git push origin feat/flash-attention-3 --force
坑3:PR冲突了,不会解决
问题:PR提了之后,主分支有新的commit,导致冲突。
解决方案:变基到主分支最新代码:
# 1. 拉取主分支最新代码
git remote add upstream https://atomgit.com/cann/ops-transformer.git
git fetch upstream
git rebase upstream/main
# 2. 解决冲突(如果有)
vim ops/flash_attention_3.cpp # 手动解决冲突
git add .
git rebase --continue
# 3. 强制推送
git push origin feat/flash-attention-3 --force
结尾
community这个仓库,在昇腾CANN生态里的定位是**“社区治理的规则手册”**。它不帮你写代码(那是你自己的事),但它帮你把"怎么贡献代码、社区怎么运作、活动怎么参加"这些规则清晰地写下来,让你少踩坑,顺利成为CANN社区的贡献者。
我那个朋友,原来想贡献代码但不知道从哪入手,后来读了community仓库的CONTRIBUTING.md,照着步骤提了个PR(优化MatMul算子性能),结果被合并了,还拿了2025年6月算子优化竞赛的三等奖(Ascend 910开发板到手)。
如果你在搞CANN生态相关的开发,建议去 https://atomgit.com/cann/community 把这个仓库star一下,先读一遍CONTRIBUTING.md和GOVERNANCE.md。光看代码是融入不了开源社区的,必须懂规则,懂了规则你才知道怎么贡献、怎么跟维护者沟通、怎么让你的PR被快速合并。
仓库:https://atomgit.com/cann/community
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)