epic-quant / COMPARISON.md
toxzak's picture
Add 1.58/3/4/16-bit sweep, packed weights, real SDPA, COMPARISON.md
7e372c7
|
Raw
History Blame Contribute Delete
5.22 kB

EPIC-Quant: 1.58-bit / 3-bit / 4-bit / FP16 sweep

All numbers are real, measured against the actual google/gemma-4-E4B safetensors (15.99 GiB on disk). CPU forward path, BF16 end-to-end, packed 2-bit/3-bit/4-bit weights, F.scaled_dot_product_attention for attention. 200 tokens, seq_len=16 for the layer-forward benchmark.

The brief's proposal (1.58-bit sliding attn) and three reference points (3-bit, 4-bit uniform, FP16/BF16 no-quant) are all run with the same global and MLP policies so the comparison isolates the sliding-attn budget.

1. Weight memory (42 layers, packed bytes + scales)

Policy Attn unquant Attn packed Attn saved MLP unquant MLP packed MLP saved PLE unquant PLE packed
1.58bit (brief) 1284.5 MB 207.0 MB 1077.6 MB 6606.0 MB 1653.4 MB 4952.6 MB 110.1 MB 27.8 MB
3bit 1284.5 MB 321.6 MB 962.9 MB 6606.0 MB 1653.4 MB 4952.6 MB 110.1 MB 27.8 MB
4bit (uniform) 1284.5 MB 321.6 MB 962.9 MB 6606.0 MB 1653.4 MB 4952.6 MB 110.1 MB 27.8 MB
16bit (no quant) 1284.5 MB 1284.5 MB 0.0 MB 6606.0 MB 6606.0 MB 0.0 MB 110.1 MB 110.1 MB

2. Sliding layer (layer 0) — per-tensor L2 reconstruction error

Lower is better. 0.0 = no quant. L2 rel = ||w - w_dequant||â‚‚ / ||w||â‚‚.

Policy PLE gate PLE proj attn q attn k attn v attn o mlp gate mlp up mlp down
1.58bit (brief) 0.200 0.162 1.114 1.116 1.116 1.108 0.186 0.174 0.204
3bit 0.200 0.162 0.302 0.289 0.285 0.291 0.186 0.174 0.204
4bit (uniform) 0.200 0.162 0.173 0.165 0.163 0.166 0.186 0.174 0.204
16bit (no quant) 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000

3. Global layer (layer 5) — per-tensor L2 reconstruction error

Policy PLE gate PLE proj attn q attn k attn v attn o mlp gate mlp up mlp down
1.58bit (brief) 0.275 0.117 0.195 0.262 0.173 0.186 0.229 0.220 0.214
3bit 0.275 0.117 0.195 0.262 0.173 0.186 0.229 0.220 0.214
4bit (uniform) 0.275 0.117 0.195 0.262 0.173 0.186 0.229 0.220 0.214
16bit (no quant) 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000

4. Per-block packed size and forward time

Policy Sliding layer packed Global layer packed Sliding fwd ms Global fwd ms
1.58bit (brief) 43.3 MB 53.2 MB 2101 2128
3bit 46.6 MB 53.2 MB 2013 2130
4bit (uniform) 46.6 MB 53.2 MB 2106 2088
16bit (no quant) 186.1 MB 212.3 MB 839 740

Forward-time numbers are the Python reference path (unpack + matmul). On a real GPU with a fused unpack-and-matmul kernel (Triton / CUTLASS / custom C++), the 1.58-bit and 3-bit paths are expected to exceed FP16 throughput because memory bandwidth is the bottleneck and the packed weights move 2-8× less data per matmul.

5. PLE sparse hash (policy-independent)

Metric Value
PLE full on disk 5637.1 MB
Hot table resident (top-5000 tokens, BF16) 107.5 MB
Hot LRU (cold slices held) 31
Hot hit rate on 200-token 85/15 workload 84.5%
PLE lookups/sec (CPU, single-thread) 21891

6. Estimated working set (text decoder only, no KV cache)

Excludes the main embed_tokens (1.31 GB, kept BF16 in this revision), the vision/audio towers, and the KV cache itself. KV compression is the same across all four policies (sliding 4×, global 5.8× at the configured bit budget).

Policy Attn MLP PLE companions PLE hot table (RAM) Total
1.58bit (brief) 207.0 1653.4 27.8 107.5 1995.7 MB
3bit 321.6 1653.4 27.8 107.5 2110.4 MB
4bit (uniform) 321.6 1653.4 27.8 107.5 2110.4 MB
16bit (no quant) 1284.5 6606.0 110.1 107.5 8108.2 MB

7. Recommendation

  • Don't ship 1.58-bit on sliding attn. L2 recon > 1.0 means the dequantized weights are mostly noise. You'd lose more quality than you'd save weight. The mechanism is right (compress the low-context layer) but the bit budget is wrong.
  • 3-bit on sliding attn is the right answer. L2 recon drops from 1.11 → 0.29 (4× improvement) for +114 MB of attn weight. Per-block layer packed size: 43.3 → 46.6 MB (+8%). Modest cost for a big quality win. Global at 4-bit, MLP at 4-bit unchanged.
  • 4-bit uniform is the safe choice. Sliding attn recon 0.16–0.17 (best in class), no risk, same byte count as 3-bit (because 3-bit packs 2 values/byte just like 4-bit). If you can afford the 322 MB instead of 207 MB, ship this.
  • FP16/BF16 baseline: 7.9 GB of weights, all error is 0. The reference point. Quality is the published Gemma 4 E4B 69.4% MMLU Pro / 25.4% MRCR v2 8-needle 128K.