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

llama.cpp を使って DeepSeek-R1 の 1.58 ビット動的クオンタイズを実行する方法のガイド。

circle-check

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

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

  2. 最新の llama.cpp は以下で入手できます: github.com/ggml-org/llama.cpparrow-up-right。以下のビルド手順に従うこともできます。 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-dynamicarrow-up-right、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 の実行方法についてステップバイステップのチュートリアルを作成しています: 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 が自動的に追加されるため 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 ベース
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

サイズと精度のバランスを取るために私たちの2.7ビット動的量子化を

212GB

最高

MoE 全体が 2.5bit。 down_proj MoE 内で 3.5/2.5bit の混合

最終更新

役に立ちましたか?