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