mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
By adding `__` to the end of the link decorator according to https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html#links-to-external-web-pages Fixes regression introduced by https://github.com/pytorch/pytorch/pull/106863 Pull Request resolved: https://github.com/pytorch/pytorch/pull/110171 Approved by: https://github.com/seemethere, https://github.com/msaroufim, https://github.com/atalman
332 lines
15 KiB
ReStructuredText
332 lines
15 KiB
ReStructuredText
PyTorch Governance | Mechanics
|
||
==============================
|
||
|
||
Summary
|
||
-------
|
||
|
||
PyTorch adopts a technical governance structure that is hierarchical.
|
||
|
||
* A community of **contributors** who file issues, make pull requests,
|
||
and contribute to the project.
|
||
* A small set of **module maintainers** drive each module of the PyTorch
|
||
project.
|
||
* They are overseen by **core maintainers**, who drive the
|
||
overall project direction.
|
||
* The core maintainers have a **lead core maintainer**
|
||
who is the catch-all decision maker.
|
||
|
||
All maintainers are expected to have a strong bias towards
|
||
PyTorch’s design philosophy.
|
||
|
||
Beyond the maintainers, the community is encouraged to contribute,
|
||
file issues, make proposals, review pull requests and be present
|
||
in the community. Given contributions and willingness to invest,
|
||
anyone can be accepted as a maintainer and provided write access
|
||
or ownership of parts of the codebase.
|
||
|
||
Technical governance is strictly separated from business governance.
|
||
Separating technical from business governance ensures that there is
|
||
no way for any person or company to “buy their way into” the
|
||
technical guidance of the project. Additionally, membership in
|
||
the technical governance process is for **individuals**, not companies.
|
||
That is, there are no seats reserved for specific companies, and
|
||
membership is associated with the person rather than the company
|
||
employing that person.
|
||
|
||
Module Maintainers
|
||
------------------
|
||
|
||
Modules are defined as GitHub repositories within the PyTorch org,
|
||
or as directories within the core repository
|
||
`pytorch/pytorch <https://github.com/pytorch/pytorch>`__.
|
||
Each module will have its own maintainer group. Maintainer
|
||
groups are responsible for reviewing and approving commits,
|
||
improving design, and changing the scope of the module.
|
||
Each maintainer group may adopt its own rules and procedures
|
||
for making decisions (majority vote being default). Module
|
||
maintainers have the right to dispute decisions made by other
|
||
module maintainers -- especially if it affects them. When
|
||
disputes are made, the module maintainer group should
|
||
provide a reasonable and public explanation of the dispute,
|
||
the relevant arguments, and the resolution. In the exceptional
|
||
cases where module maintainers cannot come to a conclusion
|
||
themselves, they will escalate to core maintainers for review.
|
||
The escalations are resolved by the core maintainers in
|
||
accordance with their rules and procedures.
|
||
|
||
Each maintainer group should publish publicly available
|
||
communication for their module (a vision, rough roadmap,
|
||
design docs, any disputes and dispute resolutions) so that
|
||
contributors and other interested parties understand the
|
||
future direction of the project and can participate in discussion.
|
||
|
||
Responsibilities of the maintainer includes:
|
||
|
||
* Triaging high priority issues of the module
|
||
* Triaging and reviewing and landing high priority pull requests of the module
|
||
* Supporting public documentation related to the module
|
||
* Running public developer meetings
|
||
|
||
Core Maintainers
|
||
----------------
|
||
|
||
The core maintainers are expected to have a deep understanding
|
||
of the PyTorch code base and design philosophies. Their responsibilities
|
||
include:
|
||
|
||
* Articulating a cohesive long-term vision for the project
|
||
* Negotiating and resolving contentious issues in ways
|
||
acceptable to all parties involved
|
||
* Receiving broad requests for changes from stakeholders of
|
||
PyTorch and evaluating / accepting them (small module-level
|
||
requests are handled by module maintainers)
|
||
|
||
The core maintainers as a group have the power to veto any
|
||
decision made at a Module maintainer level. The core
|
||
maintainers have power to resolve disputes as they see fit.
|
||
The core maintainers should publicly articulate their
|
||
decision-making, and give a clear reasoning for their
|
||
decisions, vetoes and dispute resolution.
|
||
|
||
The core maintainers are admins of the PyTorch GitHub Org
|
||
and are listed in `Maintainers <https://pytorch.org/docs/stable/community/persons_of_interest.html>`__.
|
||
|
||
Lead Core Maintainer (BDFL)
|
||
---------------------------
|
||
|
||
There may be decisions in which the core maintainers cannot
|
||
come to a consensus. To make such difficult decisions, the
|
||
core maintainers have an assigned and publicly declared Lead
|
||
Core Maintainer amongst them, also commonly known in open-source
|
||
governance models as a BDFL.
|
||
|
||
The Lead Core Maintainer should publicly articulate their
|
||
decision-making, and give a clear reasoning for their
|
||
decisions. The Lead Core Maintainer is also responsible for
|
||
confirming or removing core maintainers.
|
||
|
||
Nominating, Confirming and Removing Maintainers
|
||
-----------------------------------------------
|
||
|
||
The Principles
|
||
~~~~~~~~~~~~~~
|
||
|
||
* Membership in module maintainer groups is given to **individuals**
|
||
on **merit basis** after they demonstrated strong expertise of the
|
||
component through contributions, reviews and discussions and are
|
||
aligned with how the component fits in overall PyTorch direction.
|
||
* For membership in the maintainer group the individual has to
|
||
demonstrate strong and continued alignment with the overall
|
||
PyTorch principles.
|
||
* No term limits for module maintainers or core maintainers
|
||
* Light criteria of moving module maintenance to ‘emeritus’
|
||
status if they don’t actively participate over long periods
|
||
of time. Each module maintainer group may define the inactive
|
||
period that’s appropriate for that module.
|
||
* The membership is for an individual, not a company.
|
||
|
||
The Process for Nomination
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
* Each module has its own process. Please contact module maintainers for more information.
|
||
However, if there is no process identified, you can file a request to the core
|
||
maintainers by submitting `this form <https://share.hsforms.com/1fh3SpHFMR2ihEBQ2orgN8A4tvhy>`__.
|
||
Core maintainers are meeting every three months.
|
||
* If you are submitting a request to the core maintainers, the information in your request
|
||
must include the following items:
|
||
|
||
* The nominees depth and breadth of code, review and design
|
||
contributions on the module
|
||
* Testimonials (positive and negative) of the nominee’s interactions
|
||
with the maintainers, users, and the community
|
||
* General testimonials of support from the maintainers
|
||
|
||
* The core maintainers then evaluate all information and make
|
||
a final decision to Confirm or Decline the nomination. The
|
||
decision of the core maintainers has to be articulated well
|
||
and would be public.
|
||
|
||
The Process for Removal
|
||
~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
* Similar to the process for nomination, anyone in the community
|
||
can nominate a person to be removed from a Module maintainer
|
||
position or a Core maintainer position.
|
||
* A person can also self-nominate to be removed
|
||
* The core maintainers (excluding persons with conflict of
|
||
interest) will request or put together more information around
|
||
the following:
|
||
|
||
* Their activity (or lack of) on the project
|
||
* Their changing thinking of the space, which results in
|
||
conflict with the overall direction of the project
|
||
* Other information that makes them unfit to be a maintainer,
|
||
such as Code of Conduct issues, their activity outside the
|
||
scope of the project that conflicts with the project’s values
|
||
* **Conflicts of interest**: filial or romantic relationships
|
||
|
||
* The core maintainers then evaluate all information and make
|
||
a final decision to Confirm or Decline the removal. The decision
|
||
of the core maintainers has to be articulated well and would be
|
||
public.
|
||
|
||
Nominating Core Maintainers
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
* Any core or module maintainer can nominate someone to become a
|
||
core maintainer
|
||
* The lead maintainer (BDFL) is responsible for evaluating the
|
||
nomination.
|
||
* The lead maintainer requests or puts together more information
|
||
around the strength of the candidate to be a core maintainer:
|
||
|
||
* Letters of support from other core and module maintainers
|
||
* General letters of support from stakeholders within the PyTorch
|
||
community
|
||
* Any new relevant information that is befitting for the candidacy
|
||
|
||
* The lead maintainer evaluates all information and makes a final
|
||
decision to Confirm or Decline the nomination, with a clear public
|
||
articulation of their reasoning behind the decision.
|
||
|
||
Removing the Lead Core Maintainer and Nominating a New Lead Core Maintainer
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
* A super-majority of core maintainers (75%) can choose to
|
||
remove the Lead Core Maintainer
|
||
* After a removal of the Lead Core Maintainer or in unforeseen
|
||
circumstances (such as permanent unavailability of the Lead Core
|
||
Maintainer), the core maintainers follow a Ranked-Choice voting
|
||
method to elect a new Lead Core Maintainer.
|
||
|
||
Add, Remove, and Re-Scope Modules and Projects
|
||
----------------------------------------------
|
||
|
||
The core maintainers together are responsible for taking
|
||
decisions on adding, removing and re-scoping new modules
|
||
in the PyTorch org, either as new repositories in the
|
||
PyTorch GitHub org, or as folders in the
|
||
`pytorch/pytorch <https://github.com/pytorch/pytorch>`__
|
||
repository.
|
||
|
||
They invite proposals from members in the community
|
||
(including themselves) for such changes.
|
||
The proposals are open-ended, but should have some basic
|
||
ground-work to make a convincing case to make change. The
|
||
following is an example approach to this process:
|
||
|
||
#. Interview researchers / stakeholders, talk to community, gather issues;
|
||
#. Read papers, attend conferences, build example pipelines based on experience;
|
||
#. Create a state of the world - make sure this change is necessary,
|
||
for example adding a new project or module is worth the maintenance
|
||
cost; or removing a project or module will not remove too much value
|
||
from PyTorch;
|
||
#. Create a proposal; the proposal covers the maintainership, development
|
||
and community plan once the proposal is approved.
|
||
|
||
The core maintainers take final decisions on the proposal, articulating
|
||
the reasoning behind the decision publicly.
|
||
|
||
|
||
Decision Making
|
||
---------------
|
||
|
||
Uncontroversial Changes
|
||
~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Primary work happens through issues and pull requests on
|
||
GitHub. Maintainers should avoid pushing their changes directly to
|
||
the PyTorch repository, instead relying on pull requests. Approving a
|
||
pull request by a core or module maintainer allows it to be merged
|
||
without further process. Core and module maintainers, as listed on
|
||
the `Maintainers <https://pytorch.org/docs/stable/community/persons_of_interest.html>`__
|
||
page and within `CODEOWNERS <https://github.com/pytorch/pytorch/blob/master/CODEOWNERS>`__
|
||
ultimately approve these changes.
|
||
|
||
Notifying relevant experts about an issue or a pull request
|
||
is important. Reviews from experts in the given interest area are
|
||
strongly preferred, especially on pull request approvals. Failure to do
|
||
so might end up with the change being reverted by the relevant expert.
|
||
|
||
Controversial Decision Process
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Substantial changes in a given interest area require a GitHub issue to
|
||
be opened for discussion. This includes:
|
||
|
||
- Any semantic or syntactic change to the PyTorch framework or library.
|
||
- Backwards-incompatible changes to the Python or C++ API.
|
||
- Additions to the core framework or library, including substantial new
|
||
functionality within an existing library.
|
||
- Removal of core features or platform support
|
||
|
||
Core and module maintainers ultimately approve these changes.
|
||
|
||
General Project Policies
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
PyTorch has been established as PyTorch a Series of LF Projects, LLC.
|
||
Policies applicable to PyTorch and participants in PyTorch, including
|
||
guidelines on the usage of trademarks, are located at https://www.lfprojects.org/policies/.
|
||
|
||
PyTorch participants acknowledge that the copyright in all new contributions
|
||
will be retained by the copyright holder as independent works of authorship
|
||
and that no contributor or copyright holder will be required to assign copyrights
|
||
to the project. Except as described below, all code contributions to the project
|
||
must be made using the 3-Clause-BSD License available here:
|
||
https://opensource.org/licenses/BSD-3-Clause (the “Project License”).
|
||
All outbound code will be made available under the Project License.
|
||
The Maintainers may approve the use of an alternative open license or
|
||
licenses for inbound or outbound contributions on an exception basis.
|
||
|
||
FAQ
|
||
---
|
||
|
||
**Q: What if I would like to own (or partly own) a part of the project
|
||
such as a feature area or domain library, for example** `Linear Algebra <https://github.com/pytorch/pytorch/tree/master/torch/linalg>`__
|
||
**or** `Torch Vision <https://github.com/pytorch/vision>`__ **?**
|
||
This is absolutely possible.
|
||
The first step is to start contributing to the existing project area and
|
||
supporting its health and success. In addition to this, you can
|
||
make a proposal through a GitHub issue for new functionality or changes
|
||
to improve the project area.
|
||
|
||
**Q: What if I am a company looking to use PyTorch internally for
|
||
development, can I be granted or purchase a board seat to drive the
|
||
project direction?** No, the PyTorch project is strictly driven by the
|
||
a maintainer project philosophy and clearly separates technical
|
||
governance from business governance. However, if you want to be
|
||
involved in sponsorship and support, you can become involved in the
|
||
PyTorch Foundation (PTF) and sponsorship through this. You can also
|
||
have individual engineers look to become maintainers, but this is
|
||
not guaranteed and is merit-based.
|
||
|
||
**Q: Does the PyTorch project support grants or ways to support
|
||
independent developers using or contributing to the project?** No, not
|
||
at this point. We are however looking at ways to better support the
|
||
community of independent developers around PyTorch. If you have
|
||
suggestions or inputs, please reach out on the PyTorch forums to
|
||
discuss.
|
||
|
||
**Q: How do I contribute code to the project?** If the change is
|
||
relatively minor, a pull request on GitHub can be opened up immediately
|
||
for review and merge by the project committers. For larger changes,
|
||
please open an issue to make a proposal to discuss prior. Please also
|
||
see the `PyTorch Contributor
|
||
Wiki <https://github.com/pytorch/pytorch/wiki/The-Ultimate-Guide-to-PyTorch-Contributions>`__ for contribution
|
||
for a walkthrough.
|
||
|
||
**Q: Can I become a committer on the project?** Unfortunately, the
|
||
current commit process to PyTorch involves an interaction with Facebook
|
||
infrastructure that can only be triggered by Facebook employees. We are
|
||
however looking at ways to expand the committer base to individuals
|
||
outside of Facebook and will provide an update when the tooling exists
|
||
to allow this.
|
||
|
||
**Q: What if I would like to deliver a PyTorch tutorial at a conference
|
||
or otherwise? Do I need to be 'officially' a committer to do this?** No,
|
||
we encourage community members to showcase their work wherever and
|
||
whenever they can. Please reach out to
|
||
`marketing@pytorch.org <mailto:marketing@pytorch.org>`__
|
||
for marketing support.
|