Instructions to use emrevrg/AUBIN-12B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use emrevrg/AUBIN-12B with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("google/gemma-4-12B-it") model = PeftModel.from_pretrained(base_model, "emrevrg/AUBIN-12B") - Notebooks
- Google Colab
- Kaggle
Download code/loop_bench.py from emrevrg/AUBIN-12B: direct link, hf CLI and curl.
- Browser
- Download file 5.07 kB
-
https://huggingface.co/emrevrg/AUBIN-12B/resolve/main/code/loop_bench.py
- Command line
-
hf download hf://emrevrg/AUBIN-12B/code/loop_bench.py
-
curl -L -o loop_bench.py https://huggingface.co/emrevrg/AUBIN-12B/resolve/main/code/loop_bench.py
5.07 kB
| """AUBIN Loop ölçümü (GSM8K test): üretici = Gemma tabanı (adaptör kapalı), karar = AUBIN (aynı ağırlıklar). | |
| Aynı sorular, aynı adaylar üzerinde: | |
| greedy : üreticinin tek (açgözlü) cevabı | |
| majority@n : n örnekte çoğunluk oyu (self-consistency) | |
| aubin@n : AUBIN adaylar arasından seçer (kalibre olasılık) | |
| aubin+vote@n : AUBIN olasılığı × oy payı | |
| loop : aubin+vote; güven < hedef ise 2. tur (n yeni örnek, önceki adaylar geri bildirim) — ort. örnek sayısı raporlanır | |
| oracle@n : adaylardan biri doğru mu (üst sınır) | |
| python loop_bench.py --adapter emrevrg/AUBIN-12B --n_problems 200 --n 5 --out loop.json | |
| """ | |
| import argparse, json, os, random, sys, time | |
| import torch | |
| HERE = os.path.dirname(os.path.abspath(__file__)) | |
| sys.path.insert(0, HERE) | |
| def main(): | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--adapter", default="emrevrg/AUBIN-12B"); ap.add_argument("--n_problems", type=int, default=200) | |
| ap.add_argument("--n", type=int, default=5); ap.add_argument("--target", type=float, default=0.7) | |
| ap.add_argument("--gen_bs", type=int, default=16); ap.add_argument("--max_new", type=int, default=320) | |
| ap.add_argument("--work", default=""); ap.add_argument("--out", default="loop.json") | |
| ap.add_argument("--offset", type=int, default=0) # ikinci GPU aynı karışık sıradan sonraki soruları çözer | |
| a = ap.parse_args() | |
| from datasets import load_dataset | |
| from aubin.core import Aubin | |
| from aubin.loop import AubinLoop, GemmaGenerator, last_number, SOLVE | |
| from kev_llm import resolve_adapter | |
| a.adapter = resolve_adapter(a.adapter) # gizli Kaggle veri seti / kernel çıktısı adıyla da bulunur | |
| ds = list(load_dataset("openai/gsm8k", "main", split="test")) | |
| random.Random(0).shuffle(ds); ds = ds[a.offset: a.offset + a.n_problems] | |
| gold = [last_number(x["answer"].split("####")[-1]) for x in ds] | |
| A = Aubin(a.adapter, four_bit=True, think_margin=0.0) | |
| G = GemmaGenerator(A, max_new=a.max_new, temperature=0.7) | |
| prompts = [SOLVE.format(task=x["question"], context="") for x in ds] | |
| t0 = time.time(); greedy, samples = [], [[] for _ in ds] | |
| for i in range(0, len(ds), a.gen_bs): | |
| greedy += G.batch(prompts[i:i + a.gen_bs], greedy=True) | |
| print({"greedy": len(greedy), "min": round((time.time() - t0) / 60, 1)}, flush=True) | |
| flat = [(j, p) for j, p in enumerate(prompts) for _ in range(a.n)] | |
| for i in range(0, len(flat), a.gen_bs): | |
| chunk = flat[i:i + a.gen_bs] | |
| for (j, _), o in zip(chunk, G.batch([p for _, p in chunk])): | |
| samples[j].append(o) | |
| if (i // a.gen_bs) % 10 == 0: | |
| print({"sampled": i + len(chunk), "of": len(flat), "min": round((time.time() - t0) / 60, 1)}, flush=True) | |
| gen_min = (time.time() - t0) / 60 | |
| R = {"adapter": a.adapter, "n_problems": len(ds), "offset": a.offset, "n": a.n, "target": a.target, "gen_minutes": round(gen_min, 1), | |
| "rows": {}} | |
| ok = lambda k, v: v is not None and v == gold[k] | |
| acc = {"greedy": [ok(k, last_number(g)) for k, g in enumerate(greedy)]} | |
| maj, orc = [], [] | |
| for k, ss in enumerate(samples): | |
| vs = [last_number(s) for s in ss]; vs = [v for v in vs if v is not None] | |
| top = max(set(vs), key=vs.count) if vs else None | |
| maj.append(ok(k, top)); orc.append(any(ok(k, v) for v in vs)) | |
| acc[f"majority@{a.n}"], acc[f"oracle@{a.n}"] = maj, orc | |
| for mode in ("aubin", "aubin+vote"): | |
| L1 = AubinLoop(A, G, extract=last_number, target=a.target, max_rounds=1, n=a.n, mode=mode) | |
| res = [L1.solve(x["question"], prior=samples[k]) for k, x in enumerate(ds)] | |
| acc[f"{mode}@{a.n}"] = [ok(k, r["answer"]) for k, r in enumerate(res)] | |
| conf = [r["confidence"] for r in res] | |
| hi = [c >= 0.9 for c in conf] | |
| R["rows"][f"{mode}@{a.n}_confident"] = {"share_conf_ge_0.9": round(sum(hi) / len(hi), 3), | |
| "acc_when_conf_ge_0.9": round(sum(x for x, h in zip(acc[f"{mode}@{a.n}"], hi) if h) / max(1, sum(hi)), 4)} | |
| if mode == "aubin+vote": | |
| first = res | |
| # döngü: güven hedefin altındaysa ikinci tur | |
| L2 = AubinLoop(A, G, extract=last_number, target=a.target, max_rounds=2, n=a.n, mode="aubin+vote") | |
| loop_ok, used = [], [] | |
| for k, x in enumerate(ds): | |
| if first[k]["confidence"] >= a.target and first[k]["answer"] is not None: | |
| loop_ok.append(ok(k, first[k]["answer"])); used.append(a.n); continue | |
| r = L2.solve(x["question"], prior=samples[k]) | |
| loop_ok.append(ok(k, r["answer"])); used.append(a.n * r["rounds"]) | |
| acc["loop(aubin+vote)"] = loop_ok | |
| for k, v in acc.items(): | |
| R["rows"][k] = {"accuracy": round(sum(v) / len(v), 4)} | |
| R["rows"]["loop(aubin+vote)"]["avg_samples"] = round(sum(used) / len(used), 2) | |
| R["minutes"] = round((time.time() - t0) / 60, 1) | |
| json.dump(R, open(a.out, "w"), indent=1) | |
| print("SONUC", json.dumps(R), flush=True) | |
| if __name__ == "__main__": | |
| main() | |