🦥Unsloth Dynamic 2.0 GGUF
我们对动态量化的重大升级!
我们很高兴推出我们的动态 v2.0 量化方法——对先前量化方法的一次重大升级。此新方法优于领先的量化方法,并为 5-shot MMLU 和 KL 散度设定了新的基准。
这意味着您现在可以运行并微调量化的大型语言模型,同时尽可能保留准确性!您可以在任何推理引擎上运行 2.0 GGUF,例如 llama.cpp、Ollama、Open WebUI 等。
2025 年 9 月 10 日 更新: 你们要求更严格的基准测试,所以我们展示 Aider Polyglot 的结果!我们的动态 3-bit DeepSeek V3.1 GGUF 得分 75.6%,超越了许多全精度的 SOTA 大型语言模型。 阅读更多。
该 关键优势 使用 Unsloth 软件包和模型的在于我们在以下方面的积极作用: 修复关键错误 主要模型中的关键错误。我们直接与以下团队合作, Qwen3, Meta(Llama 4), Mistral(Devstral), Google(Gemma 1–3) 和 Microsoft(Phi-3/4),贡献了重要修复,显著提升了准确性。
下面有我们基准和评估的详细分析。


💡 动态 v2.0 有什么新内容?
针对 GGUFs 和 safetensors 的层选择重构: Unsloth Dynamic 2.0 现在以更智能、更广泛的方式有选择地对层进行量化。不再只修改部分选定层,我们现在会动态调整每个可能层的量化类型,而且每个层与每个模型的组合都会有所不同。
当前选定以及所有未来的 GGUF 上传将采用 Dynamic 2.0 以及我们新的校准数据集。该数据集包含超过 >1.5M 标记 (取决于模型)并由高质量、人工策划和清洗的数据组成——大幅提升对话聊天性能。
此前,我们的动态量化(DeepSeek-R1 1.58-bit GGUF)仅对 MoE 架构有效。 Dynamic 2.0 量化现在适用于所有模型(包括 MoE 与非 MoE)。.
针对模型的专属量化: 每个模型现在使用定制的量化方案。例如,Gemma 3 中被量化的层与 Llama 4 中有显著差异。
为了在 Apple Silicon 和 ARM 设备上最大化效率,我们现在还加入了 Q4_NL、Q5.1、Q5.0、Q4.1 和 Q4.0 格式。
为确保准确的基准测试,我们构建了一个内部评估框架以匹配 Llama 4 和 Gemma 3 官方报告的 5-shot MMLU 分数。这使全精度与 Dynamic v2.0、 QAT 和标准 imatrix GGUF 量化之间能进行可比对的比较。


所有未来的 GGUF 上传都将采用 Unsloth Dynamic 2.0,我们未来的动态 4-bit safetensor 量化也将从中受益。
📊 为什么使用 KL 散度?
准确性并非万全之策 展示了即使通过删除层(即使选择的是不必要的层)仍会在“翻转”上产生巨大差异。“翻转”定义为答案从不正确变为正确或相反。论文展示了当我们剪枝层或进行量化时 MMLU 可能不会下降,但那是因为一些不正确的答案可能“翻转”成正确。我们的目标是与原始模型匹配,因此衡量“翻转”是一个很好的指标。


KL 散度 应当是 报告量化误差的黄金标准 根据论文“准确性并非万全之策”。 使用困惑度是不正确的 因为输出的标记值可能相互抵消,所以我们必须使用 KLD!
论文还显示有趣的是 KL 散度与翻转高度相关,因此我们的目标是在尽量少增加量化磁盘空间的同时降低平均 KL 散度。
⚖️ 校准数据集过拟合
大多数框架使用维基百科文章的测试集来报告困惑度和 KL 散度。然而,我们注意到使用与维基相关的校准数据集会导致量化过拟合并获得更低的困惑度分数。我们使用了 Calibration_v3 和 Calibration_v5 数据集进行公平测试,其中包括一些 wikitext 数据以及其他数据。 此外,instruct 模型有独特的聊天模板,仅使用文本的校准数据集对 instruct 模型并不有效 (基础模型则可以)。事实上,大多数 imatrix GGUF 通常在校准时存在这些问题。因此,它们在也使用维基数据的 KL 散度基准上自然表现更好,因为模型本质上针对该领域进行了优化。
为确保公平且受控的评估,我们在基准 KL 散度时不会使用我们自己的校准数据集(该数据集已为聊天性能优化)。相反,我们使用相同的标准维基百科数据集进行测试,从而能够直接将我们的 Dynamic 2.0 方法与基线 imatrix 方法进行比较。
🔢 MMLU 复现冒险
复现 MMLU 5-shot 简直是噩梦。我们 无法 复现许多模型的 MMLU 结果,包括 Llama 3.1(8B)Instruct、Gemma 3(12B)等,原因是 细微的实现问题。例如 Llama 3.1(8B)本应得到约 ~68.2%,而使用错误的实现可以得到 35% 的准确率。

