vram reduction for all models and slight it/s boost#913
Open
PlagueKind wants to merge 1 commit into
Open
Conversation
7a0a2a6 to
763bd12
Compare
763bd12 to
7a68bf2
Compare
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.
Use config dtype for training network when optimizer supports low precision
Previously,
network.force_to()always usedtorch.float32, causing LoRA/LoKR adapter weights to be stored in float32 regardless of the configured model dtype. This resulted in unnecessarily high VRAM usage and slower iteration speeds during training.Changes
BaseSDTrainProcessnow selects the network dtype based on whether the configured optimizer supports low-precision training:Optimizers that use stochastic rounding or quantized states (automagic, automagic2, automagic3, adam8bit, adafactor, prodigy_8bit) will now run the network in the config dtype (typically bf16). Standard optimizers that require float32 precision for stable gradient accumulation (adam, adamw, sgd, adagrad) continue to use float32.
Impact
examples on 5060ti 16gb:
before change on krea2 I needed 70% offload not to oom during training. After i need 20%
before change on ideogram4 I was vram thrashing with no offloading and 1024, after I have about 2gb of headroom.