Skip to content

fix: _patch_cpu_offload_apply handles .to(cuda) in addition to .cuda() - #59

Open
cennn wants to merge 1 commit into
mainfrom
fix/cpu-offload-to-compat
Open

fix: _patch_cpu_offload_apply handles .to(cuda) in addition to .cuda()#59
cennn wants to merge 1 commit into
mainfrom
fix/cpu-offload-to-compat

Conversation

@cennn

@cennn cennn commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • _patch_cpu_offload_apply only recognized .cuda() lambda but not .to("cuda:X") lambda. When callers use model.to(device) instead of model.cuda(), the offload hook fell through to _orig_apply, putting all weights on GPU and defeating model_cpu_offload.
  • Fix: probe the .to() lambda with a small CPU tensor to detect if the target device is CUDA, and treat it the same as .cuda() for offload interception.

Test plan

  • Existing test_cpu_offload_placement passes (uses .cuda())
  • New scenario: model.to("cuda:0") with offload enabled keeps decorated module weights on CPU
  • model.to("cpu") does not trigger _force_cpu (probe returns is_cuda=False)

…uda()

When callers use model.to(cuda:X) instead of model.cuda(), the
_cpu_apply hook did not recognize the Module.to lambda and fell through
to _orig_apply, putting all weights on GPU. This defeats the purpose of
model_cpu_offload.

Fix: probe the .to() lambda with a small CPU tensor to detect if the
target device is CUDA, and treat it the same as .cuda() for offload
interception.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant