axay28 commited on
Commit
bf5d82d
·
verified ·
1 Parent(s): 8098a3f

Preserve legacy checkpoint output weights

Browse files
Files changed (1) hide show
  1. src/tiny_transformer/train.py +5 -0
src/tiny_transformer/train.py CHANGED
@@ -151,6 +151,7 @@ def save_checkpoint(
151
  "tokenizer": tokenizer.to_dict(),
152
  "step": step,
153
  "parameter_count": model.parameter_count(),
 
154
  }
155
  if optimizer is not None:
156
  payload["optimizer_state"] = optimizer.state_dict()
@@ -164,6 +165,10 @@ def load_checkpoint(path: str, device: str = "cpu") -> tuple[TinyTransformer, To
164
  tokenizer = tokenizer_from_dict(payload["tokenizer"])
165
  config = ModelConfig(**payload["model_config"])
166
  model = TinyTransformer(config).to(device)
 
 
 
 
167
  model.load_state_dict(payload["model_state"])
168
  model.eval()
169
  return model, tokenizer
 
151
  "tokenizer": tokenizer.to_dict(),
152
  "step": step,
153
  "parameter_count": model.parameter_count(),
154
+ "weight_tied": model.lm_head.weight is model.token_embedding.weight,
155
  }
156
  if optimizer is not None:
157
  payload["optimizer_state"] = optimizer.state_dict()
 
165
  tokenizer = tokenizer_from_dict(payload["tokenizer"])
166
  config = ModelConfig(**payload["model_config"])
167
  model = TinyTransformer(config).to(device)
168
+ if not payload.get("weight_tied", False):
169
+ # Checkpoints created before weight tying stored independent embedding and
170
+ # output matrices. Preserve that behavior so older demos remain compatible.
171
+ model.lm_head = torch.nn.Linear(config.n_embd, config.vocab_size).to(device)
172
  model.load_state_dict(payload["model_state"])
173
  model.eval()
174
  return model, tokenizer