Fix: post-load staging regression breaks offload meta/sharded_gpu modes (#38779)
This commit is contained in:
@@ -134,13 +134,16 @@ def stage_module_for_post_load(
|
||||
owner_origins: dict[int, set[torch.device]] = {}
|
||||
module_origins: set[torch.device] = set()
|
||||
tensor_states: dict[int, _TensorState] = {}
|
||||
# Offloader-parked parameters (see sglang.srt.utils.offloader) live on the
|
||||
# meta device through post-load processing; kernels are expected to skip
|
||||
# them. Pass them through untouched, matching the pre-staging behaviour.
|
||||
meta_tensor_ids: set[int] = set()
|
||||
|
||||
# snapshot and validate all state before moving any tensor
|
||||
for owner, registry_name, name, tensor in _iter_registered_tensors(module):
|
||||
if tensor.is_meta:
|
||||
raise RuntimeError(
|
||||
f"Cannot post-process meta tensor {type(owner).__name__}.{name}"
|
||||
)
|
||||
meta_tensor_ids.add(id(tensor))
|
||||
continue
|
||||
state = tensor_states.get(id(tensor))
|
||||
if state is None:
|
||||
state = _TensorState(tensor, tensor.data, tensor.device)
|
||||
@@ -167,6 +170,9 @@ def stage_module_for_post_load(
|
||||
next(iter(module_origins)) if len(module_origins) == 1 else None
|
||||
)
|
||||
for owner, registry_name, name, tensor in _iter_registered_tensors(module):
|
||||
if id(tensor) in meta_tensor_ids:
|
||||
# Parked by the offloader before staging; leave it as-is.
|
||||
continue
|
||||
key = _slot_key(owner, registry_name, name)
|
||||
original_state = original_slots.get(key)
|
||||
if original_state is None:
|
||||
|
||||
Reference in New Issue
Block a user