使用简单的 MMLU 实现,Llama 3.1(8B)Instruct 的 MMLU 5-shot 准确率为 67.8%。然而我们发现 Llama 将 “A” 与 “_A”(前面有空格的 A)分成不同的标记 id。如果我们同时考虑带空格和不带空格的标记,我们得到 68.2%。 (+0.4%)
有趣的是,正如 Eleuther AI 的 LLM Harness 所示,Llama 3 也会在问题后追加 “最佳答案是” ,这与 Llama 3 最初的 MMLU 基准一致。
还有许多其他细微问题,因此为了在受控环境中对所有内容进行基准测试,我们从头设计了自己的 MMLU 实现,通过直接研究 github.com/hendrycks/test 并在多个模型上验证我们的结果并与报告的数值进行比较。
✨ Gemma 3 QAT 复现,基准测试
Gemma 团队发布了两个 Gemma 3 的 QAT(量化感知训练)版本:
Q4_0 GGUF - 通过公式将所有层量化为 Q4_0,
w = q * block_scale每个块有 32 个权重。详情见 llama.cpp 维基 。int4 版本 - 大概是 TorchAO int4 风格?
我们对所有 Q4_0 GGUF 版本进行了基准测试,并在 12B 模型上做了广泛实验。我们看到 12B Q4_0 QAT 模型获得 67.07% 而全 bfloat16 的 12B 版本在 5-shot MMLU 上获得 67.15%。这非常令人印象深刻!27B 模型大多也接近这一水平!
MMLU 5-shot
26.12%
55.13%
67.07%(67.15% BF16)
70.64%(71.5% BF16)
磁盘空间
0.93GB
2.94GB
7.52GB
16.05GB
效率*
1.20
10.26
5.59
2.84
我们设计了一个新的 效率指标 它在计算模型有用性的同时,还考虑其磁盘大小和 MMLU 5-shot 分数:
我们必须 减去 25 因为 MMLU 有 4 个多项选择——A、B、C 或 D。假设我们制造了一个仅随机选择答案的模型——它会得到 25% 的准确率,且磁盘空间仅几字节。但显然这不是一个有用的模型。
关于相对于基线模型的 KL 散度,下面是展示改进的表格。提醒:KL 散度越接近 0 越好(即 0 表示与全精度模型完全相同)
IQ1_S
1.035688
5.83
0.972932
6.06
IQ1_M
0.832252
6.33
0.800049
6.51
IQ2_XXS
0.535764
7.16
0.521039
7.31
IQ2_M
0.26554
8.84
0.258192
8.96
Q2_K_XL
0.229671
9.78
0.220937
9.95
Q3_K_XL
0.087845
12.51
0.080617
12.76
Q4_K_XL
0.024916
15.41
0.023701
15.64
如果我们绘制磁盘空间增加比例与 KL 散度变化比例的比值,会看到更加清晰的收益!我们的动态 2bit Q2_K_XL 显著降低了 KLD(约 7.5%)。
Gemma 3(27B)MMLU 结果的截断表。见下文。
我们的动态 4bit 版本在比 QAT 版本小 2GB 的同时额外提高了约 1% 的准确率!
在效率方面,2bit Q2_K_XL 等表现非常出色!
IQ1_M
48.10
47.23
6.51
3.42
IQ2_XXS
59.20
56.57
7.31
4.32
IQ2_M
66.47
64.47
8.96
4.40
Q2_K_XL
68.70
67.77
9.95
4.30
Q3_K_XL
70.87
69.50
12.76
3.49
Q4_K_XL
71.47
71.07
15.64
2.94
Google QAT
70.64
17.2
2.65
点击此处 查看 Google 的 Gemma 3(27B)QAT 完整基准:
IQ1_S
41.87
43.37
6.06
3.03
IQ1_M
48.10
47.23
6.51
3.42
IQ2_XXS
59.20
56.57
7.31
4.32
IQ2_M
66.47
64.47
8.96
4.40
Q2_K
68.50
67.60
9.78
4.35
Q2_K_XL
68.70
67.77
9.95
4.30
IQ3_XXS
68.27
67.07
10.07
4.18
Q3_K_M
70.70
69.77
12.51
3.58
Q3_K_XL
70.87
69.50
12.76
3.49
Q4_K_M
71.23
71.00
15.41
2.98
Q4_K_XL
71.47
71.07
15.64
2.94
Q5_K_M
71.77
71.23
17.95
2.58
Q6_K
71.87
71.60
20.64
2.26
Q8_0
71.60
71.53
26.74
1.74
Google QAT
70.64
17.2
2.65
🦙 Llama 4 错误修复与运行
我们还帮助修复了几个 Llama 4 的错误:
Llama 4 Scout 在其官方仓库中更改了 RoPE 缩放配置。我们帮助解决了 llama.cpp 中的相关问题以支持该 更改,

Llama 4 的 QK Norm 的 epsilon 对于 Scout 和 Maverick 应从配置文件读取——这意味着应使用 1e-05 而不是 1e-06。我们在 llama.cpp 和 transformers
中帮助解决了这些问题。 Llama 4 团队和 vLLM 也独立修复了 QK Norm 在所有 heads 之间共享的问题(不应如此)在此处
。MMLU Pro 的准确率从 68.58% 提升到 71.53%。 Wolfram Ravenwolf

展示了我们的 GGUF 通过 llama.cpp 在准确率上远高于第三方推理提供者——这很可能是上述问题的组合,也可能是由于量化问题导致的。
如我们图中所示,我们的 4-bit 动态 QAT 量化在 5-shot MMLU 上提供了更好的性能,同时体积更小。
运行 Llama 4 Scout:
cp llama.cpp/build/bin/llama-* llama.cpp
allow_patterns = ["*IQ2_XXS*"],
--prompt "<|header_start|>user<|header_end|>\n\nCreate a Flappy Bird game.<|eot|><|header_start|>assistant<|header_end|>\n\n" 在此处阅读有关运行 Llama 4 的更多信息: https://docs.unsloth.ai/basics/tutorial-how-to-run-and-fine-tune-llama-4
最后更新于
这有帮助吗?

