🦥Unsloth Dynamic 2.0 GGUF

我们的 Dynamic 量化版本的一次重大新升级!

我们很高兴介绍 使用 Unsloth 进行arrow-up-right Dynamic v2.0 量化——对我们之前量化方案的一次重大升级。这种新方法优于领先的量化方法,并为以下方面设立了新的基准: Aider Polglot,5-shot MMLU 和 KL 散度。

这意味着你现在可以运行并微调 量化后的 LLM ,同时尽可能保留更多准确率!你可以在大多数推理引擎上运行 2.0 GGUF,例如 llama.cpp, Unsloth Studio 等。

circle-check

2026年2月27日更新: Qwen3.5 已发布,我们修复了一些工具调用聊天模板问题,并对每个 GGUF 的困惑度和 KL 散度进行了基准测试。 查看基准结果!

使用 Unsloth 包和模型的 关键优势 使用 Unsloth 包arrow-up-right 以及量化方案的一个积极作用,是我们在修复主流模型错误方面的主动参与。我们已直接与以下团队合作, Qwen3arrow-up-right, Meta(Llama 4)arrow-up-right, Mistral(Devstral)arrow-up-right, Google(Gemma 1–3)arrow-up-rightMicrosoft(Phi-3/4)arrow-up-right并贡献了提升准确率的修复。

circle-check

你也可以查看由 Benjamin Marie 针对 LiveCodeBench v6、MMLU Pro 等进行的真实使用场景基准测试:

你可以看到,尽管 Unsloth 的 GGUF 比非 Unsloth 量化版本小约 8GB,但表现却更好。

关于我们基准测试和评估的详细分析在下方。

💡 Dynamic v2.0 有什么新内容?

  • 为 GGUF 和 safetensors 重做的层选择: Unsloth Dynamic 2.0 现在会更智能、更广泛地选择性量化各层。我们不再只修改少数层,而是会动态调整每个可能层的量化类型,而且不同模型、不同层的组合都会不同。

  • 当前选定以及未来所有的 GGUF 上传都将使用 Dynamic 2.0 和我们的新校准数据集。该数据集包含超过 >1.5M tokens (取决于模型),并由高质量、人工筛选和清洗过的数据组成——以大幅提升对话式聊天表现。

  • 此前,我们的动态量化(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,而我们的 Dynamic 4-bit 安全张量量化方案未来也将从中受益。

📊 为什么要看 KL 散度?

准确率并不是你所需要的一切arrow-up-right 展示了即使通过选择不必要的层来剪枝,仍会在“翻转”方面产生巨大差异。“翻转”定义为答案从错误变成正确,或从正确变成错误。论文表明,随着我们剪枝或量化层,MMLU 可能不会下降,但那是因为某些错误答案可能已经“翻转”为正确。我们的目标是匹配原始模型,因此衡量“翻转”是一个很好的指标。

circle-info

KL 散度 应该是 报告量化误差的黄金标准之一 ,正如研究论文《Accuracy is Not All You Need》所述。 使用困惑度是不正确的 因为输出 token 的数值可能相互抵消,所以我们必须使用 KLD,或者像 Aider.

这样的更难基准。论文还表明,KL 散度与翻转高度相关,因此我们的目标是在尽可能少增加量化磁盘空间的前提下,降低平均 KL 散度。

⚖️ 校准数据集过拟合

大多数框架使用维基百科文章测试集来报告困惑度和 KL 散度。然而,我们注意到,使用同样与维基百科相关的校准数据集会导致量化方案过拟合,并获得更低的困惑度分数。我们使用 Calibration_v3arrow-up-rightCalibration_v5arrow-up-right 数据集进行公平测试,其中包括部分 wikitext 数据以及其他数据。 另外,instruct 模型有独特的聊天模板,而仅使用文本的校准数据集对 instruct 模型并不有效 (base 模型则可以)。事实上,大多数 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 实现问题
  • 使用一个朴素的 MMLU 实现,Llama 3.1 (8B) Instruct 的 MMLU 5 shot 准确率为 67.8%。不过我们发现 Llama 会将 "A" 和 "_A"(前面带空格的 A)标记为不同的 token id。如果我们同时考虑带空格和不带空格的 token,就能得到 68.2% (+0.4%)

  • 有趣的是,按照 Eleuther AI 的 LLM Harnessarrow-up-right ,Llama 3 也会在问题后追加 “最佳答案是” ,这与 Llama 3 原始的 MMLU 基准一致。

  • 还有许多其他细微问题,因此为了在受控环境中对所有内容进行基准测试,我们通过直接研究 github.com/hendrycks/testarrow-up-right ,从零开始设计了我们自己的 MMLU 实现,并在多个模型上验证了结果,同时与报告数值进行了比较。

Gemma 3 QAT 复现与基准测试

Gemma 团队发布了两个 Gemma 3 的 QAT(量化感知训练)版本:

  1. Q4_0 GGUF - 通过以下公式将所有层量化为 Q4_0 w = q * block_scale ,每个 block 包含 32 个权重。详见 llama.cpp wiki arrow-up-right

  2. int4 版本——大概是 TorchAO int4 风格arrow-up-right?

我们对所有 Q4_0 GGUF 版本都进行了基准测试,并对 12B 模型做了大量实验。我们看到 12B Q4_0 QAT 模型得分 67.07% ,而完整的 bfloat16 12B 版本在 5 shot MMLU 上得分 67.15%。这非常令人印象深刻!27B 模型基本也快达到了!

指标
1B
4B
12B
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 得分:

Efficiency=MMLU 5 shot score25Disk Space GB\text{Efficiency} = \frac{\text{MMLU 5 shot score} - 25}{\text{Disk Space GB}}
circle-exclamation

关于相对于基模型的 KL 散度,下面的表格展示了改进情况。提醒一下,KL 散度越接近 0 越好(即 0 表示与全精度模型完全相同)

量化
基线 KLD
GB
新的 KLD
GB

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 结果截断表。见下方。

  1. 我们的动态 4bit 版本比 QAT 版本小 2GB,同时还额外提升了 +1% 的准确率!

  2. 从效率来看,2bit Q2_K_XL 等方案表现非常不错!

量化
使用 Unsloth 进行
Unsloth + QAT
磁盘大小
效率

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

chevron-right点击这里 查看完整的 Google Gemma 3(27B)QAT 基准测试:hashtag
模型
使用 Unsloth 进行
Unsloth + 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 Bug 修复 + 运行

我们还帮助修复了几个 Llama 4 的 bug:

  • Llama 4 Scout 在其官方仓库中更改了 RoPE Scaling 配置。我们帮助在 llama.cpp 中解决了相关问题,以支持此 此处的更改arrow-up-right

  • Llama 4 的 Scout 和 Maverick 的 QK Norm 的 epsilon 都应来自配置文件——这意味着应使用 1e-05 而不是 1e-06。我们帮助在 llama.cpparrow-up-righttransformersarrow-up-right

  • 中解决了这些问题。 这里arrow-up-rightLlama 4 团队和 vLLM 也独立修复了 QK Norm 在所有 heads 之间共享的问题(不应如此)。MMLU Pro 准确率从 68.58% 提升到了 71.53%。

  • Wolfram Ravenwolfarrow-up-right 展示了我们通过 llama.cpp 提供的 GGUF,相比第三方推理服务能够达到高得多的准确率——这很可能是上述问题的综合结果,也可能与量化问题有关。

如我们的图表所示,我们的 4-bit Dynamic QAT 量化在 5-shot MMLU 上表现更好,同时体积也更小。

运行 Llama 4 Scout:

例如,要运行 Llama 4 Scout,首先克隆 llama.cpp:

然后下载我们为 Scout 准备的新动态 v2.0 量化:

然后让我们开始推理!

circle-check

最后更新于

这有帮助吗?