评价此页

PyTorch 治理 | 机制#

创建于:2019 年 3 月 11 日 | 最后更新于:2025 年 11 月 19 日

摘要#

PyTorch 采用分层式的技术治理结构。

  • 一个由贡献者组成的社区,他们提交问题、创建拉取请求并为项目做出贡献。

  • 一小部分模块维护者负责 PyTorch 项目的每个模块。

  • 他们由核心维护者监督,核心维护者推动项目的整体方向。

  • 核心维护者拥有一位首席核心维护者,他是最终的决策者。

所有维护者都应具有对 PyTorch 设计理念的强烈偏好。

除了维护者之外,社区还被鼓励做出贡献、提交问题、提出建议、审查拉取请求并在社区中积极参与。 凭借贡献和投入的意愿,任何人都可以被接受为维护者,并获得代码库部分的代码写入权限或所有权。

技术治理与业务治理严格分离。 将技术与业务治理分离,确保任何人或公司都无法“通过金钱”干预项目的技术指导。 此外,技术治理流程的成员是个人,而不是公司。 也就是说,没有为特定公司保留席位,成员资格与雇佣该人员的公司无关,而是与该人员相关联。

模块维护者#

模块定义为 PyTorch 组织内的 GitHub 仓库,或核心仓库 pytorch/pytorch 中的目录。 每个模块都有自己的维护者组。 维护者组负责审查和批准提交、改进设计以及更改模块的范围。 每个维护者组可以采用自己的规则和程序来做出决策(多数投票为默认选项)。 模块维护者有权对其他模块维护者做出的决定提出异议——特别是如果这影响到他们。 当提出异议时,模块维护者组应提供对异议、相关论点和解决方案的合理且公开的解释。 在模块维护者无法自行达成一致的特殊情况下,他们将升级到核心维护者进行审查。 核心维护者根据他们的规则和程序解决升级问题。

每个维护者组应公开发布其模块的可用通信(愿景、粗略路线图、设计文档、任何争议和争议解决方案),以便贡献者和其他感兴趣方了解项目的未来方向并参与讨论。

维护者的职责包括

  • 对模块的高优先级问题进行分类

  • 对模块的高优先级拉取请求进行分类、审查和合并

  • 支持与模块相关的公共文档

  • 举办公共开发者会议

核心维护者#

核心维护者预计对 PyTorch 代码库和设计理念有深入的了解。 他们的职责包括

  • 阐明项目的一致的长期愿景

  • 以所有相关方都能接受的方式协商和解决有争议的问题

  • 接收来自 PyTorch 利益相关者的广泛变更请求并评估/接受它们(小模块级别的请求由模块维护者处理)

核心维护者作为一个整体有权否决模块维护者级别做出的任何决定。 核心维护者有权根据自己的判断解决争议。 核心维护者应公开阐明他们的决策过程,并为他们的决策、否决和争议解决方案提供明确的理由。

核心维护者是 PyTorch GitHub 组织的管理员,并列在 维护者 中。

首席核心维护者 (BDFL)#

在核心维护者无法达成共识的情况下,可能会出现决策。 为了做出此类困难的决策,核心维护者会在他们之中指定并公开声明一位首席核心维护者,在开源治理模型中也通常被称为 BDFL。

首席核心维护者应公开阐明他们的决策过程,并为他们的决策提供明确的理由。 首席核心维护者还负责确认或移除核心维护者。

提名、确认和移除维护者#

原则#

  • 模块维护者组的成员资格授予给那些通过贡献、审查和讨论证明了对组件的强大专业知识,并且与组件如何适应整体 PyTorch 方向相一致的个人,基于功绩

  • 对于加入维护者组的成员资格,个人必须持续地表现出与整体 PyTorch 原则的强烈一致性。

  • 模块维护者和核心维护者没有任期限制

  • 如果长时间不积极参与,则模块维护者转为“荣誉”状态的标准较低。 每个模块维护者组可以定义适合该模块的非活动期限。

  • 成员资格是针对个人,而不是公司。

提名流程#

  • 每个模块都有自己的流程。 请联系模块维护者以获取更多信息。 但是,如果没有识别出流程,您可以提交此表单向核心维护者提出请求。 核心维护者每三个月开会一次。

  • 如果您向核心维护者提交请求,您的请求中的信息必须包括以下项目

    • 被提名者在模块上的代码、审查和设计贡献的深度和广度

    • 对被提名者与维护者、用户和社区互动的推荐信(正面和负面)

    • 维护者的一般支持推荐信

  • 核心维护者然后评估所有信息并做出最终决定,确认或拒绝提名。 核心维护者的决定必须得到充分的阐述,并且将公开。

移除流程#

  • 与提名流程类似,社区中的任何人都可以提名人员从模块维护者职位或核心维护者职位上被移除。

  • 一个人也可以自荐被移除

  • 核心维护者(排除存在利益冲突的人员)将请求或整理有关以下方面的信息

    • 他们在项目中的活动(或缺乏)

    • 他们对该领域的思维方式的变化,导致与项目的整体方向冲突

    • 其他使他们不适合成为维护者的信息,例如行为准则问题、超出项目范围的活动与项目价值观冲突

    • 利益冲突:亲属或恋爱关系

  • 核心维护者然后评估所有信息并做出最终决定,确认或拒绝移除。 核心维护者的决定必须得到充分的阐述,并且将公开。

