Downloads · 30 days
79
24% of all-time downloads
AlexanderKyng/Qwen3.6-27B-MTP-48Gb
Qwen3.6-27B-MTP-48Gb is a image-text-to-text model from AlexanderKyng. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as apache-2.0.
This repository hosts a production-ready Q80 quantization of Qwen3.6-27B, specifically optimized to run within 48 GB of VRAM (dual RTX 3090s via NVLink). The weights were calibrated using a custom iMatrix blending cod…
Downloads · 30 days
79
24% of all-time downloads
All-time downloads
329
Public
Repo size
29.7 GB
Likes
1
Public
Click a slice to open those files.
.gguf29.7 GB · 100%
From the Hugging Face model README
This repository hosts a production-ready Q8_0 quantization of Qwen3.6-27B, specifically optimized to run within 48 GB of VRAM (dual RTX 3090s via NVLink). The weights were calibrated using a custom iMatrix blending code, English text, agentic prompts, and French passages to precisely target layer-wise quantization sensitivity. On the tested hardware, this configuration achieves up to ~2,000 t/s prefill and ~85–90 t/s decode throughput with Multi-Token Prediction (MTP) enabled. The Q8_0 format was selected for its optimal speed-to-accuracy ratio, lower-precision variants (e.g., Q6_K) showed a 5 to 10% throughput drop alongside reduced long-context stability, capping reliable usage at ~242k tokens. By preserving critical precision in attention and KV cache operations, this quantization enables stable inference at the model’s maximum context window.
Note: Due to VRAM constraints, the MMPROJ vision encoder must be offloaded to CPU when running multimodal tasks.
As previously said, Q8_0 was the way to go but the model became too big for the 48Gb target. Therefore, the strategy was to use Q6_K on just a few tensors. I managed to identify which were the least sensitive to quantization thanks to the iMatrix, which also identified the few tensors that needed more care in order to maintain the model's capacities.
Therefore, the schema identified was :
| Tensor | Layers | Format |
|---|---|---|
ssm_alpha | 57, 58, 60, 61, 62 | F16 |
ssm_beta | 57, 58, 60, 61, 62 | F16 |
attn_q, attn_k, attn_v | 3, 7 | F16 |
attn_output | 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55 | Q6_K |
ssm_out | 0–2, 4–6, 8–10, 12–14, 16–18, 20–22, 24–26, 28–30, 32–34, 36–38, 40–42, 44–46, 48–50, 52–54, 56–58 | Q6_K |
Therefore, 93.91% of the model is Q8_0, 5.44% is Q6_K and 0.61% is F16.
The model was calibrated using a custom, shuffled iMatrix to ensure high fidelity across coding, instruction-following, and bilingual tasks (English/French).
To evaluate the precision loss after the mixed-quantization scheme, I compared the perplexity on Wiki-Text-raw and a custom made dataset, composed of code mainly found on llama.cpp's repo:
| Metric | Code | WikiText-Raw |
|---|---|---|
| Base Mean Perplexity | 1.897774 ± 0.005951 | 1.897743 ± 0.005951 |
| Quant Mean Perplexity | 1.898452 ± 0.005962 | 1.898452 ± 0.005962 |
| PPL(Q) / PPL(Base) | 1.000357 | 1.000373 ± 0.000117 |
| Cor(ln PPL) | 99.93% | 99.93% |
| Mean KLD | 0.001085 ± 0.000107 | 0.001015 ± 0.000072 |
| 99.9% KLD | 0.047652 | 0.048484 |
| 99.0% KLD | 0.011284 | 0.011194 |
| 95.0% KLD | 0.003649 | 0.003636 |
| Median KLD | 0.000035 | 0.000035 |
| Max KLD | 25.477781 | 16.120018 |
| RMS Δp | 1.017 ± 0.026 % | 1.002 ± 0.021% |
| Same Top-p | 99.290 ± 0.016 % | 99.299 ± 0.016% |
Key Findings:
To replicate the optimal performance (262K context, F16 K-Cache, Multi-GPU) using llama.cpp, use the following llama-server command.
Note the specific use of --split-mode tensor and --tensor-split 1,1 for optimal PCIe bandwidth management across dual RTX 3090s. This command appeared to be the best one I could come across using an NVLink.
As previously disclosed, the mmproj file will not hold on the GPU, if you want to use it you need to add --no-mmproj-offload and --image-min-tokens 1024 to the following command, alongside the --mmproj /path/to/mmproj-BF16.gguf.
/path/to/llama.cpp/build/bin/llama-server \
-m /path/to/Qwen3.6-27B0-MTP-Q8-Opt.gguf \
--split-mode tensor \
--tensor-split 1,1 \
--host 0.0.0.0 \
--port 8080 \
--ctx-size 262144 \
--parallel 1 \
--gpu-layers 999 \
--cache-type-k f16 \
--cache-type-v q8_0 \
--flash-attn on \
-b 2048 -ub 2048 \
--spec-type draft-mtp \
--alias Qwen3.6-27b \
--jinja
I also developed a proxy to enable users to select thinking or non-thinking behaviors, apply the recommended sampling parameters AND the "Preserve Thinking" option. You may find it on my GitHub.
--ctx-size or using 8-bit K-cache (--cache-type-k q8_0).This project was made possible thanks to the outstanding tools and contributions from the open-source AI community. Special thanks to: