Upload eval_scripts/align_check.py with huggingface_hub
Browse files- eval_scripts/align_check.py +44 -0
eval_scripts/align_check.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os, sys, json, glob, torch
|
| 2 |
+
os.environ.setdefault("ANNULUS_YEAR_OUTPUT","0")
|
| 3 |
+
os.environ["ANNULUS_ROUTED_EXPERTS"]="32"; os.environ["ANNULUS_SHARED_EXPERTS"]="1"
|
| 4 |
+
os.environ["ANNULUS_SHARED_FFN"]="2048"; os.environ.setdefault("ANNULUS_LAYERS","24")
|
| 5 |
+
os.environ.setdefault("ANNULUS_TOPK","8"); os.environ["ANNULUS_GROUPED_GEMM"]="0"; os.environ["ANNULUS_GROUP_AUX"]="1"
|
| 6 |
+
S="/gpfs/radev/scratch/xu_hua/lq62/annulus_v4"; _CV7=S+"/code_v7"; _REPO=os.path.expanduser("~/Annulus")
|
| 7 |
+
for p in [_REPO+"/eval",_REPO+"/nemo/src",_CV7]:
|
| 8 |
+
if os.path.isdir(p):
|
| 9 |
+
if p in sys.path: sys.path.remove(p)
|
| 10 |
+
sys.path.insert(0,p)
|
| 11 |
+
import icl_eval_v5 as V
|
| 12 |
+
core,tok=V.build_v5_model_and_tokenizer(os.environ["CKPT"],os.environ["TOK"]); core.eval()
|
| 13 |
+
# find real text
|
| 14 |
+
cands=glob.glob(os.path.expanduser("~/Annulus")+"/**/heldout_2001_samesource.jsonl",recursive=True)+\
|
| 15 |
+
glob.glob("/gpfs/radev/scratch/xu_hua/lq62/annulus_v5/delta_test/ppl_to2005.jsonl")+\
|
| 16 |
+
glob.glob(S+"/**/ppl_to2005.jsonl",recursive=True)
|
| 17 |
+
texts=[]
|
| 18 |
+
for f in cands:
|
| 19 |
+
for ln in open(f):
|
| 20 |
+
try: texts.append(json.loads(ln)["text"])
|
| 21 |
+
except: pass
|
| 22 |
+
if texts: print("data:",f,"docs:",len(texts),flush=True); break
|
| 23 |
+
if not texts: texts=["The Company reported total revenue of 4.2 billion dollars for the fiscal year ended December, an increase driven by higher product sales and improved margins across all operating segments."]*5
|
| 24 |
+
@torch.no_grad()
|
| 25 |
+
def acc(doc):
|
| 26 |
+
ids=tok(doc,add_special_tokens=False)["input_ids"][:512]
|
| 27 |
+
if len(ids)<8: return None
|
| 28 |
+
s=len(ids); inp=torch.tensor([ids],device="cuda"); pos=torch.arange(s,device="cuda")[None]
|
| 29 |
+
m=torch.triu(torch.ones(s,s,dtype=torch.bool,device="cuda"),1)[None,None]
|
| 30 |
+
o=core(input_ids=inp,position_ids=pos,attention_mask=m)
|
| 31 |
+
L=(o[0] if o.shape[0]==1 else o[:,0]).float() # [seq,V]
|
| 32 |
+
am=L.argmax(-1) # top1 per pos
|
| 33 |
+
idt=torch.tensor(ids,device="cuda")
|
| 34 |
+
std=(am[:-1]==idt[1:]).float().mean().item() # logits[i]->ids[i+1]
|
| 35 |
+
off=(am==idt).float().mean().item() # logits[i]->ids[i]
|
| 36 |
+
lp=torch.log_softmax(L[:-1],-1); nll=(-lp.gather(1,idt[1:,None]).squeeze(1)).mean().item()
|
| 37 |
+
return std,off,nll
|
| 38 |
+
import statistics as st
|
| 39 |
+
S_,O_,N_=[],[],[]
|
| 40 |
+
for d in texts[:30]:
|
| 41 |
+
r=acc(d)
|
| 42 |
+
if r: S_.append(r[0]);O_.append(r[1]);N_.append(r[2])
|
| 43 |
+
print(f"[ALIGN] n={len(S_)} std_acc(logits[i]->ids[i+1])={st.mean(S_):.3f} offby1_acc(logits[i]->ids[i])={st.mean(O_):.3f} NLL={st.mean(N_):.3f}",flush=True)
|
| 44 |
+
print("ALIGN_DONE",flush=True)
|