Qwen 3.6 27B 的量化是否会破坏 pelican?

Reddit r/LocalLLaMA 新闻

摘要

本文评估了 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 量化基准测试

Reddit r/LocalLLaMA

本文使用 KLD 和 Same Top P 指标,对多种 Qwen3.6-27B 量化版本(Q8 至 Q2)进行基准测试,对比了 Unsloth 和 mradermacher 等提供者的量化结果,并给出了质量与大小权衡的建议。

Qwen 3.8 27b 即使在 Q3_xxs 下也很强大

Reddit r/LocalLLaMA

用户发现 Qwen 3.8 27b 在 Q3 量化下对编码任务非常高效,推理速度快,超越了之前的模型,尽管在日常对话中存在一些小问题。