• 文档 >
  • PyTorch 治理 | 机制
快捷方式

PyTorch 治理 | 机制

概述

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 上的议题和拉取请求进行。维护者应避免将其更改直接推送到 PyTorch 仓库,而应依靠拉取请求。核心或模块维护者批准拉取请求后,无需进一步流程即可合并。列在维护者页面和CODEOWNERS中的核心和模块维护者最终批准这些更改。

通知相关专家关于议题或拉取请求是很重要的。强烈推荐相关领域的专家进行审查,尤其是在批准拉取请求时。否则,相关专家可能会撤销该更改。

有争议决策流程

在特定领域进行的重大更改需要开启一个 GitHub 议题进行讨论。这包括

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

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

  • 对核心框架或库的添加,包括在现有库中添加大量新功能。

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

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

通用项目政策

PyTorch 已作为 LF Projects, LLC 的 PyTorch 系列项目成立。适用于 PyTorch 和 PyTorch 参与者的政策,包括商标使用指南,请参见 https://www.lfprojects.org/policies/

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

常见问题解答

问:如果我想拥有(或部分拥有)项目的一部分,例如某个功能领域或领域库,例如线性代数Torch Vision 这完全可能。第一步是开始为现有项目领域做出贡献,并支持其健康发展和成功。除此之外,您还可以通过 GitHub 议题提出新功能或改进项目领域的提案。

问:如果我是一家希望在内部使用 PyTorch 进行开发的公司,能否获得或购买董事会席位来驱动项目方向? 不能,PyTorch 项目严格遵循维护者项目理念,并明确将技术治理与商业治理分开。但是,如果您想参与赞助和支持,可以通过 PyTorch 基金会 (PTF) 参与其中并进行赞助。您也可以让个人工程师争取成为维护者,但这不能保证,并且是基于贡献的。

问:PyTorch 项目是否支持赠款或以其他方式支持使用或贡献项目的独立开发者? 目前不支持。但我们正在研究如何更好地支持 PyTorch 周围的独立开发者社区。如果您有建议或意见,请在 PyTorch 论坛上提出讨论。

问:如何向项目贡献代码? 如果改动相对较小,可以直接在 GitHub 上开启一个拉取请求,由项目提交者审查和合并。对于较大的改动,请先开启一个议题提出提案进行讨论。此外,请参阅 PyTorch 贡献者 Wiki 获取贡献流程指南。

问:我能成为项目的提交者吗? 遗憾的是,当前向 PyTorch 提交代码的过程涉及到与 Facebook 基础设施的交互,只能由 Facebook 员工触发。但我们正在研究如何将提交者群体扩大到非 Facebook 员工,并在相关工具到位后提供更新。

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

文档

查阅 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

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

查看资源