Lavender825 commited on
Commit
952bc18
·
1 Parent(s): e30d0ec

Materialize model before checkpoint load

Browse files
Files changed (1) hide show
  1. src/evaluator.py +26 -1
src/evaluator.py CHANGED
@@ -76,7 +76,31 @@ def _set_module_attr(root, dotted_name, value):
76
  parts = dotted_name.split(".")
77
  for part in parts[:-1]:
78
  module = getattr(module, part)
79
- setattr(module, parts[-1], value)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
 
82
  def _materialize_meta_buffers(model, device):
@@ -166,6 +190,7 @@ def load_meta_acsa(checkpoint_dir: Path = None, meta_encoder: Optional[MetaEncod
166
  else:
167
  model = BertMetaFusionACSAModel(bert_name=bert_name, meta_in_dim=meta_in_dim)
168
  model = _move_model_to_device(model, device)
 
169
  _load_model_state(model, ckpt["model_state_dict"], strict=False)
170
  model = _refresh_runtime_buffers(model, device)
171
  model.eval()
 
76
  parts = dotted_name.split(".")
77
  for part in parts[:-1]:
78
  module = getattr(module, part)
79
+ leaf = parts[-1]
80
+ if isinstance(value, torch.nn.Parameter) and leaf in getattr(module, "_parameters", {}):
81
+ module._parameters[leaf] = value
82
+ elif leaf in getattr(module, "_buffers", {}):
83
+ module._buffers[leaf] = value
84
+ else:
85
+ setattr(module, leaf, value)
86
+
87
+
88
+ def _has_meta_tensors(model) -> bool:
89
+ for _, param in model.named_parameters():
90
+ if getattr(param, "is_meta", False):
91
+ return True
92
+ for _, buf in model.named_buffers():
93
+ if getattr(buf, "is_meta", False):
94
+ return True
95
+ return False
96
+
97
+
98
+ def _ensure_materialized_before_load(model, device):
99
+ """Force a real tensor skeleton before checkpoint assignment in Spaces."""
100
+ if _has_meta_tensors(model):
101
+ logger.warning("Model skeleton contains meta tensors before checkpoint load; using to_empty().")
102
+ model = model.to_empty(device=device)
103
+ return model
104
 
105
 
106
  def _materialize_meta_buffers(model, device):
 
190
  else:
191
  model = BertMetaFusionACSAModel(bert_name=bert_name, meta_in_dim=meta_in_dim)
192
  model = _move_model_to_device(model, device)
193
+ model = _ensure_materialized_before_load(model, device)
194
  _load_model_state(model, ckpt["model_state_dict"], strict=False)
195
  model = _refresh_runtime_buffers(model, device)
196
  model.eval()