The short version
The smallest. Fits a 27B model in about 12 GB, so it runs on 16 GB cards with long context.
Closest to the original model. In our 27B files, more TQ4 cuts the drift from the original about 3× (KLD 0.079 → 0.022).
The format that also runs in our llama.cpp fork. Small blocks with four scales each.
How it works, in four steps
A model is billions of numbers (weights). Storing each one in 16 bits is exact but huge. TQ formats store each in 3 or 4 bits instead, with as little damage as possible.
- Group. Take the weights a block at a time: 128 in a row for TQ3 and TQ4, 32 for TQ3_4S.
- Rotate. A few weights are much bigger than the rest (outliers). A fixed mathematical rotation mixes the block so the big values are shared out evenly. Nothing is lost: the engine rotates back when it computes.
- Snap. Each rotated weight is rounded to the nearest of a few levels: 8 levels (3 bits) or 16 levels (4 bits).
- Scale. One number per block (or per 8 weights in TQ3_4S) says how big the levels are.
That rotation is why one scale per 128 weights is enough. Plain 3-bit formats need much smaller blocks (more scales, more bits) to cope with outliers.
The three blocks
Each square is one weight; its shade is the level it was snapped to. The tall bars are the stored scales.
TQ3: 128 weights, 8 levels, one scale
TQ4: 128 weights, 16 levels, one scale
TQ3_4S: 32 weights, 8 levels, four scales
The bit budget per weight
The original model uses 16 bits per weight, about four times more than any of these. TQ3_4S spends a full bit per weight on scales; TQ3 and TQ4 spend an eighth of one, because the rotation already tamed the outliers.
| TQ3 | TQ4 | TQ3_4S | |
|---|---|---|---|
| Weights per block | 128 | 128 | 32 |
| Levels per weight | 8 | 16 | 8 |
| Scales per block | 1 (16-bit) | 1 (16-bit) | 4 (8-bit) |
| Bits per weight | 3.125 | 4.125 | 4.0 |
| Runs in | tqLLM | tqLLM | tqLLM and llama.cpp-tq3 |
Which file to pick
Our release files mix TQ3 and TQ4 tensors: more TQ4 means closer to the original model and a bigger file. KL divergence measures how far a file's predictions drift from the 16-bit original (lower is closer).
| File | Size | Drift from original (KLD) | Same top token | Good for |
|---|---|---|---|---|
Qwen3.8-27B-TQ_XS | 11.85 GB | 0.079 | 88.6 % | 16 GB cards, longest context |
Qwen3.8-27B-TQ_S | 12.55 GB | 0.055 | 90.1 % | 16 GB cards (default) |
Qwen3.8-27B-TQ_M | 13.14 GB | 0.045 | 91.2 % | 16-24 GB, experimental |
Qwen3.8-27B-TQ_L | 14.72 GB | 0.022 | 93.7 % | 24 GB cards, closest to the original |
All four are in YTan2000/Qwen3.8-27B-TQ. The drafter never changes the answer, so the file only sets quality and memory, not correctness.
The rotation idea comes from Google Research's TurboQuant; see Credits.