| |
| """Benchmark graphs for the KOLM-Alpha release: KOLM-Alpha vs TMT.""" |
| import csv |
| import os |
| import matplotlib.pyplot as plt |
|
|
| os.makedirs("assets", exist_ok=True) |
| KOLM = "#4C6FFF" |
| TMT = "#FF7A45" |
|
|
|
|
| def load(path): |
| toks, val = [], [] |
| with open(path) as f: |
| for step, t, v in csv.reader(f): |
| toks.append(int(t) / 1e6) |
| val.append(float(v)) |
| return toks, val |
|
|
|
|
| kt, kv = load("curve_kolm.csv") |
| tt, tv = load("curve_transformer.csv") |
|
|
| |
| fig, ax = plt.subplots(figsize=(8, 5), dpi=140) |
| ax.plot(tt, tv, color=TMT, lw=2.2, label="TMT (Transformer twin, 17.5M)") |
| ax.plot(kt, kv, color=KOLM, lw=2.2, label="KOLM-Alpha (16.9M)") |
| ax.axhline(kv[-1], color=KOLM, ls=":", lw=1, alpha=0.6) |
| ix = next(i for i in range(1, len(kv)) if kv[i] <= tv[i]) |
| ax.annotate("crossover", xy=(kt[ix], kv[ix]), xytext=(kt[ix] + 1.5, kv[ix] + 0.25), |
| arrowprops=dict(arrowstyle="->", color="#555"), fontsize=10, color="#555") |
| ax.set_xlabel("training tokens (millions)") |
| ax.set_ylabel("validation loss") |
| ax.set_title("KOLM-Alpha vs TMT — Validation Loss (TinyStories)", fontweight="bold") |
| ax.legend(frameon=False) |
| ax.grid(alpha=0.15) |
| for s in ("top", "right"): |
| ax.spines[s].set_visible(False) |
| fig.tight_layout() |
| fig.savefig("assets/val_loss_curve.png") |
|
|
| |
| fig, axes = plt.subplots(1, 2, figsize=(8, 4.2), dpi=140) |
| for ax, vals, title in [ |
| (axes[0], (14.80, 15.16), "Final validation perplexity"), |
| (axes[1], (2.6946, 2.7188), "Final validation loss"), |
| ]: |
| bars = ax.bar(["KOLM-Alpha", "TMT"], vals, color=[KOLM, TMT], width=0.6) |
| ax.set_title(title, fontweight="bold", fontsize=11) |
| ax.set_ylim(0, max(vals) * 1.15) |
| for b, v in zip(bars, vals): |
| ax.text(b.get_x() + b.get_width() / 2, v, f"{v:.4g}", |
| ha="center", va="bottom", fontsize=10, fontweight="bold") |
| for s in ("top", "right"): |
| ax.spines[s].set_visible(False) |
| ax.grid(axis="y", alpha=0.15) |
| fig.suptitle("KOLM-Alpha wins at 3.5% fewer parameters (16.9M vs 17.5M)", |
| fontsize=11) |
| fig.tight_layout() |
| fig.savefig("assets/final_scores.png") |
| print("wrote assets/val_loss_curve.png, assets/final_scores.png") |
|
|