PyTorch 治理 | 机制¶
概述¶
PyTorch 采用分层的技术治理结构。
由提交问题、提出拉取请求和为项目做出贡献的贡献者社区。
一小部分模块维护者负责推动 PyTorch 项目的每个模块。
他们由核心维护者监督,核心维护者负责推动项目的整体方向。
核心维护者有一名首席核心维护者,他是所有决策的最终制定者。
所有维护者都应高度重视 PyTorch 的设计理念。
除了维护者之外,我们鼓励社区贡献、提交问题、提出建议、审查拉取请求并积极参与社区活动。只要愿意做出贡献和投入,任何人都可以被接纳为维护者,并获得对代码库部分内容的写入权限或所有权。
技术治理与业务治理严格分开。将技术治理与业务治理分开可确保任何个人或公司都无法“花钱买通”项目的 técnical 指导。此外,技术治理流程中的成员资格是针对个人的,而不是公司。也就是说,没有为特定公司保留席位,成员资格与个人相关联,而不是与雇用该个人的公司相关联。
模块维护者¶
模块定义为 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 条款 BSD 许可证:https://open-source.org.cn/licenses/BSD-3-Clause(“项目许可证”)。所有出站代码都将根据项目许可证提供。维护者可以根据例外情况批准对入站或出站贡献使用其他开源许可证。
常见问题解答¶
**问:如果我想拥有(或部分拥有)项目的一部分,例如功能区或域库,例如** 线性代数 **或** Torch Vision **,该怎么办?** 这绝对是可能的。第一步是开始为现有项目领域做出贡献,并支持其健康和成功。除此之外,您还可以通过 GitHub 问题提出新功能或改进项目领域的更改建议。
**问:如果我是一家希望在内部使用 PyTorch 进行开发的公司,我可以获得或购买董事会席位来推动项目方向吗?** 不,PyTorch 项目严格遵循维护者项目理念,并将技术治理与业务治理明确分开。但是,如果您想参与赞助和支持,您可以通过此方式参与 PyTorch 基金会 (PTF) 和赞助。您也可以让个别工程师寻求成为维护者,但这并不能保证,并且是基于功绩的。
**问:PyTorch 项目是否支持向使用或贡献该项目的独立开发者提供资助或其他支持方式?** 不,目前还没有。但是,我们正在寻找更好地支持 PyTorch 周围独立开发者社区的方法。如果您有任何建议或意见,请在 PyTorch 论坛上联系我们进行讨论。
**问:如何向项目贡献代码?** 如果更改相对较小,则可以立即在 GitHub 上打开拉取请求,以供项目提交者审查和合并。对于较大的更改,请先打开一个问题以提出建议进行讨论。另请参阅PyTorch 贡献者维基,了解贡献的演练。
**问:我可以成为项目的提交者吗?** 不幸的是,PyTorch 当前的提交流程涉及与 Facebook 基础架构的交互,而只有 Facebook 员工才能触发该交互。但是,我们正在寻找将提交者基础扩展到 Facebook 以外个人的方法,并在工具可用时提供更新以允许这样做。
**问:如果我想在会议或其他场合提供 PyTorch 教程,该怎么办?我需要“正式”成为一名提交者才能这样做吗?** 不,我们鼓励社区成员随时随地展示他们的工作。请联系marketing@pytorch.org 以获取营销支持。