• 文档 >
  • 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 条款 BSD 许可证:https://opensource.org/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 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源