PyTorch 治理 | 机制¶
总结¶
PyTorch 采用分层式的技术治理结构。
一个由**贡献者**组成的社区,他们提交问题、创建拉取请求并为项目做出贡献。
一小部分**模块维护者**负责 PyTorch 项目的每个模块。
他们由**核心维护者**监督,后者负责项目的整体方向。
核心维护者有一个**首席核心维护者**,他是最终的决策者。
所有维护者都应强烈认同 PyTorch 的设计理念。
除了维护者之外,社区鼓励大家积极贡献、提交问题、提出建议、审查拉取请求并参与社区活动。只要积极贡献并愿意投入,任何人都可以被接受为维护者,并获得代码库的写入权限或所有权。
技术治理与业务治理严格分离。将技术治理与业务治理分离,确保任何个人或公司都无法“买通”项目的技术指导。此外,技术治理流程的成员资格是针对**个人**的,而不是针对公司的。也就是说,没有为特定公司保留的席位,成员资格与个人相关联,而不是与雇用该个人的公司相关联。
模块维护者¶
模块定义为 PyTorch 组织内的 GitHub 仓库,或核心仓库 pytorch/pytorch 内的目录。每个模块都有自己的维护者组。维护者组负责审查和批准提交、改进设计以及更改模块的范围。每个维护者组可以采用自己的规则和程序来做出决策(多数票为默认值)。模块维护者有权对其他模块维护者做出的决策提出异议,尤其是当这些决策影响到他们时。当提出异议时,模块维护者组应提供对异议、相关论点和解决方案的合理且公开的解释。在模块维护者无法自行达成一致的特殊情况下,他们将升级到核心维护者进行审查。核心维护者根据其规则和程序解决升级问题。
每个维护者小组都应该发布其模块的公开可用通信(愿景、粗略路线图、设计文档、任何争议和争议解决),以便贡献者和其他利益相关者了解项目的未来方向,并能够参与讨论。
维护者的职责包括
对模块的高优先级问题进行分类
对模块的高优先级拉取请求进行分类、审查和合并
支持与模块相关的公共文档
举办公开的开发者会议
核心维护者¶
核心维护者应深入了解 PyTorch 代码库和设计理念。他们的职责包括
阐明项目的连贯的长期愿景
以所有相关方都认可的方式协商和解决有争议的问题
接收来自 PyTorch 利益相关者的广泛变更请求,并对其进行评估/接受(小型模块级请求由模块维护者处理)
核心维护者作为一个整体有权否决在模块维护者级别做出的任何决定。核心维护者有权根据自己的判断解决争议。核心维护者应公开阐明其决策过程,并对其决策、否决和争议解决提供明确的理由。
核心维护者是 PyTorch GitHub 组织的管理员,并在 维护者 中列出。
首席核心维护者 (BDFL)¶
在某些情况下,核心维护者可能无法达成共识。为了做出这些艰难的决定,核心维护者在其内部指定并公开宣布了一位首席核心维护者,在开源治理模型中通常被称为 BDFL。
首席核心维护者应公开阐明其决策过程,并对其决策提供明确的理由。首席核心维护者还负责确认或移除核心维护者。
提名、确认和移除维护者¶
原则¶
模块维护者组的成员资格授予**个人**,基于**贡献**,在他们通过贡献、审查和讨论证明了对组件的强大专业知识,并且与组件在 PyTorch 整体方向中的定位一致后,**根据贡献**。
要成为维护者组的成员,个人必须证明与 PyTorch 的整体原则保持强劲且持续的一致性。
模块维护者或核心维护者没有任期限制。
如果长期不积极参与,将模块维护者移至“荣誉”状态的标准很轻。 每个模块维护者组可以定义适合该模块的非活动期。
成员资格属于个人,而不是公司。
提名流程¶
每个模块都有自己的流程。 请联系模块维护者以获取更多信息。 但是,如果未确定流程,您可以通过提交此表格向核心维护者提出请求。 核心维护者每三个月开会一次。
如果您向核心维护者提交请求,您的请求中的信息必须包含以下内容:
被提名人对模块的代码、审查和设计贡献的深度和广度。
被提名人与维护者、用户和社区互动方面的证明(正面和负面)。
维护者的一般支持证明。
然后,核心维护者评估所有信息,并做出最终决定,确认或拒绝提名。 核心维护者的决定必须表达清楚,并且将公开。
移除流程¶
与提名流程类似,社区中的任何人都可以提名将某人从模块维护者职位或核心维护者职位中移除。
一个人也可以自我提名移除。
核心维护者(不包括存在利益冲突的人员)将要求或收集有关以下方面的更多信息:
他们在项目中的活动(或缺乏活动)。
他们对该领域的看法改变,导致与项目的总体方向发生冲突。
其他使他们不适合担任维护者的信息,例如行为准则问题、他们在项目范围之外的活动与项目的价值观冲突。
**利益冲突**:父子或恋爱关系。
然后,核心维护者评估所有信息,并做出最终决定,确认或拒绝移除。 核心维护者的决定必须表达清楚,并且将公开。
提名核心维护者¶
任何核心或模块维护者都可以提名某人成为核心维护者。
首席维护者 (BDFL) 负责评估提名。
首席维护者会要求或收集更多信息,以了解候选人成为核心维护者的实力。
来自其他核心和模块维护者的支持信。
来自 PyTorch 社区利益相关者的通用支持信。
任何适合候选资格的新的相关信息。
首席维护者评估所有信息,并做出最终决定,确认或拒绝提名,并清楚地公开说明其做出决定的理由。
移除首席核心维护者并提名新的首席核心维护者¶
大多数核心维护者 (75%) 可以选择移除首席核心维护者。
在移除首席核心维护者之后,或在不可预见的情况下(例如首席核心维护者永久无法使用),核心维护者将遵循排名选择投票方法来选举新的首席核心维护者。
添加、移除和重新定义模块和项目¶
核心维护者共同负责决定在 PyTorch 组织中添加、移除和重新定义新模块,无论是作为 PyTorch GitHub 组织中的新存储库,还是作为 pytorch/pytorch 存储库中的文件夹。
他们邀请社区成员(包括他们自己)提出此类更改的建议。这些建议是开放式的,但应该有一些基本的基础工作来提出令人信服的理由来进行更改。以下是一个示例方法:
采访研究人员/利益相关者,与社区交流,收集问题;
阅读论文,参加会议,根据经验构建示例管道;
创建世界现状 - 确保此更改是必要的,例如添加新项目或模块值得维护成本;或者移除项目或模块不会从 PyTorch 中移除太多价值;
创建提案;提案涵盖提案获批后的维护、开发和社区计划。
核心维护者对提案做出最终决定,并公开说明做出决定的理由。
决策¶
无争议的更改¶
主要工作通过 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 获取营销支持。