# DeepSeek-V3.1: ローカルで実行する方法

DeepSeek の V3.1 と **Terminus** のアップデートはハイブリッド推論（「思考」モードと「非思考」モードを1つのモデルに統合）を導入します。完全な671Bパラメータモデルは715GBのディスク容量を必要とします。量子化された動的2ビット版は245GBを使用します（サイズが-75％削減）。GGUF： [**DeepSeek-V3.1-GGUF**](https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF)

{% hint style="success" %}
**新着：** DeepSeek-V3.1-Terminus リリース： [DeepSeek-V3.1-Terminus-GGUF](https://huggingface.co/unsloth/DeepSeek-V3.1-Terminus-GGUF)\
\
[**2025年9月10日アップデート：**](https://unsloth.ai/docs/jp/ji-ben/unsloth-dynamic-2.0-ggufs/unsloth-dynamic-ggufs-on-aider-polyglot) より厳しいベンチマークを求められたので、Aider Polyglot の結果を紹介します！当社の動的3ビット DeepSeek V3.1 GGUF のスコアは **75.6%**、多くのフルプレシジョンの最先端LLMを上回っています。 [詳しく読む。](https://unsloth.ai/docs/jp/ji-ben/unsloth-dynamic-2.0-ggufs/unsloth-dynamic-ggufs-on-aider-polyglot)

当社の DeepSeek-V3.1 GGUF には Unsloth が含まれます [llama.cpp 対応バックエンド向けのチャットテンプレート修正](#chat-template-bug-fixes) が含まれます。
{% endhint %}

すべてのアップロードはUnslothを使用しています [Dynamic 2.0](https://unsloth.ai/docs/jp/ji-ben/unsloth-dynamic-2.0-ggufs) SOTA の 5-shot MMLU と KL ダイバージェンス性能を実現しており、量子化された DeepSeek LLM を最小限の精度低下で実行およびファインチューニングできます。

**チュートリアル ナビゲーション：**

<a href="#run-in-llama.cpp" class="button secondary">llama.cpp で実行する</a><a href="#run-in-ollama-open-webui" class="button secondary">Ollama/Open WebUI で実行する</a>

## :gear: 推奨設定

1ビット動的量子化 TQ1\_0（重要でない MoE レイヤーは1ビット、重要な MoE は2-4ビット、残りは6-8ビット）は170GBのディスク容量を使用します - これは **1x24GBカードと128GBのRAM** で MoE オフロードを行えばうまく動作します - また **Ollamaでネイティブに動作します**!

{% hint style="info" %}
必ず使用してください `--jinja` llama.cppの量子化には — これにより私たちの [固定チャットテンプレート](#chat-template-bug-fixes) が使用され、正しいテンプレートが有効になります！使用しないと誤った結果になる可能性があります `--jinja`
{% endhint %}

2ビットのクオンタイズは MoE レイヤーを RAM にオフロードすれば 1x24GB GPU に収まります。この設定と追加の128GB RAM があると、おおよそ5トークン/秒が期待できます。この2ビットを実行するには少なくとも226GBのRAMが推奨されます。最適なパフォーマンスのためには、5+ トークン/秒を得るには少なくとも226GBのユニファイドメモリ、または合計226GBのRAM+VRAMが必要です。生成速度を上げてより長いコンテキストに対応する方法については、 [こちらをお読みください](#improving-generation-speed).

{% hint style="success" %}
必須ではありませんが、最良のパフォーマンスを得るには、ダウンロードする量子化モデルのサイズと VRAM + RAM の合計が等しくなるようにしてください。そうでない場合でも、llama.cpp ではハードドライブ/SSD オフロードが機能しますが、推論は遅くなります。
{% endhint %}

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

llama.cpp や他のエンジンで正しく機能しなかったため、DeepSeek V3.1 のチャットテンプレートにいくつかの問題を修正しました：

1. DeepSeek V3.1 はハイブリッド推論モデルであり、チャットテンプレートを変更して推論（思考）を有効にできます。チャットテンプレートでは `thinking = True` が導入されましたが、他のモデルでは `enable_thinking = True` が使われています。そこで私たちは `enable_thinking` を代わりのキーワードとして使えるオプションを追加しました。
2. llama.cpp の jinja レンダラーは [minja](https://github.com/google/minja) 経由で、追加引数の使用を `.split()` コマンド内で許可していません。そのため `.split(text, 1)` は Python では動作しますが minja では動作しません。エラーを出さずに llama.cpp を正しく動かすためにこれを変更する必要がありました。\
   \
   他のクオンタイズを使用すると次のエラーが発生します：\
   `terminate called after throwing an instance of 'std::runtime_error' what(): split method must have between 1 and 1 positional arguments and between 0 and 0 keyword arguments at row 3, column 1908` すべてのクオンタイズでこれを修正しました！

### 🐳公式推奨設定

によると [DeepSeek](https://huggingface.co/deepseek-ai/DeepSeek-V3.1)、これらが V3.1 推論の推奨設定です：

* 次の値を設定してください <mark style="background-color:green;">**temperature 0.6**</mark> 反復や一貫性の欠如を減らすためです。
* 次を設定してください <mark style="background-color:green;">**top\_p を 0.95 に**</mark> （推奨）
* **128K のコンテキスト長** またはそれ以下
* 使用してください `--jinja` llama.cppのバリアントには — 私たちは **いくつかのチャットテンプレートの問題を修正しました！**
* **使用してください** `enable_thinking = True` を推論／思考モードで使うため。デフォルトでは非推論に設定されています。

#### :1234: チャットテンプレート／プロンプト形式

強制的に `<think>\n` を入れる必要はありませんが、入れても構いません！指定されたプレフィックスでは、DeepSeek V3.1 は非思考モードでクエリに対する応答を生成します。DeepSeek V3 とは異なり、追加のトークンを導入しています `</think>`.

```
<｜begin▁of▁sentence｜>{system prompt}<｜User｜>{query}<｜Assistant｜></think>
```

BOS は強制的に追加され、EOS は各インタラクションを区切ります。推論時の BOS トークンの重複を避けるために、次だけを呼び出すべきです `tokenizer.encode(..., add_special_tokens = False)` チャットテンプレートが BOS トークンを自動的に追加するためです。llama.cpp / GGUF の推論では、BOS は自動的に追加されるため省略してください。

#### :notebook\_with\_decorative\_cover: 非思考モード（使用する場合） `thinking = False`または `enable_thinking = False` （デフォルトです）

**最初のターン**

プレフィックス： `<｜begin▁of▁sentence｜>{system prompt}<｜User｜>{query}<｜Assistant｜></think>`

指定されたプレフィックスでは、DeepSeek V3.1 は非思考モードでクエリに対する応答を生成します。DeepSeek V3 と異なり、追加のトークンを導入しています `</think>`.

**マルチターン**

コンテキスト： `<｜begin▁of▁sentence｜>{system prompt}<｜User｜>{query}<｜Assistant｜></think>{response}<｜end▁of▁sentence｜>...<｜User｜>{query}<｜Assistant｜></think>{response}<｜end▁of▁sentence｜>`

プレフィックス： `<｜User｜>{query}<｜Assistant｜></think>`

コンテキストとプレフィックスを連結することで、クエリに対する正しいプロンプトが得られます。

#### :books: 思考モード（使用する場合） `thinking = True`または `enable_thinking = True` （デフォルトです）

**最初のターン**

プレフィックス： `<｜begin▁of▁sentence｜>{system prompt}<｜User｜>{query}<｜Assistant｜><think>`

思考モードのプレフィックスは DeepSeek-R1 に似ています。

**マルチターン**

コンテキスト： `<｜begin▁of▁sentence｜>{system prompt}<｜User｜>{query}<｜Assistant｜></think>{response}<｜end▁of▁sentence｜>...<｜User｜>{query}<｜Assistant｜></think>{response}<｜end▁of▁sentence｜>`

プレフィックス： `<｜User｜>{query}<｜Assistant｜><think>`

マルチターンのテンプレートは非思考のマルチターンチャットテンプレートと同じです。つまり、最後のターンの思考トークンは削除されますが、 `</think>` はコンテキストの各ターンで保持されます。

#### :bow\_and\_arrow: ツール呼び出し

ツール呼び出しは非思考モードでサポートされています。フォーマットは：

`<｜begin▁of▁sentence｜>{system prompt}{tool_description}<｜User｜>{query}<｜Assistant｜></think>` ここで tool\_description はシステムプロンプトの後の領域に配置します。

## :arrow\_forward:DeepSeek-V3.1 チュートリアルを実行する：

### :llama: Ollama/Open WebUI で実行する

{% stepper %}
{% step %}
Ollamaで実行する `をインストールしてください` ollama [まだインストールしていない場合！モデルのより多くのバリアントを実行するには、](#run-in-llama.cpp).

```bash
apt-get update
こちらを参照してください
apt-get install pciutils -y
```

{% endstep %}

{% step %}
curl -fsSL <https://ollama.com/install.sh> | sh `モデルを実行してください！失敗した場合は別のターミナルで`ollama serve `を呼び出すことができます！私たちはすべての修正と推奨パラメータ（temperatureなど）を` params\
\&#xNAN;**（新）Ollama でフル R1-0528 モデルを実行するには、当社の TQ1\_0（170GB）量子化版を使用できます：**

```bash
としてHugging Faceのアップロードに含めています！

OLLAMA_MODELS=unsloth ollama run hf.co/unsloth/DeepSeek-V3.1-Terminus-GGUF:TQ1_0
```

{% endstep %}

{% step %}
OLLAMA\_MODELS=unsloth ollama run hf.co/unsloth/GLM-4.7-GGUF:TQ1\_0

```bash
他の量子化を実行するには、まずGGUFの分割ファイルを以下のように1つにマージする必要があります。その後モデルをローカルで実行する必要があります。
  DeepSeek-V3.1-Terminus-GGUF/DeepSeek-V3.1-Terminus-UD-Q2_K_XL/DeepSeek-V3.1-Terminus-UD-Q2_K_XL-00001-of-00006.gguf \
	GLM-4.7-GGUF/GLM-4.7-UD-Q2_K_XL/GLM-4.7-UD-Q2_K_XL-00001-of-00003.gguf \
```

```bash
としてHugging Faceのアップロードに含めています！

merged_file.gguf
```

{% endstep %}

{% step %}
Open WebUI も [ステップバイステップチュートリアル](https://docs.openwebui.com/tutorials/integrations/deepseekr1-dynamic/) を作成しており、R1 の実行方法の説明で、V3.1 では R1 の代わりに新しい V3.1 量子化版を置き換えるだけで済みます。
{% endstep %}
{% endstepper %}

### ✨ llama.cppで実行する

{% stepper %}
{% step %}
最新の `llama.cpp` を [GitHubで入手してください](https://github.com/ggml-org/llama.cpp)。以下のビルド手順にも従うことができます。を変更してください `-DGGML_CUDA=ON` に `-DGGML_CUDA=OFF` GPUを持っていない場合やCPUで推論したい場合は

```bash
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggerganov/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
```

{% endstep %}

{% step %}
もし直接 `llama.cpp` を使ってモデルを読み込みたい場合は、以下のようにできます：（:Q2\_K\_XL）は量子化タイプです。Hugging Face（ポイント3）経由でダウンロードすることもできます。これは `ollama run` に類似しています。 `使用してください` export LLAMA\_CACHE="folder" `llama.cpp` を強制して

{% hint style="success" %}
ぜひ試してみてください `-ot ".ffn_.*_exps.=CPU"` -ot ".ffn\_.\*\_exps.=CPU"

もし少し多くのGPUメモリがあるなら、次を試してください `-ot ".ffn_(up|down)_exps.=CPU"` これは up と down の投影 MoE 層をオフロードします。

試してみてください `-ot ".ffn_(up)_exps.=CPU"` さらに多くのGPUメモリがある場合。これは up 投影の MoE 層のみをオフロードします。

もしさらに多くのGPUメモリがある場合。これはup投影のMoEレイヤーのみをオフロードします。 `-ot ".ffn_.*_exps.=CPU"` そして最後にすべてのレイヤーを次でオフロードします

正規表現をカスタマイズすることもできます。例えば `-ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"` は gate、up、down の MoE 層をオフロードしますが、6層目以降に限定します。
{% endhint %}

```bash
export LLAMA_CACHE="unsloth/DeepSeek-V3.1-GGUF"
export LLAMA_CACHE="unsloth/GLM-4.7-GGUF"
    -hf unsloth/DeepSeek-V3.1-Terminus-GGUF:UD-Q2_K_XL \
    -hf unsloth/GLM-4.7-GGUF:UD-Q2_K_XL \
    --n-gpu-layers 99 \
    --temp 0.6 \
    --temp 1.0 \
    --min-p 0.01 \
    --jinja \
    --model unsloth/GLM-4.7-GGUF/UD-Q2_K_XL/GLM-4.7-UD-Q2_K_XL-00001-of-00003.gguf \
    -ot ".ffn_.*_exps.=CPU"
```

{% endstep %}

{% step %}
モデルをダウンロードするには（をインストールした後） `モデルをダウンロードするには（` を選択できます。 `をインストールした後）を使用してください。選択できるのは`UD- `Q4_K_M` Q4\_K\_XL <mark style="background-color:green;">**などの他の量子化版です。私たちは**</mark><mark style="background-color:green;">**&#x20;**</mark><mark style="background-color:green;">**`サイズと精度のバランスを取るために私たちの2.7ビット動的量子化を`**</mark><mark style="background-color:green;">**&#x20;**</mark><mark style="background-color:green;">**UD-Q2\_K\_XL**</mark>.

```python
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # 時折レート制限されることがあるため、無効にするには 0 に設定します
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/DeepSeek-V3.1-Terminus-GGUF",
    local_dir = "unsloth/DeepSeek-V3.1-Terminus-GGUF",
    allow_patterns = ["*UD-Q2_K_XL*"], # 動的2ビット。動的1ビットは "*UD-TQ1_0*" を使用
)
```

{% endstep %}

{% step %}
\--include "\*UD-Q2\_K\_XL\*" # 動的1ビットの場合は "\*UD-TQ1\_0\*" を使用 `次の` --threads 32 `はCPUスレッドの数、` --ctx-size 16384 `はコンテキスト長、` --n-gpu-layers 2

{% code overflow="wrap" %}

```bash
export LLAMA_CACHE="unsloth/GLM-4.7-GGUF"
    --model unsloth/DeepSeek-V3.1-Terminus-GGUF/UD-Q2_K_XL/DeepSeek-V3.1-Terminus-UD-Q2_K_XL-00001-of-00006.gguf \
    -hf unsloth/GLM-4.7-GGUF:UD-Q2_K_XL \
    --n-gpu-layers 99 \
    --temp 0.6 \
    --temp 1.0 \
    --min-p 0.01 \
    --jinja \
    --model unsloth/GLM-4.7-GGUF/UD-Q2_K_XL/GLM-4.7-UD-Q2_K_XL-00001-of-00003.gguf \
    -ot ".ffn_.*_exps.=CPU"
```

{% endcode %}
{% endstep %}

{% step %}
合計の RAM と VRAM が十分でない場合は 1ビット版（170GB）を入手してください：

```python
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/DeepSeek-V3.1-Terminus-GGUF",
    local_dir = "unsloth/DeepSeek-V3.1-Terminus-GGUF",
    allow_patterns = ["*UD-TQ1_0*"], # 動的2ビットは "*UD-Q2_K_XL*" を使用
)
```

{% endstep %}
{% endstepper %}

### OLLAMA\_MODELS=unsloth ollama run merged\_file.gguf

✨ llama-serverとOpenAIのcompletionライブラリでデプロイする

{% code overflow="wrap" %}

```bash
./llama.cpp/llama-server \
    --model unsloth/DeepSeek-V3.1-Terminus-GGUF/DeepSeek-V3.1-Terminus-UD-TQ1_0.gguf \
    --alias "unsloth/DeepSeek-V3.1-Terminus" \
    --n-gpu-layers 999 \
    -ot ".ffn_.*_exps.=CPU" \
    --fit on \
    --min_p 0.01 \
    --jinja \
    --port 8001 \
    --jinja
```

{% endcode %}

\--port 8001 \ `その後、OpenAIのPythonライブラリを使用します（` :

```python
from openai import OpenAI
）
from openai import OpenAI
    import json
    openai_client = OpenAI(
)
base_url = "http://127.0.0.1:8001/v1",
    model = "unsloth/DeepSeek-V3.1-Terminus",
    completion = openai_client.chat.completions.create(
)
print(completion.choices[0].message.content)
```

## :minidisc:モデルのアップロード

**当社のすべてのアップロード** - imatrix ベースまたは動的でないものを含め、会話、コーディング、および言語タスクに最適化されたキャリブレーションデータセットを利用しています。

* 以下はフル DeepSeek-V3.1 モデルのアップロードです：

また、次もアップロードしました [IQ4\_NL](https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/IQ4_NL) と [Q4\_1](https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/Q4_1) それぞれ ARM および Apple デバイス向けに特に高速に動作するクオンタイズです。

<table data-full-width="false"><thead><tr><th>MoE ビット数</th><th>タイプ + リンク</th><th>ディスクサイズ</th><th>詳細</th></tr></thead><tbody><tr><td>1.66ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF?show_file_info=DeepSeek-V3.1-UD-TQ1_0.gguf">TQ1_0</a></td><td><strong>170GB</strong></td><td>1.92/1.56ビット</td></tr><tr><td>1.78ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-IQ1_S">IQ1_S</a></td><td><strong>185GB</strong></td><td>2.06/1.56ビット</td></tr><tr><td>1.93ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-IQ1_M">IQ1_M</a></td><td><strong>200GB</strong></td><td>2.5/2.06/1.56</td></tr><tr><td>2.42ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-IQ2_XXS">IQ2_XXS</a></td><td><strong>216GB</strong></td><td>2.5/2.06ビット</td></tr><tr><td>2.71ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-Q2_K_XL">Q2_K_XL</a></td><td><strong>251GB</strong></td><td>3.5/2.5ビット</td></tr><tr><td>3.12ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-IQ3_XXS">IQ3_XXS</a></td><td><strong>273GB</strong></td><td>3.5/2.06ビット</td></tr><tr><td>3.5ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-Q3_K_XL">Q3_K_XL</a></td><td><strong>296GB</strong></td><td>4.5/3.5ビット</td></tr><tr><td>4.5ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-Q4_K_XL">Q2_K_XL（動的2ビット量子化）や</a></td><td><strong>384GB</strong></td><td>5.5/4.5ビット</td></tr><tr><td>5.5ビット</td><td><a href="https://huggingface.co/unsloth/DeepSeek-V3.1-GGUF/tree/main/UD-Q5_K_XL">Q5_K_XL</a></td><td><strong>481GB</strong></td><td>6.5/5.5ビット</td></tr></tbody></table>

また、次の形式でもバージョンをアップロードしています： [BF16 フォーマット](https://huggingface.co/unsloth/DeepSeek-V3.1-BF16)、およびオリジナルの [FP8（float8）フォーマット](https://huggingface.co/unsloth/DeepSeek-V3.1).

## :snowboarder: GLM 4.7で生成されたPythonコードを実行するためのツール呼び出し

より多くのVRAMがある場合、より多くのMoE層をオフロードするか、層全体をオフロードすることを試せます。

通常は、 `-ot ".ffn_.*_exps.=CPU"` はすべてのMoE層をCPUにオフロードします！これにより、非MoE層を1つのGPUに収めることができ、生成速度が向上します。GPU容量が多い場合は、より多くの層に合わせて正規表現をカスタマイズできます。

もし少し多くのGPUメモリがあるなら、次を試してください `-ot ".ffn_(up|down)_exps.=CPU"` これは up と down の投影 MoE 層をオフロードします。

試してみてください `-ot ".ffn_(up)_exps.=CPU"` さらに多くのGPUメモリがある場合。これは up 投影の MoE 層のみをオフロードします。

正規表現をカスタマイズすることもできます。例えば `-ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"` は gate、up、down の MoE 層をオフロードしますが、6層目以降に限定します。

最新の [llama.cpp リリース](https://github.com/ggml-org/llama.cpp/pull/14363) 高スループットモードも導入しています。使用するには `llama-parallel`。詳細は [こちら](https://github.com/ggml-org/llama.cpp/tree/master/examples/parallel)。また、 **KVキャッシュを4ビットに量子化することができます** こちら

## をご覧ください。さらに、

より長いコンテキストに対応するには、 **KVキャッシュの量子化** を使用してKおよびVキャッシュをより低ビットに量子化できます。これによりRAM / VRAMのデータ移動が減少し、生成速度が向上することもあります。Kの量子化で許容されるオプション（デフォルトは `f16`)には以下が含まれます。

`--cache-type-k f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1`

多少精度が向上するので、 `_1` バリアントを使用するべきですが、やや遅くなります。例えば `q4_1, q5_1`

Vキャッシュも量子化できますが、 **Flash Attentionを使ってllama.cppをコンパイルする必要があります** サポートを有効にするには `-DGGML_CUDA_FA_ALL_QUANTS=ON`、そして `--flash-attn` コンパイルする必要があります `次のように` :

`-DGGML_CUDA_FA_ALL_QUANTS=ONを指定し、そして使用してください、`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/jp/moderu/tutorials/deepseek-v3.1-how-to-run-locally.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
