• Docs >
  • PyTorch Governance | Mechanics
Shortcuts

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 已被确立为 PyTorch 一系列 LF 项目,LLC。 适用于 PyTorch 及其参与者的政策,包括商标使用指南,位于 https://www.lfprojects.org/policies/

PyTorch参与者承认所有新贡献的版权将由版权持有者保留为独立的著作权作品,并且任何贡献者或版权持有者都不需要将版权转让给项目。除非另有说明,所有对项目的代码贡献必须使用此处提供的3-Clause-BSD许可证进行:https://opensource.org/licenses/BSD-3-Clause(“项目许可证”)。所有对外代码将根据项目许可证提供。维护者可能会在例外基础上批准使用替代的开源许可证或多个许可证用于入站或出站贡献。

常见问题

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

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

问:PyTorch 项目是否支持资助或支持独立开发者使用或贡献于该项目的方式? 目前不支持。不过,我们正在寻找更好地支持围绕 PyTorch 的独立开发者社区的方法。如果您有建议或意见,请在 PyTorch 论坛上联系我们进行讨论。

问:我如何为项目贡献代码? 如果改动相对较小,可以在GitHub上立即提交一个拉取请求,供项目提交者审查和合并。对于较大的改动,请先提交一个问题以提出建议,并在讨论之前进行讨论。请参阅PyTorch贡献者维基以获取贡献指南。

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

Q: 如果我想在会议上或其他场合展示一个PyTorch教程,我需要成为“官方”提交者吗? 不需要,我们鼓励社区成员在任何可能的地方展示他们的工作。请与marketing@pytorch.org联系以获取市场支持。

优云智算