快捷方式

注意

此页面已弃用。请参考 PyTorch Wiki 上的 贡献指南

PyTorch 贡献指南

PyTorch 是一个基于 GPU 加速的 Python 张量计算包,用于使用基于磁带的自动梯度系统构建深度神经网络。

贡献流程

PyTorch 组织由 PyTorch 治理 管理,技术贡献指南可以在 CONTRIBUTING.md 中找到。

PyTorch 的开发过程涉及核心开发团队和社区之间大量的公开讨论。

PyTorch 的运作方式与 GitHub 上大多数开源项目类似。但是,如果您以前从未参与过开源项目,以下是基本流程。

  • 确定您要做什么。 大多数开源贡献来自人们解决自己的问题。但是,如果您不知道要做什么,或者只是想更多地了解该项目,以下是一些寻找合适任务的技巧

    • 查看 问题跟踪器,看看是否有您知道如何解决的问题。其他贡献者确认的问题往往更容易调查。我们还为可能适合新人的问题维护一些标签,例如 bootcamp1hr,尽管这些标签维护得不太好。

    • 加入我们的 开发者讨论 并告诉我们您有兴趣了解 PyTorch。我们很乐意帮助研究人员和合作伙伴快速了解代码库。

  • 确定更改的范围,如果更改很大,请在 GitHub 问题中联系我们以获取设计意见。 大多数拉取请求都很小;在这种情况下,无需告诉我们您要做什么,只需开始动手即可。但如果更改很大,通常最好先通过 提交 RFC 获取一些设计意见。

    • 如果您不知道更改有多大,我们可以帮助您确定!只需在 问题开发者讨论 中发布相关信息即可。

    • 一些功能添加非常标准化;例如,很多人向 PyTorch 添加新的运算符或优化器。在这种情况下,设计讨论主要归结为,“我们想要这个运算符/优化器吗?” 在提出这个论据时,提供其效用的证据,例如在同行评审的论文中使用,或在其他框架中存在,会有一些帮助。

      • 添加最近发布的研究中的运算符/算法 通常不被接受,除非有压倒性的证据表明这项新发表的工作具有突破性的成果,并将最终成为该领域的标准。如果您不确定您的方法属于哪个类别,请先打开一个问题,然后再实现 PR。

    • 核心更改和重构可能难以协调,因为 PyTorch 主分支的开发速度非常快。对于基本或跨领域更改,请务必联系我们;我们通常可以提供有关如何将此类更改分阶段进行,以便更容易审查的指导。

  • 开始编码!

    • 请查看 CONTRIBUTING.md 文件,了解以技术形式使用 PyTorch 的建议。

  • 打开一个 Pull Request。

    • 如果您尚未准备好让 Pull Request 接受审查,请先创建一个草稿 Pull Request - 您之后可以通过点击“准备审查”按钮将其转换为完整的 PR。您也可以在 PR 标题前加上“[WIP]”(“正在进行中”),使其保持草稿状态。我们在进行审查时会忽略草稿 PR。如果您正在进行复杂的更改,最好从草稿开始,因为您需要花时间查看 CI 结果,以确定更改是否成功。

    • 找到适合您的更改的审阅者。我们有一些人会定期查看 PR 队列并尝试审查所有内容,但如果您知道受您的补丁影响的特定子系统的维护者是谁,请随时在 Pull Request 中直接包含他们。您可以了解更多关于可以审查您的代码的 相关人员

  • 对 Pull Request 进行迭代,直到它被接受!

    • 我们会尽力减少审查往返次数,并且只在出现重大问题时才会阻止 PR。对于 Pull Request 中最常见的问题,请查看 常见错误

    • 一旦 Pull Request 被接受并且 CI 通过,您就不需要再做任何事情;我们会为您合并 PR。

入门

提出新功能

新功能建议最好在特定问题上进行讨论。请尽可能多地包含信息,任何伴随数据以及您提出的解决方案。PyTorch 团队和社区会经常审查他们认为可以提供帮助的新问题和评论。如果您对自己的解决方案有信心,请继续实施它。

