Repository navigation
LLM-Compressor v0.15.0
This release adds HIGGS mixed-precision quantization, MoNe expert pruning, block-wise Quantization-Aware Distillation (QAD), layerwise compression with a rewritten offloading path, checkpoint-space REAP workflows, faster observers, and MXFP6 support.
It also includes bug fixes, expanded model support, performance improvements, and dependency updates.
Key Highlights ✨
- HIGGS autoquantization (#3028):
get_higgs_configselects optimal quantization schemes for each layer to maximize estimated accuracy under a target average bitwidth. - Block-wise QAD (#3029):
QADModifierdistills against cached, unquantized subgraph outputs without requiring a teacher model. - Layerwise compression and offloading (#3162, #3221, #3228): Converts large checkpoints one subgraph at a time using CPU/pinned-memory staging and background prefetching.
- REAP and MoNe (#3281, #3343): Enables direct checkpoint pruning using per-expert saliency reports. MoNe collapses low-saliency experts into "novice" vectors for higher throughput.
- Faster observers (#3348, #3233): Exponential E8M0 grids make MXFP4 MSE observation approximately 6× faster. A shared MSE/iMatrix Triton kernel delivers 1.2–3.4× NVFP4A16 speedups.
- Model-free PTQ and MXFP6 (#3262, #3250, #3286): Adds offline SpinQuant R1/R2 rotations, converter chains,
max_workers="auto", and MXFP6A16/A8 support. - Expanded model and hardware coverage: Adds a GPTQ Triton kernel for Intel XPU (#3339) and Transformers
MtpModelloading for MTP layers (#3225).
HIGGS Mixed-Precision Quantization
HIGGS introduces automatic mixed-precision quantization configuration.
- Uses
HiggsMSECollectorConverterto collect per-layer MSE. - Calculates heuristic sensitivity and solves an integer linear program (ILP) to meet the target bitwidth.
- Collection is model-free, does not write a checkpoint, and takes under 10 seconds for Llama-3.1-8B-Instruct.
- Composes with both the
oneshotandModelFreePtqentry points. - Based on the HIGGS paper.
At a 6.0-bit target, the following WikiText perplexity results were achieved:
| Configuration | WikiText perplexity |
|---|---|
HIGGS + QuantizationModifier |
11.05 |
| HIGGS + GPTQ | 10.99 |
Quantization-Aware Distillation (QAD)
QADModifier enables block-wise distillation after QuantizationModifier or GPTQModifier.
- AWQ integration: The supported composition order is
AWQ → Quantization → QAD. - Shared calibration: Reuses one calibration dataset with the preceding modifier.
- Memory efficiency: Caches inputs and teacher outputs with CPU/disk offloading and prefetching.
- Joint training: Supports training N targets per subgraph.
- Loss and optimization: Supports FP32 MSE loss, AdamW with FP32 master weights, dynamic loss scaling, gradient accumulation, and gradient clipping.
- Validation: Uses a deterministic 10% validation hold-out.
- Weight observation: Re-observes weights before training, at each epoch, and before finalization.
- Fixed quantization parameters: Setting
reobserve_weights=Falsekeeps the preceding quantization parameters fixed.
Requirements:
- A sequential pipeline.
- A preceding weight-quantization modifier.
- Single-process calibration.
REAP and MoNe Expert Pruning
REAP
report_pathstores per-expert router weights, routed-token counts, and saliency in JSON format.- Setting
sparsity=0.0enables report-only operation. ExpertPrunerprunes checkpoints directly from safetensors.- Supports uniform per-layer and non-uniform cross-layer sparsity while respecting the
num_experts_per_tokfloor. - Supports 2D and 3D expert layouts, per-expert router vectors, and hash-routed layers.
- Skips GPT-OSS because of incompatible routing (#3223).
MoNe
- Collapses low-saliency experts into novice vectors.
- Keeps the router at full R + N width.
- Repacks novice experts into the checkpoint.
- Writes
moe_sparsity_configwithmethod="novice".
MoNe/REAP statistics are now reduced in float32 on the accelerator, fixing distributed crashes and desynchronization (#3397).
Sequential Pipeline and Offloading
- Layerwise decompression: Added to the sequential pipeline, avoiding upfront decompression of quantized models before passing them to
oneshot. - Layerwise compression: Subgraphs can be eagerly compressed after calibration.
- Background staging: Overlaps preparation of the next subgraph with current-layer calibration.
- Activation prefetching: Always enabled.
Prefetching Fixes
- Retains buffer references to prevent AWQ DDP divergence (#3258).
- Skips unsupported
record_streamoperations (#3270). - Falls back to synchronous fetching outside CPU/CUDA (#3274).
Pipeline and Tracing Improvements
- Basic calibration now uses the sequential pipeline as one untraced target (#3336).
log_sequential_errornow reports signal-to-quantization-noise ratio (SQNR) (#3165).- Attention is treated as a sequential target. Non-eager attention is now the default to eliminate the O(seq_len²) attention mask (#3255).
- Tracing fixes cover autowrapped modules, concrete keyword arguments, and Hub kernels on meta tensors (#3264, #3332, #3345).
Observer Improvements
- Exponential E8M0 grids now consider only powers of two, reducing MXFP4 observation time by approximately 6×.
- Magnitude normalization now matches llama.cpp iMatrix behavior (#3348).
- A unified MSE/iMatrix Triton kernel adds tensor weighting and shared eager implementations (#3233).
- Fused module mappings are centralized in
FUSED_MODULE_MAPPINGS(#3224). end_calibrationnow calibrates activation quantization parameters for already-quantized modules traced through by the sequential pipeline (#3245).- Fixed observer-kernel compilation with Triton 3.9 (#3406).
Model-Free Post-Training Quantization (PTQ)
SpinQuantConverterfolds RMSNorm scales and R1/R2 Hadamard rotations directly into the residual stream in safetensors (#3262).max_workers="auto"is now the default (#3250).- The pipeline delegates to
convert_checkpoint, removing duplicated device, validation, and configuration logic (#3206). - Validation no longer runs observers on meta tensors (#3247).
Model Support
- Compressed 3D MoE repacking supports nested fused projections and native 3D keys. Quantized-but-uncompressed experts now raise an error (#3200).
- Kimi-K3 fused modules are constructed on the execution device rather than the meta device (#3259).
- MTP layers load through Transformers
MtpModel. Unsupported architectures fall back to unchanged MTP weights (#3225). - The DeepSeek-V3 example now uses an NVFP4 backbone and FP8 MTP in a single
oneshotcall (#3402).
Documented Checkpoints
Performance Improvements
- Approximately 6× faster MXFP4 observation through exponential E8M0 grids (#3348).
- 1.2–3.4× faster end-to-end NVFP4A16 through the unified MSE/iMatrix kernel (#3233).
- Improved pipeline throughput by overlapping background subgraph staging with current-layer computation (#3228).
Bug Fixes
- Fixed distributed MoNe/REAP statistics through accelerator-based float32 reductions (#3397, #3405).
resave_confignow uses the loaded model revision (#3390).- Forwarded
trust_remote_codeandrevisionto the compressed-tensors check (#3313). - Fixed nested
disable_hooksbehavior to restore the enclosing state (#3328). - Fixed loading of numbered recipe stage keys (#3316).
- Prevented Kimi-K3 fused modules from being placed on the meta device (#3259).
- Fixed AWQ DDP divergence caused by prefetched buffers (#3258).
- Added safe handling for unsupported
record_streamand background prefetch operations (#3270, #3274). - Ensured activation quantization parameters are calibrated for modules traced through by the sequential pipeline (#3245).
- Added early group-size checks to flag narrow layers (#3252).
- Prevented chat datasets from prepending a second BOS token (#3289).
- Fixed tracing with concrete keyword arguments so downstream modules are not pruned (#3332).
- Prevented Hub kernels from running on meta tensors (#3345).
- Changed
torchrunbehavior withoutinit_distfrom raising an error to issuing a warning (#3231, #3202). - Fixed sparsification-reporting imports on Python 3.11 (#3378).
- Fixed observer-kernel compilation with Triton 3.9 (#3406).
Breaking Changes and Removals
Removed Legacy Sparsity Components
The following legacy components have been removed (#3377, #3382):
SparseGPTModifierWandaPruningModifierConstantPruningModifierMagnitudePruningModifier- The OBCQ compatibility shim.
- Shared sparsity utilities.
Other Breaking Changes
- Python 3.11 is now the minimum supported Python version (#3299).
preprocessing_funcis deprecated (#3227).sequential_prefetchhas been permanently enabled (#3364).- Running
torchrunwithoutinit_distnow produces a warning instead of an error (#3231).
Dependencies and Infrastructure
- Updated
compressed-tensorsto version0.20.1(#3398, #3407). - Relaxed dependency upper bounds (#3393).
- Raised the Transformers upper bound to
5.21.0and gated KV cache tests to version5.22and later (#3401). - Added Python 3.14 to GPU test configuration (#3349, #3331).
- Added PuLP as the optional
higgsextra.
Documentation
- Added the Open Research Hub (#3280).
- Added a Simplified Chinese README (#3188).
- Refreshed README model highlights, Key Models pages, and quantization documentation (#3394, #3376, #3379, #3384).
Tests and Continuous Integration
- Extended XPU coverage to AWQ, GPTQ, SmoothQuant, and KV cache (#3049, #3339).
- Updated DDP comparisons to use deterministic algorithms (#3381, #3334).
- Consolidated dataset padding and BOS-token test coverage (#3196, #3295).
- Moved AWQ + NVFP4 evaluation to Qwen3-8B for more stable recovery (#3275).
Full Changelog
- refactor: delegate model_free_ptq pipeline to convert_checkpoint by @soyr-redhat in #3206
- [Tests] Relax e2e upload exception catching by @kylesayrs in #3218
- Add test that pre-baked datasets produce samples without padding by @kylesayrs in #3196
- [REAP] Skip support for GPT-OSS by @kylesayrs in #3223
- Guard against
torchrunbut noinit_distby @kylesayrs in #3202 - Update CODEOWNERS to include @HDCharles by @HDCharles in #3226
- Update GLM-5.3 checkpoint descriptions in README by @dsikka in #3230
- Make e2e sanity prompt more explicit about naming the capital city by @kylesayrs in #3232
- Warn instead of error when oneshot called under torchrun without init_dist by @kylesayrs in #3231
- [Tests] Better e2e sanity prompt by @kylesayrs in #3235
- [Deprecation] Warn on preprocessing_func and document migration by @Evihut in #3227
- Centralize fused module mappings by @amacharla15 in #3224
- fix autoround fp8 block example by @yiliu30 in #3199
- Sequential Pipeline Offloading by @Roderick-Wu in #3221
- [Docs] Update readme to include slack and huggingface shields by @kylesayrs in #3240
- Support compressed 3D MoE repacking by @GOavi101 in #3200
- Add log_sequential_error option for layerwise SQNR-based error reporting by @dichn in #3165
- Remove test asserting W7A16 is not an auto-round preset scheme by @kylesayrs in #3243
- Fix model-free validation for calibration observers by @HDCharles in #3247
- add triton kernel for imatrix + unify imat&mse by @HDCharles in #3233
- [Bugfix] Calibrate activation qparams of modules traced through by the sequential pipeline by @surajsharan in #3245
- [Tests] Add dense Qwen3-VL to the tracing model enumeration by @rishabhsinha17 in #3107
- Roderick wu/better offload module prefetch by @Roderick-Wu in #3228
- HIGGS: ILP-based mixed-precision quantization by @HDCharles in #3028
- [MFPTQ] Support max_workers="auto" by @rohan9446 in #3250
- [Bugfix] AWQ DDP divergence by @Roderick-Wu in #3258
- [Bugfix] Kimi-K3 meta tensors by @Roderick-Wu in #3259
- Fix/native attention tracing by @HDCharles in #3255
- [Feature] Add block-wise QAD with shared data and weight re-observation by @BeichenHuang in #3029
- refactor and add warning to resolve seq targets by @HDCharles in #3266
- fix(autoround): pre-seed fp_ref from IntermediatesCache to skip collect_reference by @xesdiny in #3130
- [MFPTQ] Add SpinQuantConverter for offline R1/R2 rotations by @GOavi101 in #3262
- [Example] Add zyphra example by @kylesayrs in #3242
- [Docs] Add Open Research Hub section by @soyr-redhat in #3280
- [Docs] Port existing findings issues into the Open Research Hub by @soyr-redhat in #3283
- [Tracing] Attribute wrap-hidden modules to subgraphs (#3261) by @evanliuuu in #3264
- [Quantization] Flag layers narrower than group_size in the early group-size check by @tritsystem in #3252
- Skip record_stream on devices that do not implement it by @begcdn in #3270
- [Bugfix] Default observer to None in model_free_ptq tests by @kylesayrs in #3292
- fix(data): stop chat datasets from prepending a second BOS by @evanliuuu in #3289
- update AWQ NVFP4 test model to Qwen3-8B by @soyr-redhat in #3275
- Add Nemotron 3.5 Super VL FP8 by @dsikka in #3291
- Fetch non-CUDA accelerator targets synchronously in iter_prefetch by @begcdn in #3274
- docs: add Simplified Chinese translation (README.zh.md) by @JasonYeYuhe in #3188
- Add example for MXFP4xFP8 by @bartowski1182 in #3287
- test: extend XPU test scope to include AWQ, GPTQ, SmoothQuant, and KV cache by @wimCCC in #3049
- fix CI: enable deterministic cuDNN in DDP comparisons by @HDCharles in #3334
- [REAP] Add
n_routed_expertsto config names by @kylesayrs in #3263 - [Tests] Add moe backend flag by @Roderick-Wu in #3333
- test(data): consolidate BOS tests into one covering all pre-baked datasets by @kylesayrs in #3295
- [Bugfix] Restore enclosing state when nested disable_hooks contexts exit by @anikeaty08 in #3328
- Fix INFERENG-11578 and bump up dependency upper bounds by @dhuangnm in #3331
- Load numbered stage keys in Recipe.from_dict by @guptaishaan in #3316
- Layerwise decompression and compression by @Roderick-Wu in #3162
- perf: add XPU support to fused GPTQ Triton kernel by @yiliu30 in #3339
- [Examples] Add MXFP6 (W6A8) examples and docs by @mgoin in #3286
- Update CODEOWNERS: add @soyr-redhat, @GOavi101, and expand @HDCharles coverage by @kylesayrs in #3335
- update docs, code and test from EOL python3.10 to 3.11 by @Chibukach in #3299
- Fix tracing with concrete kwargs by @HDCharles in #3332
- Update Python version in GPU tests configuration by @dsikka in #3349
- Pass trust_remote_code and revision to compressed-tensors check by @guptaishaan in #3313
- [REAP] Add per-expert saliency report and non-uniform expert pruning by @kylesayrs in #3281
- [Docs] Add Research Hub entry: FP8 KV cache on Phi-3's fused QKV by @waynehacking8 in #3344
- [Bugfix] Mark torch.compiler as exporting during subgraph tracing by @kylesayrs in #3345
- wire MtpModel from transformers and defer to ModelFreePTQ when architectures are unsupported by @soyr-redhat in #3225
- Add exponential observer search and magnitude normalization by @HDCharles in #3348
- Remove sequential prefetch arg by @Roderick-Wu in #3364
- Refactor basic calibration to use the sequential pipeline by @jontb in #3336
- Move mtp examples to mtp/ subdirs in their respective locations by @soyr-redhat in #3374
- Add @GOavi101 to committers list by @kylesayrs in #3373
- Add contributor skill for open research hub by @soyr-redhat in #3375
- Remove legacy sparsity features by @kylesayrs in #3377
- [Docs] Fix broken links in Key Models pages by @dsikka in #3379
- [Docs] Update README model highlights with GLM-5.3 MXFP4xFP8 by @dsikka in #3380
- Fix sparsification reporting imports by @soyr-redhat in #3378
- Remove unused sparsification reporting and helpers by @soyr-redhat in #3382
- Fix README Open Research Hub link by @soyr-redhat in #3384
- [Tests] Use torch deterministic algorithms in DDP tests by @HDCharles in #3381
- [Modifier] Add MoNe (Mixture of Novices) expert pruning by @kylesayrs in #3343
- Resave config from the loaded model revision by @anh-nguyenn in #3390
- Update quant docs by @bartowski1182 in #3376
- Organize MTP quantization examples and documentation by @soyr-redhat in #3385
- [Docs] Update repo README and Key Models by @dsikka in #3394
- Relax dependency upper bounds by @dhuangnm in #3393
- Update compressed-tensors version by @dhuangnm in #3398
- [Tests] Skip kv cache tests until transformers 5.22 by @kylesayrs in #3401
- Reduce MoNe and REAP saliency stats on the accelerator in float32 by @kylesayrs in #3397
- Update DeepSeek example to NVFP4 backbone and FP8 MTP by @soyr-redhat in #3402
- Fix observer kernel compilation with Triton 3.9 by @HDCharles in #3406
- fix CI error by @HDCharles in #3405
- Pick up CT 0.20.1 patch release by @dhuangnm in #3407
New Contributors
- @Evihut made their first contribution in #3227
- @amacharla15 made their first contribution in #3224
- @surajsharan made their first contribution in #3245
- @BeichenHuang made their first contribution in #3029
- @evanliuuu made their first contribution in #3264
- @tritsystem made their first contribution in #3252
- @begcdn made their first contribution in #3270
- @JasonYeYuhe made their first contribution in #3188
- @anikeaty08 made their first contribution in #3328
- @guptaishaan made their first contribution in #3316
- @Chibukach made their first contribution in #3299
- @waynehacking8 made their first contribution in #3344
- @jontb made their first contribution in #3336
- @anh-nguyenn made their first contribution in #3390