AnthonyL1996 commited on
Commit
896691b
Β·
verified Β·
1 Parent(s): 14b153c

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +139 -0
README.md ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model:
4
+ - Jackrong/Qwopus3.6-27B-Coder-MTP-GGUF
5
+ - Qwen/Qwen3.6-27B
6
+ base_model_relation: quantized
7
+ pipeline_tag: text-generation
8
+ tags:
9
+ - gguf
10
+ - ik_llama.cpp
11
+ - ik_llama
12
+ - mtp
13
+ - speculative-decoding
14
+ - imatrix
15
+ - qwen35
16
+ - code
17
+ - quantized
18
+ ---
19
+
20
+ # Qwopus3.6-27B-Coder β€” ik_llama.cpp MTP IQ-quants (GGUF)
21
+
22
+ This repo contains **ik_llama.cpp-optimized IQ-series GGUF quantizations** (with importance matrix) of
23
+ **Jackrong**'s excellent [Qwopus3.6-27B-Coder-MTP](https://huggingface.co/Jackrong/Qwopus3.6-27B-Coder-MTP-GGUF),
24
+ built specifically to run fast on a **single RTX 3090** with **Multi-Token Prediction (MTP) speculative decoding**.
25
+
26
+ The original repo ships generic llama.cpp K-quants (`Q4_K_S`, etc.). These are different: they use
27
+ **ikawrakow's SOTA non-linear quant types** (`IQ4_K`, `IQ4_KS`, `IQ3_K`) which, on the same hardware,
28
+ decode **~40% faster at sustained generation** than the generic `Q4_K_S` β€” at the same quality β€” because of
29
+ ik_llama's optimized GEMV kernels. MTP draft heads are preserved, so self-speculative decoding works out of the box.
30
+
31
+ > ⚠️ **These require [ik_llama.cpp](https://github.com/ikawrakow/ik_llama.cpp), not mainline llama.cpp.**
32
+ > The `IQ*_K` quant types and the MTP path are ik_llama features. Mainline llama.cpp / LM Studio / Ollama
33
+ > will **not** load these correctly.
34
+
35
+ ## Model lineage
36
+
37
+ | Stage | Model | By |
38
+ |---|---|---|
39
+ | Base | [Qwen3.6-27B](https://huggingface.co/Qwen/Qwen3.6-27B) (dense, 27B) | Alibaba / Qwen |
40
+ | Finetune | [Qwopus3.6-27B-Coder-MTP](https://huggingface.co/Jackrong/Qwopus3.6-27B-Coder-MTP-GGUF) (reasoning-distill + agentic coding, MTP heads) | Jackrong |
41
+ | **This repo** | ik_llama.cpp IQ-quants + imatrix | community requant |
42
+
43
+ ## Quant files
44
+
45
+ | File | Type | bpw | Size | PPL (wikitext-2)ΒΉ | Best for |
46
+ |---|---|---|---|---|---|
47
+ | `Qwopus3.6-27B-Coder-MTP-IQ4_K.gguf` | IQ4_K | 4.50 | 14.4 GiB | **6.460** Β±0.062 | Max quality |
48
+ | `Qwopus3.6-27B-Coder-MTP-IQ4_KS.gguf` | IQ4_KS | 4.25 | 13.7 GiB | 6.477 Β±0.062 | **Recommended** β€” same quality as IQ4_K, ~37% faster decode |
49
+ | `Qwopus3.6-27B-Coder-MTP-IQ3_K.gguf` | IQ3_K | 3.43 | 11.1 GiB | 6.578 Β±0.062 | Tight VRAM |
50
+ | `qwopus-imatrix.dat` | β€” | β€” | 12 MB | β€” | importance matrix (for reproducing / making your own quants) |
51
+
52
+ ΒΉ Perplexity over 250 chunks of wikitext-2-raw `test` at `n_ctx=512`. IQ4_K and IQ4_KS are
53
+ **statistically identical** (the gap is within the error bars); IQ4_KS is the recommended default since it
54
+ decodes markedly faster for no measurable quality loss.
55
+
56
+ ## Benchmarks (single RTX 3090, ik_llama.cpp build `4574`)
57
+
58
+ **Raw throughput** β€” `llama-bench`, `-ngl 99`, no speculative decoding:
59
+
60
+ | Quant | pp512 (t/s) | tg128 (t/s) |
61
+ |---|---|---|
62
+ | IQ4_K | 993 | 31.2 |
63
+ | IQ4_KS | 1215 | 42.8 |
64
+ | IQ3_K | 1024 | 40.0 |
65
+
66
+ **Real-world with MTP** β€” `llama-server`, IQ4_KS, MTP on (`--draft-max 2`), KV cache `q4_0`, 200K context,
67
+ single slot (`-np 1`):
68
+
69
+ | Workload | Prefill (t/s) | Decode (t/s) |
70
+ |---|---|---|
71
+ | Short Q&A | 52 | **75.8** |
72
+ | 300-token gen | 231 | **59.9** |
73
+ | 900-token gen | 276 | **57.2** |
74
+ | 6021-token prompt | **802** | 74.0 |
75
+
76
+ Measured during the 900-token run: **β‰ˆ258 W** GPU power draw, **65 Β°C**, **21.2 GB** VRAM (at 200K context).
77
+ For reference, the generic `Q4_K_S` of the same model on the same machine sustains ~41 t/s decode β€” these
78
+ IQ quants are **~40% faster**.
79
+
80
+ ## How these were built
81
+
82
+ Quantizing **down from the near-lossless Q8_0** (not from a 4-bit quant β€” that would compound rounding error),
83
+ guided by an importance matrix:
84
+
85
+ ```bash
86
+ # 1. Importance matrix β€” run the Q8_0 model over a calibration corpus (GPU)
87
+ # corpus: bartowski's calibration_datav3 (2481 lines); 129 chunks; ik_llama cu13-full image
88
+ llama-imatrix -m Qwopus3.6-27B-Coder-MTP-Q8_0.gguf \
89
+ -f calibration_datav3.txt -o qwopus-imatrix.dat -ngl 99
90
+
91
+ # 2. Quantize each target from Q8_0 with the imatrix (CPU; cpu-full image)
92
+ # --allow-requantize is required because the source is Q8_0 (safe: Q8 is ~lossless)
93
+ for T in IQ4_K IQ4_KS IQ3_K; do
94
+ llama-quantize --allow-requantize --imatrix qwopus-imatrix.dat \
95
+ Qwopus3.6-27B-Coder-MTP-Q8_0.gguf Qwopus3.6-27B-Coder-MTP-$T.gguf $T
96
+ done
97
+ ```
98
+
99
+ - **Engine:** [ik_llama.cpp](https://github.com/ikawrakow/ik_llama.cpp), Docker images
100
+ `ghcr.io/ikawrakow/ik-llama-cpp:cu13-full` (imatrix/bench) and `:cpu-full` (quantize), build `4574`.
101
+ - **Source:** Jackrong's `Q8_0` GGUF (MTP variant), so the MTP draft heads carry through.
102
+ - **Calibration:** [bartowski's calibration_datav3](https://gist.github.com/bartowski1182/eb213dccb3571f863da82e99418f81e8).
103
+
104
+ ## Usage (ik_llama.cpp)
105
+
106
+ Serving with an OpenAI-compatible API and MTP speculative decoding enabled:
107
+
108
+ ```bash
109
+ llama-server \
110
+ --model Qwopus3.6-27B-Coder-MTP-IQ4_KS.gguf \
111
+ -ngl 99 --ctx-size 200000 -b 4096 -ub 1024 -np 1 \
112
+ -ctk q4_0 -ctv q4_0 -fa on \
113
+ -ngld 99 --multi-token-prediction --draft-max 2 --draft-p-min 0.0 \
114
+ --recurrent-ckpt-mode auto --merge-qkv \
115
+ --jinja --parallel-tool-calls \
116
+ --reasoning off --reasoning-format deepseek \
117
+ --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.0 --repeat-penalty 1.0
118
+ ```
119
+
120
+ Then point any OpenAI-compatible client at `http://localhost:8080/v1`. Tool/function calling is supported
121
+ (`--jinja --parallel-tool-calls`). Reasoning is off by default; the source model also supports a thinking mode.
122
+
123
+ Notes:
124
+ - `--multi-token-prediction --draft-max 2` enables MTP self-speculation; `2` is optimal for this model
125
+ (higher draft depths gave no gain or crashed in testing).
126
+ - Keep `-np 1` on a single card β€” extra parallel slots divide throughput and disable MTP.
127
+
128
+ ## Credits
129
+
130
+ - **Qwen team / Alibaba** β€” [Qwen3.6-27B](https://huggingface.co/Qwen/Qwen3.6-27B) base model.
131
+ - **Jackrong** β€” [Qwopus3.6-27B-Coder-MTP](https://huggingface.co/Jackrong/Qwopus3.6-27B-Coder-MTP-GGUF) finetune.
132
+ - **ikawrakow** β€” [ik_llama.cpp](https://github.com/ikawrakow/ik_llama.cpp), the IQ quant types and MTP support.
133
+ - **bartowski** β€” calibration dataset.
134
+
135
+ ## Disclaimer
136
+
137
+ Experimental community requantization for local evaluation. Quality is provided **as-is** β€” perplexity was
138
+ measured, but full coding/agentic benchmarks (HumanEval/SWE-bench/etc.) were **not** run for these specific
139
+ quants. License is inherited from the base (Apache-2.0). These GGUFs require **ik_llama.cpp**.