Skip to the content.

GLM-5.2 native on fak: first throughput, next steps & benchmarking plan

2026-06-25. Living companion to native-753b-track-staged-plan. It records the first native GLM-5.2 (glm_moe_dsa) decode/prefill tok/s measured on a GPU server, the bug fixed to get there, what is next, and — most important — how to compare fak’s number to the field without a category error.

1. What shipped this cycle

2. First native GLM-5.2 tok/s (GPU server, datacenter GPU, sm_80)

HONEST SCOPE. glmdsatput builds a synthetic, reduced-layer, dense-FFN glm_moe_dsa (real architecture + real per-layer dims, random weights, no MoE experts). The tok/s is fak’s per-token device-kernel cost at a fits-one-GPU scalenot the 753B serving rate. The scope field travels in every record so the number cannot be quoted out of its caveat.

P=512 prefill, Q8_0, decode-reps 5 (the committed sweep, head b68a182):

layers hidden topk decode tok/s prefill tok/s
8 2048 256 26.53 27.02
8 2048 512 15.80 22.27
16 2048 256 13.44 12.95
16 4096 256 8.49 6.85

Small-context (P=8 / 64, the bisection that pinned the leak):

precision P decode tok/s prefill tok/s
f32 8 49.78 23.27
Q8_0 8 56.61 41.82
Q8_0 64 40.38 40.65

Decode tok/s falls with depth, width, and context length (DSA attends the selected keys per token, so a 512-context decode does more work than a P=8 one). The 4-config glm-throughput/1 record persists on the box at <private-scratch>/glmw116b7ed250b7.result — landing it is a P1 below.

3. Open issues / next steps (prioritized)

4. Benchmarking comparisons — the honest framework

4.1 The category boundary (read this first)

Three numbers exist; only some are comparable:

Do NOT put “fak 26 tok/s” next to “llama.cpp 2.62 tok/s”. That is a category error: fak’s number is a synthetic, dense-FFN, no-MoE, fits-one-GPU kernel cost; llama.cpp’s is a real 425 GB MoE checkpoint streamed off host RAM. Different model, different work, different scale. Honesty rule: never claim “fak serves 753B”, and never compare the synthetic kernel number to a real-serving number.

4.2 What a fair comparison requires (apples-to-apples)

Hold {model weights, hardware, precision, context, batch} equal and report the same metrics for every engine:

4.3 Comparison ladder (each rung a real apples-to-apples run)

4.4 What to benchmark for

fak’s pitch is not raw tok/s (the correctness-first quant kernels are honestly slower than tensor-core SGEMM — the win is VRAM/bandwidth, not FLOPs). It is:

So every comparison table should carry a correctness column and a safety/reuse column, not tok/s alone.

5. Reproduce

# Forward-correctness witness (cosine 1.0):
python private witness fetcher GPU server --runner private witness runner
# Native throughput sweep (this note's numbers):
python private witness fetcher GPU server --runner private throughput runner
# Local single run on a CUDA node:
go run -tags cuda ./cmd/glmdsatput -layers 8 -hidden 2048 -backend cuda -decode-steps 64 -json