Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix FSDP gradient calculation with orig params #9335

Merged
merged 1 commit into from
May 30, 2024

Conversation

janEbert
Copy link
Contributor

@janEbert janEbert commented May 29, 2024

As observed by some users in #8487, FSDP causes differences in loss. This is because gradients are not correctly calculated when fsdp_use_orig_params=True. Currently, any non-FlatParameter is treated as being unsharded, when in reality they may be sharded when use_orig_params=True. This leads to a double reduction of sharded gradients. We thus simply adjust the parameters that are reduced manually. This requires use of a private variable in the FSDP module. Alternatively, the value of self.kwargs['ignored_states'] in nlp_overrides.py could be set as an attribute on the model to avoid this private variable access.

Thanks to @ofivite for suggesting that use_orig_params=True could be the cause of the issue, which greatly helped with analysis.

What does this PR do ?

Fix FSDP gradient calculation when fsdp_use_orig_params=True.

Collection: nlp

Before your PR is "Ready for review"

Pre checks:

  • Make sure you read and followed Contributor guidelines
  • Did you write any new necessary tests?
  • Did you add or update any necessary documentation?
  • Does the PR affect components that are optional to install? (Ex: Numba, Pynini, Apex etc)
    • Reviewer: Does the PR have correct import guards for all optional libraries?

PR Type:

  • New Feature
  • Bugfix
  • Documentation

Who can review?

Anyone in the community is free to review the PR once the checks have passed.
Contributor guidelines contains specific people who can review PRs to various areas.

Additional Information

@github-actions github-actions bot added the NLP label May 29, 2024
@akoumpa
Copy link
Member

akoumpa commented May 29, 2024

Nice, can you fix the DCO?

@akoumpa akoumpa self-requested a review May 29, 2024 08:53
The `param.grad is not None` check also fixes gradient reduction in the
case of parameters not having acquired gradients (as parameters could
become empty tensors in FSDP).

Thanks to @ofivite for suggesting that `use_orig_params=True` could be
the cause of the issue, which greatly helped with analysis.

Signed-off-by: janEbert <janpublicebert@posteo.net>
@janEbert
Copy link
Contributor Author

Done thanks :)

@ericharper ericharper merged commit 2e39606 into NVIDIA:main May 30, 2024
128 of 130 checks passed
BoxiangW pushed a commit to BoxiangW/NeMo that referenced this pull request Jun 5, 2024
The `param.grad is not None` check also fixes gradient reduction in the
case of parameters not having acquired gradients (as parameters could
become empty tensors in FSDP).

Thanks to @ofivite for suggesting that `use_orig_params=True` could be
the cause of the issue, which greatly helped with analysis.

Signed-off-by: janEbert <janpublicebert@posteo.net>
Signed-off-by: Boxiang Wang <boxiangw@nvidia.com>
janekl pushed a commit that referenced this pull request Jun 12, 2024
The `param.grad is not None` check also fixes gradient reduction in the
case of parameters not having acquired gradients (as parameters could
become empty tensors in FSDP).

Thanks to @ofivite for suggesting that `use_orig_params=True` could be
the cause of the issue, which greatly helped with analysis.

Signed-off-by: janEbert <janpublicebert@posteo.net>
Signed-off-by: Jan Lasek <janek.lasek@gmail.com>
rohitrango pushed a commit to rohitrango/NeMo that referenced this pull request Jun 25, 2024
The `param.grad is not None` check also fixes gradient reduction in the
case of parameters not having acquired gradients (as parameters could
become empty tensors in FSDP).

Thanks to @ofivite for suggesting that `use_orig_params=True` could be
the cause of the issue, which greatly helped with analysis.

Signed-off-by: janEbert <janpublicebert@posteo.net>
@ko3n1g ko3n1g mentioned this pull request Jul 18, 2024
2 tasks
@janEbert janEbert mentioned this pull request Aug 5, 2024
8 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants