Skip to content

Commit 8e5e8bc

Browse files
k-arima-3150S4Y-K
andauthored
feat: add save/load support for JointQ, RTN, and OneBit quantizers (#22)
* [update] add save/load support to JointQ based on _gptq.py - Add `get_quant_config()` returning GPTQ-compatible config - Add `_build_quantization_bits()` and `finalize_quant_config_for_save()` - Add `create_inference_layer()` to build GPTQLinear from JointQResult * [update] add save/load support to RTN based on _gptq.py - Add `compute_dequantized_weight()` to RTNResult - Add `get_quant_config()` returning GPTQ-compatible config - Add `_build_quantization_bits()` and `finalize_quant_config_for_save()` - Add `create_inference_layer()` to build GPTQLinear from RTNResult * [fix] remove redundant symmetric shift in RTN inference layer RTN now stores qweight and zero in unsigned form even in symmetric mode, so create_inference_layer no longer needs an extra signed-to-unsigned shift. * [fix] support load of unpacked JointQ wbits=1 checkpoints GPTQLinear weight packing only supports wbits in (2, 3, 4, 8), so JointQ with bits=1 must build/save the inference layer with pack_weights=False. - JointQ.validate_params: warn when bits=1 to remind callers to pass pack_weights=False at inference layer construction time - GPTQLinear.from_saved_state: load qweight/qzeros as unpacked tensors when wbits=1, matching the unpacked save format * [update] add save/load support to OneBit based on _gptq.py - Add `compute_dequantized_weight()` to OnebitResult and drop the persisted `dequantized_weight` field - Add `get_quant_config()` returning GPTQ-compatible config - Add `_build_quantization_bits()` and `finalize_quant_config_for_save()` - Add `create_inference_layer()` to build OneBitLinear from OnebitResult - Add `from_quantization_result()` and `from_saved_state()` to OneBitLinear; persist sign only as `sign_packed` and treat `sign_matrix` as a non-persistent override - Drop the `preunpack` flag; `forward()` unpacks from `sign_packed` on the fly - Override `_load_from_state_dict()` to reset `sign_matrix` on load - Raise `ValueError` (and free GPU tensors) on NaN/Inf in `run_onebit` instead of returning `False` - Add OneBit branch to `QuantizedModelLoader` so saved models can be loaded via `OneBitLinear.from_saved_state()` * [update] enable inherited forward-error tests for JointQ/OneBit/RTN, set JointQ test bits to 2, and use compute_dequantized_weight() consistently * [update] parameterize test_forward_error layer size via _forward_error_features Allow quantizer-specific subclasses to override the in_features used in the inherited forward-error test. JointQ sets it to 32 to satisfy the pack_factor (32 // wbits) divisibility requirement. * [update] adapt OneBit blockwise / CBQ optimisers to packed-only OneBitLinear - Read sign via an inline unpack of `sign_packed` (with `sign_matrix` as an optional override) when seeding optimisation params and when snapshotting for rollback - On sign updates, write `sign_packed = my_pack(sq)` and reset `sign_matrix = None` so `sign_packed` stays the single source of truth - Hoist `my_pack` / `my_unpack` imports in `onebit_cbq_optimizer` * [refactor] removed replace_linear_with_onebit_layer() and extract_onebit_weights_for_save() from onebit/onebit_layer.py * [update] add v1.1.0+feature/dev_save_load changelog for quantizer save/load support * [update] preserve OneBitLinear fp16 metadata in _cast_fp16_to_target_dtype * [style(onecomp)] run black formatter * [update] add v1.1.1+feature/dev_save_load changelog for OneBitLinear fp16 metadata preservation * [add] add JointQ vLLM inference example * [update] document JointQ/RTN/OneBit save/load and vLLM compatibility across docs - api/quantizers/base.md, user-guide/basic-usage.md: move JointQ/RTN/OneBit into the supported rows of the quantizer feature-support tables and add a quant_method column - user-guide/vllm-inference.md: split the gptq row into GPTQ/RTN (wbits in {2, 3, 4, 8}) and JointQ (bits in {2, 3, 4}; bits=1 is OneComp load-only with pack_weights=False); note that Onebit is not vLLM-servable - algorithms/jointq.md: add a Save and Load section, limit bits to {2, 3, 4} for vLLM (core quantizer rejects bits > 4) with bits=1 requiring explicit pack_weights=False, and clarify qep=False - algorithms/rtn.md: add a Save and Load section, a vLLM bit-width note (wbits in {2, 3, 4, 8}), and a rotation-preprocessing warning - getting-started/quickstart.md, index.md, README.md: update quantized-model evaluation and vLLM integration descriptions for JointQ/RTN/OneBit * [update] add v1.1.1+feature/dev_save_load changelog for JointQ/RTN/OneBit save/load and vLLM compatibility * [style] sort imports and add EOF newlines via pre-commit --------- Co-authored-by: sikoji <seiichiro.kojio@compmind.co.jp>
1 parent e7b915f commit 8e5e8bc

23 files changed

Lines changed: 844 additions & 283 deletions

File tree

CHANGELOG.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,87 @@
11
# Change log
22

3+
34
## [v1.2.0] 2026-06-04 (WIP)
45

56
### for Developer: pre-commit
67

78
- Added `.pre-commit-config.yaml` with `black`, `isort`, and local hooks (`no-japanese`, `copyright-header`, `no-email-address`); install with `uv sync --extra dev` then `pre-commit install` (see README)
89

10+
### Save/Load Support for JointQ, RTN, and OneBit Quantizers
11+
12+
- **JointQ**: Added `get_quant_config()`, `finalize_quant_config_for_save()`, and `create_inference_layer()` to `JointQ` class (`onecomp/quantizer/jointq/_jointq.py`)
13+
- Emits `quant_method="gptq"` to reuse `GPTQLinear` and vLLM GPTQ plugin (JointQ uses the same scale/zero/assignment structure as GPTQ)
14+
- `create_inference_layer()` converts JointQ's 3D assignment `(out_features, num_groups, group_size)` to 2D qweight `(out_features, in_features)` matching GPTQ format, with scale/zero transposition
15+
- Handles `actorder` permutation: restores original column order before passing to `GPTQLinear` so `g_idx` is constructed correctly
16+
- Symmetric quantization: shifts signed integers `[-2^(n-1), 2^(n-1)-1]` to unsigned `[0, 2^n - 1]` for GPTQLinear bit packing
17+
- Added `bits == 1` warning in `validate_params()`: GPTQLinear weight packing does not support 1-bit; inference layer must be built with `pack_weights=False`
18+
- Added `_build_quantization_bits()` static method to emit per-layer `quantization_bits` metadata for mixed-precision save
19+
- **RTN**: Added `get_quant_config()`, `finalize_quant_config_for_save()`, `create_inference_layer()`, and `RTNResult.compute_dequantized_weight()` to `RTN` class (`onecomp/quantizer/rtn/_rtn.py`)
20+
- Emits `quant_method="gptq"` to reuse `GPTQLinear` and vLLM GPTQ plugin (RTN uses the same qweight/scales/qzeros tensor format)
21+
- `compute_dequantized_weight()` implements `W = (quantized_weight - zero) * scale` with per-channel and group-wise paths
22+
- `create_inference_layer()` transposes scale/zero from `(out_features, num_groups)` to `(num_groups, out_features)` for GPTQLinear compatibility
23+
- Added `_build_quantization_bits()` static method for per-layer metadata
24+
- **OneBit**: Added `get_quant_config()`, `finalize_quant_config_for_save()`, `create_inference_layer()`, and `OnebitResult.compute_dequantized_weight()` to `Onebit` class (`onecomp/quantizer/onebit/_onebit.py`)
25+
- Emits `quant_method="onebit"` with OneBit-specific parameters (`iters`, `use_importance_scaling`, `use_balancing`, `balance_iters`, `balance_alpha`)
26+
- `compute_dequantized_weight()` implements `W ≈ a[:, None] * sign * b[None, :]`
27+
- `create_inference_layer()` builds `OneBitLinear` via `OneBitLinear.from_quantization_result()`
28+
- Added `_build_quantization_bits()` static method for per-layer metadata
29+
30+
### OneBitLinear Inference Layer Improvements
31+
32+
- Added `OneBitLinear.from_quantization_result()` class method: builds `OneBitLinear` from `OnebitResult` (mirrors the pattern used by `GPTQLinear` and `DoubleBinaryLinear`) (`onecomp/quantizer/onebit/onebit_layer.py`)
33+
- Added `OneBitLinear.from_saved_state()` class method: reconstructs `OneBitLinear` from saved `state_dict` tensors (`a`, `b`, `sign_packed`, optional `bias`), using the same `cls.__new__` pattern as `DoubleBinaryLinear` (`onecomp/quantizer/onebit/onebit_layer.py`)
34+
- Removed `preunpack` parameter from `OneBitLinear.__init__()` and `replace_linear_with_onebit_layer()`: sign matrix is now always stored as packed `uint8` and unpacked on demand during `forward()`, matching the DBF inference layer pattern (`onecomp/quantizer/onebit/onebit_layer.py`)
35+
- Normalized buffers to FP16 with `detach()` in `OneBitLinear.__init__()` to drop autograd graph
36+
- Added `_load_from_state_dict()` override to clear `sign_matrix` cache when loading from checkpoint
37+
- Extracted `_unpack_sign_matrix()` helper for sign matrix unpacking logic
38+
- Removed unreferenced functions `replace_linear_with_onebit_layer()` and `extract_onebit_weights_for_save()` from `onebit_layer.py`: layer construction is now handled by `OneBitLinear.from_quantization_result()` / `OneBitLinear.from_saved_state()`, and save-time weight extraction is covered by the unified `create_inference_layer()` / `state_dict()` path (`onecomp/quantizer/onebit/onebit_layer.py`)
39+
40+
### QuantizedModelLoader: OneBit Support
41+
42+
- `QuantizedModelLoader` now supports `quant_method="onebit"` (`onecomp/quantized_model_loader.py`)
43+
- Added `OneBitLinear` to import and layer replacement logic
44+
- Added `OneBitLinear.from_saved_state()` call path for creating empty OneBit layers during model loading
45+
- Hadamard hook registration now recognizes `OneBitLinear` as a quantized layer class
46+
47+
### BlockWisePTQ / CBQ OneBit Optimizer Compatibility
48+
49+
- Updated OneBit block-wise and cross-block quantization (CBQ) optimizers to work with packed-only `OneBitLinear` (`onecomp/post_process/_blockwise/onebit_block_optimizer.py`, `onecomp/post_process/_blockwise/onebit_cbq_optimizer.py`)
50+
- Reads current sign matrices from `sign_packed` via `my_unpack()` when `sign_matrix` is not present, while still allowing `sign_matrix` as a temporary optimization override
51+
- Writes sign updates back to `sign_packed` with `my_pack()` and clears `sign_matrix` so packed signs remain the single source of truth after hard evaluation, best-state restore, and final updates
52+
- Hoisted `my_pack` / `my_unpack` imports in the OneBit CBQ optimizer
53+
- Clarified `OneBitLinear.sign_matrix` as a non-persistent temporary override used by optimization flows such as BlockWisePTQ and CBQ (`onecomp/quantizer/onebit/onebit_layer.py`)
54+
55+
### Bug Fix
56+
57+
- Fixed `GPTQLinear.from_saved_state()`: `_weight_is_packed` now defaults to `False` when `wbits == 1` (JointQ `wbits=1` checkpoints are saved with `pack_weights=False` because GPTQLinear packing does not support 1-bit) (`onecomp/quantizer/gptq/gptq_layer.py`)
58+
- Fixed redundant symmetric shift in RTN inference layer (`onecomp/quantizer/rtn/_rtn.py`)
59+
- Fixed `run_onebit()` returning `False` on NaN/Inf detection; now raises `ValueError` with proper GPU tensor cleanup to prevent OOM cascading (`onecomp/quantizer/onebit/onebit_impl.py`)
60+
- Removed pre-computed `dequantized_weight` from `run_onebit()` return dict and `OnebitResult`; dequantized weight is now computed on demand via `compute_dequantized_weight()` (`onecomp/quantizer/onebit/onebit_impl.py`, `onecomp/quantizer/onebit/_onebit.py`)
61+
- `QuantizedModelLoader._cast_fp16_to_target_dtype()` now skips `OneBitLinear` in addition to `GPTQLinear` and `DoubleBinaryLinear`, so OneBit's fp16 scaling buffers (`a`, `b`, `bias`) are preserved when loading a OneBit-quantized model that requires `bfloat16` (e.g. Gemma 3 / Gemma 4 detected via `needs_bfloat16`). Without this, the post-load safety-net cast rewrote OneBit's stored fp16 metadata to `bfloat16`, breaking the dtype contract that `OneBitLinear.forward` relies on (`self.a.to(x.dtype)` / `self.b.to(x.dtype)` casts to the activation dtype at compute time). Updated the function's docstring to list `OneBitLinear` alongside the other quantized layer types whose fp16 metadata is intentionally retained (`onecomp/quantized_model_loader.py`).
62+
63+
### Tests
64+
65+
- Enabled inherited `test_forward_error` tests for JointQ, OneBit, and RTN (previously skipped with `"does not support create_inference_layer"`) (`tests/onecomp/quantizer/jointq/test_jointq.py`, `tests/onecomp/quantizer/onebit/test_onebit.py`, `tests/onecomp/quantizer/rtn/test_rtn.py`)
66+
- Added `_forward_error_features` class attribute to `BaseQuantizeSpec` for parameterizing layer size in `test_forward_error`; JointQ overrides to `32` (requires `in_features` divisible by `pack_factor = 32 // wbits`) (`tests/onecomp/quantizer/test_module.py`)
67+
- Changed JointQ test default `bits` from `1` to `2` to match GPTQLinear packing constraints (`tests/onecomp/quantizer/jointq/test_jointq.py`)
68+
- Updated `check_equal_results` in RTN and OneBit tests to use `compute_dequantized_weight()` instead of direct `dequantized_weight` attribute access
69+
- Updated `apply_quantized_weights` in RTN and OneBit tests to use `compute_dequantized_weight()` with proper dtype preservation
70+
71+
### Documentation
72+
73+
- Documented save/load and vLLM compatibility for the newly-supported **JointQ**, **RTN**, and **OneBit** quantizers across the docs:
74+
- `docs/api/quantizers/base.md`: moved `JointQ`, `RTN`, and `Onebit` into the supported rows of the "Quantizer Feature Support" table (`get_quant_config` / `create_inference_layer` / Save / Quantized PPL/ACC all Yes), and added a new "Saved `quant_method` and vLLM compatibility" table mapping each quantizer to its emitted `quant_method` (`gptq` / `mixed_gptq` / `dbf` / `onebit`) and serving path
75+
- `docs/user-guide/basic-usage.md`: updated the quantized-model evaluation note and the "Quantizer feature support" table to include JointQ/RTN/OneBit, added a `quant_method` column, and clarified which saved models are vLLM-servable
76+
- `docs/user-guide/vllm-inference.md`: rewrote the "Supported Quantization Methods" table to distinguish vLLM's **built-in** GPTQ plugin (used for `gptq`: GPTQ uniform bits, JointQ, RTN) from the **OneComp** plugins (`mixed_gptq`, `dbf`), added a note that `Onebit` is not vLLM-servable, and listed the GPTQ/JointQ/AutoBit end-to-end examples; split the `gptq` row so GPTQ/RTN (`wbits` in {2, 3, 4, 8}) and JointQ (`bits` in {2, 3, 4}; `bits=1` is OneComp load-only with `pack_weights=False`) document their distinct supported bit-widths
77+
- `docs/algorithms/jointq.md`: added a "Save and Load" section (emits `quant_method="gptq"`, served by vLLM's built-in GPTQ plugin), a note that JointQ `bits` is limited to {2, 3, 4} for vLLM (the JointQ core quantizer rejects `bits > 4`) while `bits=1` requires an explicit `runner.save_quantized_model(..., pack_weights=False)` and is OneComp load-only / not vLLM-servable, and clarified that JointQ does not support QEP (`qep=False`)
78+
- `docs/algorithms/rtn.md`: added a "Save and Load" section, a note that vLLM serving uses `wbits` in {2, 3, 4, 8} (RTN itself accepts a wider range, but GPTQ-compatible bit packing and vLLM serving are limited to these), and a warning that rotation-preprocessed RTN models cannot be served with vLLM (no online Hadamard transform), though they remain loadable with `load_quantized_model()`
79+
- `docs/getting-started/quickstart.md`, `docs/index.md`, `README.md`: updated quantized-model evaluation and vLLM integration descriptions to include JointQ/RTN/OneBit and reference the GPTQ built-in plugin path
80+
81+
### Examples
82+
83+
- Added `example/vllm_inference/example_jointq_vllm_inference.py`: end-to-end JointQ quantization (4-bit, `group_size=128`) → save → vLLM offline inference. Mirrors the GPTQ vLLM example, uses `qep=False` (JointQ does not support QEP), and documents the `bits >= 2` requirement for vLLM bit-packing. Registered in the README example table.
84+
985
### Quantizer module forward test fix
1086

1187
- Fixed `tests/onecomp/quantizer/test_module.py` to feed `y_replaced` consistently into `q_proj` / `k_proj` / `v_proj` after quantized weights are applied, aligning the replacement-path forward test with the intended residual update flow

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,12 @@ Then open [http://127.0.0.1:8000](http://127.0.0.1:8000) in your browser.
241241
| | [example_lora_sft.py](./example/post_process/example_lora_sft.py) | LoRA SFT post-quantization fine-tuning |
242242
| | [example_lora_sft_knowledge.py](./example/post_process/example_lora_sft_knowledge.py) | LoRA SFT knowledge injection |
243243
| vLLM | [example_gptq_vllm_inference.py](./example/vllm_inference/example_gptq_vllm_inference.py) | GPTQ + QEP quantization and vLLM inference |
244+
| | [example_jointq_vllm_inference.py](./example/vllm_inference/example_jointq_vllm_inference.py) | JointQ quantization and vLLM inference |
244245
| | [example_autobit_vllm_inference.py](./example/vllm_inference/example_autobit_vllm_inference.py) | AutoBit quantization and vLLM inference |
245246

246247
## 🔌 vLLM Inference
247248

248-
OneComp-quantized models can be served with [vLLM](https://docs.vllm.ai/) via built-in plugins (DBF, Mixed-GPTQ).
249+
OneComp-quantized models can be served with [vLLM](https://docs.vllm.ai/): GPTQ, JointQ, and RTN models use vLLM's built-in GPTQ plugin, while DBF and Mixed-GPTQ models are served via OneComp's own plugins.
249250
Combined with [Open WebUI](https://github.com/open-webui/open-webui), you can chat with your quantized model through a ChatGPT-like browser interface — entirely on your local machine.
250251

251252
```bash

docs/algorithms/jointq.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,37 @@ jointq = JointQ(
189189
)
190190
```
191191

192+
## Save and Load
193+
194+
JointQ reuses GPTQ's scale/zero/assignment structure, so it emits
195+
`quant_method="gptq"` and can be saved with the standard OneComp save API,
196+
reloaded with `load_quantized_model()`, and served with vLLM's built-in GPTQ
197+
plugin:
198+
199+
```python
200+
runner.save_quantized_model("./output/jointq_model")
201+
202+
# Load later with OneComp
203+
from onecomp import load_quantized_model
204+
model, tokenizer = load_quantized_model("./output/jointq_model")
205+
```
206+
207+
!!! note "Bit-width and vLLM"
208+
Use `bits` in {2, 3, 4} for JointQ models served with vLLM. `bits=1`
209+
cannot be bit-packed by `GPTQLinear`; if you need to save/load a 1-bit
210+
JointQ model with OneComp, call `runner.save_quantized_model(..., pack_weights=False)`.
211+
Such 1-bit models are not vLLM-servable.
212+
213+
See [vLLM Inference](../user-guide/vllm-inference.md) for serving details, and the
214+
[`example/vllm_inference/example_jointq_vllm_inference.py`](https://github.com/FujitsuResearch/OneCompression/blob/main/example/vllm_inference/example_jointq_vllm_inference.py)
215+
script for an end-to-end quantize → save → serve example.
216+
192217
## Notes
193218

194219
- JointQ requires GPU for computation (CUDA-based local search).
195220
- Group-wise quantization (`group_size > 0`) is recommended for accuracy.
196221
Set `group_size=None` for per-channel quantization.
197-
- JointQ currently supports dequantized-model evaluation only (not packed quantized inference).
222+
- JointQ does not support QEP; create the `Runner` with `qep=False`.
198223
- Incremental lambda mode runs `quantize()` multiple times per layer (once per
199224
lambda value until rejection), so quantization time increases compared to
200225
fixed lambda mode.

docs/algorithms/rtn.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,33 @@ runner = Runner(model_config=model_config, quantizer=rtn)
5656
runner.run()
5757
```
5858

59+
## Save and Load
60+
61+
RTN uses the same tensor format as GPTQ (`qweight`/`scales`/`qzeros`), so it emits
62+
`quant_method="gptq"` and can be saved with the standard OneComp save API, reloaded
63+
with `load_quantized_model()`, and served with vLLM's built-in GPTQ plugin:
64+
65+
```python
66+
runner.save_quantized_model("./output/rtn_model")
67+
68+
# Load later with OneComp
69+
from onecomp import load_quantized_model
70+
model, tokenizer = load_quantized_model("./output/rtn_model")
71+
```
72+
73+
See [vLLM Inference](../user-guide/vllm-inference.md) for serving details.
74+
75+
!!! note "Bit-width and vLLM"
76+
Use `wbits` in {2, 3, 4, 8} for vLLM serving. RTN itself accepts a wider
77+
range of `wbits`, but GPTQ-compatible bit packing and vLLM serving are limited
78+
to these bit-widths.
79+
80+
!!! warning "Rotation-preprocessed RTN models cannot be served with vLLM"
81+
The SpinQuant-style [Rotation Preprocessing + RTN](../user-guide/examples.md#rotation-preprocessing-rtn)
82+
flow produces models that vLLM cannot serve, because vLLM does not apply the online
83+
Hadamard transform on `down_proj` inputs. Such models remain loadable with
84+
`load_quantized_model()`, which auto-registers the Hadamard hooks.
85+
5986
## Characteristics
6087

6188
- **No calibration data required** -- quantization is performed directly on the model weights

docs/api/quantizers/base.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ by each quantizer to enable these features.
1616
| `GPTQ` | Yes | Yes | Yes | Yes |
1717
| `DBF` | Yes | Yes | Yes | Yes |
1818
| `AutoBitQuantizer` | Yes | Yes | Yes | Yes |
19-
| `RTN` ||| No | No (fallback) |
20-
| `JointQ` ||| No | No (fallback) |
19+
| `JointQ` | Yes | Yes | Yes | Yes |
20+
| `RTN` | Yes | Yes | Yes | Yes |
21+
| `Onebit` | Yes | Yes | Yes | Yes |
2122
| `QUIP` ||| No | No (fallback) |
2223
| `CQ` ||| No | No (fallback) |
2324
| `ARB` ||| No | No (fallback) |
2425
| `QBB` ||| No | No (fallback) |
25-
| `Onebit` ||| No | No (fallback) |
2626

2727
For quantizers without support:
2828

@@ -32,6 +32,21 @@ For quantizers without support:
3232
- **Saving**: use `save_dequantized_model()` (FP16) or `save_quantization_results()`
3333
to persist results.
3434

35+
### Saved `quant_method` and vLLM compatibility
36+
37+
`get_quant_config()` determines the `quant_method` written to the saved `config.json`,
38+
which in turn decides how the model can be served:
39+
40+
| Quantizer | `quant_method` | vLLM serving |
41+
|-----------|----------------|--------------|
42+
| `GPTQ` (uniform bits), `JointQ`, `RTN` | `gptq` | vLLM built-in GPTQ plugin |
43+
| `GPTQ` (mixed bits), `AutoBitQuantizer` | `mixed_gptq` | OneComp Mixed-GPTQ plugin |
44+
| `DBF` | `dbf` | OneComp DBF plugin |
45+
| `Onebit` | `onebit` | Not vLLM-servable; load with `load_quantized_model()` |
46+
47+
All of the above are loadable with OneComp's own `load_quantized_model()`. See
48+
[vLLM Inference](../../user-guide/vllm-inference.md) for serving details.
49+
3550
::: onecomp.quantizer._quantizer.Quantizer
3651
options:
3752
show_source: false

docs/getting-started/quickstart.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ _, _, quantized_acc = runner.calculate_accuracy()
115115

116116
!!! note
117117
- Evaluating the original or dequantized model requires loading the full model on GPU.
118-
- Quantized-model evaluation is currently supported for **GPTQ**, **DBF**, and **AutoBitQuantizer**. Support for other methods is planned.
118+
- Quantized-model evaluation is supported for **GPTQ**, **DBF**, **AutoBitQuantizer**, **JointQ**, **RTN**, and **OneBit**. Other methods automatically fall back to the dequantized (FP16) model.
119119

120120
## Using QEP (Quantization Error Propagation)
121121

0 commit comments

Comments
 (0)