AUBIN-E4B-Screen / code /multitask_train.py
emrevrg's picture
AUBIN-Learn: instant self-learning memory, fast skills, self-calibration + reports
2062ef9 verified
Raw History Blame Contribute Delete
3.23 kB
"""AUBIN tek-model çok-görev eğitimi: TEK adaptörde tipli karar (Kev kaynakları + ek veri) + web ajanı (Mind2Web train)
+ gerçek zamanlı kontrol (ızgara oyunu). Görevler eşit örnek sayısıyla karıştırılır (büyük veri küçüğü ezmesin); seçim için
her görevden ayrı dev parçası; testler (kev_test, Mind2Web test_domain, kontrol tohum 0) yalnız sonra, ayrı betiklerle.
python multitask_train.py --work /tmp/kev --init_adapter hf:emrevrg/AUBIN-12B --per_task 4000 --steps 2000 --adapter out/
"""
import argparse, json, os, random, sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
import kev_llm as KL
import kevdata
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--work", default="/tmp/kev"); ap.add_argument("--model", default="google/gemma-4-12B-it")
ap.add_argument("--init_adapter", default="hf:emrevrg/AUBIN-12B"); ap.add_argument("--adapter", default="lora_mt")
ap.add_argument("--per_task", type=int, default=4000); ap.add_argument("--steps", type=int, default=2000)
ap.add_argument("--lr", type=float, default=2e-5); ap.add_argument("--bs", type=int, default=4); ap.add_argument("--seed", type=int, default=0)
ap.add_argument("--device_map", default="")
a = ap.parse_args()
rng = random.Random(a.seed)
# 1) tipli karar: Kev eğitim kaynakları + kev_augment ek verisi (KEV_EXTRA_TRAIN), geniş (77 seçenekli) sorular dahil
K = kevdata.load(a.work)
kev = KL.items(K["kev_train"]); rng.shuffle(kev)
kdev = [x for x in KL.items(K["kev_dev"]) if len(x["keys"]) <= 26]; rng.shuffle(kdev)
# 2) web ajanı: Mind2Web eğitim bölümü (MindAct çoktan-seçmeli öğeler)
import mind2web_eval as MW
S_ = MW.load_scores(); scores = S_.get("scores", S_) if isinstance(S_, dict) else S_
web = MW.train_items(MW.load_split("train", 0), scores, 50, random.Random(a.seed + 1), per_action=3); rng.shuffle(web)
wdev, web = web[:150], web[150:]
# 3) gerçek zamanlı kontrol: ızgara oyunu (eğitim tohumları 1000+, dev 900+, ölçüm tohumu 0'a dokunulmaz)
import control_train as CT
ctl, teach = CT.examples(3000, 1000, 0); rng.shuffle(ctl)
cdev, _ = CT.examples(60, 900, 0)
tr = kev[:a.per_task] + web[:a.per_task] + ctl[:a.per_task]; rng.shuffle(tr)
dev = kdev[:150] + wdev + cdev[:150]
print({"train": len(tr), "kev": min(len(kev), a.per_task), "web": min(len(web), a.per_task), "control": min(len(ctl), a.per_task),
"dev": len(dev)}, flush=True)
S = KL.Scorer(a.model, four_bit=True, device_map=a.device_map)
S.tok.padding_side = "left"
if S.tok.pad_token is None:
S.tok.pad_token = S.tok.eos_token
KL.train_lora(S, tr, a.steps, a.lr, a.bs, a.adapter, seed=a.seed, init_adapter=KL.resolve_adapter(a.init_adapter),
dev=dev, eval_every=max(200, a.steps // 8), teacher=teach, alpha=0.5, save_every=500, wide=True)
json.dump({"best_dev": getattr(S, "best_dev", None), "train": len(tr), "per_task": a.per_task, "steps": a.steps},
open(a.adapter.rstrip("/") + "_train.json", "w"))
print("EGITIM BITTI", getattr(S, "best_dev", None), flush=True)
if __name__ == "__main__":
main()