matilda-mini / tests /test_run.py
prometheus04's picture
Matilda-Mini phases 1-5 + runbook
880f286 verified
Raw
History Blame Contribute Delete
1.84 kB
"""The launch entrypoint: configs parse, build, override, and run."""
import sys
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))
import run # noqa: E402
def _load(name):
return json.loads((ROOT / "configs" / name).read_text())
def test_shipped_configs_build():
for name in ("calibration.json", "base_124m.json"):
mcfg, tcfg = run.build(_load(name))
assert mcfg.d_model == 768 and mcfg.n_layers == 12
assert tcfg.seq_len == 1024
def test_base_config_targets_about_3B_tokens():
_, tcfg = run.build(_load("base_124m.json"))
tokens = tcfg.total_steps * tcfg.batch_size * tcfg.grad_accum * tcfg.seq_len
assert 2.5e9 < tokens < 3.5e9
def test_overrides_coerce_types():
cfg = {"train": {"batch_size": 24}}
out = run.apply_overrides(cfg, ["train.batch_size=48", "train.compile=true",
"train.lr=0.0006"])
assert out["train"]["batch_size"] == 48 and isinstance(
out["train"]["batch_size"], int)
assert out["train"]["compile"] is True
assert out["train"]["lr"] == 0.0006
def test_dry_run_builds_synthetic_and_steps(tmp_path):
cfg = _load("calibration.json")
cfg = run.apply_overrides(cfg, [
"model.d_model=64", "model.n_layers=2", "model.n_heads=4",
"model.n_kv_heads=2", "model.vocab_size=256", "model.max_seq_len=64",
"train.total_steps=4", "train.warmup_steps=1", "train.batch_size=4",
"train.seq_len=64", "train.device=cpu", "train.dtype=float32",
"train.compile=false", f"train.ckpt_dir={tmp_path.as_posix()}",
])
mcfg, tcfg = run.build(cfg)
stream = run.build_stream(mcfg, tcfg, data_dir=None, dry_run=True)
from matilda.train import Trainer
assert Trainer(mcfg, tcfg, stream).train() == 4