Maggio33 commited on
Commit
7a7066f
·
verified ·
1 Parent(s): d95eca8

Upload glint_parity_eval.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. glint_parity_eval.py +21 -15
glint_parity_eval.py CHANGED
@@ -180,14 +180,12 @@ def evaluate_arc_easy(logits_fn, tokenizer, device):
180
  # WIRING NASZEGO MODELU (Monter: wypelnij) -- to jedyna czesc nie-Glint.
181
  # ---------------------------------------------------------------------------
182
  def load_our_model(ckpt_path, tokenizer_path, device):
183
- """Zwroc (logits_fn, tokenizer). logits_fn(ids[B,T]) -> logits[B,T,REAL_VOCAB].
184
- TODO Monter: zaimportuj nasza GPT-klase (z train-kodu gollem), zaladuj ckpt,
185
- ustaw eval()+to(device). Nasz block=1024 > 256 chunki Glinta wiec forward OK.
186
- Wazne: przytnij logits do realnego vocab (bez padded-vocab) jesli mamy padding.
187
- Ponizej szkielet - dopasuj do naszej sygnatury forward()."""
188
  import importlib.util, os
189
- tokenizer = HFTokenizer.from_file(tokenizer_path) # BPE-12k tokenizer.json
190
- # import naszej klasy GPT z train_gpt_ref.py (typowe lokalizacje: pod / lokalnie)
191
  gpt_src = None
192
  for cand in ("/workspace/gollem/corpus/scripts/train_gpt_ref.py",
193
  os.path.join(os.path.dirname(os.path.abspath(__file__)), "train_gpt_ref.py"),
@@ -201,15 +199,23 @@ def load_our_model(ckpt_path, tokenizer_path, device):
201
  GPT = tgr.GPT
202
  ck = torch.load(ckpt_path, map_location="cpu", weights_only=False)
203
  sd = ck["model"] if isinstance(ck, dict) and "model" in ck else ck
204
- sd = {k.replace("_orig_mod.", ""): v for k, v in sd.items()} # strip torch.compile
205
- vocab, n_embd = sd["tok.weight"].shape
206
- block = sd["pos.weight"].shape[0]
207
- n_layer = 1 + max(int(k.split(".")[1]) for k in sd if k.startswith("blocks."))
208
- n_head = int(os.environ.get("N_HEAD", "6")) # nie w wagach; 16M-scan=6, 32M=9
209
- model = GPT(int(vocab), int(n_layer), int(n_embd), int(n_head), int(block))
210
- model.load_state_dict(sd, strict=True)
 
 
 
 
 
 
 
 
211
  model.eval().to(device)
212
- print(f"[load_our_model] vocab={vocab} L={n_layer} d={n_embd} h={n_head} block={block} dev={device}", flush=True)
213
  def logits_fn(ids):
214
  out = model(ids)
215
  logits = out[0] if isinstance(out, (tuple, list)) else out
 
180
  # WIRING NASZEGO MODELU (Monter: wypelnij) -- to jedyna czesc nie-Glint.
181
  # ---------------------------------------------------------------------------
182
  def load_our_model(ckpt_path, tokenizer_path, device):
183
+ """Zwroc (logits_fn, tokenizer). cfg-aware: ckpt["config"] (Qwen3-arch: rope/swiglu/
184
+ qk_norm/value_residual) -> GPT(...,cfg); legacy nanoGPT (bez config) -> stary 5-arg.
185
+ Fix Hart 2026-09-24: 64M-flagship = Qwen3, GPT() wymaga cfg + brak pos.weight (rope)."""
 
 
186
  import importlib.util, os
187
+ from types import SimpleNamespace
188
+ tokenizer = HFTokenizer.from_file(tokenizer_path)
189
  gpt_src = None
190
  for cand in ("/workspace/gollem/corpus/scripts/train_gpt_ref.py",
191
  os.path.join(os.path.dirname(os.path.abspath(__file__)), "train_gpt_ref.py"),
 
199
  GPT = tgr.GPT
200
  ck = torch.load(ckpt_path, map_location="cpu", weights_only=False)
201
  sd = ck["model"] if isinstance(ck, dict) and "model" in ck else ck
202
+ sd = {k.replace("_orig_mod.", ""): v for k, v in sd.items()}
203
+ cfg_d = ck.get("config") if isinstance(ck, dict) else None
204
+ if cfg_d is not None:
205
+ cfg = SimpleNamespace(**cfg_d)
206
+ model = GPT(int(cfg_d["vocab"]), int(cfg_d["n_layer"]), int(cfg_d["n_embd"]),
207
+ int(cfg_d["n_head"]), int(cfg_d["block"]), cfg)
208
+ h = cfg_d["n_head"]
209
+ else:
210
+ vocab, n_embd = sd["tok.weight"].shape
211
+ block = sd["pos.weight"].shape[0]
212
+ n_layer = 1 + max(int(k.split(".")[1]) for k in sd if k.startswith("blocks."))
213
+ h = int(os.environ.get("N_HEAD", "6"))
214
+ model = GPT(int(vocab), int(n_layer), int(n_embd), int(h), int(block))
215
+ miss, unexp = model.load_state_dict(sd, strict=False)
216
+ assert not unexp and miss in ([], ["head.weight"]), (miss, unexp)
217
  model.eval().to(device)
218
+ print(f"[load_our_model] cfg={cfg_d is not None} h={h} dev={device} loaded-ok", flush=True)
219
  def logits_fn(ids):
220
  out = model(ids)
221
  logits = out[0] if isinstance(out, (tuple, list)) else out