报告问题

如果您发现问题,请先搜索仓库中已有的问题列表。如果您找不到类似的问题,请创建一个新的问题。提供尽可能多的信息来重现问题行为。此外,请包括任何额外的见解,例如您期望的行为。

实现功能或修复错误

如果您想修复特定问题,最好在该问题上发表评论,说明您的意图。但是,我们不会锁定或分配问题,除非我们之前与开发人员合作过。最好在该问题上开始对话,并讨论您提出的解决方案。PyTorch 团队可以提供指导,为您节省时间。

标记为 first-new-issue、low 或 medium 优先级的问题提供了最佳的切入点,是开始的好地方。

添加教程

pytorch.org 上的大量教程来自社区本身,我们欢迎额外的贡献。要了解有关如何贡献新教程的更多信息,您可以在这里了解更多信息:PyTorch.org 教程贡献指南 on GitHub

改进文档和教程

我们的目标是制作高质量的文档和教程。在极少数情况下,内容包含错别字或错误。如果您发现可以修复的内容,请向我们发送拉取请求以供考虑。

查看文档部分,了解我们的系统如何工作。

参与在线讨论

您可以在PyTorch 讨论论坛上找到针对用户的活跃讨论,以及PyTorch 开发者讨论论坛上针对开发者和维护者的讨论。

提交拉取请求以修复开放问题

您可以查看所有开放问题的列表这里。在问题上发表评论是引起团队注意的好方法。从这里您可以分享您的想法以及您计划如何解决问题。

对于更具挑战性的问题,团队将提供反馈和指导,说明如何最好地解决问题。

如果您无法自己修复问题,发表评论并分享您是否可以重现问题可以帮助团队识别问题区域。

审查开放的拉取请求

感谢您帮助审查和评论拉取请求。我们的团队努力将开放的拉取请求数量控制在可管理的范围内,如果需要,我们会快速回复以获取更多信息,并且我们会合并我们认为有用的 PR。但是,由于高度的兴趣,我们始终欢迎更多人关注拉取请求。

提高代码可读性

提高代码可读性对每个人都有帮助。通常,提交少量涉及少量文件的拉取请求比提交涉及大量文件的单个大型拉取请求更好。在 PyTorch 论坛 这里 或与您的改进相关的 issue 上开始讨论是最好的开始方式。

添加测试用例以使代码库更健壮

欢迎增加测试覆盖率。

推广 PyTorch

您在项目、研究论文、写作、博客或互联网上的 general 讨论中使用 PyTorch 有助于提高 PyTorch 和我们不断壮大的社区的知名度。请联系 marketing@pytorch.org 获取营销支持。

对 issue 进行分类

如果您认为某个 issue 可以从特定的标签或复杂度级别中受益,请在 issue 上发表评论并分享您的意见。如果您认为某个 issue 的分类不正确,请发表评论并让团队知道。

关于开源开发

如果您是第一次为开源项目做出贡献,开发过程的某些方面可能对您来说看起来很奇怪。

  • 无法“认领” issue。 当人们决定着手处理某个 issue 时,他们通常希望“认领”它,以确保当其他人最终处理它时不会出现浪费工作的情况。这在开源中并不太有效,因为有人可能会决定处理某件事,但最终没有时间去做。您可以随意以咨询的方式提供信息,但归根结底,我们将采用运行代码和粗略共识来快速推进。

  • 对新功能的要求很高。 与企业环境不同,在企业环境中,编写代码的人隐式地“拥有”它,并且可以预期在代码的整个生命周期内负责维护它,一旦拉取请求合并到开源项目中,它就会立即成为项目中所有维护者的集体责任。当我们合并代码时,我们是在说我们,维护者,可以审查后续更改并对代码进行 bug 修复。这自然会导致更高的贡献标准。

