已合并
docs: update CONTRIBUTING.md with formatting fixes, AI dev guide, and docs guide #36348
chenrayray创建于 5月21日
docs: update CONTRIBUTING.md with formatting fixes, AI dev guide, and docs guide #36348
已合并
共 1 个文件变更+368-114
| @@ -1,145 +1,254 @@ | |||
| 1 | -# PyTorch贡献指南 | 1 | +# PyTorch 贡献指南 |
| 2 | 2 | ||
| 3 | -感谢您考虑为 PyTorch做出贡献!我们欢迎任何形式的贡献,包括错误修复、功能增强、文档改进等,甚至只是反馈。无论您是经验丰富的开发者还是第一次参与开源项目,您的帮助都是非常宝贵的。 | 3 | +感谢您考虑为 PyTorch 做出贡献!我们欢迎任何形式的贡献,包括错误修复、功能增强、文档改进等。无论您是经验丰富的开发者还是第一次参与开源项目,您的帮助都是非常宝贵的。 |
| 4 | 4 | ||
| 5 | -您可以通过多种方式支持本项目: | 5 | +## 项目介绍 |
| 6 | 6 | ||
| 7 | -- 通过[Issues](https://gitcode.com/Ascend/pytorch/issues)反馈问题。 | 7 | +PyTorch 是基于 Ascend NPU 的深度学习框架发行版,针对华为昇腾 NPU 进行了深度优化适配。本项目提供与 PyTorch 官方的 API 兼容性,并充分发挥昇腾芯片的计算能力。 |
| 8 | -- 建议或实现新功能。 | ||
| 9 | -- 改进或扩展文档。 | ||
| 10 | -- 审查Pull Request并协助其他贡献者。 | ||
| 11 | -- 传播项目:在博客文章、社交媒体上分享PyTorch,或给仓库点个⭐。 | ||
| 12 | 8 | ||
| 13 | -## 寻找可贡献的问题 | 9 | +### 项目架构 |
| 14 | 10 | ||
| 15 | -您可以通过查看[Issues列表](https://gitcode.com/Ascend/pytorch/issues)了解项目的发展计划和路线图。 | 11 | +```text |
| 12 | +pytorch | ||
| 13 | +├── docs/ # 项目文档 | ||
| 14 | +├── ci/ # CI 构建脚本 | ||
| 15 | +├── tools/ # 开发工具 | ||
| 16 | +├── cmake/ # CMake 配置 | ||
| 17 | +├── torch_npu/ # NPU 核心适配模块 | ||
| 18 | +│ ├── csrc/ # C++ 后端实现 | ||
| 19 | +│ ├── distributed/ # 分布式 Python 接口 | ||
| 20 | +│ ├── _inductor/ # Inductor 后端适配 | ||
| 21 | +│ ├── dynamo/ # Dynamo 编译器适配 | ||
| 22 | +│ ├── npu/ # NPU Python 接口 | ||
| 23 | +│ ├── profiler/ # 性能分析 Python 接口 | ||
| 24 | +│ ├── _afd/ # AFD Python 接口 | ||
| 25 | +│ ├── _logging/ # 日志模块 Python 接口 | ||
| 26 | +│ ├── asd/ # 异步检测工具 | ||
| 27 | +│ ├── contrib/ # 贡献的扩展模块 | ||
| 28 | +│ ├── onnx/ # ONNX 适配 | ||
| 29 | +│ └── optim/ # 优化器适配 | ||
| 30 | +├── third_party/ # 第三方依赖 | ||
| 31 | +├── torchnpugen/ # 代码生成工具 | ||
| 32 | +├── examples/ # 示例代码 | ||
| 33 | +└── test/ # 测试用例 | ||
| 34 | +``` | ||
| 35 | + | ||
| 36 | +### 核心模块说明 | ||
| 37 | + | ||
| 38 | +| 模块 | 说明 | | ||
| 39 | +|----------------------------|--------------------------------------------------------------------------| | ||
| 40 | +| `torch_npu/csrc/core/npu` | NPU 核心组件:事件管理(NPUEvent)、流管理(NPUStream)、图执行(NPUGraph)、设备守卫(NPUGuard)、内存管理 | | ||
| 41 | +| `torch_npu/csrc/aten` | ATen 算子 NPU 后端:算子注册、调度、实现适配 | | ||
| 42 | +| `torch_npu/csrc/framework` | 算子命令框架:OpCommand、Kernel 调度、算子构建器 | | ||
| 43 | +| `torch_npu/npu/aclnn` | ACLNN 算子 Python 接口:AscendCL NPU 算子库封装 | | ||
| 44 | +| `torch_npu/npu/amp` | 自动混合精度:GradScaler、FP16/BF16 支持 | | ||
| 45 | +| `torchnpugen` | 代码生成工具:自动微分代码生成、代码模板 | | ||
| 46 | +| `examples` | 示例代码:分布式通信、模型推理、ResNet 示例 | | ||
| 47 | +| `third_party/op-plugin` | 算子插件:自定义算子实现、PyTorch 算子覆盖 | | ||
| 48 | +| `test/npu` | NPU 功能测试:设备管理、内存分配、算子测试 | | ||
| 49 | + | ||
| 50 | +## 贡献方式 | ||
| 51 | + | ||
| 52 | +我们热情期待您的加入!每一个贡献都是推动 PyTorch 进步的重要力量: | ||
| 53 | + | ||
| 54 | +- **反馈问题**:报告 Bug 或提交功能建议,帮助我们发现并解决问题 | ||
| 55 | +- **贡献代码**:提交代码修复或新功能实现,直接参与项目开发 | ||
| 56 | +- **完善文档**:改进文档或补充缺失内容,提升项目可读性 | ||
| 57 | +- **代码审查**:审查 Pull Request,帮助提升代码质量 | ||
| 58 | +- **分享传播**:在博客、社交媒体上分享项目,给仓库点个 ⭐ | ||
| 59 | + | ||
| 60 | +## 贡献场景 | ||
| 61 | + | ||
| 62 | +本项目热烈欢迎各种形式的贡献,期待您的参与! | ||
| 63 | + | ||
| 64 | +### 一、需求与功能建议 | ||
| 65 | + | ||
| 66 | +如果您有新功能建议或性能优化想法,我们热情邀请您提交 Issue 与社区深入讨论。 | ||
| 67 | + | ||
| 68 | +**Issue 类型**:需求/功能建议 | ||
| 69 | + | ||
| 70 | +**需要包含的内容**: | ||
| 71 | + | ||
| 72 | +- **功能背景**:该功能解决什么问题、能为用户带来什么价值 | ||
| 73 | +- **功能描述**:详细描述建议的功能 | ||
| 74 | +- **设计方案**:技术思路、关键模块设计、上下游组件关系 | ||
| 75 | +- **预期收益**:功能目标、性能指标、精度表现 | ||
| 76 | + | ||
| 77 | +### 二、Bug 反馈与修复 | ||
| 78 | + | ||
| 79 | +如果您发现 Bug 或文档问题,我们真诚欢迎您的反馈和修复建议。 | ||
| 80 | + | ||
| 81 | +**Bug Report 格式**: | ||
| 82 | + | ||
| 83 | +- **环境信息**:PyTorch 版本、OS、Python 版本、CANN 版本等 | ||
| 84 | +- **问题描述**:添加标签以便在问题仪表板上突出显示 | ||
| 85 | +- **复现步骤**:尽可能详细地描述如何重现问题 | ||
| 86 | +- **预期行为**:描述您预期发生的行为 | ||
| 87 | +- **给审稿人的特别说明**:如有任何特殊情况 | ||
| 88 | + | ||
| 89 | +**修复流程**: | ||
| 90 | + | ||
| 91 | +1. 在 Issue 中找到对应的 Bug 描述 | ||
| 92 | +2. 评论 `/assign` 认领该任务 | ||
| 93 | +3. 创建分支进行修复 | ||
| 94 | +4. 提交 Pull Request | ||
| 95 | + | ||
| 96 | +### 三、协助社区建设 | ||
| 97 | + | ||
| 98 | +如果您有能力解决他人提出的问题,我们热烈期待您在 Issue 中分享您的解决方案。 | ||
| 16 | 99 | ||
| 17 | ## 贡献流程 | 100 | ## 贡献流程 |
| 18 | 101 | ||
| 19 | -- [贡献者许可协议](#贡献者许可协议) | ||
| 20 | -- [开发与测试](#开发与测试) | ||
| 21 | - | ||
| 22 | ### 贡献者许可协议 | 102 | ### 贡献者许可协议 |
| 23 | 103 | ||
| 24 | 在您第一次向 PyTorch 社区提交代码之前,需要签署 CLA。 | 104 | 在您第一次向 PyTorch 社区提交代码之前,需要签署 CLA。 |
| 25 | 105 | ||
| 26 | -对于个人贡献者,详细信息请参考[ICLA 在线文档](https://www.mindspore.cn/icla)。 | 106 | +对于个人贡献者,详细信息请参考 [ICLA 在线文档](https://www.mindspore.cn/icla)。 |
| 27 | 107 | ||
| 28 | ### 开发与测试 | 108 | ### 开发与测试 |
| 29 | 109 | ||
| 30 | -1. 先在GitCode平台点击仓库右上角"Fork"按钮,将仓库克隆到个人账户 | 110 | +1. **Fork 仓库**:在 GitCode 平台点击仓库右上角 "Fork" 按钮,将仓库克隆到个人账户 |
| 31 | 111 | ||
| 32 | -2. 克隆到本地: | 112 | +2. **克隆到本地**: |
| 113 | + | ||
| 114 | + ```bash | ||
| 115 | + git clone https://gitcode.com/<your-username>/pytorch.git | ||
| 116 | + cd pytorch | ||
| 117 | + ``` | ||
| 118 | + | ||
| 119 | +3. **创建开发分支**: | ||
| 120 | + | ||
| 121 | + ```bash | ||
| 122 | + git checkout -b {new_branch_name} origin/master | ||
| 123 | + ``` | ||
| 124 | + | ||
| 125 | +4. **代码开发**:请遵循 **[代码规范](#代码规范)** | ||
| 126 | + | ||
| 127 | +5. **代码测试**:运行测试确保代码功能正常 | ||
| 128 | + | ||
| 129 | +6. **门禁检查**:运行 CI 检查,确保代码通过编译、静态检查、UT 测试 | ||
| 130 | + | ||
| 131 | +7. **提交 Pull Request**:提交 PR 并等待代码审查 | ||
| 132 | + | ||
| 133 | +8. **社区评审**:如果涉及 patch、头文件宏、API 接口等更新,需提交社区评审 | ||
| 134 | + | ||
| 135 | +### 代码合入评审要求 | ||
| 136 | + | ||
| 137 | +以下类型的修改需要社区评审: | ||
| 138 | + | ||
| 139 | +- **Patch 替换**:对 PyTorch 原生接口的 patch 替换 | ||
| 140 | +- **头文件宏更新**:新增或修改宏定义 | ||
| 141 | +- **API 接口变更**:新增、修改或删除公共 API | ||
| 142 | +- **核心组件变更**:内存管理、设备管理等核心模块的修改 | ||
| 143 | + | ||
| 144 | +## 代码规范 | ||
| 145 | + | ||
| 146 | +请遵循这些风格,使 PyTorch 易于开发、审查和维护。 | ||
| 147 | + | ||
| 148 | +### 编码指南 | ||
| 149 | + | ||
| 150 | +- **Python**:建议使用 [PEP 8 编码样式](https://pep8.org/) | ||
| 151 | +- **C++**:建议使用 [Google C++ 编码指南](http://google.github.io/styleguide/cppguide.html) | ||
| 152 | + | ||
| 153 | +执行代码检查,可参照[本地静态检查](#本地静态检查)。 | ||
| 154 | + | ||
| 155 | +### 单元测试指南 | ||
| 156 | + | ||
| 157 | +- **Python**:建议使用 [pytest](http://pytest.org/en/latest/) | ||
| 158 | +- **C++**:建议使用 [Googletest Primer](https://github.com/google/googletest/blob/master/docs/primer.md) | ||
| 159 | + | ||
| 160 | +测试用例的设计意图应该通过它的注释名称来反映。 | ||
| 161 | + | ||
| 162 | +### 重构指南 | ||
| 163 | + | ||
| 164 | +我们鼓励开发人员重构代码以消除代码异味。所有的代码都应该符合编码风格和测试风格的需求。 | ||
| 165 | + | ||
| 166 | +## 实操指南 | ||
| 167 | + | ||
| 168 | +### 环境搭建与编译 | ||
| 169 | + | ||
| 170 | +**编译构建**: | ||
| 33 | 171 | ||
| 34 | ```bash | 172 | ```bash |
| 35 | -git clone https://gitcode.com/<your-username>/pytorch.git | 173 | +# 安装依赖并编译 |
| 36 | -cd pytorch | 174 | +bash ci/build.sh --python=3.10 |
| 37 | 175 | ||
| 176 | +# 针对指定的 PyTorch 版本构建(支持 2.10.0 / 2.11.0 / 2.12.0) | ||
| 177 | +# 要求环境中已安装对应版本的 PyTorch | ||
| 178 | +bash ci/build.sh --python=3.10 --torch=2.10.0 | ||
| 179 | + | ||
| 180 | +# 或使用 CMake 手动编译 | ||
| 181 | +mkdir build && cd build | ||
| 182 | +cmake .. | ||
| 183 | +make -j$(nproc) | ||
| 38 | ``` | 184 | ``` |
| 39 | -3. 在个人仓库进行代码开发 | ||
| 40 | - 代码开发请遵循 **[代码规范](#代码规范)** | ||
| 41 | 185 | ||
| 42 | -4. 代码测试 | 186 | +### 编译加速技巧 |
| 43 | - 参见 **[代码测试](https://gitcode.com/Ascend/pytorch/blob/master/test/README.md)** | ||
| 44 | 187 | ||
| 45 | -5. **[门禁异常处理](#门禁异常处理)** | 188 | +#### 使用 Ninja 构建 |
| 46 | 189 | ||
| 47 | -6. **[提交Pull Request](#提交Pull-Request)** | 190 | +默认情况下,CMake 使用 Makefile 生成器。安装 Ninja 构建系统可以显著加快编译速度。 |
| 48 | 191 | ||
| 49 | -7. **[报告问题](#报告问题)** | 192 | +本项目 `setup.py` 会自动检测系统中是否安装了 Ninja:如果环境变量 `CMAKE_GENERATOR` 设置为 `ninja`,或者 `ninja` 命令在 `PATH` 中可用,将自动使用 Ninja 作为构建系统。 |
| 50 | 193 | ||
| 51 | -#### 代码规范 | 194 | +```bash |
| 195 | +pip install ninja | ||
| 196 | +``` | ||
| 52 | 197 | ||
| 53 | -请遵循这些风格,以使 PyTorch 易于开发、审查和维护。 | 198 | +安装 Ninja 后,编译即可自动生效,无需额外配置。如果之前已经编译过,安装 Ninja 后需要先执行一次清理: |
| 54 | 199 | ||
| 55 | -- 编码指南 | 200 | +```bash |
| 201 | +python setup.py clean | ||
| 202 | +``` | ||
| 56 | 203 | ||
| 57 | - 请在PyTorch社区使用规统一的编码分格,python建议的编码风格是[PEP 8编码样式](https://pep8.org/),C++编码所建议的风格是 [Google C++编码指南](http://google.github.io/styleguide/cppguide.html) 。执行代码检查,可参照[本地静态检查](#本地静态检查)。 | 204 | +#### 使用 Mold 链接器 |
| 58 | 205 | ||
| 59 | -- 单元测试指南 | 206 | +在频繁修改单个文件并重新编译的开发循环中,链接时间会占据主导。大多数 Linux 发行版自带的系统链接器(GNU `ld`)速度较慢,使用更快的链接器可以显著改善构建体验。 |
| 60 | 207 | ||
| 61 | - 请在PyTorch社区使用统一的单元测试风格, Python中建议的单元测试风格是[pytest](http://www.pytest.org/en/latest/),C++单元测试所建议的风格是 [Googletest Primer](#https://github.com/google/googletest/blob/master/docs/primer.md) 。测试用例的设计意图应该通过它的注释名称来反映。 | 208 | +本项目的 `CMakeLists.txt` 已内置链接器自动检测逻辑:优先检测 mold 链接器,若存在则自动启用(`-fuse-ld=mold`)。 |
| 62 | 209 | ||
| 63 | -- 重构指南 | 210 | +```bash |
| 211 | +sudo apt install mold | ||
| 212 | +# 或从源码安装:https://github.com/rui314/mold | ||
| 213 | +``` | ||
| 64 | 214 | ||
| 65 | - 我们鼓励开发人员重构我们的代码以消除[代码异味](https://en.wikipedia.org/wiki/Code_smell)。所有的代码都应该符合编码风格和测试风格的需求,重构代码也不例外。当您收到警告时,您必须重构要合并的代码。 | 215 | +安装后重新编译即可自动生效。若需确认链接器是否正确启用,可检查编译输出中的链接选项是否包含 `-fuse-ld=mold`。 |
| 66 | 216 | ||
| 67 | -#### 门禁异常处理 | 217 | +#### 使用 CCache |
| 68 | 218 | ||
| 69 | -门禁异常主要包含如下几种,请根据相关提示解决异常问题。 | 219 | +即使依赖跟踪基于文件修改时间,仍有许多场景下文件会被重复编译。使用 ccache 可以有效避免重复编译,节省大量时间。 |
| 70 | 220 | ||
| 71 | -- 编译异常 | 221 | +本项目的 `CMakeLists.txt` 已内置 ccache 自动检测逻辑,安装 ccache 后即可自动启用。但建议根据自身环境调整 ccache 配置(如缓存目录、缓存大小、压缩等)以获得最佳效果: |
| 72 | 222 | ||
| 73 | - 请检查代码编译失败的原因,解决问题后重新编译即可。 | 223 | +```bash |
| 224 | +sudo apt install ccache | ||
| 225 | +# 或 | ||
| 226 | +sudo yum install ccache | ||
| 227 | +``` | ||
| 74 | 228 | ||
| 75 | -- 静态检查异常(代码Bug、代码漏洞、代码异味) | 229 | +验证 ccache 是否生效:连续执行两次完整编译,第二次应明显快于第一次。如果未生效,可检查 `build/CMakeCache.txt` 中的 `CMAKE_C_COMPILER_LAUNCHER` 和 `CMAKE_CXX_COMPILER_LAUNCHER` 变量是否包含 ccache: |
| 76 | 230 | ||
| 77 | - 请依照提示查找代码中的异常并解决。 | 231 | +```cmake |
| 232 | +//C compiler launcher | ||
| 233 | +CMAKE_C_COMPILER_LAUNCHER:PATH=/usr/bin/ccache | ||
| 78 | 234 | ||
| 79 | -- UT测试未通过 | 235 | +//CXX compiler launcher |
| 236 | +CMAKE_CXX_COMPILER_LAUNCHER:PATH=/usr/bin/ccache | ||
| 237 | +``` | ||
| 80 | 238 | ||
| 81 | - 请根据提示,查找测试用例不通过项并检查原因,解决后再测试。 | 239 | +#### 仅编译所需目标 |
| 82 | 240 | ||
| 83 | -#### 提交Pull Request | 241 | +如果只需重新构建 `torch_npu.so`,可以在 build 目录下直接指定目标,避免全量构建: |
| 84 | 242 | ||
| 85 | -1. 本地创建分支。 | 243 | +```bash |
| 244 | +cd build && ninja torch_npu | ||
| 245 | +``` | ||
| 86 | 246 | ||
| 87 | - 为了避免多个分支之间的不一致,建议创建新的分支进行开发: | 247 | +如果未安装 Ninja,将 `ninja` 替换为 `make` 即可。 |
| 88 | - | ||
| 89 | - ``` | ||
| 90 | - git checkout -b {new_branch_name} origin/master | ||
| 91 | - ``` | ||
| 92 | - | ||
| 93 | - 以master分支为例,PyTorch可能会根据需要创建版本分支和下游开发分支,请先修复上游的bug。然后就可以随意更改代码了。 | ||
| 94 | - | ||
| 95 | -2. 将代码推送到远程仓库。 | ||
| 96 | - | ||
| 97 | - 更新代码后,您需要以正式的方式推送更新: | ||
| 98 | - | ||
| 99 | - ``` | ||
| 100 | - git add . | ||
| 101 | - git status # Check the update status | ||
| 102 | - git commit -m "Your commit title" | ||
| 103 | - git commit -s --amend #Add the concrete description of your commit | ||
| 104 | - git push origin {new_branch_name} | ||
| 105 | - ``` | ||
| 106 | - | ||
| 107 | -3. 创建Pull Request | ||
| 108 | - | ||
| 109 | - 在GitCode上创建Pull Request | ||
| 110 | - 根据`.gitcode/PULL_REQUEST_TEMPLATE.md`中的规范模板,完整填写: | ||
| 111 | - - 合入来源 | ||
| 112 | - - 修改方案 | ||
| 113 | - - 资料变更 | ||
| 114 | - - 接口变更 | ||
| 115 | - - 功能验证 | ||
| 116 | - - CheckList | ||
| 117 | - 确认信息完整准确后提交Pull Request,等待代码审查 | ||
| 118 | - | ||
| 119 | -#### 报告问题 | ||
| 120 | - | ||
| 121 | -为项目做出贡献的一个好方法是在遇到问题时发送详细报告。我们总是很感激写得很好、彻底的错误报告,并会由此感谢您! | ||
| 122 | - | ||
| 123 | -报告问题时,请参考以下格式: | ||
| 124 | - | ||
| 125 | -- 您使用的是什么版本的环境 (pytorch、os、python 等)? | ||
| 126 | -- 这是错误报告还是功能请求? | ||
| 127 | -- 什么样的问题,添加标签以在问题仪表板上突出显示。 | ||
| 128 | -- 发生了什么? | ||
| 129 | -- 您预计会发生什么? | ||
| 130 | -- 如何重现它?(尽可能最小和精确。) | ||
| 131 | -- 给审稿人的特别说明? | ||
| 132 | - | ||
| 133 | -问题咨询: | ||
| 134 | - | ||
| 135 | -- 如果您发现一个未解决的问题,而这正是您要解决的问题,请对该问题发表一些评论,告诉其他人您将负责它。 | ||
| 136 | -- 如果问题已打开一段时间,建议贡献者在解决该问题之前进行预检查。 | ||
| 137 | -- 如果您解决了自己报告的问题,则还需要在关闭该问题之前让其他人知道。 | ||
| 138 | 248 | ||
| 139 | ### 本地静态检查 | 249 | ### 本地静态检查 |
| 140 | 250 | ||
| 141 | -项目使用 [lintrunner](https://github.com/suo/lintrunner) 进行静态检查,支持在本地运行与 CI 完全一致的检查项, | 251 | +项目使用 [lintrunner](https://github.com/suo/lintrunner) 进行静态检查,支持在本地运行与 CI 完全一致的检查项,包括 Python 代码风格(Flake8、Ruff、PYFMT)、C++ 格式(ClangFormat、ClangTidy)、拼写检查(Codespell)等。 |
| 142 | -包括 Python 代码风格(Flake8、Ruff、PYFMT)、C++ 格式(ClangFormat、ClangTidy)、拼写检查(Codespell)等。 | ||
| 143 | 252 | ||
| 144 | #### 安装依赖 | 253 | #### 安装依赖 |
| 145 | 254 | ||
| @@ -174,32 +283,177 @@ git diff --name-only HEAD | xargs lintrunner | |||
| 174 | 283 | ||
| 175 | > **提示**:`--take` 参数可指定只运行部分检查项,常用项如下: | 284 | > **提示**:`--take` 参数可指定只运行部分检查项,常用项如下: |
| 176 | > | 285 | > |
| 177 | -> | 代码 | 说明 | | 286 | +> | 代码 | 说明 | |
| 178 | -> |------|------| | 287 | +> |---------------|----------------------------------------------------------------| |
| 179 | -> | `FLAKE8` | Python 语法与风格检查 | | 288 | +> | `FLAKE8` | Python 语法与风格检查 | |
| 180 | -> | `RUFF` | Python 快速 lint 与 import 排序 | | 289 | +> | `RUFF` | Python 快速 lint 与 import 排序 | |
| 181 | -> | `PYFMT` | Python 代码格式化(usort + ruff-format) | | 290 | +> | `PYFMT` | Python 代码格式化(usort + ruff-format) | |
| 182 | -> | `CLANGFORMAT` | C++ 代码格式化 | | 291 | +> | `CLANGFORMAT` | C++ 代码格式化 | |
| 183 | -> | `CLANGTIDY` | C++ 静态分析 | | 292 | +> | `CLANGTIDY` | C++ 静态分析 | |
| 184 | -> | `SPACES` | 行尾空格检查 | | 293 | +> | `SPACES` | 行尾空格检查 | |
| 185 | -> | `TABS` | Tab 字符检查 | | 294 | +> | `TABS` | Tab 字符检查 | |
| 186 | -> | `NEWLINE` | 文件末尾换行检查 | | 295 | +> | `NEWLINE` | 文件末尾换行检查 | |
| 187 | -> | `CODESPELL` | 拼写检查,如果是误报可以将误报词按照字典序添加至 `tools/linter/dictionary.txt` 后再重新检查 | | 296 | +> | `CODESPELL` | 拼写检查, 如果是误报可以将误报词按照字典序添加至 `tools/linter/dictionary.txt` 后再重新检查 | |
| 188 | 297 | ||
| 189 | 更多执行命令可参照[lintrunner wiki](https://github.com/pytorch/pytorch/wiki/lintrunner)。 | 298 | 更多执行命令可参照[lintrunner wiki](https://github.com/pytorch/pytorch/wiki/lintrunner)。 |
| 190 | 299 | ||
| 300 | +### PR 合入要求 | ||
| 301 | + | ||
| 302 | +**合入检查清单**(详细要求参考 [PR 模板](./.gitcode/PULL_REQUEST_TEMPLATE.md)): | ||
| 303 | + | ||
| 304 | +- [ ] 代码编译通过 | ||
| 305 | +- [ ] 静态检查通过(CppLint、CppCheck 等) | ||
| 306 | +- [ ] UT 测试用例通过 | ||
| 307 | +- [ ] 代码风格符合规范(PEP 8、Google C++ Style) | ||
| 308 | +- [ ] 提交信息规范(符合 Conventional Commits) | ||
| 309 | +- [ ] PR 标题正确使用类型标签(feat、fix、refactor、docs、test 等) | ||
| 310 | +- [ ] 代码注释完备,正确记录错误日志 | ||
| 311 | +- [ ] 代码实现进行了返回值、空指针等校验 | ||
| 312 | + | ||
| 313 | +### 功能验证指导 | ||
| 314 | + | ||
| 315 | +**测试用例位置**: | ||
| 316 | + | ||
| 317 | +- `test/npu/` - NPU 功能测试 | ||
| 318 | +- `test/nn/` - 网络层测试 | ||
| 319 | +- `test/distributed/` - 分布式测试 | ||
| 320 | +- `test/dynamo/` - 编译器测试 | ||
| 321 | + | ||
| 322 | +**运行测试**(详细说明参考 [测试文档](./test/README.md)): | ||
| 323 | + | ||
| 324 | +```bash | ||
| 325 | +# 安装测试依赖 | ||
| 326 | +pip3 install -r test/requirements.txt | ||
| 327 | + | ||
| 328 | +# 补全测试文件 | ||
| 329 | +cd test | ||
| 330 | +bash get_synchronized_files.sh | ||
| 331 | + | ||
| 332 | +# 运行单个测试文件 | ||
| 333 | +python test_autocast.py | ||
| 334 | + | ||
| 335 | +# 或使用 run_test.py | ||
| 336 | +python run_test.py -i test_autocast | ||
| 337 | + | ||
| 338 | +# 运行指定用例 | ||
| 339 | +python test_autocast.py -v -k test_autocast_nn_fp32 | ||
| 340 | + | ||
| 341 | +# 运行全量 UT | ||
| 342 | +cd .. | ||
| 343 | +python ci/access_control_test.py --all | ||
| 344 | +``` | ||
| 345 | + | ||
| 346 | +### 门禁异常处理 | ||
| 347 | + | ||
| 348 | +门禁异常主要包含如下几种,请根据相关提示解决: | ||
| 349 | + | ||
| 350 | +- **编译异常**:请检查代码编译失败的原因,解决问题后重新编译 | ||
| 351 | +- **静态检查异常**:请依照提示查找代码中的问题并解决(如代码风格、潜在 Bug 等) | ||
| 352 | +- **UT 测试未通过**:请根据提示查找测试用例不通过项并检查原因 | ||
| 353 | + | ||
| 354 | +### AI辅助研发 | ||
| 355 | + | ||
| 356 | +PyTorch NPU 项目鼓励使用 AI 辅助研发与文档开发,以提升贡献效率。我们提供了昇腾官方的 agent-skills 仓库,其中包含一系列适用于昇腾生态的 AI Agent Skill 配置,可帮助您在开发中更好地利用 AI 编码助手。 | ||
| 357 | + | ||
| 358 | +- **agent-skills 仓库**:[https://gitcode.com/Ascend/agent-skills](https://gitcode.com/Ascend/agent-skills) | ||
| 359 | +- 该仓库提供了昇腾芯片场景下常用的 Skill 模板和工具,可用于代码生成、问题诊断、性能分析等场景。 | ||
| 360 | +- 仓库中的 skills 持续更新中,同时欢迎贡献新的 Skill 或对现有 Skill 提出改进建议。 | ||
| 361 | + | ||
| 362 | +使用 AI 辅助研发时请注意: | ||
| 363 | + | ||
| 364 | +- AI 生成的代码仍需人工审查,确保代码质量、安全性和正确性。 | ||
| 365 | +- 遵循项目的[代码规范](#代码规范)和[单元测试指南](#单元测试指南)。 | ||
| 366 | +- 提交的代码需通过门禁检查(编译、静态检查、UT 测试等)。 | ||
| 367 | + | ||
| 368 | +### 文档开发说明 | ||
| 369 | + | ||
| 370 | +#### 文档承载方式 | ||
| 371 | + | ||
| 372 | +本项目的文档采用 Markdown 格式,存放于仓库的 `docs/zh/` 目录下,随代码一同托管在 GitCode 平台。 | ||
| 373 | + | ||
| 374 | +> **注意**:文档承载在长稳版本的分支中,如 `v2.7.1`。如果您需要查看或修改文档,请切换到对应的长稳版本分支进行操作。 | ||
| 375 | + | ||
| 376 | +文档主要包含以下类目: | ||
| 377 | + | ||
| 378 | +- **安装指南**(`installation_guide/`):环境准备、源码编译、pip 安装等说明。 | ||
| 379 | +- **快速入门**(`quick_start/`):快速上手教程。 | ||
| 380 | +- **原生 API 文档**(`native_apis/`):各版本 PyTorch 原生 API 支持情况。 | ||
| 381 | +- **框架特性指南**(`framework_feature_guide_pytorch/`):NPU 图模式、Inductor、内存优化等特性说明。 | ||
| 382 | +- **环境变量参考**(`environment_variable_reference/`):NPU 相关环境变量说明。 | ||
| 383 | +- **故障排除**(`troubleshooting/`):常见问题及错误码分析。 | ||
| 384 | +- **安全声明**(`SECURITYNOTE.md`):安全相关说明。 | ||
| 385 | +- **贡献指南**(`CONTRIBUTING.md`):本文档。 | ||
| 386 | + | ||
| 387 | +#### 如何提交文档 | ||
| 388 | + | ||
| 389 | +文档的提交流程与代码提交一致,请参考[贡献流程](#贡献流程): | ||
| 390 | + | ||
| 391 | +1. Fork 仓库并在本地创建分支。 | ||
| 392 | +2. 在 `docs/zh/` 目录下新增或修改对应的 Markdown 文件。 | ||
| 393 | +3. 编写文档时注意: | ||
| 394 | + - 使用清晰、准确的中文表述。 | ||
| 395 | + - 代码示例需确保可运行。 | ||
| 396 | + - 遵循现有文档的格式和风格。 | ||
| 397 | +4. 提交 Pull Request,并在 PR 描述中说明文档变更内容。 | ||
| 398 | + | ||
| 399 | +#### CI 文档检查 | ||
| 400 | + | ||
| 401 | +提交文档的 Pull Request 后,CI 门禁会自动对变更的 Markdown 文件进行以下检查: | ||
| 402 | + | ||
| 403 | +- **换行符检查(NEWLINE)**:确保文件末尾有且仅有一个换行符,且文件不包含多余的空行。 | ||
| 404 | +- **尾随空格检查(SPACES)**:确保每行末尾没有多余的空格。 | ||
| 405 | +- **制表符检查(TABS)**:确保文件中使用空格缩进而非制表符(Tab)。 | ||
| 406 | +- **拼写检查(CODESPELL)**:通过 codespell 工具检查英文拼写错误。 | ||
| 407 | + | ||
| 408 | +## 提交 Pull Request | ||
| 409 | + | ||
| 410 | +1. **推送代码到远程仓库**: | ||
| 411 | + | ||
| 412 | + ```bash | ||
| 413 | + git add . | ||
| 414 | + git status | ||
| 415 | + git commit -m "Your commit title" | ||
| 416 | + git commit -s --amend # 添加详细描述 | ||
| 417 | + git push origin {new_branch_name} | ||
| 418 | + ``` | ||
| 419 | + | ||
| 420 | +2. **创建 Pull Request** | ||
| 421 | + | ||
| 422 | +在 GitCode 上创建 Pull Request,根据 [PR 模板](./.gitcode/PULL_REQUEST_TEMPLATE.md) 完整填写: | ||
| 423 | + | ||
| 424 | +- 合入来源 | ||
| 425 | +- 修改方案 | ||
| 426 | +- 资料变更 | ||
| 427 | +- 接口变更 | ||
| 428 | +- 功能验证 | ||
| 429 | +- CheckList | ||
| 430 | + | ||
| 431 | +确认信息完整准确后提交 Pull Request,等待代码审查。 | ||
| 432 | + | ||
| 191 | ## 社区准则 | 433 | ## 社区准则 |
| 192 | 434 | ||
| 193 | ### 行为准则 | 435 | ### 行为准则 |
| 194 | 436 | ||
| 195 | - 我们致力于为所有参与者提供一个友好、安全和包容的环境。参与本项目即表示您同意: | 437 | +我们致力于为所有参与者提供一个友好、安全、包容的环境: |
| 196 | 438 | ||
| 197 | - - 尊重不同的观点和经验 | 439 | +- **尊重差异**:尊重不同的观点和经验,包容多元文化 |
| 198 | - - 接受建设性的批评 | 440 | +- **开放心态**:接受建设性的批评,持续学习和进步 |
| 199 | - - 关注对社区最有利的事情 | 441 | +- **聚焦贡献**:关注对社区最有利的事情,推动项目发展 |
| 200 | - - 对其他社区成员表示同理心 | 442 | +- **同理心**:对其他社区成员表示同理心,互帮互助 |
| 201 | 443 | ||
| 202 | ### 沟通渠道 | 444 | ### 沟通渠道 |
| 203 | 445 | ||
| 204 | -- **Issues**:用于报告Bug、提出功能建议和讨论技术问题 | 446 | +我们为您提供多种沟通渠道,方便您参与社区互动: |
| 205 | -- **Pull Requests**:用于代码审查和讨论具体实现 | 447 | + |
| 448 | +- **[Issues](https://gitcode.com/Ascend/pytorch/issues)**:用于报告 Bug、提出功能建议 | ||
| 449 | +- **[Pull Requests](https://gitcode.com/Ascend/pytorch/pulls)**:用于代码审查和讨论 | ||
| 450 | + | ||
| 451 | +### 问题咨询 | ||
| 452 | + | ||
| 453 | +我们热烈欢迎每一位开发者积极参与社区讨论!期待与您共同成长: | ||
| 454 | + | ||
| 455 | +- **发现未解决的问题**:欢迎在 Issue 中发表评论,展示您的解决方案 | ||
| 456 | +- **遇到长期未处理的问题**:建议在解决前进行预检查,避免重复工作 | ||
| 457 | +- **成功解决了自己报告的问题**:也请分享您的解决方案,让社区一起学习和进步 | ||
| 458 | + | ||
| 459 | +有任何疑问,随时欢迎在社区中交流讨论,期待您的精彩贡献! | ||