← All posts
2026.08.16 14 min Technical Report

WarpQuant: Dual-Domain LLM Quantization via Hadamard Rotation and Output-Fisher Sensitivity

WarpQuant creates INT3 weights in a rotated coordinate system and uses Output-Fisher sensitivity in the original coordinates to choose which columns to recover. A TurboQuant-style KV cache and per-token INT8 activations extend the same design to the three memory paths of M=1 decoding.

WarpQuant dual-domain INT3 LLM quantization overview
3.6165Qwen3.8-27B text bpw
11.32 GiB27B weight payload
56.86%ARC-Challenge · 299
3.46×long-context KV compression

Definition: quantize three memory paths separately

Autoregressive decoding streams weights for every token, accumulates a KV cache with context length, and moves activations through each linear operation. WarpQuant does not force one bit-width onto tensors with different distributions and lifetimes.

M=1 LLM decoding
PersistentWeights · 3.5 bpw baseHadamard + block-GPTQ
Context stateKV · K4/V4/R128online append + recent BF16
TransientActivation · A8dynamic per-token scale
Figure 1. The full design separates inference memory by tensor lifetime.

Design: compress in the rotated domain, recover in the original domain

A deterministic signed Hadamard transform R=HD rotates each weight matrix W. The rotated weights use 128-column groups, a Gaussian Lloyd-Max 3-bit codebook, FP16 scales, and block-GPTQ error feedback into later groups. [1][4][5]

R = HD,   Wr = WRT,   y = Q3(Wr)Rx
Algorithm 1WarpQuant PTQ
Require: W, calibration X, output Fisher HG, recovery budget B
  1. 1:

    Construct the signed Hadamard rotation R ← HD

  2. 2:

    Wr ← WRT, Xr ← XRT

  3. 3:

    (Ŵr, codes, scales) ← BlockGPTQQ3,G128(Wr, Xr)

  4. 4:

    W̃ ← ŴrR, E ← W − W̃

  5. 5:

    sc ← HX,ccE:,cTdiag(HG)E:,c / (16dout + 32)

  6. 6:

    Select columns C by descending sc under the global budget B

  7. 7:

    return codes, scales, C, E:,C

Algorithm 1. Rotated quantization and global weak-column recovery for one linear layer.
Original domainW, Xactivation and loss sensitivity
Rotated domainR · W · block-GPTQ3-bit codes + FP16 scales
Original recoveryOutput-Fisher columns+0.05 selected-weight bpw
Figure 2. Quantization and sensitivity selection use different coordinate systems.

In R16E4H4, R16 restores selected weak columns in BF16, while E4 and H4 store the token embedding and lm_head in group-128 INT4. This connects the 3.55-bpw projection design to the payload of the complete text model.

Selecting recovery columns with Output-Fisher

Recovery priority is not determined by weight error alone. Input activation energy H_X, quantization residual E, and the squared output NLL gradient H_G estimate how strongly each column's error reaches next-token loss. [8]

St,c = HX,cc · E:,cT diag(HG) E:,c / Ct
Ct = 16 · output_rowst + 32 index bits

Here W_base is the block-GPTQ reconstruction mapped back to the original coordinates. The column score used by the selector is defined by the following PyTorch function.

import torch

def output_fisher_score(W, W_base, X, H_G, index_bits=32):
    assert W.ndim == W_base.ndim == 2
    assert X.shape[-1] == W.shape[1]
    assert H_G.shape == (W.shape[0],)

    E = W.float() - W_base.float()
    H_X = X.float().square().mean(dim=0)
    loss_weighted_error = (
        H_G.float()[:, None] * E.square()
    ).sum(dim=0)
    cost_bits = 16 * W.shape[0] + index_bits
    return H_X * loss_weighted_error / cost_bits
Activation × residual 9,221
Output-Fisher 19,499
Figure 3. Llama 3 8B columns selected under the same +0.05-bpw budget. Cost normalization restores more useful columns.

