Repository navigation
Allow preparing a model without an optimizer under FSDP2 - #4519
Merged
Merged
Conversation
|
The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update. |
mangeshraut712
left a comment
There was a problem hiding this comment.
Relaxing the check to "optimizer requires its model" matches what _prepare_fsdp2 actually needs, and the new test covers the model-only prepare. My question is about what happens next in the Trainer flow from the linked issue: evaluate() (model alone), then train() (model + optimizer). The test doesn't exercise that sequence, and I think it may not be idempotent. This is reasoned from the code, not run.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves huggingface/transformers#48841.
Trainer.evaluate()beforetrain()prepares the model alone, and under FSDP2prepareraises without an optimizer. The optimizer is only required so its parameters can be swapped for the sharded ones afterfully_shard, so this keeps the error for an optimizer passed without its model and lets a model through alone. It comes out sharded, as with an optimizer. Whentrain()then prepares it again with its optimizer, activation checkpointing is not applied a second time.Trainer+ FSDP2:evaluate()on a fresh Trainer now runs, with the same eval loss as without FSDP (6.957570). With activation checkpointing, evaluate then train ends at the same eval loss as train alone (6.773301).