PyTorch 治理 | 机制#
创建日期: 2019年3月11日 | 最后更新日期: 2025年4月16日
摘要#
PyTorch 采用分层的技术治理结构。
一个由 **贡献者** 组成的社区,他们提交 issue、进行 pull request 并为项目做出贡献。
一小群 **模块维护者** 负责驱动 PyTorch 项目的每个模块。
他们由 **核心维护者** 监督,后者负责驱动项目的整体发展方向。
核心维护者中有一位 **首席核心维护者**,他是最终的决策者。
所有维护者都应强烈遵循 PyTorch 的设计理念。
除了维护者之外,社区还被鼓励积极贡献、提交 issue、提出建议、审查 pull request 并积极参与社区。凭借贡献和投资意愿,任何人都可以被接纳为维护者,并获得代码库部分内容的写权限或所有权。
技术治理与业务治理严格分开。将技术治理与业务治理分开,可以确保任何个人或公司都无法通过“金钱购买”来影响项目的技术指导。此外,参与技术治理过程的成员是 **个人**,而非公司。也就是说,没有为特定公司预留的席位,成员资格与个人相关联,而不是与雇佣该个人的公司相关联。
模块维护者#
模块定义为 PyTorch org 中的 GitHub 仓库,或核心仓库 pytorch/pytorch 中的目录。每个模块将拥有自己的维护者团队。维护者团队负责审查和批准提交、改进设计以及更改模块的范围。每个维护者团队可以采纳自己的决策规则和程序(默认以多数票制)。模块维护者有权对其他模块维护者做出的决定提出异议——特别是当这些决定影响到他们时。当出现异议时,模块维护者团队应提供对异议、相关论点和解决方案的合理且公开的解释。在模块维护者无法自行达成一致的特殊情况下,他们将升级到核心维护者进行审查。升级的请求将由核心维护者根据其规则和程序进行解决。
每个维护者团队都应公开其模块的沟通信息(愿景、大致路线图、设计文档、任何异议和异议解决方案),以便贡献者和其他感兴趣的各方了解项目的未来发展方向并参与讨论。
维护者的职责包括
对模块的高优先级 issue 进行分类
对模块的高优先级 pull request 进行分类、审查和合并
支持与模块相关的公共文档
运行公开的开发者会议
核心维护者#
核心维护者应深入了解 PyTorch 的代码库和设计理念。他们的职责包括:
阐述项目连贯的长期愿景
以各方都能接受的方式协商和解决有争议的问题
接收来自 PyTorch 各利益相关者的广泛变更请求,并进行评估/接受(小范围的模块级请求由模块维护者处理)
核心维护者团队作为一个整体,有权否决在模块维护者层面做出的任何决定。核心维护者有权根据自己的判断解决争议。核心维护者应公开阐述其决策过程,并为其决定、否决和争议解决方案提供清晰的理由。
核心维护者是 PyTorch GitHub Org 的管理员,并在 维护者 列表中列出。
首席核心维护者 (BDFL)#
在某些情况下,核心维护者可能无法达成共识。为了做出这些艰难的决定,核心维护者之中会指定一名公开宣布的首席核心维护者,这在开源治理模型中通常被称为 BDFL(Benevolent Dictator for Life,终身仁慈的独裁者)。
首席核心维护者应公开阐述其决策过程,并为其决定提供清晰的理由。首席核心维护者还负责确认或移除核心维护者。
提名、确认和移除维护者#
原则#
模块维护者团队的成员资格是基于 **个人** 的 **功绩**,在他们通过贡献、审查和讨论证明了对该组件的强大专业知识,并与该组件在 PyTorch 整体方向中的定位一致后授予。
要成为维护者团队的成员,个人必须表现出与 PyTorch 整体原则的强大且持续的一致性。
模块维护者或核心维护者没有任期限制。
如果维护者长时间不活跃,可以采用较宽松的标准将其移至“荣誉”状态。每个模块维护者团队可以定义适合该模块的不活跃期限。
成员资格是针对个人的,而非公司。
提名流程#
每个模块都有自己的流程。请联系模块维护者获取更多信息。但是,如果没有明确的流程,您可以通过提交 此表格 向核心维护者提出请求。核心维护者每三个月开会一次。
如果您向核心维护者提交请求,请求中必须包含以下信息:
被提名人在该模块的代码、审查和设计贡献的深度和广度。
关于被提名人与维护者、用户和社区互动的评价(正面和负面)。
来自维护者的总体支持评价。
核心维护者随后评估所有信息,并做出确认或拒绝提名的最终决定。核心维护者的决定必须得到充分的阐述,并且是公开的。
移除流程#
与提名流程类似,社区中的任何人都可以提名某人从模块维护者或核心维护者职位上移除。
个人也可以自我提名移除。
核心维护者(排除有利益冲突的人员)将请求或整理有关以下方面的更多信息:
他们在项目中的活跃度(或不活跃度)。
他们在该领域不断变化的思维方式,导致与项目整体方向冲突。
其他使他们不适合担任维护者的信息,例如违反行为准则的问题,他们在项目范围之外的活动与项目价值观相冲突。
利益冲突:亲属或浪漫关系。
核心维护者随后评估所有信息,并做出确认或拒绝移除的最终决定。核心维护者的决定必须得到充分的阐述,并且是公开的。
提名核心维护者#
任何核心维护者或模块维护者都可以提名某人成为核心维护者。
首席维护者(BDFL)负责评估提名。
首席维护者请求或整理有关候选人成为核心维护者实力的更多信息。
来自其他核心维护者和模块维护者的支持信。
来自 PyTorch 社区内利益相关者的总体支持信。
任何新的、与候选资格相关的信息。
首席维护者评估所有信息,并做出确认或拒绝提名的最终决定,并对其决策理由进行清晰的公开阐述。
移除首席核心维护者和提名新首席核心维护者#
核心维护者中的绝大多数(75%)可以选择移除首席核心维护者。
在首席核心维护者被移除后,或在不可预见的情况下(例如首席核心维护者永久性不可用),核心维护者将通过排序选择投票方法选举新的首席核心维护者。
添加、移除和重新定义模块和项目#
核心维护者共同负责决定在 PyTorch org 中添加、移除和重新定义新模块,无论是作为 PyTorch GitHub org 中的新仓库,还是作为 pytorch/pytorch 仓库中的文件夹。
他们邀请社区成员(包括他们自己)就这些变更提出建议。这些建议是开放的,但需要进行一些基本的工作来提出令人信服的变更理由。以下是此流程的一个示例方法:
采访研究人员/利益相关者,与社区交流,收集 issue;
阅读论文,参加会议,根据经验构建示例管道;
创建“现状”分析——确保此变更的必要性,例如,添加新项目或模块是否值得维护成本;或者移除项目或模块是否会从 PyTorch 中移除过多价值;
创建提案;提案涵盖在批准后对维护、开发和社区的计划。
核心维护者对提案做出最终决定,并公开阐述决策理由。
决策制定#
无争议的变更#
主要工作通过 GitHub 上的 issue 和 pull request 进行。维护者应避免直接将更改推送到 PyTorch 仓库,而应依赖 pull request。由核心维护者或模块维护者批准 pull request,即可将其合并,无需进一步流程。如 维护者 页面和 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。所有出站代码都将根据项目许可证提供。维护者可以例外性地批准使用替代性开放许可证或多个许可证用于入站或出站贡献。
常见问题解答#
问:如果我想拥有(或部分拥有)项目的一部分,例如一个功能领域或领域库,例如 线性代数 **或** 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 获取市场营销支持。