Because output directions are not treated uniformly, the budget shifts toward loss-sensitive regions such as v_proj and down_proj. At the same Llama 3 8B payload, WikiText-2 perplexity moves from 7.3953 to 7.3446.

Results: Qwen3.8-27B text backbone

The denominator is 26,895,998,464 text-generation parameters, excluding the vision tower and MTP. Commonsense is the macro average of fixed 1,000-item samples from HellaSwag, WinoGrande, and PIQA.

BF16 50.11 GiB
Q4_K_M 15.41 GiB
IQ3_S 11.57 GiB
WarpQuant 11.32 GiB
Figure 4. Full text-backbone payload. WarpQuant uses a packed-equivalent analytical value.
Qwen3.8-27B quality and memory Pareto comparison
Figure 5. Memory–quality Pareto frontier and ARC-Challenge accuracy under the same text-backbone denominator.
FormatText bpwPayloadWT2 PPL ↓ARC-299 ↑MMLU-13,943 ↑Commonsense ↑GSM8K-500 flex ↑
BF1616.0050.11 GiB6.954852.1743.0779.2370.40
Q4_K_M4.9215.41 GiB6.965650.8442.9079.2375.20
IQ3_S3.694011.57 GiB7.182052.1742.9778.8359.40
WarpQuant R16E4H43.616511.32 GiB7.473756.8642.7278.8361.00

PPL, ARC, and MMLU use the same llama.cpp evaluation path. GSM8K uses the same first 500 examples and 5-shot prompts for all four models; the table reports lm-evaluation-harness flexible-extract accuracy.

−0.0775 bpwlower text rate than IQ3_S
+4.68 ppARC over IQ3_S
−0.25 ppMMLU against IQ3_S
same 78.83commonsense average

The same format comparison on other models

On Qwen3.5-4B, WarpQuant is 243.6 MB smaller than IQ3_M while improving PPL, ARC, and MMLU. On Llama 3 8B, it is 43.0 MB smaller than IQ3_S and scores higher on ARC, while IQ3_S retains better PPL and MMLU.

Qwen3.5-4B
FormatText bpwPayloadWT2 PPL ↓ARC-299 ↑MMLU ↑
BF1616.007.846 GiB8.388545.8239.58
Q4_K_M5.132.523 GiB8.547248.8339.48
IQ3_M4.092.015 GiB10.697642.8137.41
WarpQuant Fisher R16E43.65141.788 GiB9.249446.1538.13
Llama 3 8B
FormatText bpwPayloadWT2 PPL ↓ARC-299 ↑MMLU ↑
BF1616.0014.965 GiB6.255950.5041.04
Q4_K_M4.894.583 GiB6.435950.8440.67
IQ3_S + imatrix3.663.429 GiB6.992944.1539.87
WarpQuant Fisher R16E4H43.62563.389 GiB7.344645.4938.99

KV cache and activations

Across Qwen3.8-27B's 16 full-attention layers, the newest 128 tokens stay in BF16. Older keys use a 3-bit MSE code plus a 1-bit QJL residual after random rotation; values use per-token group-32 INT4. This applies TurboQuant's online inner-product quantization to the KV cache. [9][10][11][12]

K4 / V4 · older tokens
BF16 · R128
4K0.25 → 0.08 GiB3.21×
32K2.00 → 0.58 GiB3.43×
128K8.00 → 2.32 GiB3.45×
256K16.00 → 4.63 GiB3.46×
Figure 6. As context grows, the fixed recent-window cost shrinks and compression approaches 3.46×.

Activations use a per-token absolute-maximum scale for inputs to 496 decoder linear modules. The table compares weight-only, KV, A8, and combined paths on the same Qwen3.8-27B R16E4H4 checkpoint and 4,088 WikiText-2 validation tokens. [13][14]

ConfigurationPPL ↓Δ PPLTop-1KV @ 512
WarpQuant weight-only6.6468reference1.00×
+ K4/V4/R1286.6495+0.002797.65%2.14×
+ Dynamic A86.7139+0.067192.10%1.00×
+ K4/V4/R128 + A86.6945+0.047792.47%2.14×

