For the complete documentation index, see llms.txt. This page is also available as Markdown.

🐋DeepSeek-R1: ローカルでの実行方法

llama.cppを使ってDeepSeek-R1用の1.58ビットDynamic Quantを実行する方法のガイド。

llama.cpp を使用する(推奨)

  1. 〜を忘れないでください <|User|> そして <|Assistant|> トークン! - あるいはチャットテンプレートフォーマッタを使ってください

  2. 最新の llama.cpp 場所: github.com/ggml-org/llama.cpp。以下のビルド手順に従うこともできます。 Apple Mac / Metalデバイスの場合、次を設定します -DGGML_CUDA=OFF その後は通常どおり続けてください。Metalサポートはデフォルトで有効です。

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=ON -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp
  1. 使用するのが最適です --min-p 0.05 非常にまれなトークン予測を抑えるためです。特に 1.58bit モデルではこれがうまく機能することがわかりました。

  2. 以下からモデルをダウンロードします:

# pip install huggingface_hub hf_transfer
# import os # より高速なダウンロードのためのオプション
# os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"

from huggingface_hub import snapshot_download
snapshot_download(
  repo_id = "unsloth/DeepSeek-R1-GGUF",
  local_dir = "DeepSeek-R1-GGUF",
  allow_patterns = ["*UD-IQ1_S*"], # 1.58bit 用に量子化タイプ UD-IQ1_S を選択
)
  1. Q4_0 K 量子化キャッシュの例 注意: -no-cnv は自動会話モードを無効にします

出力例:

  1. GPU(たとえば RTX 4090)に 24GB あれば、複数の層を GPU にオフロードしてより高速に処理できます。複数の GPU があるなら、さらに多くの層をオフロードできるはずです。

  1. こちらのブログ記事で述べた Flappy Bird の例をテストするには: https://unsloth.ai/blog/deepseekr1-dynamic、1.58bit の動的量子化を使って以下のように 2 つ目の例を生成できます:

Cover

オリジナルの DeepSeek R1

Cover

1.58bit 動的量子化

使用したプロンプトは以下のとおりです:

この例を使って llama.cpp を呼び出すには、次のようにします:

  1. また、たとえば Ollama で使うために重みをまとめたい場合は、このスクリプトを使ってください:

  1. DeepSeek R1 には 61 層あります。たとえば 24GB GPU または 80GB GPU なら、切り捨て後の層数をオフロードできると考えられます(メモリ不足になる場合は 1 減らしてください):

量子化
ファイルサイズ
24GB GPU
80GB GPU
2x80GB GPU

1.58bit

131GB

7

33

全 61 層

1.73bit

158GB

5

26

57

2.22bit

183GB

4

22

49

2.51bit

212GB

2

19

32

Mac / Apple デバイスでの実行

Apple Metal デバイスでは --n-gpu-layers に注意してください。メモリ不足になるようなら、値を下げてください。128GB のユニファイドメモリ搭載マシンなら、59 層ほどをオフロードできるはずです。

Ollama/Open WebUI で実行

Open WebUI は、R1 の実行方法についてのステップごとのチュートリアルをこちらで公開しています: https://docs.openwebui.com/tutorials/integrations/llm-providers/deepseekr1-dynamic

GGUF で Ollama を使って推論したい場合は、まず以下のコードのように 3 つの分割 GGUF ファイルを 1 つにまとめる必要があります。その後、モデルをローカルで実行します。

DeepSeek のチャットテンプレート

すべての蒸留版と元の 671B R1 モデルは同じチャットテンプレートを使用します:

<|begin▁of▁sentence|><|User|>1+1は何ですか?<|Assistant|>答えは 2 です。<|end▁of▁sentence|><|User|>もっと説明して!<|Assistant|>

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

<|User|>1+1は何ですか?<|Assistant|>

<think> と </think> トークンには専用のトークンが割り当てられます。Qwen と Llama の蒸留版では、一部のトークンが再マップされています。一方、たとえば Qwen には BOS トークンがなかったため、代わりに <|object_ref_start|> を使う必要がありました。 トークナイザー ID の対応表:

トークン
R1
蒸留版 Qwen
蒸留版 Llama

<think>

128798

151648

128013

</think>

128799

151649

128014

<|begin_of_sentence|>

0

151646

128000

<|end_of_sentence|>

1

151643

128001

<|User|>

128803

151644

128011

<|Assistant|>

128804

151645

128012

パディングトークン

2

151654

128004

モデル内の元のトークン:

トークン
Qwen 2.5 32B Base
Llama 3.3 70B Instruct

<think>

<|box_start|>

<|reserved_special_token_5|>

</think>

<|box_end|>

<|reserved_special_token_6|>

<|begin▁of▁sentence|>

<|object_ref_start|>

<|begin_of_text|>

<|end▁of▁sentence|>

<|endoftext|>

<|end_of_text|>

<|User|>

<|im_start|>

<|reserved_special_token_3|>

<|Assistant|>

<|im_end|>

<|reserved_special_token_4|>

パディングトークン

<|vision_pad|>

<|finetune_right_pad_id|>

蒸留版と元の R1 版のすべてでは、誤ってパディングトークンに <|end▁of▁sentence|> が割り当てられているようです。これは、特にこれらの推論モデルの上にさらにファインチューニングしたい場合、ほとんど良い考えではありません。多くのフレームワークが EOS トークンを -100 としてマスクするため、これが原因で無限に生成が続いてしまいます。 私たちは、正しいパディングトークンで蒸留版と元の R1 版のすべてを修正しました(Qwen は <|vision_pad|>、Llama は <|finetune_right_pad_id|>、R1 は <|▁pad▁|>、または私たちが追加した <|PAD▁TOKEN|> を使用します)。

GGUF R1 表

MoE ビット数
型
ディスクサイズ
精度
リンク
詳細

1.58bit

UD-IQ1_S

131GB

まずまず

MoE 全体を 1.56bit にしたもの。 down_proj MoE の 2.06/1.56bit 混合で

1.73bit

UD-IQ1_M

158GB

良い

MoE 全体を 1.56bit にしたもの。 down_proj MoE では 2.06bit のまま

2.22bit

UD-IQ2_XXS

183GB

より良い

MoE 全体を 2.06bit にしたもの。 down_proj MoE の 2.5/2.06bit 混合で

2.51bit

UD-Q2_K_XL

212GB

最高

MoE 全体を 2.5bit にしたもの。 down_proj MoE の 3.5/2.5bit 混合で

最終更新

役に立ちましたか?