You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
support group offloading under auto offloading (#14358)
Let group offloaded models take part in auto offloading
`ComponentsManager.enable_auto_cpu_offload` and `enable_group_offload` are two
independent hook systems — accelerate's `_hf_hook` and diffusers' `HookRegistry`
— and neither noticed the other. Enabling both raised nothing and appeared to
work, but auto offloading frees memory by calling `.to()`, which a group
offloaded module refuses and only warns about. Every offload the manager thought
it performed was a no-op: it recorded memory as freed that never was, and it
charged a group offloaded model's whole weight against the device although only
one group is ever resident.
A group offloaded model now takes part but places itself. It still makes room by
moving other models aside, since its `pre_forward` consults the strategy as
before; it is never chosen as the thing to move, because moving it does nothing;
and the manager no longer pretends to offload it. Either order works, group
offload before or after enabling.
Deciding *what* to move then has to come from somewhere other than memory
estimates, so `enable_auto_cpu_offload` takes an `offload_strategy` and
`set_offload_strategy` can replace it later. The default `AutoOffloadStrategy`
sizes its decisions from model memory footprints, which do not describe a model
holding one group at a time, so it warns when it meets group offloading — only
when no strategy was passed.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
0 commit comments