Upload glint_parity_eval.py with huggingface_hub
Browse files- 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).
|
| 184 |
-
|
| 185 |
-
|
| 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 |
-
|
| 190 |
-
|
| 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()}
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 211 |
model.eval().to(device)
|
| 212 |
-
print(f"[load_our_model]
|
| 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
|