Papers › Pushing the Limits of Large Language Model Quantization via the Linearity Theorem

Pushing the Limits of Large Language Model Quantization via the Linearity Theorem

26 Nov 2024arXiv:2411.17525archive 2025-07-28

Vladimir Malinovskii, Andrei Panferov, Ivan Ilin, Han Guo, Peter Richtárik, Dan Alistarh

Quantizing large language models has become a standard way to reduce their memory and computational costs. Typically, existing methods focus on breaking down the problem into individual layer-wise sub-problems, and minimizing per-layer error, measured via various metrics. Yet, this approach currently lacks theoretical justification and the metrics employed may be sub-optimal. In this paper, we present a "linearity theorem" establishing a direct relationship between the layer-wise ℓ₂ reconstruction error and the model perplexity increase due to quantization. This insight enables two novel applications: (1) a simple data-free LLM quantization method using Hadamard rotations and MSE-optimal grids, dubbed HIGGS, which outperforms all prior data-free approaches such as the extremely popular NF4 quantized format, and (2) an optimal solution to the problem of finding non-uniform per-layer quantization levels which match a given compression constraint in the medium-bitwidth regime, obtained by reduction to dynamic programming. On the practical side, we demonstrate improved accuracy-compression trade-offs on Llama-3.1 and 3.2-family models, as well as on Qwen-family models. Further, we show that our method can be efficiently supported in terms of GPU kernels at various batch sizes, advancing both data-free and non-uniform quantization for LLMs.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2411.17525")

Code

Syntology Ran 1 of 36 code samples harvested from 2 repositories linked to this paper; 35 have no recorded run. Of those that ran: 1 ran · violated contract.

By repository: community (archive-listed): 36 samples from 2 repositories, 1 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

goodevening13/aquakv mentioned on GitHubpytorchApache-2.0 report
hanguo97/flute mentioned on GitHubjaxApache-2.0 report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

36 samples harvested; 1 ran; 0 honoured the contract we drafted; 35 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

1ran · violated contract
35unverified

Licence: 0 of the 36 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 2 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

post_process goodevening13/aquakv/evaluate_longbench.py community (archive-listed) ran · violated contract fingerprinted Apache-2.0 (permissive) · 4489113b536ca6eb · report
apply_rotary_to_keys goodevening13/aquakv/aquakv/cache_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 29d977b676b52dd7 · report
build_chat goodevening13/aquakv/evaluate_longbench.py community (archive-listed) unverified Apache-2.0 (permissive) · c3b06c2ebcf2af2d · report
combine_heads goodevening13/aquakv/aquakv/cache_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 5b7154a0c5684311 · report
compute_centers_of_mass_with_gaussian_weights goodevening13/aquakv/aquakv/grid_generator.py community (archive-listed) unverified Apache-2.0 (permissive) · 9d136789dc29ba63 · report
compute_relative_mse goodevening13/aquakv/train_predictors.py community (archive-listed) unverified Apache-2.0 (permissive) · 6961cac72fc0f302 · report
convert_rrr_to_module goodevening13/aquakv/aquakv/linear_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 8f5d43a58d5e35fd · report
entropy goodevening13/aquakv/aquakv/edenn.py community (archive-listed) unverified Apache-2.0 (permissive) · 0e7f23886f4a1549 · report
evaluate_perplexity goodevening13/aquakv/evaluate_perplexity.py community (archive-listed) unverified Apache-2.0 (permissive) · b8dbc365b7e02acf · report
fit_linear_regression goodevening13/aquakv/aquakv/linear_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · ce15ccccdf94984a · report
from_binary hanguo97/flute/flute/packbits_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 4e9c1bc486b3cb15 · report
generate_nested_switch hanguo97/flute/flute/codegen_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 8e030cc1d6d4e357 · report
get_accelerate_hook hanguo97/flute/flute/integrations/base.py community (archive-listed) unverified Apache-2.0 (permissive) · 1ca31572851e9670 · report
get_gamma goodevening13/aquakv/aquakv/grid_generator.py community (archive-listed) unverified Apache-2.0 (permissive) · 10865357dbe212e1 · report
get_grid goodevening13/aquakv/aquakv/edenn.py community (archive-listed) unverified Apache-2.0 (permissive) · 43b836ca41904aad · report
get_grid_norms_squared goodevening13/aquakv/aquakv/edenn.py community (archive-listed) unverified Apache-2.0 (permissive) · 8c89526526a53954 · report
get_inps goodevening13/aquakv/aquakv/modelutils.py community (archive-listed) unverified Apache-2.0 (permissive) · 5779965330a56105 · report
get_layers goodevening13/aquakv/aquakv/modelutils.py community (archive-listed) unverified Apache-2.0 (permissive) · 6af39b9342e5f24f · report
get_parent hanguo97/flute/flute/integrations/learnable.py community (archive-listed) unverified Apache-2.0 (permissive) · 0449aa6e073b161d · report
get_ptb goodevening13/aquakv/aquakv/datautils.py community (archive-listed) unverified Apache-2.0 (permissive) · 330e351424a2b37b · report
get_red_pajama goodevening13/aquakv/aquakv/datautils.py community (archive-listed) unverified Apache-2.0 (permissive) · 6f93456246f10e4f · report
get_values_pivots hanguo97/flute/flute/nf_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 415d1476002d7be7 · report
get_wikitext2 goodevening13/aquakv/aquakv/datautils.py community (archive-listed) unverified Apache-2.0 (permissive) · e7d4ca6a631d3399 · report
get_workspace_streamk hanguo97/flute/flute/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · f1e34f158c99562b · report
linspace hanguo97/flute/flute/nf_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · a9e13dbd57fe99fa · report
make_qmap2_from_qmap hanguo97/flute/flute/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · c9c2ebb7e3ef65d4 · report
make_workspace_streamk hanguo97/flute/flute/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · d148bebf6417581d · report
manual_nf4 hanguo97/flute/flute/nf_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 6972df470f34c81b · report
pack_bools_into_integers hanguo97/flute/flute/packbits_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · af30cd35745c055e · report
parse_args goodevening13/aquakv/evaluate_longbench.py community (archive-listed) unverified Apache-2.0 (permissive) · 8acc0555324217dc · report
reduced_rank_regression goodevening13/aquakv/aquakv/linear_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 175e3e1a5d9a01c2 · report
replace_with_flute_linear hanguo97/flute/flute/integrations/huggingface.py community (archive-listed) unverified Apache-2.0 (permissive) · 5578730b99e18dce · report
sample_gaussian goodevening13/aquakv/aquakv/grid_generator.py community (archive-listed) unverified Apache-2.0 (permissive) · f5f502f02b4bc42d · report
split_heads goodevening13/aquakv/aquakv/cache_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 45d1e56d523d67f7 · report
to_binary hanguo97/flute/flute/packbits_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 2327775e49455531 · report
update_outs_inplace_ goodevening13/aquakv/aquakv/modelutils.py community (archive-listed) unverified Apache-2.0 (permissive) · 404c5dbba75966dd · report

Tasks

Language ModelingLanguage ModellingLarge Language ModelQuantization

1 archive task tag without a task page not shown.

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Methods

Focus

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections