🦥Unsloth Dynamic 2.0 GGUF

当社の Dynamic 量子化への大きな新しいアップグレード!

当社のDynamic v2.0量子化手法を紹介できることを嬉しく思います — これは従来の量子化手法に対する大幅なアップグレードです。この新手法は主要な量子化手法を上回り、5-shot MMLUおよびKLダイバージェンスで新たなベンチマークを樹立します。

これは、精度をできるだけ維持したまま量子化された大規模言語モデル(LLM)を実行および微調整できることを意味します!2.0 GGUFはllama.cpp、Ollama、Open WebUIなどの任意の推論エンジンで実行できます。

circle-check

ベンチマークと評価の詳細分析は以下をご参照ください。

Thinking Aider ベンチマーク
5-shot MMLU ベンチマーク

💡 Dynamic v2.0の新機能は?

  • GGUFおよびsafetensorsのためのレイヤー選択を刷新: Unsloth Dynamic 2.0はレイヤーをより賢く、より広範に選択的に量子化します。特定のレイヤーのみを変更するのではなく、現在は可能なすべてのレイヤーの量子化タイプを動的に調整し、各レイヤーやモデルごとに組み合わせが異なります。

  • 現在選択されているすべての将来のGGUFアップロードはDynamic 2.0と新しいキャリブレーションデータセットを利用します。このデータセットには150万件以上の トークン (モデルによって異なる)を含み、高品質で手作業で精査・クリーン化されたデータで構成されており、会話型チャット性能を大幅に向上させます。

  • 以前は当社のDynamic量子化(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ビットのsafetensors量子化もこの恩恵を受けます。

📊 なぜKLダイバージェンスか?

Accuracy is Not All You Need(精度だけでは十分ではない)arrow-up-right は、不要なレイヤーを選択して剪定しても「フリップ」に関して大きな差が生じうることを示します。「フリップ」とは不正解から正解、またはその逆に回答が変わることを指します。論文は、レイヤーを剪定したり量子化したりしてもMMLUが必ずしも低下しないことを示していますが、それは一部の誤った回答が「フリップ」して正しくなった可能性があるためです。我々の目標は元のモデルに一致させることであり、したがって「フリップ」を測定することは良い指標です。

circle-info

KLダイバージェンスは であるべき 量子化誤差を報告するためのゴールドスタンダードです (論文「Accuracy is Not All You Need」による)。 パープレキシティを使用するのは誤りです 出力トークンの値が相殺されうるため、我々はKLDを使用する必要があります!

また論文は興味深いことにKLダイバージェンスがフリップと高い相関を持つことを示しており、我々の目標はKLダイバージェンスの平均を減らしつつ、量子化によるディスク使用量の増加をできるだけ抑えることです。

⚖️ キャリブレーションデータセットの過学習

ほとんどのフレームワークはWiki百科事典の記事のテストセットを使ってパープレキシティとKLダイバージェンスを報告します。しかし、キャリブレーションデータセットが同様にWikipedia関連であることを使用していると量子化が過学習し、パープレキシティが低く出ることに気付きました。我々は Calibration_v3arrow-up-right および Calibration_v5arrow-up-right といったデータセットを公平なテストのために利用しており、これらには一部のwikitextデータなどが含まれます。 また、instructモデルは独自のチャットテンプレートを持っており、テキストのみのキャリブレーションデータセットはinstructモデルには効果的ではありません (ベースモデルには有効です)。実際、多くのimatrix GGUFは通常これらの問題でキャリブレーションされており、その結果としてモデルは本質的にそのドメインに最適化されているため、Wikipediaデータを使用するKLダイバージェンスベンチマークで自然と良い成績を出します。

公平で制御された評価を確実にするため、我々はKLダイバージェンスのベンチマーク時にチャット性能向けに最適化された独自のキャリブレーションデータセットを使用しません。代わりに標準のWikipediaデータセットを用いてテストを行い、Dynamic 2.0手法とベースラインのimatrixアプローチを直接比較しました。

🔢 MMLU再現の試練

  • MMLU 5-shotを再現するのは悪夢のようでした。我々は 〜できませんでした 多くのモデル(Llama 3.1 (8B) Instruct、Gemma 3 (12B) などを含む)のMMLU結果を再現できなかった。理由は 微妙な実装上の問題です。例えばLlama 3.1 (8B) は本来約68.2%を取るべきですが、誤った実装では 35%の精度しか得られません。

MMLU実装上の問題点
  • Llama 3.1 (8B) InstructはナイーブなMMLU実装で67.8%の5-shot精度を持ちます。しかし我々はLlamaが "A" と "_A"(先頭にスペースがあるA)を異なるトークンIDとしてトークナイズすることを確認しました。もしスペースありとなしのトークン両方を考慮すると、68.2%になります (+0.4%)

  • 興味深いことにEleuther AIの LLM Harnessarrow-up-right もまた "The best answer is"(最良の回答は) を質問に付加しており、これはLlama 3の元のMMLUベンチマークに従ったものです。

  • 他にも多くの微妙な問題があり、すべてを制御された環境でベンチマークするために、我々は独自のMMLU実装を最初から設計し、 github.com/hendrycks/testarrow-up-right を直接調査し、複数モデルで報告値と比較して結果を検証しました。

Gemma 3 QATの再現とベンチマーク

GemmaチームはGemma 3の2つのQAT(量子化認識訓練)バージョンを公開しました:

  1. Q4_0 GGUF - 各ブロックに32個の重みを持ち、以下の式で全レイヤーをQ4_0に量子化します w = q * block_scale 各ブロックが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ダイバージェンス比率の変化をプロットすれば、より明確な利点が見えます!当社の動的2ビット Q2_K_XLはKLDをかなり削減します(約7.5%程度)。

Gemma 3(27B)のMMLU結果の抜粋テーブル。以下を参照してください。

  1. 我々の動的4ビット版はQAT版に比べて2GB小さく、かつ精度が+1%高いです!

  2. 効率の観点では、2ビットの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のバグ修正と実行

我々はLlama 4のいくつかのバグ修正も手伝いました:

  • Llama 4 Scoutは公式リポジトリでRoPEスケーリング構成を変更しました。我々はこれを有効にするためにllama.cppの問題解決を支援しました ここでの変更arrow-up-right

  • Llama 4のQKノルムのイプシロンはScoutとMaverickの両方で設定ファイルから取るべきで、これは1e-05を使い1e-06ではないことを意味します。我々はこれらを解決するのを支援しました llama.cpparrow-up-right および transformersarrow-up-right

  • Llama 4チームとvLLMも独立して、QKノルムがすべてのヘッドで共有されているという問題を修正しました(共有されるべきではありません) ここarrow-up-right。MMLU Proは68.58%から71.53%に向上しました。

  • Wolfram Ravenwolfarrow-up-right は当社のGGUFをllama.cpp経由で実行した場合がサードパーティの推論プロバイダよりもはるかに高い精度を達成することを示しました — これは上で説明した問題の組み合わせや、量子化の問題が原因である可能性が高いです。

当社のグラフが示すように、当社の4ビット動的QAT量子化は5-shot MMLUでより良い性能を発揮し、かつサイズも小さくなります。

Llama 4 Scoutの実行:

例えばLlama 4 Scoutを実行するには、まずllama.cppをクローンします:

次に我々の新しいDynamic v2.0量子化をScout向けにダウンロードします:

それでは推論を実行しましょう!

circle-check

最終更新

役に立ちましたか?