KOLM-Alpha / make_graphs.py
Dbrent's picture
add make_graphs.py
b0096b4 verified
Raw
History Blame Contribute Delete
2.32 kB
#!/usr/bin/env python3
"""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" # KOLM-Alpha
TMT = "#FF7A45" # Transformer Model Twin
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")
# --- Graph 1: validation-loss curves (the crossover) ---
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")
# --- Graph 2: final perplexity + loss bars ---
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")