Measurement and reproduction

ModelQwen/Qwen3.8-27Brevision 1d4bf0f2…
Text denominator26,895,998,464vision + MTP excluded
Evaluatorllama.cppWT2 · ARC · MMLU
HardwareNVIDIA H100 80GBsingle-GPU evaluation
CalibrationOutput-Fishernext-token NLL gradients
Commonsense3 × 1,000fixed deterministic samples

GGUF baselines use their physical text-model rate and payload. WarpQuant sums packed codes, FP16 scales, weak-column indices and residuals, plus embedding/head group scales. Its evaluation checkpoint is a BF16 carrier containing the same quantized values.

01CalibrateX energy + output Fisher
02Quantizerotation + block-GPTQ
03Accounttext-only packed payload
04EvaluatePPL + reasoning + M=1

Relationship to prior work

References

[1]Elias Frantar, Saleh Ashkboos, Torsten Hoefler, and Dan Alistarh. “GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers.” ICLR, 2023.

[2]Ji Lin et al. “AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration.” MLSys, 2024.

[3]Sehoon Kim et al. “SqueezeLLM: Dense-and-Sparse Quantization.” ICML, 2024.

[4]Albert Tseng, Jerry Chee, Qingyao Sun, Volodymyr Kuleshov, and Christopher De Sa. “QuIP#: Even Better LLM Quantization with Hadamard Incoherence and Lattice Codebooks.” ICML, 2024.

[5]Vladimir Malinovskii, Andrei Panferov, Ivan Ilin, Han Guo, Peter Richtárik, and Dan Alistarh. “Pushing the Limits of Large Language Model Quantization via the Linearity Theorem.” NAACL, 2025.

[6]Saleh Ashkboos et al. “QuaRot: Outlier-Free 4-Bit Inference in Rotated LLMs.” arXiv preprint arXiv:2404.00456 (2024).

[7]Zhenyu Liu et al. “SpinQuant: LLM Quantization with Learned Rotations.” arXiv preprint arXiv:2405.16406 (2024).

[8]Jinuk Kim, Marwa El Halabi, Wonpyo Park, Clemens J. S. Schaefer, Deokjae Lee, Yeonhong Park, Jae W. Lee, and Hyun Oh Song. “GuidedQuant: Large Language Model Quantization via Exploiting End Loss Guidance.” ICML, 2025.

[9]Amir Zandieh, Majid Daliri, Majid Hadian, and Vahab Mirrokni. “TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate.” arXiv preprint arXiv:2504.19874 (2025).

[10]Amir Zandieh, Majid Daliri, and Insu Han. “QJL: 1-Bit Quantized JL Transform for KV Cache Quantization with Zero Overhead.” arXiv preprint arXiv:2406.03482 (2024).

[11]Zirui Liu et al. “KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache.” ICML, 2024.

[12]Coleman Hooper et al. “KVQuant: Towards 10 Million Context Length LLM Inference with KV Cache Quantization.” NeurIPS, 2024.

[13]Guangxuan Xiao, Ji Lin, Mickael Seznec, Hao Wu, Julien Demouth, and Song Han. “SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models.” ICML, 2023.

[14]Fuwen Tan et al. “MobileQuant: Mobile-friendly Quantization for On-device Language Models.” arXiv preprint arXiv:2408.13933 (2024).

[15]Hung-Yueh Chiang et al. “Quamba2: A Robust and Scalable Post-training Quantization Framework for Selective State Space Models.” arXiv preprint arXiv:2503.22879 (2025).

[16]Georgi Gerganov et al. llama.cpp: LLM inference in C/C++. GitHub repository. Available at: https://github.com/ggml-org/llama.cpp.

Citation

@misc{choi2026warpquant,
  author       = {Harim Choi},
  title        = {WarpQuant: Dual-Domain LLM Quantization via Hadamard Rotation and Output-Fisher Sensitivity},
  year         = {2026},
  url          = {https://harimxchoi.github.io/projects/warpquant}
}