Report · Sep 27, 2026 · Glyd
Nineteen open models: every matrix 32 to 33% smaller, bit for bit
Every Linear layer's matrix of nineteen open models, SmolLM3-3B to GLM-4.5-Air, packed and unpacked bit for bit: 31.9 to 33.0% smaller, quality on ten.
Ten popular open models were measured first; nine more have been since, from GLM-4.5-Air and Llama-4-Scout-17B-16E-Instruct down to Llama-3.2-3B-Instruct. On all nineteen, Glyd’s smallest layout stores every Linear layer’s matrix 31.9 to 33.0% smaller than bf16, and every matrix unpacks to exactly the bf16 values it held. Where quality was measured, on ten of them, bf16 and Glyd score the same to noise.
The sizes
sizes.py packs every Linear layer’s matrix of a model, unpacks it and compares the result with the original bit for bit. Two things it counts that a quick sum would miss: a layer’s experts kept as one tensor (Gemma 4, Llama 4) count as a matrix an expert, and every projection is counted, the linear-attention inputs of Qwen3-Next and Qwen3.8 included.1
| Model | Matrices in bf16, GB | Glyd, GB | Change, % | Run |
|---|---|---|---|---|
| 215.9 | 144.6 | −33.0 | A10 | |
| 211.9 | 142.2 | −32.9 | A10 | |
| 161.3 | 109.4 | −32.2 | A10 | |
| 136.9 | 91.9 | −32.9 | H100 SXM | |
| 59.8 | 40.2 | −32.7 | H100 SXM | |
| 51.5 | 34.6 | −32.8 | H100 SXM | |
| 51.3 | 34.5 | −32.8 | A10 | |
| 49.5 | 33.3 | −32.8 | A10 | |
| 49.0 | 32.9 | −32.8 | A10 | |
| 45.3 | 30.3 | −33.0 | H100 SXM | |
| 27.3 | 18.3 | −32.9 | H100 SXM | |
| 26.4 | 18.0 | −31.9 | H100 SXM | |
| 21.8 | 14.6 | −32.9 | A10 | |
| 14.0 | 9.4 | −32.8 | H100 SXM | |
| 14.0 | 9.4 | −32.7 | H100 SXM | |
| 13.9 | 9.4 | −32.1 | H100 SXM | |
| 7.3 | 4.9 | −32.2 | A10 | |
| 5.6 | 3.8 | −32.9 | H100 SXM | |
| 5.6 | 3.8 | −32.8 | A10 |
The 12-bit layout, the one Glyd picks on A10, A100 and H100, takes 23.5 to 24.8% off each (the two layouts).
The same model
The products round a little differently from bf16’s, as any two kernels do, so a close call can go either way. Quality was measured where the harness loads the model on one GPU in bf16: perplexity on enwik8 and MMLU on 300 questions, bf16 against Glyd in the same run.
| Model | Perplexity, bf16 | Perplexity, Glyd | MMLU, bf16, % | MMLU, Glyd, % | Answers as bf16’s, % | Run |
|---|---|---|---|---|---|---|
| 14.7888 | 14.7855 | 76.7 | 76.3 | 99.33 | H100 SXM | |
| 27.1955 | 27.1975 | 78.0 | 78.0 | 100.00 | H100 SXM | |
| 19.5915 | 19.5909 | 71.7 | 72.0 | 99.67 | H100 SXM | |
| 12.1422 | 12.1473 | 60.7 | 60.7 | 100.00 | H100 SXM | |
| 20.7490 | 20.7428 | 74.0 | 74.3 | 99.67 | H100 SXM | |
| 29.1467 | 29.1422 | 63.3 | 63.3 | 99.67 | H100 SXM | |
| 15.1946 | 15.1941 | 79.7 | 80.0 | 99.67 | H100 PCIe | |
| — | — | 74.0 | 74.0 | 99.33 | H100 PCIe | |
| 22.4636 | 22.4672 | 71.0 | 71.0 | 99.33 | A10 | |
| 25.1298 | 25.1437 | 63.7 | 64.3 | 98.00 | A10 |
Perplexity stays within 0.06% of bf16’s, and the MMLU answers are bf16’s on 98.0 to 100% of the questions; the differences go both ways. Qwen3.8-27B has a report of its own.
Method
- Sizes:
python sizes.py MODEL_DIR ..., every Linear layer’s matrix in both layouts, unpacked and compared bit for bit. - Quality:
python e2e.py MODEL_DIR --baseline --ppl enwik8 --mmlu 300, bf16 against Glyd in the same run, where the harness loads the model as a causal LM on one GPU. - Models: from Hugging Face; Llama and Gemma from the ungated copies under
unsloth/, the same weights.
The scripts and their options: the GPU docs.
Raw logs
- H100 SXM, Sep 26, 2026: benchmarks/gpu/popular-h100-2026-09-26
- A10, Sep 27, 2026: benchmarks/gpu/open-models-a10-2026-09-27
- H100 PCIe, Sep 27, 2026: benchmarks/gpu/lambda-gpu_1x_h100_pcie-20260926-213544
Every model’s page on this site shows what is measured for it: the models.
Footnotes
-
Only the Linear layers’ matrices are counted, so the bf16 totals sit below the checkpoints’ sizes: GLM-4.5-Air has 215.9 GB of matrices in a 220.94 GB checkpoint. ↩