# Aider Polyglot 上の Unsloth Dynamic GGUF

Unsloth Dynamic GGUFs により、次のような LLM を量子化できることを紹介できるのを楽しみにしています [DeepSeek-V3.1](https://unsloth.ai/docs/jp/moderu/tutorials/deepseek-v3.1-how-to-run-locally) (671B) をわずか **1ビット** または **3ビット**まで圧縮し、それでもなお次のような SOTA モデルを上回れることを示します **GPT-4.5、GPT-4.1** (2025年4月) および **Claude-4-Opus** (2025年5月)。

以前に、 [私たちは実証しました](https://unsloth.ai/docs/jp/ji-ben/unsloth-dynamic-2.0-ggufs) Unsloth Dynamic GGUFs が 5-shot MMLU と KL Divergence において他の量子化手法を上回ることを。今回は、 **Aider Polyglot** **ベンチマークを用いた独立した第三者評価での性能を紹介します。**

<div><figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-a114143bdd47add988182aabf9313ab40be38d7d%2Faider%20thinking.png?alt=media" alt="" width="563"><figcaption><p>思考あり Aider ベンチマーク</p></figcaption></figure> <figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-b085c16c7f8351308229f1341846cbf1a2617d0a%2Faider%20non.png?alt=media" alt="" width="563"><figcaption><p>思考なし Aider ベンチマーク</p></figcaption></figure></div>

### ⭐**主な結果**

* 私たちの **1ビット** Unsloth Dynamic GGUF は DeepSeek-V3.1 を **671GB → 192GB（サイズ -75%）** まで縮小し、さらに思考なしモードでは GPT-4.1（2025年4月）、GPT-4.5、DeepSeek-V3-0324 を大きく上回ります。
* **3ビット** Unsloth DeepSeek-V3.1（思考あり）GGUF: Claude-4-Opus-20250514（思考あり）を上回ります。
* **5ビット** Unsloth DeepSeek-V3.1（思考なし）GGUF: Claude-4-Opus-20250514（思考なし）と同等の性能です。
* Unsloth Dynamic GGUFs は、他の非 Unsloth の Dynamic imatrix GGUFs より一貫して優れた性能を示します
* 他の非 Unsloth の 1ビットおよび 2ビットの DeepSeek-V3.1 量子化、ならびに選択的層量子化なしの標準 1ビット量子化は、読み込みに失敗するか、意味不明な出力やループする出力を生成しました。これは、Unsloth Dynamic GGUFs が精度を大部分維持できる一方で、他の手法はそもそも機能しないことを示しています。

**なぜ** [**Aider Polyglot**](https://aider.chat/docs/leaderboards/) **ベンチマークなのか？** Aider は、LLM がどれだけうまく文章を書き、コードを書き、指示に従い、人手の介入なしに変更を適用できるかを測る、最も包括的な指標のひとつであり、実運用において最も難しく価値の高いベンチマークのひとつです。

{% hint style="success" %}
Unsloth パッケージとモデルを使う **大きな利点** のひとつは、私たちが ***重大なバグの修正*** に積極的に関わっていることです。私たちは次の主要モデルのチームと直接協力してきました。 [Qwen3](https://www.reddit.com/r/LocalLLaMA/comments/1kaodxu/qwen3_unsloth_dynamic_ggufs_128k_context_bug_fixes/), [Meta（Llama 4）](https://github.com/ggml-org/llama.cpp/pull/12889), [Mistral（Devstral）](https://app.gitbook.com/o/HpyELzcNe0topgVLGCZY/s/xhOjnexMCB3dmuQFQ2Zq/~/changes/618/basics/tutorials-how-to-fine-tune-and-run-llms/devstral-how-to-run-and-fine-tune), [Google（Gemma 1–3）](https://news.ycombinator.com/item?id=39671146) および [Microsoft（Phi-3/4）](https://simonwillison.net/2025/Jan/11/phi-4-bug-fixes)。重要な修正を提供し、精度を大幅に向上させています。
{% endhint %}

## 🦥Unsloth Dynamic Quantization

{% hint style="success" %}
**Dynamic 1 bit では、重要な層を 8 または 16 ビットにし、重要でない層を 1、2、3、4、5、6ビットにします。**
{% endhint %}

2024年11月に、私たちの [4-bit Dynamic](https://unsloth.ai/blog/dynamic-4bit) Quants は、単に <mark style="background-color:green;">**層を選択的に量子化する**</mark>だけで QLoRA のファインチューニングとモデル精度を大幅に回復できることを示しました。その後、私たちは [DeepSeek-R1](https://unsloth.ai/docs/jp/moderu/tutorials/deepseek-r1-how-to-run-locally)のアーキテクチャを研究し、同様の手法を適用しました。いくつかの層を 1ビットまで、重要な層をより高いビット数（6、8ビット）に量子化しました。このアプローチはすぐに人気を集め、特に MoE モデルで非常に効果的であることが証明され、動的量子化は MoE 量子化の事実上の標準となっています。

私たちの Dynamic GGUFs は、 [imatrix キャリブレーションデータセット](https://unsloth.ai/docs/jp/ji-ben/unsloth-dynamic-2.0-ggufs/..#whats-new-in-dynamic-v2.0)と組み合わせるとさらに効果的です。これはチャットとコーディング性能向けに設計されています。これらすべてにより、品質の壊滅的な低下なしに極端な LLM 圧縮が可能になりました。

たとえば Qwen2-VL-2B-Instruct では、すべての層を単純に 4bit に量子化すると、モデルは下の画像を理解できなくなります。列車であって、海岸の風景ではありません！

{% columns %}
{% column %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-379bd5cc72a8f8e9acb4b6a6ad9fe847bf1ec296%2FTrain_NPovU814oJVjqy9Gu3BSm.avif?alt=media" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-38f5ea51c343a79bde7996d678761944f1dedaa7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

私たちはまた、 <https://docs.unsloth.ai/basics/unsloth-dynamic-2.0-ggufs> で Gemma 3 と Llama 4 Scout の動的ベンチマークも示し、この手法の有効性を確認しました。

{% columns %}
{% column %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-28c5aa4355f5c09aef43217f2a02131aa6e3517f%2Fimage.avif?alt=media" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-db47ebf519863f334f58c925dd6b39d0e01c359b%2Fimage.avif?alt=media" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

### ⚙️ベンチマーク設定

DeepSeek-V3.1 の実験では、 **Unsloth Dynamic GGUFs** のさまざまなビット数を次と比較しました。

* **フル精度の非量子化 LLM** GPT 4.5、4.1、Claude-4-Opus、DeepSeek-V3-0324 などを含みます。
* ***その他の*****&#x20;dynamic imatrix V3.1 GGUFs**
* ***半*****動的な** （一部選択的層量子化）imatrix V3.1 GGUFs を **切り分け目的で**.

ベンチマーク実験は主に [David Sluys](https://www.linkedin.com/in/david-sluys-231348208/) （Aider Discord では [neolithic5452](https://discord.com/channels/1131200896827654144/1408293692074360914)）によって実施されました。彼は Aider Polyglot 評価における信頼できるコミュニティ貢献者です。テストは約3回実行され、中央値スコアの平均が取られ、Pass-2 の正確度は慣例に従って報告されています。Aider の Discord には再現可能なベンチマークコードの断片がいくつかあります。

<details>

<summary>推論モデルの Aider ベンチマークを展開</summary>

| モデル                             | 正確度      |
| ------------------------------- | -------- |
| GPT-5                           | 86.7     |
| Gemini 2.5 Pro（6月）              | 83.1     |
| o3                              | 76.9     |
| DeepSeek V3.1                   | 76.1     |
| **（3ビット）DeepSeek V3.1 Unsloth** | **75.6** |
| Claude-4-Opus（5月）               | 72       |
| o4-mini（High）                   | 72       |
| DeepSeek R1 0528                | 71.4     |
| **（2ビット）DeepSeek V3.1 Unsloth** | **66.7** |
| Claude-3.7-Sonnet（2月）           | 64.9     |
| **（1ビット）DeepSeek V3.1 Unsloth** | **57.8** |
| DeepSeek R1                     | 56.9     |

</details>

<details>

<summary>非推論モデルの Aider ベンチマークを展開</summary>

| モデル                             | 正確度      |
| ------------------------------- | -------- |
| DeepSeek V3.1                   | 71.6     |
| Claude-4-Opus（5月）               | 70.7     |
| **（5ビット）DeepSeek V3.1 Unsloth** | **70.7** |
| **（4ビット）DeepSeek V3.1 Unsloth** | **69.7** |
| **（3ビット）DeepSeek V3.1 Unsloth** | **68.4** |
| **（2ビット）DeepSeek V3.1 Unsloth** | **65.8** |
| Qwen3 235B A22B                 | 59.6     |
| Kimi K2                         | 59.1     |
| **（1ビット）DeepSeek V3.1 Unsloth** | **55.7** |
| DeepSeek V3-0324                | 55.1     |
| GPT-4.1（2025年4月）                | 52.4     |
| ChatGPT 4o（2025年3月）             | 45.3     |
| GPT-4.5                         | 44.9     |

</details>

DeepSeek V3.1 には推論モードと非推論モードの両方があり、私たちは両方をテストしました。非推論では、下に示すように動的量子化の性能に明確な傾向が見られます。dynamic 5-bit は Aider Pass-2 で 70.7% を達成し、dynamic 1-bit は 55.7% を達成しました。サイズと精度の観点では、3bit と 4bit が非常に強力です！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-b085c16c7f8351308229f1341846cbf1a2617d0a%2Faider%20non.png?alt=media" alt=""><figcaption></figcaption></figure>

## :sparkler:他の quants との比較

また、コミュニティの他の dynamic imatrix GGUFs に対して Aider Polyglot ベンチマークを実行し、私たちのものと比較しました。 **公正な比較**を確保するために、次のことを行います。

1. 各 Unsloth quant と同程度のサイズ・ビット種別のファイルを選びます。
2. コミュニティ quant がベンチマークの実行に失敗する場合は、私たちの **固定チャットテンプレート** を使います。いくつかのコミュニティ quants で `{"code":500,"message":"split method must have between 1 and 1 positional arguments and between 0 and 0 keyword arguments at row 3, column 1908"}`が見つかりましたが、これは私たちの固定チャットテンプレートを使うことで修正されます。

同じモデルサイズと quant タイプで比べると、Unsloth の動的 quants が他のコミュニティ量子化と比べて非常に優れていることがわかります！

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-bbebbacfa75126d246c3ca1ed2ca269bc815b028%2FOther%20quants.png?alt=media" alt=""><figcaption></figcaption></figure>

<details>

<summary>他の quants との生の数値データ比較を展開</summary>

<table><thead><tr><th width="109.25">Quant</th><th width="171.25006103515625">Quant サイズ（GB）</th><th>Unsloth 正確度 %</th><th>比較 正確度 %</th></tr></thead><tbody><tr><td>IQ2_XXS</td><td>164</td><td></td><td>43.6</td></tr><tr><td>TQ1_0</td><td>170</td><td>50.7</td><td></td></tr><tr><td>IQ1_M</td><td>206</td><td>55.7</td><td></td></tr><tr><td>IQ2_M</td><td>215</td><td></td><td>56.6</td></tr><tr><td>IQ2_XXS</td><td>225</td><td>61.2</td><td></td></tr><tr><td>IQ2_M</td><td>235</td><td>64.3</td><td></td></tr><tr><td>Q2_K_L</td><td>239</td><td></td><td>64.0</td></tr><tr><td>Q2_K_XL</td><td>255</td><td>65.8</td><td></td></tr><tr><td>IQ3_XXS</td><td>268</td><td>65.6</td><td>65.6</td></tr><tr><td>IQ3_XXS</td><td>279</td><td>66.8</td><td></td></tr><tr><td>Q3_K_S</td><td>293</td><td></td><td>65.2</td></tr><tr><td>Q3_K_XL</td><td>300</td><td>68.4</td><td></td></tr><tr><td>IQ4_XS</td><td>357</td><td>69.2</td><td></td></tr><tr><td>IQ4_XS</td><td>360</td><td></td><td>66.3</td></tr><tr><td>Q4_K_XL</td><td>387</td><td>69.7</td><td></td></tr><tr><td>Q4_K_M</td><td>405</td><td>69.7</td><td></td></tr><tr><td>Q4_K_M</td><td>409</td><td></td><td>67.7</td></tr><tr><td>Q5_K_M</td><td>478</td><td></td><td>68.9</td></tr><tr><td>Q5_K_XL</td><td>484</td><td>70.7</td><td></td></tr></tbody></table>

</details>

### :cake:動的量子化のアブレーション

キャリブレーションデータセットと動的量子化の手法が本当に機能するのかを確認するために、いくつかのアブレーションも行いました。Unsloth の動的手法のコツは、 **重要な層をより高いビット数に量子化し** 、たとえば 8bits にする一方で、 **重要でない層は 2bits のようなより低いビットに残す**.

ことです。手法を検証するために、特定のテンソルを 4bit と 8bit のような異なる精度で保持しました。たとえば下では `attn_k_b` テンソルを 4bit（半動的）と 8bit（現在の Unsloth）で比較しており、量子化サイズを約100MB程度（<0.1%）増やすだけで、精度が劇的に向上します！

{% hint style="success" %}
`attn_k_b` そして DeepSeek V3.1 の他のテンソルも量子化に非常に重要／敏感であり、精度を保つためにはより高い精度のまま残すべきです！
{% endhint %}

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-3b4f8ac3af4ec8d09763c2e5f5d7de912d0b042e%2FSemi%20Dynamic.png?alt=media" alt=""><figcaption></figcaption></figure>

### :bug:チャットテンプレートのバグ修正

DeepSeek-V3.1 quants のテスト中に、いくつかの低ビット quants が `<think> </think>` を適切に囲んでいなかったり、奇妙な書式になっていることが見つかりました。これにより一部のコミュニティ quants は低ビットで動作せず、不公平な比較が発生していました。llama.cpp の minja（より簡易版の jinja）の使用では、 `.split`における位置引数を受け付けないことがわかりました。次のように変更する必要がありました。

```
{%- set content = content.split("</think>", 1)[1] -%}
```

を以下に。

```
{%- set splitted = content.split("</think>") -%}
{%- set content = splitted[1:] | join("</think>") -%}
```

こちらを参照 [ここ](https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF?chat_template=default\&format=true) で、修正版チャットテンプレートを、または [ここ](https://huggingface.co/unsloth/DeepSeek-V3.1/raw/main/chat_template.jinja) 生の jinja ファイルを確認できます。

### :bar\_chart:Pass Rate 1

Aider は主に pass rate 2 で報告されます。私たちは同じサイズのコミュニティ quants を比較するために pass rate 1 も報告します。特に 2 bit 未満や 4bits 超で、私たちの動的 quants が同程度のサイズの他のコミュニティ quants より大幅に優れていることがわかります。3 bit と 4 bit は同様に良好です。

<figure><img src="https://735611837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-dfea83b4ef3e0d1a1c835476270eeb4f3f6db798%2FPass%20Rate%201%20Non%20Thinking.png?alt=media" alt=""><figcaption></figcaption></figure>

## :computer:DeepSeek V3.1 の Dynamic quants を実行する

こちらの [DeepSeek V3.1 ガイド](https://unsloth.ai/docs/jp/moderu/tutorials/deepseek-r1-how-to-run-locally/deepseek-r1-dynamic-1.58-bit) へ進むか、動的 2bit 版を素早く取得するには、次を実行してください。

```bash
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split llama-mtmd-cli llama-server
cp llama.cpp/build/bin/llama-* llama.cpp
```

その後 `llama.cpp` を使って重みを直接ダウンロードします。temperature やチャットテンプレートなどの最適な推奨パラメータもすでに設定しています。

```bash
export LLAMA_CACHE="unsloth/DeepSeek-V3.1-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/DeepSeek-V3.1-GGUF:Q2_K_XL \
    --jinja \
    --n-gpu-layers 99 \
    --temp 0.6 \
    --top_p 0.95 \
    --min_p 0.01 \
    --ctx-size 8192 \
    --seed 3407 \
    -ot ".ffn_.*_exps.=CPU"
```
