Report · · Glyd
Ten popular open models: every matrix 32 to 33% smaller, bit for bit
Every Linear layer's matrix of ten popular open models, from SmolLM3 3B to Llama 3.3 70B, packed and unpacked bit for bit: 31.9 to 33.0% smaller.
Glyd’s tiered layout stores the matrices of ten popular open models 31.9 to 33.0% smaller than bf16, and every one of them unpacks to exactly the bf16 values it held. Where a model’s quality could be measured, bf16 and Glyd score the same to noise.
The sizes
gpu/sizes.py packs every Linear layer’s matrix of a model with Glyd’s tiered layout, unpacks it and compares the result with the original bit for bit. These are the totals.1
| Model | Matrices in bf16 | Glyd | Change |
|---|---|---|---|
| Llama 3.3 70B Instruct | 136.9 GB | 91.9 GB | −32.9% |
| Qwen3 30B-A3B (MoE) | 59.8 GB | 40.2 GB | −32.7% |
| Gemma 3 27B | 51.5 GB | 34.6 GB | −32.8% |
| Mistral Small 3.2 24B | 45.3 GB | 30.3 GB | −33.0% |
| Phi-4 (14B) | 27.3 GB | 18.3 GB | −32.9% |
| DeepSeek-R1-Distill-Qwen 14B | 26.4 GB | 18.0 GB | −31.9% |
| Llama 3.1 8B Instruct | 14.0 GB | 9.4 GB | −32.8% |
| Mistral 7B Instruct v0.3 | 14.0 GB | 9.4 GB | −32.7% |
| Qwen3 8B | 13.9 GB | 9.4 GB | −32.1% |
| SmolLM3 3B | 5.6 GB | 3.8 GB | −32.9% |
The 12-bit layout, which decodes with less work and is the one Glyd picks on A10, A100 and H100, takes 24.7 to 24.8% off each.
The same model
The weights are identical, so the model is too. What can still move is the last bit of a sum: the matrix products add their terms in another order than cuBLAS’s, as any two kernels do.2 Quality was measured where the harness loads the model on one GPU in bf16, six of the ten: perplexity on enwik8 and MMLU on 300 questions, bf16 against Glyd in the same run.
| Model | Perplexity, bf16 | Glyd | MMLU, bf16 | Glyd |
|---|---|---|---|---|
| Phi-4 (14B) | 14.7888 | 14.7855 | 76.7% | 76.3% |
| DeepSeek-R1-Distill-Qwen 14B | 27.1955 | 27.1975 | 78.0% | 78.0% |
| Llama 3.1 8B Instruct | 19.5915 | 19.5909 | 71.7% | 72.0% |
| Mistral 7B Instruct v0.3 | 12.1422 | 12.1473 | 60.7% | 60.7% |
| Qwen3 8B | 20.7490 | 20.7428 | 74.0% | 74.3% |
| SmolLM3 3B | 29.1467 | 29.1422 | 63.3% | 63.3% |
Perplexity stays within 0.04% of bf16, and the MMLU answers are bf16’s on 99.3 to 100% of the questions. The differences go both ways.
Method
- Sizes: every Linear layer’s matrix packed with the tiered layout, unpacked and compared bit for bit (
gpu/sizes.py). - Quality: perplexity on enwik8 and MMLU on 300 questions, bf16 against Glyd in the same run, where the harness loads the model on one GPU in bf16.
- Hardware: an H100 SXM, Sep 26, 2026. The driver, CUDA and PyTorch versions are in the logs.
Raw logs
benchmarks/gpu/popular-h100-2026-09-26 in the repository. Every model’s page on this site shows its measured numbers: see the models.
Footnotes
-
Only the Linear layers’ matrices are counted, which is why the bf16 totals sit below the checkpoints’ sizes: Llama 3.3 70B has 136.9 GB of matrices in a 141.11 GB checkpoint. ↩
-
Floating-point addition is not associative, so two kernels that sum the same products in a different order can round the last bit differently. ↩