已合并
docs: update CONTRIBUTING.md with formatting fixes, AI dev guide, and docs guide #36350
chenrayray创建于 5月21日
docs: update CONTRIBUTING.md with formatting fixes, AI dev guide, and docs guide #36350
已合并
chenrayray创建于 5月21日
1 个文件变更+163-39
MCONTRIBUTING.md+163-39
@@ -8,7 +8,7 @@ PyTorch 是基于 Ascend NPU 的深度学习框架发行版,针对华为昇腾
8 8 
9### 项目架构9### 项目架构
10 10 
11-```11+```text
12pytorch12pytorch
13├── docs/ # 项目文档13├── docs/ # 项目文档
14├── ci/ # CI 构建脚本14├── ci/ # CI 构建脚本
@@ -35,17 +35,17 @@ pytorch
35 35 
36### 核心模块说明36### 核心模块说明
37 37 
38-| 模块 | 说明 |38+| 模块 | 说明 |
39-|------|------|39+|----------------------------|--------------------------------------------------------------------------|
40-| `torch_npu/csrc/core/npu` | NPU 核心组件:事件管理(NPUEvent)、流管理(NPUStream)、图执行(NPUGraph)、设备守卫(NPUGuard)、内存管理 |40+| `torch_npu/csrc/core/npu` | NPU 核心组件:事件管理(NPUEvent)、流管理(NPUStream)、图执行(NPUGraph)、设备守卫(NPUGuard)、内存管理 |
41-| `torch_npu/csrc/aten` | ATen 算子 NPU 后端:算子注册、调度、实现适配 |41+| `torch_npu/csrc/aten` | ATen 算子 NPU 后端:算子注册、调度、实现适配 |
42-| `torch_npu/csrc/framework` | 算子命令框架:OpCommand、Kernel 调度、算子构建器 |42+| `torch_npu/csrc/framework` | 算子命令框架:OpCommand、Kernel 调度、算子构建器 |
43-| `torch_npu/npu/aclnn` | ACLNN 算子 Python 接口:AscendCL NPU 算子库封装 |43+| `torch_npu/npu/aclnn` | ACLNN 算子 Python 接口:AscendCL NPU 算子库封装 |
44-| `torch_npu/npu/amp` | 自动混合精度:GradScaler、FP16/BF16 支持 |44+| `torch_npu/npu/amp` | 自动混合精度:GradScaler、FP16/BF16 支持 |
45-| `torchnpugen` | 代码生成工具:自动微分代码生成、代码模板 |45+| `torchnpugen` | 代码生成工具:自动微分代码生成、代码模板 |
46-| `examples` | 示例代码:分布式通信、模型推理、ResNet 示例 |46+| `examples` | 示例代码:分布式通信、模型推理、ResNet 示例 |
47-| `third_party/op-plugin` | 算子插件:自定义算子实现、PyTorch 算子覆盖 |47+| `third_party/op-plugin` | 算子插件:自定义算子实现、PyTorch 算子覆盖 |
48-| `test/npu` | NPU 功能测试:设备管理、内存分配、算子测试 |48+| `test/npu` | NPU 功能测试:设备管理、内存分配、算子测试 |
49 49 
50## 贡献方式50## 贡献方式
51 51 
@@ -68,6 +68,7 @@ pytorch
68**Issue 类型**:需求/功能建议68**Issue 类型**:需求/功能建议
69 69 
70**需要包含的内容**70**需要包含的内容**
71+ 
71- **功能背景**:该功能解决什么问题、能为用户带来什么价值72- **功能背景**:该功能解决什么问题、能为用户带来什么价值
72- **功能描述**:详细描述建议的功能73- **功能描述**:详细描述建议的功能
73- **设计方案**:技术思路、关键模块设计、上下游组件关系74- **设计方案**:技术思路、关键模块设计、上下游组件关系
@@ -78,6 +79,7 @@ pytorch
78如果您发现 Bug 或文档问题,我们真诚欢迎您的反馈和修复建议。79如果您发现 Bug 或文档问题,我们真诚欢迎您的反馈和修复建议。
79 80 
80**Bug Report 格式**81**Bug Report 格式**
82+ 
81- **环境信息**:PyTorch 版本、OS、Python 版本、CANN 版本等83- **环境信息**:PyTorch 版本、OS、Python 版本、CANN 版本等
82- **问题描述**:添加标签以便在问题仪表板上突出显示84- **问题描述**:添加标签以便在问题仪表板上突出显示
83- **复现步骤**:尽可能详细地描述如何重现问题85- **复现步骤**:尽可能详细地描述如何重现问题
@@ -85,6 +87,7 @@ pytorch
85- **给审稿人的特别说明**:如有任何特殊情况87- **给审稿人的特别说明**:如有任何特殊情况
86 88 
87**修复流程**89**修复流程**
90+ 
881. 在 Issue 中找到对应的 Bug 描述911. 在 Issue 中找到对应的 Bug 描述
892. 评论 `/assign` 认领该任务922. 评论 `/assign` 认领该任务
903. 创建分支进行修复933. 创建分支进行修复
@@ -108,16 +111,16 @@ pytorch
108 111 
1092. **克隆到本地**1122. **克隆到本地**
110 113 
111-```bash114+ ```bash
112-git clone https://gitcode.com/<your-username>/pytorch.git115+ git clone https://gitcode.com/<your-username>/pytorch.git
113-cd pytorch116+ cd pytorch
114-```117+ ```
115 118 
1163. **创建开发分支**1193. **创建开发分支**
117 120 
118-```bash121+ ```bash
119-git checkout -b {new_branch_name} origin/master122+ git checkout -b {new_branch_name} origin/master
120-```123+ ```
121 124 
1224. **代码开发**:请遵循 **[代码规范](#代码规范)**1254. **代码开发**:请遵循 **[代码规范](#代码规范)**
123 126 
@@ -165,6 +168,7 @@ git checkout -b {new_branch_name} origin/master
165### 环境搭建与编译168### 环境搭建与编译
166 169 
167**编译构建**170**编译构建**
171+ 
168```bash172```bash
169# 安装依赖并编译173# 安装依赖并编译
170bash ci/build.sh --python=3.10174bash ci/build.sh --python=3.10
@@ -179,10 +183,72 @@ cmake ..
179make -j$(nproc)183make -j$(nproc)
180```184```
181 185 
186+### 编译加速技巧
187+ 
188+#### 使用 Ninja 构建
189+ 
190+默认情况下,CMake 使用 Makefile 生成器。安装 Ninja 构建系统可以显著加快编译速度。
191+ 
192+本项目 `setup.py` 会自动检测系统中是否安装了 Ninja:如果环境变量 `CMAKE_GENERATOR` 设置为 `ninja`,或者 `ninja` 命令在 `PATH` 中可用,将自动使用 Ninja 作为构建系统。
193+ 
194+```bash
195+pip install ninja
196+```
197+ 
198+安装 Ninja 后,编译即可自动生效,无需额外配置。如果之前已经编译过,安装 Ninja 后需要先执行一次清理:
199+ 
200+```bash
201+python setup.py clean
202+```
203+ 
204+#### 使用 Mold 链接器
205+ 
206+在频繁修改单个文件并重新编译的开发循环中,链接时间会占据主导。大多数 Linux 发行版自带的系统链接器(GNU `ld`)速度较慢,使用更快的链接器可以显著改善构建体验。
207+ 
208+本项目的 `CMakeLists.txt` 已内置链接器自动检测逻辑:优先检测 mold 链接器,若存在则自动启用(`-fuse-ld=mold`)。
209+ 
210+```bash
211+sudo apt install mold
212+# 或从源码安装:https://github.com/rui314/mold
213+```
214+ 
215+安装后重新编译即可自动生效。若需确认链接器是否正确启用,可检查编译输出中的链接选项是否包含 `-fuse-ld=mold`
216+ 
217+#### 使用 CCache
218+ 
219+即使依赖跟踪基于文件修改时间,仍有许多场景下文件会被重复编译。使用 ccache 可以有效避免重复编译,节省大量时间。
220+ 
221+本项目的 `CMakeLists.txt` 已内置 ccache 自动检测逻辑,安装 ccache 后即可自动启用。但建议根据自身环境调整 ccache 配置(如缓存目录、缓存大小、压缩等)以获得最佳效果:
222+ 
223+```bash
224+sudo apt install ccache
225+# 或
226+sudo yum install ccache
227+```
228+ 
229+验证 ccache 是否生效:连续执行两次完整编译,第二次应明显快于第一次。如果未生效,可检查 `build/CMakeCache.txt` 中的 `CMAKE_C_COMPILER_LAUNCHER``CMAKE_CXX_COMPILER_LAUNCHER` 变量是否包含 ccache:
230+ 
231+```cmake
232+//C compiler launcher
233+CMAKE_C_COMPILER_LAUNCHER:PATH=/usr/bin/ccache
234+ 
235+//CXX compiler launcher
236+CMAKE_CXX_COMPILER_LAUNCHER:PATH=/usr/bin/ccache
237+```
238+ 
239+#### 仅编译所需目标
240+ 
241+如果只需重新构建 `torch_npu.so`,可以在 build 目录下直接指定目标,避免全量构建:
242+ 
243+```bash
244+cd build && ninja torch_npu
245+```
246+ 
247+如果未安装 Ninja,将 `ninja` 替换为 `make` 即可。
248+ 
182### 本地静态检查249### 本地静态检查
183 250 
184-项目使用 [lintrunner](https://github.com/suo/lintrunner) 进行静态检查,支持在本地运行与 CI 完全一致的检查项,251+项目使用 [lintrunner](https://github.com/suo/lintrunner) 进行静态检查,支持在本地运行与 CI 完全一致的检查项,包括 Python 代码风格(Flake8、Ruff、PYFMT)、C++ 格式(ClangFormat、ClangTidy)、拼写检查(Codespell)等。
185-包括 Python 代码风格(Flake8、Ruff、PYFMT)、C++ 格式(ClangFormat、ClangTidy)、拼写检查(Codespell)等。
186 252 
187#### 安装依赖253#### 安装依赖
188 254 
@@ -217,23 +283,24 @@ git diff --name-only HEAD | xargs lintrunner
217 283 
218> **提示**:`--take` 参数可指定只运行部分检查项,常用项如下:284> **提示**:`--take` 参数可指定只运行部分检查项,常用项如下:
219>285>
220-> | 代码 | 说明 |286+> | 代码 | 说明 |
221-> |------|------|287+> |---------------|----------------------------------------------------------------|
222-> | `FLAKE8` | Python 语法与风格检查 |288+> | `FLAKE8` | Python 语法与风格检查 |
223-> | `RUFF` | Python 快速 lint 与 import 排序 |289+> | `RUFF` | Python 快速 lint 与 import 排序 |
224-> | `PYFMT` | Python 代码格式化(usort + ruff-format) |290+> | `PYFMT` | Python 代码格式化(usort + ruff-format) |
225-> | `CLANGFORMAT` | C++ 代码格式化 |291+> | `CLANGFORMAT` | C++ 代码格式化 |
226-> | `CLANGTIDY` | C++ 静态分析 |292+> | `CLANGTIDY` | C++ 静态分析 |
227-> | `SPACES` | 行尾空格检查 |293+> | `SPACES` | 行尾空格检查 |
228-> | `TABS` | Tab 字符检查 |294+> | `TABS` | Tab 字符检查 |
229-> | `NEWLINE` | 文件末尾换行检查 |295+> | `NEWLINE` | 文件末尾换行检查 |
230-> | `CODESPELL` | 拼写检查, 如果是误报可以将误报词按照字典序添加至 `tools/linter/dictionary.txt` 后再重新检查 |296+> | `CODESPELL` | 拼写检查, 如果是误报可以将误报词按照字典序添加至 `tools/linter/dictionary.txt` 后再重新检查 |
231 297 
232更多执行命令可参照[lintrunner wiki](https://github.com/pytorch/pytorch/wiki/lintrunner)。298更多执行命令可参照[lintrunner wiki](https://github.com/pytorch/pytorch/wiki/lintrunner)。
233 299 
234### PR 合入要求300### PR 合入要求
235 301 
236**合入检查清单**(详细要求参考 [PR 模板](./.gitcode/PULL_REQUEST_TEMPLATE.md)):302**合入检查清单**(详细要求参考 [PR 模板](./.gitcode/PULL_REQUEST_TEMPLATE.md)):
303+ 
237- [ ] 代码编译通过304- [ ] 代码编译通过
238- [ ] 静态检查通过(CppLint、CppCheck 等)305- [ ] 静态检查通过(CppLint、CppCheck 等)
239- [ ] UT 测试用例通过306- [ ] UT 测试用例通过
@@ -246,12 +313,14 @@ git diff --name-only HEAD | xargs lintrunner
246### 功能验证指导313### 功能验证指导
247 314 
248**测试用例位置**315**测试用例位置**
316+ 
249- `test/npu/` - NPU 功能测试317- `test/npu/` - NPU 功能测试
250- `test/nn/` - 网络层测试318- `test/nn/` - 网络层测试
251- `test/distributed/` - 分布式测试319- `test/distributed/` - 分布式测试
252- `test/dynamo/` - 编译器测试320- `test/dynamo/` - 编译器测试
253 321 
254**运行测试**(详细说明参考 [测试文档](./test/README.md)):322**运行测试**(详细说明参考 [测试文档](./test/README.md)):
323+ 
255```bash324```bash
256# 安装测试依赖325# 安装测试依赖
257pip3 install -r test/requirements.txt326pip3 install -r test/requirements.txt
@@ -282,21 +351,76 @@ python ci/access_control_test.py --all
282- **静态检查异常**:请依照提示查找代码中的问题并解决(如代码风格、潜在 Bug 等)351- **静态检查异常**:请依照提示查找代码中的问题并解决(如代码风格、潜在 Bug 等)
283- **UT 测试未通过**:请根据提示查找测试用例不通过项并检查原因352- **UT 测试未通过**:请根据提示查找测试用例不通过项并检查原因
284 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+ 
285## 提交 Pull Request408## 提交 Pull Request
286 409 
2871. **推送代码到远程仓库**4101. **推送代码到远程仓库**
288 411 
289-```bash412+ ```bash
290-git add .413+ git add .
291-git status414+ git status
292-git commit -m "Your commit title"415+ git commit -m "Your commit title"
293-git commit -s --amend # 添加详细描述416+ git commit -s --amend # 添加详细描述
294-git push origin {new_branch_name}417+ git push origin {new_branch_name}
295-```418+ ```
296 419 
2972. **创建 Pull Request**4202. **创建 Pull Request**
298 421 
299在 GitCode 上创建 Pull Request,根据 [PR 模板](./.gitcode/PULL_REQUEST_TEMPLATE.md) 完整填写:422在 GitCode 上创建 Pull Request,根据 [PR 模板](./.gitcode/PULL_REQUEST_TEMPLATE.md) 完整填写:
423+ 
300- 合入来源424- 合入来源
301- 修改方案425- 修改方案
302- 资料变更426- 资料变更