PHASE 4 — Scale: profiling, feasible Base architecture, main ingestion, frozen test protocol (2026-11-02)
Profiling (scripts/benchmark.py, M3U96b, Apple M3 Ultra, torch 2.15.0 MPS, FP32, real pilot grids)
Data loader (batch 64, memory-mapped grids, spawned workers, after warm-up): 3 971 ex/s (0 workers), 13 016 (4), 38 486 (8) → the loader is never the bottleneck (training consumes < 800 ex/s).
| Preset | Parameters (measured) | Batch | Steps/s | Examples/s | Peak MPS memory | Inference ms/origin (batched) |
|---|---|---|---|---|---|---|
| Small (d192, 4L) | 3 455 619 | 32 / 64 / 128 | 20.8 / 12.2 / 5.9 | 666 / 782 / 758 | 54 / 69 / 97 MB | 0.34 / 0.25 / 0.27 |
| Spec (d256, 6L, the brief) | 7 677 955 | 32 / 64 / 128 | 11.5 / 6.3 / 3.0 | 369 / 402 / 380 | 114 / 119 / 147 MB | 0.59 / 0.48 / 0.53 |
| Base (d384, 8L) | 20 718 339 | 32 / 64 / 128 | 6.1 / 3.2 / 1.5 | 195 / 207 / 193 | 275 / 284 / 315 MB | 5.0 / 1.6 / 1.8 |
| Batch-1 latency 4.3 / 5.1 / 5.9 ms. Losses finite in FP32 at every setting. Mixed precision was not enabled (no stability | ||||||
| study yet). Memory is tiny relative to the 96 GB node; batch 64 is the throughput optimum for all presets. |
Decision: Base = 20.7 M parameters (inside the 15–30 M target); Small = 3.5 M (inside 3–5 M)
Budget at batch 64 for the frozen main protocol (12 000 steps = 768 000 examples ≈ 1.3 passes over the 600 k training origins drawn at 2 per instrument-session): Small ≈ 16 min, Spec ≈ 32 min, Base ≈ 62 min of pure training plus validation passes (60 batches every 1 000 steps) and prediction (≈ 1.45 M evaluation origins at stride 15 → ≈ 6 min per Small model, ≈ 40 min for Base at 1.6 ms/origin). The 50–100 M "Large" preset is not trained in v1.0 (no scaling evidence yet; documented limitation).
Main ingestion (completed before this phase, docs/PHASE_1_REPORT.md)
300 instruments × 2018–2025: 233 958 776 rows (220 142 835 regular hours), 3.5 GB Parquet, 414 s of exports, 19 s of grids; disk usage ≈ 8 GB of 423 GB free.
Frozen test protocol (configs/main.yaml, configs/final.yaml)
- Train ≤ 2022-12-31, validation 2023, development test 2024 (model selection and ablations), final 2025 untouched
(run once with the main-study checkpoints,
--models-from results/metrics/main). - Evaluation origins every 15 minutes from 10:00 (24 per normal session); 200 Monte Carlo draws per origin.
- Held-out instruments (60) evaluated zero-shot with the pooled checkpoints.
- Ablations (
configs/ablations.yaml): Small scale, 4 000 steps for every variant and for its reference (mrpt_small_b4k), seed 1 (+ seeds 2, 3 for the reference). - Statistics: day-cluster bootstrap, HAC Diebold–Mariano with lag = overlap × instruments, Holm/BH.
Go / no-go
GO to P5 (main_chain launched on M3U96b 2026-11-02 18:5x ET: benchmark → configs/main.yaml).