Benchmark datapoints from a 2-socket Ice Lake host with the whole int4 container RAM-resident — posting per the README's request for real-machine numbers. Also independently confirms two existing findings (#82 NUMA gains; the 6×5090 experiment log's "speculation loses at full residency") on pure-CPU hardware.
Machine
- Azure Standard_E96d_v5: 2× Intel Xeon Platinum 8370C (Ice Lake), 48 physical cores / 96 SMT, 2 NUMA nodes, 661 GiB RAM, avx512-vnni IDOT kernel
- Local NVMe: 4.18 GB/s O_DIRECT (iobench 19 MB × 64, 8 threads); buffered 26.9 GB/s (page cache)
- colibri
main @ 00ed8d5, gcc 13.3, setup.sh, self-test 32/32
- Model:
mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp (int8 MTP heads verified by size)
Method
Greedy (TEMP=0), --ngen 256, single request, KVSAVE=0, fresh process per run. Full residency via PIN_FILL=1 + PIN_GB=380 (all 19,456 experts pinned at startup, ~47 s warm / ~2 min cold page cache; expert hit 100%, disk service 0.000 s in every run below). 48 physical cores, OMP_PROC_BIND=spread OMP_PLACES=cores with the COLI_OMP_TUNED=1 workaround for the re-exec affinity issue (#471). Run-to-run noise observed ±0.1 tok/s.
Results (each row changes one thing vs the row above)
| config |
tok/s |
notes |
| baseline (defaults + full pin) |
2.14 |
expert-matmul 58% of wall, 48.9 GB/s effective |
+ COLI_NUMA=1 |
2.65 |
+24% — matches the 2-socket selective-interleave gains in #82 |
+ DRAFT=0 (MTP off) |
3.65 |
see below |
+ I4S=1 (int4 IDOT at S=1) |
3.85 |
+5.5%; expert-matmul 67.8→89.5 GB/s |
+ TOPP=0.7 (lossy) |
4.85 |
for completeness |
Neutral on this host: CACHE_ROUTE=1 (route_agree 100.0%, route_kl 0.0000 at full residency — nothing to substitute), I4_ACC512=0 vs 1 (3.70 vs 3.65, within noise — the S=1 down-proj is the IDOT path's job once I4S=1), SMT 96 threads (3.43, −6% vs 48 physical), PILOT untested-by-design (disk already 0%).
MTP speculation at full residency (CPU-only confirmation)
int8 head works (not the #8 defect): DRAFT=3 → 2.39 tok/forward, DRAFT=1 → 78% acceptance. It still loses:
| DRAFT |
tok/s |
tok/forward |
| 3 (auto default) |
2.65 |
2.39 |
| 1 |
3.53 |
1.78 |
| 0 |
3.65 |
1.00 |
Same structural cause the 6×5090 log identified: with disk out of the path the cost is per-unique-expert, and verify positions route to mostly different experts, so a verify batch scales cost ~linearly with S. Worth considering: at 100% expert hit rate the engine could warn (or auto-suggest DRAFT=0) — the DRAFT=-1 default silently costs ~27% on hosts like this.
Where the time goes at 3.85 tok/s
PROF=1: expert-I/O 0% | expert-matmul 49% | attention 37% | other 12%. Expert-matmul runs at ~89 GB/s effective vs ~350+ GB/s of platform DRAM bandwidth — the per-expert OpenMP fork/join cadence looks like the cap (2 regions/expert × 8 experts × 75 layers, ~200 KB touched per thread per region). An experimental one-region-per-block restructuring measured +24% here (4.77 tok/s); happy to open a separate discussion/PR with the patch if there's interest.
Benchmark datapoints from a 2-socket Ice Lake host with the whole int4 container RAM-resident — posting per the README's request for real-machine numbers. Also independently confirms two existing findings (#82 NUMA gains; the 6×5090 experiment log's "speculation loses at full residency") on pure-CPU hardware.
Machine
main @ 00ed8d5, gcc 13.3,setup.sh, self-test 32/32mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp(int8 MTP heads verified by size)Method
Greedy (
TEMP=0),--ngen 256, single request,KVSAVE=0, fresh process per run. Full residency viaPIN_FILL=1+PIN_GB=380(all 19,456 experts pinned at startup, ~47 s warm / ~2 min cold page cache; expert hit 100%, disk service 0.000 s in every run below). 48 physical cores,OMP_PROC_BIND=spread OMP_PLACES=coreswith theCOLI_OMP_TUNED=1workaround for the re-exec affinity issue (#471). Run-to-run noise observed ±0.1 tok/s.Results (each row changes one thing vs the row above)
COLI_NUMA=1DRAFT=0(MTP off)I4S=1(int4 IDOT at S=1)TOPP=0.7(lossy)Neutral on this host:
CACHE_ROUTE=1(route_agree 100.0%, route_kl 0.0000 at full residency — nothing to substitute),I4_ACC512=0vs1(3.70 vs 3.65, within noise — the S=1 down-proj is the IDOT path's job onceI4S=1), SMT 96 threads (3.43, −6% vs 48 physical),PILOTuntested-by-design (disk already 0%).MTP speculation at full residency (CPU-only confirmation)
int8 head works (not the #8 defect):
DRAFT=3→ 2.39 tok/forward,DRAFT=1→ 78% acceptance. It still loses:Same structural cause the 6×5090 log identified: with disk out of the path the cost is per-unique-expert, and verify positions route to mostly different experts, so a verify batch scales cost ~linearly with S. Worth considering: at 100% expert hit rate the engine could warn (or auto-suggest
DRAFT=0) — theDRAFT=-1default silently costs ~27% on hosts like this.Where the time goes at 3.85 tok/s
PROF=1: expert-I/O 0% | expert-matmul 49% | attention 37% | other 12%. Expert-matmul runs at ~89 GB/s effective vs ~350+ GB/s of platform DRAM bandwidth — the per-expert OpenMP fork/join cadence looks like the cap (2 regions/expert × 8 experts × 75 layers, ~200 KB touched per thread per region). An experimental one-region-per-block restructuring measured +24% here (4.77 tok/s); happy to open a separate discussion/PR with the patch if there's interest.