提名核心维护者#

  • 任何核心或模块维护者都可以提名人成为核心维护者

  • 首席维护者 (BDFL) 负责评估提名。

  • 首席维护者请求或整理有关候选人成为核心维护者的优势的信息

    • 其他核心和模块维护者的支持信

    • 来自 PyTorch 社区内利益相关者的常规支持信

    • 任何与候选资格相关的新相关信息

  • 首席维护者评估所有信息并做出最终决定,确认或拒绝提名,并清晰地公开阐明其推理。

移除首席核心维护者并提名新的首席核心维护者#

  • 超过 75% 的核心维护者可以选择移除首席核心维护者

  • 在移除首席核心维护者或在不可预见的情况下(例如首席核心维护者永久无法使用),核心维护者将遵循排序选择投票方法来选举新的首席核心维护者。

添加、移除和重新定义模块和项目#

核心维护者共同负责做出关于在 PyTorch 组织中添加、移除和重新定义新模块的决定,作为 PyTorch GitHub 组织中的新仓库,或在 pytorch/pytorch 仓库中的文件夹。

他们邀请社区成员(包括他们自己)提出对此类变更的建议。 建议是开放式的,但应具备一些基本工作,以提出令人信服的变更理由。 以下是对此流程的一个示例方法

  1. 采访研究人员/利益相关者,与社区交谈,收集问题;

  2. 阅读论文,参加会议,根据经验构建示例管道;

  3. 创建世界现状——确保此变更是必要的,例如添加新项目或模块值得维护成本;或者移除项目或模块不会移除太多 PyTorch 的价值;

  4. 创建提案;提案涵盖了提案获得批准后的维护、开发和社区计划。

核心维护者对提案做出最终决定,公开阐明做出决定的理由。

决策制定#

无争议的变更#

主要的开发工作通过 GitHub 上的 issue 和 pull request 进行。维护者应避免直接将更改推送到 PyTorch 仓库,而是依赖 pull request。由核心或模块维护者批准 pull request 允许其无需进一步流程即可合并。核心和模块维护者,如在 Maintainers 页面和 CODEOWNERS 中列出,最终批准这些更改。

通知相关专家关于 issue 或 pull request 非常重要。强烈建议由给定兴趣领域的专家进行审查,尤其是在批准 pull request 时。未能这样做可能会导致相关专家撤销该更改。

有争议的决策流程#

在给定兴趣领域进行重大更改需要打开一个 GitHub issue 进行讨论。这包括

  • 对 PyTorch 框架或库的任何语义或语法更改。

  • 对 Python 或 C++ API 的向后不兼容的更改。

  • 对核心框架或库的添加,包括现有库内的实质性新功能。

  • 删除核心功能或平台支持

核心和模块维护者最终批准这些更改。

通用项目政策#

PyTorch 已建立为 PyTorch a Series of LF Projects, LLC。适用于 PyTorch 及其参与者的政策,包括关于商标使用的指南,位于 https://www.lfprojects.org/policies/

PyTorch 参与者承认所有新贡献的版权将由版权所有者保留为独立的创作作品,并且任何贡献者或版权所有者都不需要将版权转让给项目。除非如下所述,所有代码贡献都必须使用此处提供的 3-Clause-BSD 许可证进行:https://open-source.org.cn/licenses/BSD-3-Clause(“项目许可证”)。所有外发代码将根据项目许可证提供。维护者可以例外地批准对入站或出站贡献使用替代的开源许可证或许可证。

FAQ#

问:如果我想拥有(或部分拥有)项目的某个部分,例如某个功能领域或领域库,例如 线性代数 Torch Vision ,该怎么办? 这绝对是可能的。第一步是开始为现有项目领域做出贡献并支持其健康和成功。除此之外,您可以通过 GitHub issue 提出新功能或更改以改进项目领域。

问:如果我是一家希望在内部使用 PyTorch 进行开发的公司,我可以获得或购买席位来推动项目方向吗? 不,PyTorch 项目严格由维护者项目理念驱动,并明确将技术治理与业务治理分开。但是,如果您想参与赞助和支持,可以通过以下方式参与 PyTorch 基金会 (PTF) 和赞助。您也可以让个人工程师努力成为维护者,但这并非保证,并且是基于功绩的。

问:PyTorch 项目是否支持赠款或支持使用或贡献项目的独立开发人员的方式? 目前没有。但是,我们正在寻找更好的方式来支持 PyTorch 周围的独立开发人员社区。如果您有任何建议或意见,请通过 PyTorch 论坛联系我们讨论。

问:我如何向项目贡献代码? 如果更改相对较小,可以直接在 GitHub 上打开 pull request 以供项目提交者审查和合并。对于较大的更改,请先打开 issue 以提出建议进行讨论。请参阅 PyTorch Contributor Wiki,了解贡献的逐步指南。

问:我能成为项目的提交者吗? 不幸的是,当前向 PyTorch 提交代码的过程涉及与 Facebook 基础设施的交互,而该交互只能由 Facebook 员工触发。但是,我们正在寻找扩展提交者基础到 Facebook 以外的个人的方法,并在存在允许此操作的工具时提供更新。

问:如果我想在会议或其他场合展示 PyTorch 教程,我需要‘官方’成为提交者吗? 不,我们鼓励社区成员随时随地展示他们的工作。请联系 marketing@pytorch.org 以获取营销支持。