目录

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(“项目许可证”)。 所有外发代码都将根据项目许可证提供。 维护人员可以例外批准在传入或传出贡献中使用替代开源许可证或多个许可证。

FAQ

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

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

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

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

Q: 我能成为项目中的提交者吗? 很遗憾,当前向PyTorch提交代码的过程涉及与Facebook基础设施的交互,只有Facebook员工才能触发。然而,我们正在寻找方法来扩展提交者基础,以包括Facebook以外的个人,并将在工具允许时提供更新。

问:如果我想在会议上或以其他方式提供PyTorch教程,我需要成为“正式”的提交者吗? 不需要,我们鼓励社区成员在任何时间和地点展示他们的工作。请联系我们以获取市场营销支持:marketing@pytorch.org

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

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

查看教程

资源

查找开发资源并解答您的问题

查看资源