两行 AutoRound 配置错误,却让量化模型效果差了一半
两行配置错了几个月
我们一直在 Hugging Face 上发布 Archsloth 品牌的 GGUF 量化模型。最近一次对 Qwen3-4B 的重新量化过程中,意外发现两个看似微小却影响巨大的配置错误。这两个错误导致过去几个月发布的模型,虽然文件大小、张量布局与竞品完全一致,但实际输出分布却偏离原始模型更远。

具体来说,对比 unsloth 发布的 Qwen3-4B-Q4_K_M.gguf(2,497,280,800 字节),我们在修正配置后得到的同名文件,在 KL 散度(衡量量化模型输出分布与原始 bf16 模型差异)上全面领先。在韩语任务上差距高达 54.4%,代码任务上也有 52.9% 的优势。即使在未用于校准的语种如泰语、印地语上,优势依然显著,说明并未过拟合。
第一个错误:优化了没用的量化器
AutoRound 工具通过 --scheme 参数指定优化目标。我们此前一直使用 W4A16,这是为 GPU 张量核心设计的 4-bit 权重 + 16-bit 激活方案。但导出时却用 --format gguf:q4_k_m 生成 GGUF 文件。
问题在于,W4A16 和 Q4_K_M 在分组方式、缩放因子计算、零点位置等关键细节上完全不同。这意味着 AutoRound 花费大量时间优化的舍入策略,针对的是最终根本不会使用的量化器。导出阶段会重新根据 Q4_K_M 规则计算所有参数,导致前期优化成果大部分被丢弃。
修正方法很简单:
- --scheme W4A16 --format gguf:q4_k_m
+ --scheme GGUF:Q4_K_M --format gguf:q4_k_m这个错误很难被发现,因为流程不会报错,生成的 GGUF 文件也完全合法,只是效果不如预期而已。
第二个错误:漏开关键算法开关
AutoRound 有个默认关闭的参数 --enable_alg_ext,它启用了 SignRoundV2 算法(arXiv:2512.04746)。这个基于符号梯度的舍入搜索能显著提升精度,代价是约 1.7 倍的调优时间(4B 模型在 H100 上从 6 分钟增至 11 分钟)。
我们之前完全忽略了这个开关。打开后,配合正确的 --scheme,就构成了表格中性能差异的全部来源。
校准语料不是中立变量
社区普遍认为,imatrix 校准语料的语言选择影响不大。这个结论对 llama.cpp 内置的量化流程成立,但不适用于 AutoRound。
原因在于机制不同:imatrix 只是在 llama.cpp 自身的缩放搜索中加权,而 AutoRound 的舍入搜索直接替换了整个量化过程。每个权重的舍入方向(向上或向下)完全由校准激活值上的重建误差决定,下游没有其他步骤来“冲淡”这个选择。
换句话说,校准文本不只影响结果,它直接决定舍入方向。
我们做了对照实验:保持其他条件不变,仅更换校准语料。使用韩英混合语料(样本级交错)相比纯英语语料,韩语 KL 散度降低 29.6%。在 27B 模型上,同样对比带来 31.9% 的提升。
有意思的是,交错方式比语种比例更重要。严格按样本交替韩英文本,比先韩后英的拼接方式更能提升英语表现(+11.4%)。加入代码语料后,代码任务指标提升 52.9%,但韩语和英语分别损失 3.4% 和 5.3%——这是一个明确的权衡。
其他模型和量化等级的表现
我们在 Qwen3-4B 上测试了三个量化等级,均与竞品保持字节级一致:
Q4_K_M:韩语 -54.4%,英语 -33.2%Q6_K:韩语 -41.5%,英语 -30.2%Q8_0:韩语 -11.1%,英语 -8.7%
随着比特数增加,优势缩小,符合预期。但即使在 Q8_0 上仍有差距,略超预期。
更大的 Qwen3.5-9B 和 Qwen3.8-27B(均为多模态模型)也验证了该方法的有效性:
- 9B
Q4_K_M:韩语 -25.4%,英语 -11.4% - 27B
Q6_K:韩语 -36.9%,英语 -15.0%
我们没赢的地方
透明起见,必须说明失败案例:
- 27B 的
Q4_K_M版本因英语表现变差(+15.8%)而未发布,尽管韩语提升了 12.8%。不占优的版本我们不会放出。 - 整个系列没有
Q5_K_M,因为工具链在Q5_K格式下存在系统性偏差(优化权重与打包张量偏差 5–6%),导致效果甚至不如自家Q4_K_M。 - 推理速度无差异:pp512 约 12,200 tok/s,tg128 约 305 tok/s,符合同尺寸同布局的预期。
- 大模型只测了韩英双语,十语种评测仅限 4B 模型。
无效的调优尝试
以下是在修正基础配置后,额外尝试但无效的方法(基于 4B 测试):
- 校准样本量 ×4:无收益,成本 ×4
- 样本长度从 2048 增至 4096:韩语 -2%,英语 +23%(变差)
- 纯韩语校准语料:英语 +14%(变差)
- 工具默认英语语料:韩语 +76%,英语 +9%(均变差)
- 量化感知修复(healing):+57%(显著变差)
- 关键张量额外比特:0 到 +10%(无改善或变差)
- 同尺寸混合精度(4/8-bit):均匀增比特 好 10%
值得注意的是,最后三项(修复、比特分配、混合精度)在基础舍入较差时(如 RTN)确实有效(-6% 到 -37%),但一旦启用正确的舍入搜索,反而全部变成负优化(+9% 到 +57%)。这说明:评估新方法时,必须同时在舍入开启和关闭状态下测试,否则可能被弱基线误导。
如何自行验证
完整复现命令如下:
# 下载竞品模型
hf download unsloth/Qwen3-4B-GGUF Qwen3-4B-Q4_K_M.gguf --local-dir rival
# 转换原始 bf16 模型作为教师
python llama.cpp/convert_hf_to_gguf.py Qwen/Qwen3-4B --outtype bf16 --outfile ref-BF16.gguf
# 生成教师 logits(每份评测文本一次)
llama-perplexity -m ref-BF16.gguf -f eval/eval_ko.txt \
--kl-divergence-base base_ko.dat -ngl 99 -c 512 --chunks 60
# 评测候选模型
llama-perplexity -m <candidate>.gguf -f eval/eval_ko.txt \
--kl-divergence --kl-divergence-base base_ko.dat -ngl 99 -c 512 --chunks 60构建命令(仅此而已):
auto-round --model Qwen/Qwen3-4B \
--scheme GGUF:Q4_K_M --enable_alg_ext \
--iters 200 --nsamples 128 --seqlen 2048 \
--dataset cal_archsloth.jsonl \
--format gguf:q4_k_m --output_dir out
特别提醒:困惑度(perplexity)无法反映这种差异。在韩语任务上,两个模型的困惑度差距仅 2.8%,但 KL 散度差距达 54.4%。困惑度衡量模型是否“自信”,而 KL 散度衡量是否“对同样的事情自信”——后者对量化评估才真正关键。

模型发布

所有模型已发布在 Archsloth MODELs:

- Qwen3-4B-GGUF:含
Q4_K_M/Q6_K/Q8_0,十语种评测 - Qwen3.5-9B-GGUF:
Q4_K_M+ 视觉塔 - Qwen3.8-27B-GGUF:
Q6_K+ 视觉塔
所有仓库均包含校准语料、评测文本及原始日志。Apache-2.0 许可,基于原始权重量化,兼容 stock llama.cpp。