TL;DR
Một developer chạy Qwen ở Q3 quant thấy chất lượng output giống Claude Opus — nhưng mất 163 giây thay vì 102 giây cho cùng tác vụ. Model bị kẹt trong một vòng lặp suy luận 60 giây, tự mâu thuẫn với chính nó, rồi mới thoát ra và hoàn thành. Đây không phải bug. Đây là bản chất của việc đi dưới Q4: precision rơi thẳng xuống, và bạn trả giá bằng 10–30% token nhiều hơn cho cùng công việc.
Quan sát thực tế
Bài tweet gốc của @leftcurvedev_ ngắn gọn đến mức dễ bỏ lỡ ý chính. Tác giả chạy lần thứ hai trên Qwen ở Q3 để xem độ biến thiên output, và lần này model viết theo phong cách rất Opus — mạch văn, lập luận đầy đặn, không khô khan. Điều đáng nói là timer: 163s vs 102s, một cú chậm gần 60% so với lần đầu.
Model đã dành 60 giây đầu tiên để "nghĩ". Không phải nghĩ về câu trả lời mà nghĩ về việc người dùng đang muốn gì, rồi tự mâu thuẫn với chính chuỗi lý luận đó, loanh quanh một lúc, sau đó mới unstuck và thực sự bắt đầu làm việc.
Nếu bạn chạy local LLM thường xuyên, quan sát này quen thuộc. Nếu bạn đang cân nhắc hạ quant để nhét được model to hơn vào 16GB VRAM, đây chính là cái giá cụ thể bạn sắp trả.
Vách đá precision dưới Q4
Community llama.cpp đã biết Q4_K_M là sweet spot từ lâu, nhưng con số cụ thể giải thích vì sao rõ nhất:
- Q4_K_M: +0.0535 perplexity so với fp16 (7B). "Chất lượng cân bằng, khuyên dùng."
- Q3_K_M: +0.2437 perplexity — tức là gấp gần 4.5 lần Q4_K_M ở cùng kích cỡ model. llama.cpp gán nhãn "very high quality loss".
Perplexity không phải benchmark hoàn hảo, nhưng nó là chỉ số nhạy nhất cho việc model có "bối rối" khi dự đoán token tiếp theo hay không. Gấp 4.5 lần bối rối nghĩa là: trên các chuỗi lý luận dài, xác suất đi lạc nhân lên theo từng token. Và đây chính là cơ chế sinh ra thinking loop.
Technical facts
| Quant | Effective bits | PPL Δ (7B) | Quality vs fp16 | Use case |
|---|---|---|---|---|
| Q8_0 | 8.0 | ~+0.005 | ~lossless | Reference, eval |
| Q5_K_M | 5.5 | ~+0.02 | ~95% | Quality-first local |
| Q4_K_M | 4.5 | +0.0535 | ~85% | Mainstream sweet spot |
| Q3_K_M | 3.5 | +0.2437 | ~70%, brittle | Last-resort fit |
| Q2_K | 2.6 | >+0.5 | Breaks down | Không khuyến nghị |
Về VRAM, lấy Llama 3.3 70B làm mốc: Q8 ngốn 74GB, Q5_K_M 43GB, Q4_K_M 38GB. Mỗi bậc đi xuống tiết kiệm 5–10GB — đó là lý do người ta chấp nhận đánh đổi chất lượng.
Q3 so với Q8 ở model nhỏ hơn
Câu hỏi thực tế: thà chạy 14B ở Q3 hay 9B ở Q8 trên 16GB VRAM?
Bài tweet chọn 14B Q3. Và đây là một lựa chọn hợp lý với những task mà năng lực gốc của model quan trọng hơn độ chính xác. Một 14B brittle vẫn có thể hiểu được ngữ cảnh phức tạp mà 9B nguyên khối không với tới. Nhưng bạn phải chấp nhận:
- Nhiều token hơn 10–30% cho cùng tác vụ
- Wall-clock dài hơn đáng kể (như 163s vs 102s ở đây)
- Thỉnh thoảng sẽ phải can thiệp, "cầm tay" model qua những đoạn suy luận bị loop
Unsloth đang làm giảm đau đớn này đáng kể với dynamic quants (UD-Q3_K_XL, UD-Q4_K_XL trên Qwen3.5/3.6) — cách quant thông minh hơn giữ các layer nhạy cảm ở precision cao hơn. Trên benchmark tổng hợp, UD-Q3_K_XL nằm trong phạm vi ~1 điểm accuracy so với bản gốc. Nếu bạn bắt buộc phải ở Q3, dùng dynamic quant thay vì Q3_K_M thuần.
Khi nào nên chấp nhận đi xuống Q3
- Chat, tóm tắt, viết lách thông thường: Q4_K_M sống khỏe. Đừng hạ xuống nữa nếu không cần.
- Code, math, reasoning: quantization đánh mạnh vào đây trước. Ưu tiên Q5_K_M nếu có VRAM, hoặc chọn model nhỏ hơn ở Q6/Q8.
- Agent workflow dài, chain-of-thought sâu: tránh Q3. Token tax 10–30% cộng dồn qua nhiều bước sẽ tàn phá cả latency lẫn context window.
- Prompt ngắn, task rõ ràng, hardware eo hẹp: Q3 vẫn dùng được, đặc biệt với dynamic quant. Kiểm soát bằng cách cap max-thinking tokens, prompt rõ ràng, stop sequences chặt.
Limitations & pricing
Không có "pricing" theo nghĩa thương mại — đây toàn open-weight. Giá bạn trả là VRAM, điện, và wall-clock. Qwen trong docs chính thức thừa nhận: "accuracy of the quantized model could be lower than expected occasionally, especially for lower-bit quantization", và khuyên dùng AWQ scaling hoặc importance-matrix calibration để giảm thiệt hại.
Failure modes điển hình ở Q3:
- Thinking loop (như trường hợp 60s ở đầu bài)
- Chain-of-thought tự mâu thuẫn
- Lặp lại cụm từ ở context dài
- Rơi mạch ở đoạn context 8K+ tokens
Roadmap & hướng đi
Sàn Q3 đang được nâng lên từng tháng. Unsloth liên tục phát hành dynamic quant mới — Qwen3.6 GGUFs ra tháng 4/2026 là đợt gần nhất với benchmark perplexity & KL divergence công khai. Song song, TurboQuant của Google cắt KV cache ~6× gần như không mất chất lượng — đây là một trục khác với weight quantization và có thể stack chồng lên.
Xu hướng hardware cũng đang đẩy Q3 xa dần về phía "last resort". Với card 24GB consumer trở thành chuẩn, Q4 đang thành sàn và Q5/Q6 thành mặc định cho prosumer. Trong 12 tháng tới, việc phải chạy Q3 có lẽ chỉ còn là bài toán của những ai cố nhồi 70B+ vào 16GB.
Tạm thời, nếu bạn đang ở 16GB VRAM như tác giả tweet: Q3 với dynamic quant, prompt ngắn gọn, và sẵn sàng "cầm tay" model qua vài cú loop — vẫn là một đánh đổi hợp lý.
Nguồn: llama.cpp #2094, Unsloth Dynamic 2.0, Qwen docs, LocalClaw, origin tweet.