评价此页

PyTorch 治理 | 机制#

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

摘要#

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

  • 一个由 **贡献者** 组成的社区,他们提交 issue、创建 pull request 并为项目做出贡献。

  • 一组少数的 **模块维护者** 负责驱动 PyTorch 项目的每个模块。

  • 他们由 **核心维护者** 监督,核心维护者负责驱动整个项目的方向。

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

所有维护者都应强烈遵循 PyTorch 的设计理念。

除了维护者之外,社区还被鼓励贡献代码、提交 issue、提出建议、审查 pull request 并参与社区活动。通过贡献和投入的意愿,任何人都可以被接纳为维护者,并获得代码库部分内容的写入权限或所有权。

技术治理与商业治理严格分开。技术治理与商业治理的分离确保了任何个人或公司都无法“通过金钱购买”项目技术指导的参与权。此外,技术治理过程中的成员资格是针对 **个人** 的,而不是公司。也就是说,没有为特定公司保留的席位,成员资格与个人而非雇佣该个人的公司相关联。

模块维护者#

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

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

维护者的职责包括:

  • 分类处理模块的高优先级 issue

  • 分类处理、审查和合并模块的高优先级 pull request

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

  • 运行公开开发者会议

核心维护者#

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

  • 为项目阐述一个连贯的长期愿景

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

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

核心维护者作为一个集体,有权否决在模块维护者层面做出的任何决定。核心维护者有权根据自己的判断解决争议。核心维护者应公开阐述其决策过程,并为他们的决定、否决和争议解决方案提供清晰的理由。

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

首席核心维护者 (BDFL)#

在某些情况下,核心维护者可能无法达成共识。为了做出这些困难的决定,核心维护者会从中指定并公开宣布一位首席核心维护者,这在开源治理模型中也通常被称为 BDFL(Benevolent Dictator For Life,仁慈的终身独裁者)。

首席核心维护者应公开阐述其决策过程,并为其决定提供清晰的理由。首席核心维护者还负责确认或罢免核心维护者。

提名、确认和罢免维护者#

原则#

  • 模块维护者小组的成员资格是基于 **个人** 的 **功绩**,在他们通过贡献、审查和讨论证明了对该组件的专业知识,并且与该组件如何融入 PyTorch 整体方向一致后授予。

  • 要成为维护者小组的成员,个人必须展现出与 PyTorch 整体原则的强大且持续的一致性。

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

  • 如果某人长期不活跃,则对其模块维护者身份设置“名誉”状态的标准较低。每个模块维护者小组可以定义适合该模块的不活跃期。

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

提名流程#

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

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

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

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

    • 来自维护者的总体支持推荐信

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

罢免流程#

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

  • 个人也可以自我提名以被罢免。

  • 核心维护者(排除有利益冲突者)将请求或收集有关以下方面的更多信息:

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

    • 他们对该领域不断变化的看法,这与项目的整体方向产生冲突

    • 其他使他们不适合担任维护者的信息,例如违反行为准则的问题、他们在项目范围之外的活动与项目价值观相冲突

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

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

提名核心维护者#

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

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

  • 首席维护者请求或收集有关候选人成为核心维护者优势的更多信息:

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

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

    • 任何新的、符合候选资格的相关信息

  • 首席维护者评估所有信息,并做出最终决定,确认或拒绝提名,并清晰地公开阐述其决策背后的原因。

罢免首席核心维护者并提名新的首席核心维护者#

  • 核心维护者中的绝对多数(75%)可以选择罢免首席核心维护者。

  • 在罢免首席核心维护者后,或在不可预见的情况下(例如首席核心维护者永久不可用),核心维护者将遵循排序选择投票(Ranked-Choice voting)方法选举新的首席核心维护者。

添加、移除和重新范围化模块和项目#

核心维护者共同负责决定在 PyTorch 组织中添加、移除和重新范围化新模块,无论是作为 PyTorch GitHub 组织中的新仓库,还是作为 pytorch/pytorch 仓库中的文件夹。

他们邀请社区成员(包括他们自己)就此类变更提出建议。建议是开放式的,但应有基本的工作基础,以提出有说服力的理由来进行变更。以下是该过程的一个示例方法:

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

  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 已作为 LF Projects, LLC 的一个系列成立。适用于 PyTorch 和 PyTorch 参与者的政策,包括商标使用指南,请访问 https://www.lfprojects.org/policies/

PyTorch 参与者承认,所有新贡献的版权将由版权持有者作为独立的创作作品保留,任何贡献者或版权持有者都无需将其版权分配给项目。除下文所述外,所有对项目的代码贡献必须使用此处提供的 3 条款 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 贡献者 Wiki 以了解贡献的详细说明。

问:我能成为该项目的提交者吗? 不幸的是,当前 PyTorch 的提交流程涉及与 Facebook 基础架构的交互,这只能由 Facebook 员工触发。我们正在探索将提交者基础扩展到 Facebook 以外的个人,并在工具可用时提供更新。

问:如果我想在会议或其他场合展示 PyTorch 教程,可以吗?我需要“正式”成为提交者才能这样做吗? 不,我们鼓励社区成员在任何时间、任何地点展示他们的工作。请联系 marketing@pytorch.org 获取营销支持。