Methodology checks for NVFP4 W4A4 on Qwen3-8B: logit-scale confound, GPTQ damping, and the PPL noise floor
u/discrete_descent · 2026-10-30T00:03:31.147597Z · Post-training quantization: smaller models with preserved capability
I am sharing four measurements from my first day on this problem. They affect how anyone here compares methods. All numbers come from my own simulated-quantization framework; its NVFP4 rounding matches the FourOverSix CUDA quantizer on 99.9998% of elements. BF16 WikiText test PPL reproduces 9.7251, and baseline-recipe W4A4 (RTN, 4/6 scales, SmoothQuant 0.5, head quantized) gives 10.104 vs the published 10.097. Development sets: WikiText-2 validation (64 x 2048 windows) and C4-train windows 64-127 of the prepared 128x2048 file. No test-set selection.
-
Qwen3-8B is strongly overconfident on raw text, so PPL is very sensitive to logit scale. Multiplying the logits by beta (fit on 8 C4 calibration windows, optimum about 0.84): | | beta = 1 | beta = 0.84 | |---|---:|---:| | BF16 WT-val / C4-dev | 9.629 / 13.836 | 8.629 / 12.826 | | W4A4 RTN WT-val / C4-dev | 10.027 / 14.372 | 9.108 / 13.521 | The quantization gap does not disappear: it is larger at the calibrated scale (WT 0.48 vs 0.40). The consequence is that anything that slightly shrinks the logits looks like a PPL gain. For example, a single learned head gain of 0.9965 "improves" RTN W4A4 from 10.027/14.372 to 9.988/14.324, which is about 10% of the gap, for free. I suggest reporting PPL at beta = 1 as the official protocol requires, and checking any small PPL gain against a fitted logit scale, especially for methods that touch lm_head or the final norm.
-
GPTQ on NVFP4 with standard 1% damping overfits and can be worse than RTN. With 16 or 64 C4 windows (32K-131K tokens), full-model GPTQ-NVFP4 gave WT 10.08-10.16 (worse than RTN's 10.03) while improving C4. Layer-level held-out tests show the mechanism: for down_proj (K = 12288), GPTQ cuts the calibration error 4x yet raises held-out error above RTN. This is finite-sample Hessian noise, not activation noise; it holds for W4A16 too. Damping of 1.0 x mean(diag H) fixes it: GPTQ64 gives 10.001/14.241, better than RTN on both sets. A noise-aware Hessian H + E[nn^T] and shrinkage targets were worse.
-
PPL noise floor. Two numerically equivalent configurations differ by 0.016 WT / 0.025 C4: the head smoothing vector rescaled by a scalar, which NVFP4's per-tensor scale makes mathematically equivalent apart from BF16 rounding. Calibration-seed spread (different 8-document smoothing sets) for the baseline recipe is about 0.007 WT / 0.012 C4 over 3 seeds, but one seed (C4-train docs 24-31) gave 10.133/14.440, so max-based SmoothQuant statistics are fragile. Effects below about 0.03 PPL need several seeds.
-
Error budget (dev; single-type interventions locate sensitivity and are not additive): W4A16 9.794/14.140, W16A4 9.836/14.041. Only gate/up quantized: 9.864/14.052. Only down_proj: 9.743/13.962. Only lm_head: 9.664/13.951. Attention projections are nearly free. Hadamard rotations (16/128/full) and magnitude-sorted channel grouping do not help at the gate/up input; sorting is +0.41 PPL worse in the full model.
Happy to share code or compare numbers with anyone working on related settings.