SiP (AscendSiPBoost) 社区贡献指南:从签署 CLA 到 Pull Request 合入的完整流程
【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip
本文为 CANN 开放项目 SiP(AscendSiPBoost,基于华为 Ascend AI 处理器的信号处理算子加速库)的官方贡献指南。读完本文,你将掌握在 SiP 仓库中参与贡献的完整路径:签署贡献者协议(CLA)、选择贡献方向(算子 Bug 修复、算子优化、新算子开发、文档修正、协助他人排障)、通过 Issue 认领任务、按许可证要求编写代码、以及通过 Fork + Pull Request 模式走完“编译门禁 → 评审 → 合入”的全过程,并能使用社区 Bot 命令解决 CLA 检查、CI 触发等常见卡点。
一、贡献前置要求:行为准则与 CLA
1.1 遵守 CANN 开放项目行为准则
SiP 是 CANN 旗下的开放项目。所有后续在 SiP 项目中的活动(包括但不限于发表评论、提交 Issue、编辑 Wiki)都必须遵循 CANN 开放项目行为准则,其全文见 docs/zh/context/code-of-conduct.md。准则核心要点包括:
- 社区承诺所有参与者免于任何骚扰,不论年龄、民族、经验水平、受教育程度、国籍等;
- 鼓励的行为:措辞友好包容、尊重不同观点、耐心接受有益批评、关注对社区最有利的事情;
- 禁止的行为:发布色情/暴力相关内容、造谣或人身攻击、公开或私下骚扰其他参与者、未经授权使用他人个人信息;
- 维护者(Maintainer)有权诠释“不当行为”,并可删除、编辑、拒绝违反准则的评论、提交、代码、Wiki 编辑和 Issue 等贡献,必要时可暂时或永久封禁参与者。
1.2 签署 CANN 开放项目贡献者协议(CLA)
在向项目贡献之前,必须签署 CANN 开放项目贡献者协议(CLA)。请根据参与身份选择对应类型(签署入口由 CANN 社区官方提供,原文档附有签署链接;若 PR 提交后出现 CLA 检查未通过,签署地址也会在 PR 评论区给出):
| CLA 类型 | 适用身份 | 说明 |
|---|---|---|
| Institutional CLA(法人 CLA) | 企业代表 | 代表企业签署,通常由企业负责人签署 |
| Institutional Contributor CLA(法人贡献者登记) | 已签署法人 CLA 企业的员工 | 在申请页选择所在企业,提交后由企业管理员审批,通过后即可参与贡献 |
| Individual CLA(个人 CLA) | 非企业员工的个人贡献者 | 以个人名义签署 |
| Enterprise Administrator(企业管理员) | 企业管理员 | 有权审批法人贡献者登记申请并管理人员 |
提示:CLA 检查以 commit 信息中的 committer 邮箱作为检查凭证,可通过
git log --pretty=fuller查询。commit 邮箱与 Gitcode 提交邮箱需保持一致,详见 docs/zh/context/infra-faqs.md 第 1 节。
二、五大贡献方向
签署 CLA 后即可开始贡献,所有贡献都欢迎且被重视。所有发现的问题和新想法都可以通过 Issue 报告、讨论和跟踪,并在贡献代码的 Pull Request 合入后关闭关联 Issue。各贡献方向对应的 Issue 类型如下:
2.1 算子 Bug 修复(Operator Bug Fix)
发现仓库中某些算子的 Bug 并希望修复时:
- 创建
Bug-Report类型 Issue,描述 Bug 现象; - 在 Issue 评论区输入
/assign或/assign @你的用户名,将 Issue 指派给自己处理。
2.2 算子优化(Operator Optimization)
如果对仓库中某个算子实现有泛化增强或性能优化思路:
- 创建
Requirement类型 Issue,描述优化点并附上你的设计方案; - 在评论区输入
/assign或/assign @你的用户名认领该 Issue,跟踪优化落地。
2.3 贡献新算子(Contributing New Operators)
如果你有全新的算子想基于 Ascend 芯片设计实现:
- 创建
Requirement类型 Issue,给出新算子描述和设计方案,与 Ascend 团队成员讨论; - Ascend 团队成员会与你确认,并为你的算子指定合适的目录类别(如
ops/base、ops/blas、ops/fft等仓库中的算子目录),新算子需贡献到对应类别目录; - 在已提交的 Issue 中评论
/assign或/assign @你的用户名认领 Issue,随后向代码仓库提交新算子。
新算子的开发可参考仓库内的完整教程 从零开始开发一个简单算子。该教程以 Conj(共轭)算子为例,演示了 Host 侧入口函数(如 core/base/conj.cpp 中的AsdSip::Conj接口)、Device 侧ops/base/conj目录下的 tiling 与 op_kernel 代码、参数结构头文件ops/include/params/conj.h,以及把算子注册进 configs/op_list.yaml 的完整步骤——这正是“贡献新算子”方向需要走通的实际代码路径。
2.4 文档修正(Documentation Correction)
发现仓库中算子文档有误时:创建Documentation类型 Issue 指出对应文档的问题,再输入/assign或/assign @你的用户名认领并修正。
2.5 协助他人解决问题(Helping Others Solve Issues)
如果你对社区中他人遇到的问题有合适方案,欢迎在 Issue 中评论提供帮助、共同改善易用性;若该 Issue 需要代码修改,同样可以评论/assign认领并协助解决。
三、提交 Issue 与认领 Issue 任务
- 找到 Issue 列表:在 SiP 项目的 Gitcode 主页点击 “Issues” 进入 Issue 列表;
- 提交 Issue:报告 Bug、提出需求或提交意见/建议,均通过提交 Issue 完成;
- 参与 Issue 讨论:每个 Issue 均支持开发者讨论,感兴趣可在评论区发表意见;
- 认领 Issue:若你愿意处理某个 Issue,在评论区输入
/assign或/assign @你的用户名,机器人会将 Issue 指派给你,你的名字会出现在负责人列表中。
Issue 认领机制由社区 Bot 实现,Bot 交互流程与完整命令说明见 docs/zh/context/infra-command.md:
四、贡献编码:环境准备与许可证声明
4.1 准备 CANN 开发环境
参与编码贡献需要准备好 CANN 开发环境,详见 README_en.md 的 Environment Setup 章节。关键步骤摘要:
- 依赖要求(来自 README_en.md 3.1.1 节):
python >= 3.7.0、pyyaml、gcc/g++ >= 7.3.0、cmake >= 3.16.0、pigz、dos2unix、numpy,运行 UT 时还需googletest(推荐 v1.14.0); - 一键安装依赖:
bash install_deps.sh,随后执行pip3 install -r requirements.txt; - 安装社区版 CANN Toolkit 与 Ops 安装包并配置环境变量(
source ${install_path}/cann/set_env.sh); - 工具版本要求见 README_en.md 的 3.1.5 节。
本地编译验证可参考 编译与构建文档:
cd ${SiP_root_path} bash build.shbuild.sh支持--help、--dev(仅编译算子库)、--clean(清理缓存与第三方依赖)、--ut(编译并执行单元测试)等参数;目标芯片架构通过 configs/build_config.json 配置(ascend310b/ascend310p/ascend910b/ascend950四个布尔开关)。
4.2 遵循 CANN Open 软件许可协议
SiP 编码遵循CANN Open Software License Agreement Version 2.0,协议全文见 LICENSE。向 SiP 源码仓库贡献代码必须遵守该协议,并在新建源文件头部添加版权声明:
cpp、cc、h 等文件:
/** * Copyright (c) 2025 [Name of the copyright owner] All rights reserved. * This program is free software, you can redistribute it and/or modify it under the terms and conditions of * CANN Open Software License Agreement Version 2.0 (the "License"). * Please refer to the License for details. You may not use this file except in compliance with the License. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. * See LICENSE in the root of the software repository for the full text of the License. */py、sh 等文件:
# Copyright (c) 2025 [Name of the copyright owner] All rights reserved. # This program is free software, you can redistribute it and/or modify it under the terms and conditions of # CANN Open Software License Agreement Version 2.0 (the "License"). # Please refer to the License for details. You may not use this file except in compliance with the License. # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. # See LICENSE in the root of the software repository for the full text of the License.署名规则:
- 以个人名义贡献且你拥有贡献内容的版权时,将第一行的
[Name of the copyright owner]替换为你的署名; - 代表雇主贡献或雇主拥有贡献内容版权时,替换为雇主名称;对版权归属有疑问时,请咨询法律顾问或雇主法务团队;
- 第一行的
2025是创建或修改文件所在年份,请按实际时间修改。
从源码结构看,该模板与仓库现有文件完全一致,例如 core/base/mul.cpp 的头部即采用该格式(Copyright (c) 2025 Huawei Technologies Co., Ltd.),新贡献文件保持同样风格即可。
五、代码贡献流程(Fork → Pull Request → 合入)
SiP 官方不允许社区开发者直接 push 代码到仓库(含 CANN 开发者角色),贡献必须走 Fork + Pull Request 流程,且合入需经过至少一位提交者以外的 committer 评审。完整流程如下:
Fork 并克隆仓库:先 Fork SiP 仓库到你的个人仓库,再下载到本地,在本地分支上进行修改:
git clone https://gitcode.com/cann/sip.git提交 Pull Request:代码验证满足贡献要求后,向 SiP 提交 Pull Request,可在 Pull-Request 列表中找到你提交的 PR;
触发编译:在 PR 评论区评论
compile触发编译流水线。编译通过后 PR 会被打上ci-pipeline-passed标签,失败则打上ci-pipeline-failed标签;关注门禁测试结果:测试不通过时,根据问题提示修改本地代码;测试通过后 PR 会指派 committer 评审,需关注 committer 的评审意见;
合入:PR 评审通过后,代码合入 SiP 源码仓库。
六、常见卡点与社区 Bot 命令
PR 过程中遇到卡点可参考 FAQs,高频问题包括:
- PR 出现
cann-cla/no红色标签:说明 PR 中部分 commit 的贡献者未签署 CLA。按身份选择个人/法人/法人贡献者登记签署;签署审批通过后在 PR 评论区评论/check-cla重新触发检查,通过后打上cann-cla/yes标签。commit 邮箱与 Gitcode 提交邮箱不一致时,需先统一邮箱再签署(详见 FAQ 第 1 节的处理表格); - 个人账号下无法 Fork 仓库:通常是因为个人账号下已存在同名仓库,Gitcode 按“个人账号 + 仓库名”寻址,不允许同名。解决方法是重命名个人账号下已有仓库后再次 Fork(FAQ 第 2 节);
- CI 未触发:可能是网络或调度导致 webhook 未及时送达,可在 PR 评论中输入
/compile重新触发;若是仓库刚创建后短时间内提交 PR,Jenkins 侧尚未创建 CI 构建工程,评论/compile也不生效,需等待系统自动构建工程(FAQ 第 7 节); - 保护分支与非保护分支:保护分支可设置特定角色/成员的推送与合并权限,非保护分支不支持(FAQ 第 3 节);直接 push 会缺少必要审核环节,仅适用于超大文件等少数场景,常规贡献应使用
/lgtm、/approve评审合入(FAQ 第 5 节)。
社区仓库评论区支持的 Bot 命令一览(详见 docs/zh/context/infra-command.md):
| 命令 | 作用 | 面向对象 |
|---|---|---|
/check-cla | 强制重新检查 PR 的 CLA 状态,添加cann-cla/yes或cann-cla/no标签 | 所有开发者 |
compile | 触发编译流水线,通过后打ci-pipeline-passed标签,失败打ci-pipeline-failed | 所有开发者 |
/lgtm//lgtm cancel | 添加/移除代表代码已评审的lgtm标签 | sig 组 reviewers |
/approve//approve cancel | 添加/移除代表 committers 同意合并的approved标签 | sig 组 committers |
/check-pr | 检查 PR 标签是否满足条件,满足则合并 | 所有人 |
/merge | 添加代表 branch_keeper 同意合并的keeper_approved标签 | 对应分支的 branch_keeper |
/assign//unassign | 为 Issue 指派/取消指派负责人 | 所有人 |
/kind **、/priority **、/sig **及对应/remove-* | 为 Issue/PR 添加或移除分类、优先级、sig 标签(标签须已存在于仓库中) | 管理员可直接添加,其他用户通过评论添加 |
七、相关资源导航
- 行为准则:docs/zh/context/code-of-conduct.md
- 贡献 FAQ:docs/zh/context/infra-faqs.md
- Bot 命令一览:docs/zh/context/infra-command.md
- 环境准备与依赖:README_en.md、requirements.txt、install_deps.sh
- 编译与构建:docs/compilation_build_en.md、configs/build_config.json
- 新算子开发教程:docs/developing_a_simple_operator_en.md
- 算子调用示例(可用于本地验证):example/example.cpp
- 许可协议:LICENSE
【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考