常见错误避免

  • 你添加了测试吗?(或者如果更改难以测试,你是否描述了如何测试你的更改?)

    • 我们要求测试的原因有几个

      1. 帮助我们判断是否在以后破坏了它

      2. 帮助我们判断补丁是否正确(是的,我们确实审查了它,但正如 Knuth 所说,“注意以下代码,因为我没有运行它,只是证明它正确”)

    • 什么时候可以不添加测试?有时更改无法方便地测试,或者更改非常明显(并且不太可能被破坏),因此不测试它是可以的。相反,如果更改似乎很可能(或已知很可能)被意外破坏,那么花时间制定测试策略非常重要。

  • 你的 PR 太长了吗?

    • 我们更容易审查和合并小的 PR。审查 PR 的难度与其大小呈非线性关系。

    • 什么时候可以提交大型 PR?如果在问题中有一个相应的讨论设计,并且得到了将要审查你的差异的人员的认可,这将非常有帮助。我们还可以提供有关如何将大型更改拆分为可单独交付的部分的建议。同样,如果对 PR 的内容有完整的描述,这也有帮助:如果我们知道里面是什么,审查代码会更容易!

  • 对细微事项的评论?在你的代码行为很微妙的情况下,请添加额外的注释和文档,以便我们更好地理解你的代码的意图。

  • 你添加了黑客吗?有时,正确的答案是黑客。但通常,我们必须讨论它。

  • 你想触碰一个非常核心的组件吗?为了防止重大回归,触碰核心组件的拉取请求会受到额外的审查。在进行重大更改之前,请确保你已与团队讨论了你的更改。

  • 想添加新功能吗?如果你想添加新功能,请在相关问题中评论你的意图。我们的团队会尝试对社区进行评论和提供反馈。在构建新功能之前,最好与团队和社区的其他成员进行公开讨论。这有助于我们了解你正在做什么,并增加它被合并的机会。

  • 你触碰了与 PR 无关的代码吗?为了帮助代码审查,请仅在你的拉取请求中包含与你的更改直接相关的文件。

常见问题解答

  • 我如何作为审阅者做出贡献?如果社区开发人员重现问题、尝试新功能或以其他方式帮助我们识别或排除故障,那么他们将具有很大的价值。在任务或拉取请求中评论你的环境详细信息很有帮助,我们也对此表示感谢。

  • CI 测试失败,这意味着什么?也许你的 PR 是基于一个损坏的主分支?你可以尝试将你的更改重新定位到最新的主分支之上。你也可以在 https://hud.pytorch.org/ 查看主分支的 CI 的当前状态。

  • 哪些改动风险最高? 任何涉及构建配置的改动都是风险区域。请避免进行此类改动,除非你事先与团队进行了讨论。

  • 嘿,我的分支上出现了一个提交,怎么回事? 有时,其他社区成员会为你的拉取请求或分支提供补丁或修复。这通常是让 CI 测试通过所必需的。

关于文档

Python 文档

PyTorch 文档使用 Sphinx 从 Python 源代码生成。生成的 HTML 被复制到 pytorch.github.io 主分支的 docs 文件夹中,并通过 GitHub Pages 提供服务。

C++ 文档

对于 C++ 代码,我们使用 Doxygen 生成内容文件。C++ 文档在专用服务器上构建,生成的文文件被复制到 https://github.com/pytorch/cppdocs 仓库,并通过 GitHub Pages 提供服务。

教程

PyTorch 教程是用于帮助理解如何使用 PyTorch 完成特定任务或理解更完整概念的文档。教程使用 Sphinx-Gallery 从可执行 Python 源文件或重构文本 (rst) 文件构建。

教程构建概述

对于教程,pull requests 会触发使用 CircleCI 重新构建整个网站,以测试更改的影响。此构建被分成 9 个工作构建,总共需要大约 40 分钟。同时,我们使用 make html-noplot 进行 Netlify 构建,该构建在不将笔记本输出渲染到页面以供快速查看的情况下构建网站。

PR 被接受后,网站将使用 GitHub Actions 重新构建并部署。

贡献新教程

请参阅 PyTorch.org 教程贡献指南

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源