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

llama.cpp を使って DeepSeek-R1 の 1.58 ビット動的量子化を実行する方法のガイド。

circle-check

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

  1. 忘れないでください <|User|> および <|Assistant|> トークン! - またはチャットテンプレートフォーマッターを使用してください

  2. 最新の llama.cpp で: github.com/ggerganov/llama.cpparrow-up-right. 以下のビルド手順にも従うことができます:

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=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.58ビットモデルではこれがうまく機能することがわかりました。

  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-dynamicarrow-up-right, 1.58bit の動的量子化を使用して以下のように第2の例を生成できます:

Cover

オリジナル DeepSeek R1

Cover

1.58ビット 動的量子化

使用したプロンプトは以下です:

この例を使って 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 の実行方法をステップバイステップで解説しています: docs.openwebui.com/tutorials/integrations/deepseekr1-dynamic/arrow-up-right GGUF を Ollama で推論に使いたい場合、まず3つの GGUF 分割ファイルを1つに結合する必要があります。次にモデルをローカルで実行する必要があります。

DeepSeek チャットテンプレート

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

<|begin▁of▁sentence|><|User|>What is 1+1?<|Assistant|>It's 2.<|end▁of▁sentence|><|User|>Explain more!<|Assistant|>

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

<|User|>What is 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.56ビット。 down_proj MoE の混合で 2.06/1.56ビット

1.73bit

UD-IQ1_M

158GB

良好

MoE 全体が1.56ビット。 down_proj MoE の左側が2.06ビットのまま

2.22bit

UD-IQ2_XXS

183GB

より良い

MoE 全体が2.06ビット。 down_proj MoE の混合で 2.5/2.06ビット

2.51bit

UD-Q2_K_XL

212GB

最高

MoE 全体が2.5ビット。 down_proj MoE の混合で 3.5/2.5ビット

最終更新

役に立ちましたか?