Downloads · 30 days
10
17% of all-time downloads
ghostchoir/rebuttal_w3g128_awq_w2
rebuttal_w3g128_awq_w2 is a text generation model from ghostchoir. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
Weights are 3-bit AWQ values stored dequantized in BF16, so this loads with a stock AutoModelForCausalLM.frompretrained — no AWQ kernels or custom classes. Every decoder-block linear holds at most 8 distinct values pe…
Downloads · 30 days
10
17% of all-time downloads
All-time downloads
59
Public
Parameters
1.7B
3.5 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors3.4 GB · 100%
From the Hugging Face model README
Weights are 3-bit AWQ values stored dequantized in BF16, so this loads with a
stock AutoModelForCausalLM.from_pretrained — no AWQ kernels or custom classes.
Every decoder-block linear holds at most 8 distinct values per group of 128
input channels; embeddings and lm_head are untouched (weight-only quantization).
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
m = AutoModelForCausalLM.from_pretrained(
"ghostchoir/rebuttal_w3g128_awq_w2", torch_dtype=torch.bfloat16, device_map="cuda")
tok = AutoTokenizer.from_pretrained("ghostchoir/rebuttal_w3g128_awq_w2")
| Base model | Qwen/Qwen3-1.7B (BF16, 28 blocks, hidden 2048) |
| Scheme | weight-only, 3-bit, group size 128, asymmetric (zero point) |
| Scope | all self_attn / mlp linears in decoder blocks |
| Search | AWQ scale exponent (20-point grid) + clipping (10-point global shrink grid, look-ahead scored) |
The candidate for block i is scored one block later, at the output of block
i+1, which stays in original precision:
inps ──► block i (candidate weights) ──► block i+1 (BF16, untouched) ──► MSE
The reference is the same path with block i also unquantized. Block 27 has no
successor, so its loss falls back to its own output.
Because AWQ's scale rewrite (prev_op /= s, W *= s) is algebraically equal to
leaving prev_op alone and using Q(W·diag(s))·diag(1/s), a candidate is
simulated by swapping only the linear's weight, so the measured loss is exactly
the deployed one.
Clipping granularity. The look-ahead loss is a single scalar after block
i+1 and does not decompose over output channels, so clipping searches one
shrink ratio per linear rather than stock AWQ's per-output-channel threshold.
| Dataset | sumin99/Openr1-dataset-sampled-CMA |
| Samples | first 4096 rows (of 32768) |
| Length | first 2048 tokens per row, one document per row (no concatenation) |
| Padding | right-padded with `< |
| Totals | 8,131,131 real tokens, 3.07% padding, 3600/4096 rows truncated |
Text is tokenized as-is — no chat template applied, no stripping (rows already carry ChatML markup).
Perplexity at sequence length 2048. Bold is this model.
| model | WikiText-2 | Δ | OpenR1-CMA held-out | Δ |
|---|---|---|---|---|
| Qwen3-1.7B BF16 (unquantized) | 16.7162 | — | 2.2045 | — |
| RTN W3/g128 (no AWQ) | 53.5499 | +36.8337 | 4.4508 | +2.2463 |
| AWQ W3/g128 block-wise (d=0) | 23.4184 | +6.7022 | 2.6564 | +0.4520 |
| AWQ W3/g128 look-ahead (d=1) | 25.0860 | +8.3698 | 2.8304 | +0.6260 |
Held-out slice = rows 4096–5119 of the calibration dataset (never seen by the search). RTN = round-to-nearest group quantization with no AWQ search.
Comparability caveat. The
d=0andd=1arms differ in two ways, not one: the loss scope (block output vs next-block output) and the clipping search (stock per-output-channel vs a single global shrink scored look-ahead). The clipping difference does more work at 3-bit than at 4-bit, so the gap between these two arms should not be read as an ablation of the loss alone.