# Benchmark protocol (WP33 TITAN-MoE) — v0.1, 2026-11-01 (Gate A draft; frozen at Gate C before any optimization claim) ## 1. Models (exact revisions pinned in `benchmarks/configs/models.yaml`) | tier | model | HF repo / revision | licence | layers | experts | top-k | shared | active / total params | quantization | |---|---|---|---|---|---|---|---|---|---| | small | OLMoE-1B-7B-0125-Instruct | `mlx-community/OLMoE-1B-7B-0125-Instruct-4bit` @ `e2384419` | Apache-2.0 | 16 | 64 | 8 | none | 1.3B / 6.9B | affine 4-bit, g64 (MLX) | | medium (Gate C+, needs download authorization ≤ 20 GB → granted by default rule in CLAUDE.md: 17.2 GB) | Qwen3-30B-A3B-Instruct-2507 | `mlx-community/Qwen3-30B-A3B-Instruct-2507-4bit` @ `e9675aa3` | Apache-2.0 | 48 | 128 | 8 | none | 3.3B / 30.5B | affine 4-bit, g64 | | large (Gate F, requires explicit authorization: 62 GB) | gpt-oss-120b | `mlx-community/gpt-oss-120b-MXFP4-Q4` @ `bce781be` | Apache-2.0 | 36 | 128 | 4 | none | 5.1B / 117B | MXFP4 experts | Tokenizers: the ones shipped in each repo. Decoding: greedy (temperature 0) for correctness and throughput; sampling only in quality checks with fixed seeds. ## 2. Baselines - **MLX-LM** (`python -m mlx_lm generate`, same venv, same weights, same revision) — primary, exactly comparable precision. - **llama.cpp** (`llama-bench`, `llama-cli`, Metal backend, commit `a91eab6`) on a GGUF of the *same* base checkpoint; the quantization scheme differs (Q4_K_M / Q4_0 vs MLX affine g64) → reported with a NON-COMPARABLE PRECISION flag and a quality check (perplexity on the same held-out text) next to the speed numbers. - **Colibri** (`0a5504a`): OLMoE engine (int8 conversion, CPU; Vulkan/CUDA not on macOS; Metal backend only for GLM/Inkling/Kimi engines) → OLMoE on Colibri is CPU-only int8: reported as a different-precision, different-device reference, never as a same-conditions competitor. For the large tier (GLM-5.2 int4) Colibri is compared only if TITAN-MoE runs GLM-5.2 (not planned). - Internal controls: TITAN reference backend with all experts resident (upper bound), no-prefetch demand loading, LRU, LFU, static placement, single-node. ## 3. Workloads (`benchmarks/configs/workloads.yaml`) Prompt families (held-out split by family, never used to fit predictors): general chat (Alpaca-style instructions), code (HumanEval-like prompts), reasoning (GSM8K-style), long-context summarization (2k–8k tokens), and a "drift" family that switches domain mid-session to test changing expert popularity. Output lengths 64 / 256 / 1024. Batch 1 (latency) and 4 / 8 (throughput) where the backend supports batching. Cold start = process start with purged page cache; warm = second run. ## 4. Metrics (all logged per request as JSON lines in `benchmarks/raw///.jsonl`) prefill tok/s · decode tok/s · TTFT · inter-token latency p50/p95/p99 · total latency · expert hit rate (local RAM / remote RAM / SSD) · stall time (ms waiting for weights) · bytes read from SSD · bytes over network · peak RSS and `mx.get_peak_memory()` · GPU utilization (`powermetrics --samplers gpu_power`, sudo) · energy per token (powermetrics CPU+GPU+ANE package power × wall time / tokens) · correctness (argmax agreement and max |Δlogit| vs MLX-LM reference) · stability (variance across repeats). ## 5. Procedure Fixed seeds; exact command recorded in each JSON; warm-up run discarded; benchmark order randomized per block (seeded); ≥ 5 repeats (bootstrap 95 % CI, 10 000 resamples); temperature/thermal pressure sampled every 1 s during runs (`powermetrics --samplers thermal`); hardware inventory hash attached; timers = `time.perf_counter_ns` on each node with a one-way clock-offset estimate from an NTP-style ping exchange before each distributed run; compilation/warm-up measured separately from steady state; different precisions never pooled in the same table without a precision column. ## 6. Ablation plan (factorial where feasible) predictor ∈ {none, LRU, LFU, transition, learned} × prefetch depth ∈ {0, 1, 2 layers} × memory budget ∈ {25 %, 50 %, 75 %, 100 % of expert bytes} × placement ∈ {static-uniform, frequency, capacity-aware, topology-aware} × replication ∈ {0, 1 hot set} × transport ∈ {TCP LAN, (Thunderbolt/JACCL if cabled)} × kernels ∈ {stock MLX, TITAN Metal} × batch ∈ {1, 4, 8}. Interactions reported, including losses. ## 7. Statistical audit (Gate G) Pre-registered primary endpoints: H1 decode tok/s at 50 % budget (predictor vs no-prefetch); H2 decode tok/s 2–4 nodes (topology-aware vs static); H3 tok/s vs budget curve AUC; H4 end-to-end decode tok/s (TITAN kernels vs stock); H5 hypervolume of the (latency, throughput, energy) Pareto set. Effects reported with CIs; p-values secondary.