dgx-harness-engineering / scripts /112_quick_benchmark_14b10k.py
koreallmdev's picture
Upload anonymized DGX harness engineering export V1.4 (part 2)
6fda4b7 verified
Raw
History Blame Contribute Delete
6.47 kB
#!/usr/bin/env python3
import os,re,json,time,traceback
from pathlib import Path
from collections import defaultdict
ROOT=Path("/home/harness_user_1/dgx_ai_factory"); REP=ROOT/"reports"; REP.mkdir(exist_ok=True)
AD=Path(os.environ.get("ADAPTER_DIR",""))
MAX_NEW=int(os.environ.get("MAX_NEW_TOKENS","600"))
SYS="๋‹น์‹ ์€ ํ•œ๊ตญ์–ด ์กด๋Œ“๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ์‹ค๋ฌดํ˜• ๊ฐœ๋ฐœ ๋น„์„œ์ž…๋‹ˆ๋‹ค. ์ค‘๊ตญ์–ด๋ฅผ ์ ˆ๋Œ€ ์“ฐ์ง€ ๋ง๊ณ , ๋ช…๋ น์–ด์™€ ์„ค๋ช…์„ ๋ถ„๋ฆฌํ•ด์„œ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค."
TESTS=[
("vllm","vLLM ์„œ๋ฒ„๊ฐ€ ์ผœ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.",["ps","grep","vllm"],[["pkill","kill"],["8000","ss -lntp"]]),
("systemd","systemd status=217/USER ์˜ค๋ฅ˜์˜ ์›์ธ๊ณผ ํ™•์ธ ๋ช…๋ น์–ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.",["217/USER","User","systemctl","journalctl"],[["getent passwd","id "],["daemon-reload","restart"]]),
("fastapi","FastAPI /health ์—”๋“œํฌ์ธํŠธ์™€ curl ํ™•์ธ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š”.",["FastAPI","/health","curl"],[["uvicorn","main:app"]]),
("jsonl","JSONL ํŒŒ์ผ์ด ๊นจ์กŒ๋Š”์ง€ ์ค„ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ๊ฒ€์‚ฌํ•˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š”.",["json","enumerate","json.loads"],[["JSONDecodeError","Exception"],["line_no","line","์ค„"]]),
("lora","LoRA adapter ํด๋”์—์„œ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ๊ณผ stable/rejected ํŒ๋‹จ ์ˆœ์„œ๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.",["adapter_config.json","adapter_model","smoke","benchmark"],[["stable","rejected"],["safetensors","PEFT"]]),
("docker","Docker ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ, ํฌํŠธ, ๋กœ๊ทธ ํ™•์ธ ๋ช…๋ น์–ด๋ฅผ ์ •๋ฆฌํ•ด์ฃผ์„ธ์š”.",["docker ps","docker logs"],[["Ports","port"],["docker compose","compose"]]),
("cuda","PyTorch์—์„œ CUDA ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€์™€ GPU ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š”.",["torch.cuda","is_available","mem_get_info"],[["nvidia-smi","device_count"]]),
("dataset","code_python/linux ํŽธํ–ฅ์„ ์ค„์ด๋Š” balanced dataset ๊ตฌ์„ฑ ๊ธฐ์ค€์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.",["category","balanced","์ค‘๋ณต"],[["quota","๋ถ„ํฌ"],["CJK","template"]]),
("linux","๋ฆฌ๋ˆ…์Šค์—์„œ 8000 ํฌํŠธ๋ฅผ ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.",["ss","grep","8000"],[["kill","pkill"],["ps","lsof"]]),
("workflow","ํ˜„์—…์‹ ํŒŒ์ธํŠœ๋‹ ์›Œํฌํ”Œ๋กœ๋ฅผ scripts/logs/reports/data, smoke, benchmark, stable/rejected ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•ด์ฃผ์„ธ์š”.",["scripts","logs","reports","smoke","benchmark"],[["stable","rejected"],["Git","commit"]]),
]
BAD=["{problem}","{framework}","### Instruction","### Response","<|im_start|>","<|im_end|>","assistant:","user:"]
def cjk(x): return bool(re.search(r"[\u4e00-\u9fff]",x))
def leak(x): return any(b.lower() in x.lower() for b in BAD)
def honor(x): return any(m in x for m in ["์Šต๋‹ˆ๋‹ค","ํ•ฉ๋‹ˆ๋‹ค","๋ฉ๋‹ˆ๋‹ค","์ฃผ์„ธ์š”","ํ•˜์„ธ์š”","์ž…๋‹ˆ๋‹ค"])
def score(out,must,anys):
s=100; flags=[]; low=out.lower()
if cjk(out): s-=60; flags.append("chinese_cjk")
if leak(out): s-=35; flags.append("template_leak")
if not honor(out): s-=12; flags.append("weak_honorific")
if len(out.strip())<100: s-=12; flags.append("too_short")
miss=[m for m in must if m.lower() not in low]
if miss: s-=min(45,12*len(miss)); flags.append("missing:"+",".join(miss))
for g in anys:
if not any(x.lower() in low for x in g): s-=8; flags.append("missing_any:"+"|".join(g))
s=max(0,s)
return s,flags
def base_model(ad):
cfg=json.loads((ad/"adapter_config.json").read_text(encoding="utf-8"))
return cfg.get("base_model_name_or_path","Qwen/Qwen2.5-14B-Instruct")
def main():
import torch
from transformers import AutoTokenizer,AutoModelForCausalLM
from peft import PeftModel
if not AD.exists(): node-7.example.invalid SystemExit(f"[FAIL] ADAPTER_DIR not found: {AD}")
bm=base_model(AD); ts=time.strftime("%Y%m%d_%H%M%S")
print("==== 14B 10K AUTO QUICK BENCHMARK START ====")
print("base_model:",bm); print("adapter_dir:",AD); print("max_new_tokens:",MAX_NEW)
tok=AutoTokenizer.from_pretrained(bm,trust_remote_code=True)
if tok.pad_token is None: tok.pad_token=<REDACTED_SECRET>
model=AutoModelForCausalLM.from_pretrained(bm,torch_dtype=torch.bfloat16,device_map=None,low_cpu_mem_usage=False,trust_remote_code=True)
model=model.to("cuda:0")
model=PeftModel.from_pretrained(model,str(AD),is_trainable=False); model.eval()
res=[]; cats=defaultdict(list); lat=[]
for i,(cat,prompt,must,anys) in enumerate(TESTS,1):
print("\n"+"-"*80); print("BENCH:",i,cat); print("-"*80)
text=tok.apply_chat_template([{"role":"system","content":SYS},{"role":"user","content":prompt}],tokenize=False,add_generation_prompt=True)
inp=tok(text,return_tensors="pt").to("cuda:0")
t0=time.time()
with torch.no_grad():
out=model.generate(**inp,max_new_tokens=MAX_NEW,do_sample=False,repetition_penalty=1.08,pad_token_id=tok.eos_token_id)
sec=time.time()-t0
ans=tok.decode(out[0][inp["input_ids"].shape[-1]:],skip_special_tokens=True).strip()
sc,flags=score(ans,must,anys)
print(ans); print("\nSCORE:",sc); print("FLAGS:",flags); print("LATENCY_SEC:",round(sec,3))
item={"id":i,"category":cat,"prompt":prompt,"output":ans,"score":sc,"flags":flags,"latency_sec":round(sec,3)}
res.append(item); cats[cat].append(sc); lat.append(sec)
avg=sum(r["score"] for r in res)/len(res); pass70=sum(r["score"]>=70 for r in res); strong85=sum(r["score"]>=85 for r in res)
catavg={k:round(sum(v)/len(v),2) for k,v in sorted(cats.items())}
decision="PASS_QUICK_BENCHMARK" if avg>=85 and pass70>=9 and strong85>=6 else ("REVIEW_QUICK_BENCHMARK" if avg>=80 and pass70>=8 else "REJECT_OR_REPAIR_NEEDED")
report={"base_model":bm,"adapter_dir":str(AD),"average_score":round(avg,2),"pass_70_plus":f"{pass70}/{len(res)}","strong_85_plus":f"{strong85}/{len(res)}","category_avg":catavg,"average_latency_sec":round(sum(lat)/len(lat),3),"decision":decision,"results":res}
rp=REP/f"14b10k_auto_quick_benchmark_{ts}.json"; rp.write_text(json.dumps(report,ensure_ascii=False,indent=2),encoding="utf-8")
print("\n"+"="*80); print("FINAL 14B 10K AUTO QUICK BENCHMARK SUMMARY"); print("="*80)
for k in ["base_model","adapter_dir","average_score","pass_70_plus","strong_85_plus","average_latency_sec","category_avg","decision"]:
print(f"{k}:",report[k])
print("report_path:",rp)
if __name__=="__main__":
try: main()
except Exception:
print("\n[FATAL ERROR]"); traceback.print_exc(); node-7.example.invalid