Qwen 3.6 27B 的量化是否会破坏 pelican?
摘要
本文评估了 Qwen3.6-27B 模型的不同量化方式对输出质量的影响,使用了 KL 散度和 top-1 token 准确率,以及 SVG 绘图等可视化示例。
暂无内容
查看缓存全文
缓存时间: 2026/07/27 13:55
# Qwen3.6 27B 量化会破坏 pelican 吗?
来源:https://quesma.com/blog/qwen-quantization-quality/
模型量化如何影响其质量?
一只骑自行车的大嘴鸟,模型绘制的 SVG
一个动画齿轮传动装置,同一模型绘制的 SVG
你猜用的是哪个 Qwen3.6 27B 量化版本?最大的 8 位、最小的 2 位,还是介于两者之间?
不久前,我还在极力推崇 Qwen3.6 27B (https://quesma.com/blog/qwen-36-is-awesome/)\。Hacker News 的讨论 (https://news.ycombinator.com/item?id=48721903) 是关于你需要一台性能猛兽,还是可以用一台小得多的机器。
即使是 8 位模型也只需要不到 45 GB 的 RAM —— 对于 NVIDIA 显卡来说很大(RTX 5090 有 32 GB),但对强劲的 Apple Silicon 笔记本来说绰绰有余。
但使用更小的量化,我们可以做到更小——`Q4_K_M` 不到 30 GB,最小的 2 位量化 `UD-IQ2_XXS` 甚至不到 18 GB。
我很好奇量化如何影响结果。我们通过典型的概率测量、查看带 pelican 和齿轮的 SVG,以及运行基准测试来观察量化对结果的影响。我在自己的笔记本上烧了 37 个小时(生成了 390 万个 token),在云端 GPU 上花了 1430 美元——所以你不用亲自动手了。
## 量化
模型量化是一种有损压缩。如果你愿意,可以用 llama.cpp 在几分钟内完成:
```
llama-quantize Qwen3.6-27B-BF16-00001-of-00002.gguf \ # 输入权重
Qwen3.6-27B-Q4_K_M-llama.gguf \ # 输出文件
Q4_K_M # 量化
```
但通常,当由专业人士完成时效果更好——可以从 Hugging Face 上下载 Bartowski (https://huggingface.co/bartowski/Qwen_Qwen3.6-27B-GGUF) 或 Unsloth (https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF) 提供的版本。
Qwen3.6-27B GGUF 量化列表及文件大小
Unsloth (https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF) 提供的 Qwen3.6 27B 所有 GGUF 量化版本,从 9.6 GB(`UD-IQ2_XXS`)到 54.7 GB(`BF16`)。
这些名称分为几个系列,也就是下面每个图表中的颜色(IQ 和传统量化共享一种颜色):
- **标准 K 量化**(`Q4_K_M`、`Q6_K`)是 llama.cpp 的默认设置。它们以小块存储权重,每块共享一个缩放因子。`_S`/`_M`/`_L` 后缀表示有多少个张量保持更高精度。
- **IQ 量化**(`IQ4_XS`、`IQ4_NL`)使用码本和重要性矩阵进行压缩。
- **传统量化**(`Q4_0`、`Q4_1`)是最古老的格式。它们只是将数值四舍五入到最近值。
- **Unsloth Dynamic (UD)**(`UD-Q4_K_XL`)会检查哪些张量对压缩最敏感,并给它们分配更多位数。
## 统计测量
量化是一种有损压缩。模型预测 token,因此我们可以测量概率分布是否不同。
### Kullback-Leibler 散度
一种统计度量是Kullback-Leibler (KL) 散度 (https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence),也称为相对熵。简而言之,它衡量的是新分布的结果相对于原始分布的意外程度。
0.0010.010.101020304050 GB
磁盘上的模型大小
与 BF16 的平均 KL 散度
UD-IQ2_XXS
UD-IQ2_M
UD-Q2_K_XL
UD-IQ3_XXS
Q3_K_S
Q3_K_M
UD-Q3_K_XL
IQ4_XS
Q4_0
Q4_K_S
IQ4_NL
Q4_1
UD-Q4_K_XL
Q5_K_S
Q5_K_M
UD-Q5_K_XL
Q6_K
UD-Q6_K_XL
Q8_0
UD-Q8_K_XL
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
这里的参考 `BF16` 没有显示,因为它的值为零,在对数刻度上无法表示。然而,这个图表没有回答一个核心问题——这种差异实际上重要吗?
### Top-1
一个更简单的度量:量化模型选择与原始模型相同的最可能 token 的频率。这在意温度 0 下至关重要,因为只有最顶层的 token 被使用。
80%85%90%95%100%01020304050 GB
磁盘上的模型大小
与 BF16 相同的 top-1 token 百分比
UD-IQ2_XXS
UD-IQ2_M
UD-Q2_K_XL
UD-IQ3_XXS
Q3_K_S
Q3_K_M
UD-Q3_K_XL
IQ4_XS
Q4_0
Q4_K_S
IQ4_NL
Q4_1
UD-Q4_K_XL
Q5_K_S
Q5_K_M
Q6_K
UD-Q6_K_XL
Q8_0
UD-Q8_K_XL
BF16
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
这里我们看到 `Q8_0` 达到了 99.3%,几乎与原始模型相同。然后随着模型变小,结果开始下降。
### 碰撞交叉熵
然而,如果我们在温度 1 下工作,就需要考虑所有 token。即使两次运行相同模型也会得到不同结果。我们可以测量得到与参考模型相同 token 的概率。
44%46%48%01020304050 GB
磁盘上的模型大小
与 BF16 相同的采样 token 百分比,温度 1
UD-IQ2_XXS
UD-IQ2_M
UD-Q2_K_XL
UD-IQ3_XXS
Q3_K_S
Q3_K_M
UD-Q3_K_XL
Q4_0
Q4_1
Q5_K_S
UD-Q5_K_XL
Q6_K
Q8_0
UD-Q8_K_XL
BF16
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
对于 `BF16` 与其自身比较,结果是 48.5%。对于其他模型,我们看到这个范围大致保持不变,直到 3 位量化附近出现急剧下降。
### 困惑度
另一个度量是我们预测文本下一个 token 的能力,即困惑度 (https://en.wikipedia.org/wiki/Perplexity),公式为 `e^(log-loss)`:大致相当于模型每一步在多少个可能性相等的 token 之间选择。这里列出它只是为了完整性。
6.577.5801020304050 GB
磁盘上的模型大小
在 wikitext-2 上的困惑度
UD-IQ2_XXS
UD-IQ2_M
UD-Q2_K_XL
UD-IQ3_XXS
Q3_K_S
Q3_K_M
UD-Q3_K_XL
IQ4_XS
Q4_0
Q5_K_S
UD-Q5_K_XL
Q6_K
UD-Q6_K_XL
Q8_0
UD-Q8_K_XL
BF16
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
## 观察 SVG
但是,这有关系吗?我决定在温度 0 下使用一次性提示生成 SVG 来比较模型。我预计在某个点质量会下降,或者甚至可能根本无法生成一个可用的 SVG。
### Pelican
最经典的“Hello World”是 Simon Willison 的 pelican (https://simonwillison.net/tags/pelican-riding-a-bicycle/)\。那么,我们开始吧:
> 生成一个 SVG,内容是一只骑自行车的大嘴鸟
我原本以为量化会影响大嘴鸟,以至于在低量化版本下甚至 SVG 可能不正确,或者出现明显的错误。但是……感觉更像是种子(seed)的影响,而不是对质量有大幅度的改变。
而且,你可能已经注意到,打开这篇博文的大嘴鸟和齿轮来自 `UD-Q2_K_XL`,一个 2 位量化。
### 齿轮
然后我尝试了需要更精确空间推理的更复杂的任务:齿轮。起初我尝试了一些开放式的提示,但很难评估。
> 生成一个动画 SVG,viewBox 为 0 0 560 300,无文字。五个齿轮,齿数与半径成正比:A r=30 中心 (100,190);B r=60 中心 (190,190) 与 A 啮合;C r=40 中心 (290,190) 与 B 啮合;D r=50 中心 (430,190),通过皮带从 C 驱动,皮带轮半径为各自齿轮半径的一半;E r=35 中心 (190,95) 与 B 啮合。填充颜色:A #d62828,B #1d4ed8,C #15803d,D #f59e0b,E #7c3aed。A 顺时针转动,速度为 30 RPM。以正确的速度和方向动画所有旋转。
令我惊讶的是,即使在这里,答案也各不相同。有时最好的模型会因为过于细致地绘制每一个齿而超时,使得问题变得过于复杂。
我还有几种其他方法,结果类似。偶尔,最小的模型(尤其是 2 位模型)有略微产生更差结果的趋势,但总体噪声主导了一切。所有模型都处于相似的水平。
## 基准测试
如果看几个例子还不够,我决定进行基准测试。这次对我的机器来说有点太过分了——计算时间太长,而且我担心把笔记本变成烤面包机。
所以我在云端运行,使用 Modal (https://modal.com/)\。
### Terminal-Bench 2.1
首先,我从 Terminal-Bench 2.1 (https://www.tbench.ai/leaderboard/terminal-bench/2.1) 开始,因为它既流行又容易运行。我只运行了部分量化版本,以保持合理的预算。花费了 543 美元。
20%30%40%50%01020304050 GB
磁盘上的模型大小
Terminal-Bench 2.1 通过率
UD-Q2_K_XL
UD-Q3_K_XL
Q4_K_M
Q5_K_M
Q6_K
Q8_0
BF16
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
柱形:95% 置信区间,n = 89
我预计会看到一个悬崖式下降,但得到的却是噪声。许多任务没有在 900 秒的预算内完成:它是为快速的 API 模型校准的,而一个推理模型在每次行动前会花费 10-30k 个 token 进行思考,即使在 H100 上也是如此。
### AIME
然后我使用了 AIME-120 数学问题数据集——运行速度更快,且长推理链应该会放大任何微小错误。我们使用了温度 0.6,top-p 0.95,32k token 限制,如《Quantization Hurts Reasoning? arXiv:2504.04823 (https://arxiv.org/abs/2504.04823)》所述。最初我们在 H100 上运行,后来改用 L40S——总计花费了 889 美元。
30%40%50%60%70%80%01020304050 GB
磁盘上的模型大小
AIME-120 解题正确率
UD-IQ2_XXS
UD-IQ2_M
UD-Q2_K_XL
UD-IQ3_XXS
Q3_K_S
Q3_K_M
UD-Q3_K_XL
IQ4_XS
Q4_0
Q4_K_S
IQ4_NL
Q4_1
UD-Q4_K_XL
Q5_K_S
UD-Q5_K_XL
Q6_K
UD-Q6_K_XL
Q8_0
UD-Q8_K_XL
BF16
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
柱形:重复运行相同 120 个问题的 95% 置信区间
同样,所有 4 位量化或以上的模型都接近完整模型,在噪声范围内。甚至一些 3 位量化也表现不错。
在 3 位量化中,`Q3_K_M` 得分为 73.3%,而 `Q3_K_S` 仅为 54.2%。比位数更重要的是 Kullback-Leibler 散度——散度低于 0.05 的量化得分接近 `BF16`,而所有高于 0.08 的得分都下降了。
作为参考,完整 `BF16` 模型的 70.8% 得分接近 OpenAI o1 的 74.4%(2024 年 9 月)。
## 速度如何?
在我的 Apple Silicon MacBook(M5 Max)上,速度变化不大。量化节省的是内存,而不是速度:只有存储的权重是 2 位或 4 位,而数学运算在 16 位浮点数上运行,因此每次矩阵乘法都会解包它们。
2427303336 tok/s01020304050 GB
磁盘上的模型大小
生成速度
UD-IQ2_XXS
UD-IQ2_M
UD-Q2_K_XL
UD-IQ3_XXS
Q3_K_S
Q3_K_M
UD-Q3_K_XL
IQ4_XS
Q4_0
Q4_K_S
IQ4_NL
Q4_1
UD-Q4_K_XL
Q5_K_S
Q5_K_M
UD-Q5_K_XL
Q6_K
UD-Q6_K_XL
Q8_0
UD-Q8_K_XL
BF16
Unsloth Dynamic (UD)
标准 K 量化
IQ4 & 传统 Q4
BF16 参考
作为参考,在相同的量化版本(`UD-Q2_K_XL`)和相同的提示下:我的 MacBook Pro M5 Max 128 GB 给出 30 tok/s,NVIDIA L40S(Ada Lovelace,与 RTX 4090 相同的核心,但内存更大)给出 94 tok/s,H100(Hopper)给出 112 tok/s。
## 结论
我原本以为量化会削弱模型的智力。令我惊讶的是,变化要微妙得多。当然,2 位模型稍微差一些。3 位模型很大程度上取决于细节——但对于 4 位及以上的模型,质量基本保持不变。如果你只是想下载一个文件:`Q4_K_M` 或 `UD-Q4_K_XL`。体积大约是完整模型的 1/3,在我们所有的测试中都无法区分。
当然,其他模型可能表现不同,大小与质量的权衡也不同。然而,核心点是一样的——量化不再是一个肮脏的把戏,而是一种减小体积的标准方法。它可能不会让事情变快,但很可能会在几乎不降低质量的情况下减小体积——参见最近的预印本《Quantize with Confidence, arXiv:2607.14181 (https://arxiv.org/abs/2607.14181)》,该文表明使用良好的量化,模型保留了大部分能力。同时,事实性知识无法被压缩 (https://01.me/research/ikp/)——在某个点上,损失是不可避免的。
你使用量化模型的经验是什么?
在 LinkedIn (https://www.linkedin.com/posts/piotrmigdal_can-a-2-bit-pelican-ride-a-bike-we-tested-ugcPost-7487480326223712256-mKB9/)、X (https://x.com/pmigdal/status/2081712817162293272)、Hacker News (https://news.ycombinator.com/item?id=49068398) 或 Reddit (https://www.reddit.com/r/LocalLLaMA/comments/1v7ycpd/do_qwen_36_27b_quantizations_break_the_pelican/) 上讨论。
敬请期待未来的文章和发布。
相似文章
Qwen3.6-27B 量化基准测试
本文使用 KLD 和 Same Top P 指标,对多种 Qwen3.6-27B 量化版本(Q8 至 Q2)进行基准测试,对比了 Unsloth 和 mradermacher 等提供者的量化结果,并给出了质量与大小权衡的建议。
我的笔记本上的Qwen3.6-35B-A3B画出的鹈鹕比Claude Opus 4.7更好
Simon Willison对比了在MacBook Pro上本地运行的Qwen3.6-35B-A3B与Claude Opus 4.7,发现Qwen生成的骑自行车的鹈鹕和骑独轮车的火烈鸟的SVG插图更好,不过他指出这个狭窄的基准测试并不能反映更广泛的模型能力。
Qwen3.8 27B 模型量化基准测试:4位量化保持性能,1位量化严重退化
基准测试表明,4位量化的Qwen3.8 27B在Terminal-Bench 2.1等基准测试中保持性能,且适配24GB显卡,但1位量化导致严重性能下降。
Qwen 3.8 27b 即使在 Q3_xxs 下也很强大
用户发现 Qwen 3.8 27b 在 Q3 量化下对编码任务非常高效,推理速度快,超越了之前的模型,尽管在日常对话中存在一些小问题。
我刚刚用Q4量化的Qwen 3.8 27与GPT 5.6 Sol high进行测试——在复杂动画SVG任务中轻松获胜
一名用户在复杂动画SVG任务中测试了Q4量化的Qwen 3.8 27B和GPT 5.6 SOL,发现Qwen表现更好,错误更少,突显了其在空间推理和编码方面的优势。