Aether-7B-5Attn / eval /lmeval_run.py
SeaWolf-AI's picture
sanitize: internal paths/ids/comments
21574a6 verified
Raw
History Blame Contribute Delete
2.92 kB
# -*- coding: utf-8 -*-
import os
os.environ["CUDA_VISIBLE_DEVICES"] = os.environ.get("GPU", "2")
os.environ.setdefault("HF_DATASETS_TRUST_REMOTE_CODE", "1")
import sys, json, importlib.util, torch
MODEL = os.environ.get("MODEL", "/workspace/aether-annealed")
MERGE_ADAPTER = os.environ.get("MERGE_ADAPTER", "")
ADAPTER = os.environ.get("ADAPTER", "")
TAG = os.environ.get("TAG", "annealed")
LIMIT = os.environ.get("LIMIT", "")
LIMIT = int(LIMIT) if LIMIT else None
TASKS = os.environ.get("TASKS", "arc_easy,arc_challenge,boolq,hellaswag,openbookqa,piqa,sciq,winogrande").split(",")
sys.path.insert(0, MODEL)
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained(MODEL)
spec = importlib.util.spec_from_file_location("mini_config", MODEL + "/mini_config.py")
mc = importlib.util.module_from_spec(spec); spec.loader.exec_module(mc)
cfg = mc.mini_cfg
cfg.use_cache = False
cfg.output_router_logits = False
from aether_pkg.modeling_aether_v2_7way import AETHERV27wayForCausalLM
from safetensors.torch import load_file
print("[load]", MODEL, flush=True)
model = AETHERV27wayForCausalLM(cfg).to("cuda", dtype=torch.bfloat16)
model.load_state_dict(load_file(MODEL + "/model.safetensors"), strict=False)
if MERGE_ADAPTER:
from peft import PeftModel
model = PeftModel.from_pretrained(model, MERGE_ADAPTER).merge_and_unload(); print("[merged]", MERGE_ADAPTER, flush=True)
if ADAPTER:
from peft import PeftModel
model = PeftModel.from_pretrained(model, ADAPTER); print("[adapter]", ADAPTER, flush=True)
model.eval()
import lm_eval
from lm_eval.models.huggingface import HFLM
# batch_size=1 on purpose: the NSA branches ignore attention_mask, so any left-padding
# in a batch would let queries attend to pad tokens and silently corrupt the scores.
lm = HFLM(pretrained=model, tokenizer=tok, batch_size=1, max_length=2048, backend="causal")
print("[lm_eval] tasks=%s limit=%s" % (TASKS, LIMIT), flush=True)
res = lm_eval.simple_evaluate(model=lm, tasks=TASKS, num_fewshot=0, limit=LIMIT,
bootstrap_iters=1000, verbosity="ERROR")
out = {}
print("\n=== AETHER-7B-5Attn (%s) — lm-eval-harness 0-shot ===" % TAG, flush=True)
print("%-18s %8s %8s %8s %8s" % ("TASK", "acc", "±", "acc_norm", "±"), flush=True)
print("-" * 60, flush=True)
for t in TASKS:
r = res["results"].get(t, {})
a = r.get("acc,none"); ae = r.get("acc_stderr,none")
n = r.get("acc_norm,none"); ne = r.get("acc_norm_stderr,none")
out[t] = {"acc": a, "acc_stderr": ae, "acc_norm": n, "acc_norm_stderr": ne}
f = lambda v: ("%6.1f" % (100 * v)) if isinstance(v, float) else " -"
print("%-18s %8s %8s %8s %8s" % (t, f(a), f(ae), f(n), f(ne)), flush=True)
print("-" * 60, flush=True)
json.dump(out, open("/workspace/lmeval_%s.json" % TAG, "w"), indent=2, ensure_ascii=False)
print("[saved] /workspace/lmeval_%s.json" % TAG, flush=True)
print("LMEVAL_DONE", flush=True)