🐋DeepSeek-V3.1:ローカルでの実行方法
DeepSeek-V3.1 と Terminus を自分のローカルデバイスで実行するためのガイド!
DeepSeekのV3.1および ターミナス アップデートはハイブリッド推論を導入し、「思考(think)」と「非思考(non-think)」を1つのモデルに統合します。完全な671Bパラメータモデルは715GBのディスク容量を必要とします。量子化された動的2ビット版は245GBを使用します(サイズが75%削減)。GGUF: DeepSeek-V3.1-GGUF
新着: DeepSeek-V3.1-Terminus が公開されました: DeepSeek-V3.1-Terminus-GGUF 2025年9月10日アップデート: より厳しいベンチマークを求められたので、Aider Polyglotの結果を紹介します!当社の動的3ビット DeepSeek V3.1 GGUFは 75.6%で、多くのフル精度のSOTA LLMを上回っています。 詳しく読む。
当社の DeepSeek-V3.1 GGUFには Unsloth が含まれます チャットテンプレートの修正 llama.cpp対応バックエンド向け。
すべてのアップロードはUnslothを使用しています Dynamic 2.0 SOTAの5ショットMMLUおよびKLダイバージェンスの性能を目的としており、量子化されたDeepSeek LLMを最小限の精度損失で実行および微調整できます。
チュートリアルの案内:
llama.cppで実行するOllama / Open WebUI で実行する
⚙️ 推奨設定
1ビット動的量子化TQ1_0(重要でないMoE層は1ビット、重要なMoEは2〜4ビット、残りは6〜8ビット)は170GBのディスク容量を使用します - これは 1x24GBカードと128GBのRAM でMoEオフロードとともに動作します - また Ollamaでネイティブに動作します!
次を使用する必要があります --jinja llama.cppの量子化には - これは私たちの 固定されたチャットテンプレート を使用し、正しいテンプレートを有効にします!これを使用しないと誤った結果を得る可能性があります --jinja
2ビット量子化は、MoE層をRAMにオフロードすれば1x 24GB GPUに収まります。この構成では、追加で128GBのRAMがある場合、約5トークン/秒を期待できます。この2ビットを実行するには少なくとも226GBのRAMを推奨します。最適なパフォーマンスのためには、5+トークン/秒を得るには少なくとも226GBの統一メモリ、または合計で226GBのRAM+VRAMが必要です。生成速度を上げてより長いコンテキストを扱う方法については、 ここを読む.
必須ではありませんが、最良のパフォーマンスのためには、VRAM+RAMの合計がダウンロードする量子化モデルのサイズと等しいことを推奨します。そうでない場合でも、llama.cppでのハードドライブ/SSDオフロードは機能しますが、推論は遅くなります。
🦋チャットテンプレートのバグ修正
llama.cppや他のエンジンで正しく動作していなかったため、DeepSeek V3.1のチャットテンプレートのいくつかの問題を修正しました:
DeepSeek V3.1はハイブリッド推論モデルであり、チャットテンプレートを変更して推論(reasoning)を有効にできます。導入されたチャットテンプレートは
thinking = Trueでしたが、他のモデルではenable_thinking = Trueが使われます。我々はenable_thinkingを代わりのキーワードとして使えるオプションを追加しました。llama.cppのjinjaレンダラーは 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、これらがV3.1推論の推奨設定です:
を設定してください temperature 0.6 繰り返しや一貫性の欠如を減らすために。
を設定してください top_p を0.95に (推奨)
128Kのコンテクスト長 またはそれ以下
使用する
--jinjallama.cpp系で - 私たちは いくつかのチャットテンプレートの問題を修正しました!使用する
enable_thinking = True推論/思考モードを使用するには。デフォルトでは非推論に設定されています。
🔢 チャットテンプレート/プロンプト形式
を強制する必要はありません <think>\n が、追加しても構いません!与えられたプレフィックスでは、DeepSeek V3.1は非思考モードでクエリに対する応答を生成します。DeepSeek V3とは異なり、追加のトークンを導入しています </think>.
BOS(文頭)は強制的に追加され、EOS(文末)は各インタラクションを区切ります。推論中の BOS 二重追加を避けるため、次のみを呼び出すべきです tokenizer.encode(..., add_special_tokens = False) チャットテンプレートがBOSトークンも自動で追加するためです。llama.cpp / GGUF推論の場合、BOSは自動で追加されるためスキップしてください。
📔 非思考モード(使用するのは thinking = Falseまたは enable_thinking = False で、デフォルトです)
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>
コンテクストとプレフィックスを連結することで、クエリに対する正しいプロンプトが得られます。
📚 思考モード(使用するのは thinking = Trueまたは enable_thinking = True で、デフォルトです)
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> はコンテクストの各ターンで保持されます。
🏹 ツール呼び出し(Tool Calling)
ツール呼び出しは非思考モードでサポートされています。形式は:
<|begin▁of▁sentence|>{system prompt}{tool_description}<|User|>{query}<|Assistant|></think> ここで tool_description はシステムプロンプトの後の領域に配置します。
▶️DeepSeek-V3.1チュートリアルを実行:
🦙 Ollama / Open WebUI で実行する
インストールしてください ollama まだインストールしていない場合!モデルの他のバリアントを実行するには、 ここを参照してください.
モデルを実行してください!失敗した場合は別の端末で ollama serveを呼び出せます!私たちのすべての修正と推奨パラメータ(temperatureなど)は params 当社のHugging Faceアップロードで!
&#xNAN;(新)Ollamaで完全なR1-0528モデルを実行するには、当社のTQ1_0(170GB量子化)を使用できます:
他の量子化を実行するには、まずGGUF分割ファイルを以下のように1つにマージする必要があります。その後、モデルをローカルで実行する必要があります。
Open WebUIはまた ステップバイステップのチュートリアル を作成しました。R1を実行する方法の説明で、V3.1ではR1を新しいV3.1量子化に置き換えるだけで済みます。
✨ llama.cppで実行する
最新の llama.cpp を GitHub で入手できます。下のビルド手順に従うこともできます。変更してください -DGGML_CUDA=ON から -DGGML_CUDA=OFF GPU がない場合や CPU 推論のみを行いたい場合は。
直接モデルを読み込むために llama.cpp を使用したい場合、以下のようにできます:(:Q2_K_XL)は量子化の種類です。Hugging Face(ポイント3)経由でダウンロードすることもできます。これは ollama run に類似しています。使用してください export LLAMA_CACHE="folder" で強制的に llama.cpp を特定の場所に保存させます。モデルは最大128Kのコンテキスト長しか持たないことを忘れないでください。
ぜひお試しください -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 ".ffn_.*_exps.=CPU" これは最小のVRAMを使用します。
正規表現をカスタマイズすることもできます。例えば -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" は6層目以降のgate、up、downのMoE層をオフロードすることを意味します。
(以下をインストールした後に)モデルをダウンロードします pip install huggingface_hub hf_transfer )。量子化バージョンとして選べます UD-Q2_K_XL(動的2ビット量子化)や他の量子化バージョン(例: Q4_K_M )を選択できます。私たちは 2.7ビット動的量子化の使用を推奨します UD-Q2_K_XL はサイズと精度のバランスをとるためです.
次の --threads 32 でCPUスレッド数を編集できます、 --ctx-size 16384 でコンテキスト長を、 --n-gpu-layers 2 で何層をGPUにオフロードするかを指定します。GPUがメモリ不足になる場合は調整してみてください。CPUのみの推論の場合はこれを削除してください。
合計RAMとVRAMが十分でない場合は1ビット版(170GB)を取得してください:
✨ llama-serverとOpenAIのcompletionライブラリでデプロイ
llama-serverをデプロイに使用するには、次のコマンドを使用してください:
その後、OpenAIのPythonライブラリを使用します(インストール後) pip install openai :
💽モデルのアップロード
当社の全てのアップロードは imatrixベースでも動的でもないものを含め、会話、コーディング、言語タスクに特化して最適化されたキャリブレーションデータセットを利用しています。
以下はフル DeepSeek-V3.1 モデルのアップロード:
さらにアップロードしました IQ4_NL および Q4_1 これらの量子化はそれぞれARMおよびAppleデバイスで特に高速に動作します。
さらに次の形式でもバージョンをアップロードしました: BF16フォーマット、およびオリジナルの FP8(float8)フォーマット.
🏂 生成速度の改善
もし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" は6層目以降のgate、up、downのMoE層をオフロードすることを意味します。
その 最新のllama.cppリリースは 高スループットモードも導入します。使用すると、 llama-parallelです。詳細は ここを参照してください。さらに、 KVキャッシュを4ビットに量子化することもできます 例えばVRAM / RAMの移動を減らすことで、生成プロセスを高速化することができます。
📐長いコンテキスト(フル128K)を収める方法
より長いコンテキストを収めるには、 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キャッシュも量子化できますが、その場合は llama.cppをFlash Attentionサポートでコンパイルする必要があります には次を使用してください -DGGML_CUDA_FA_ALL_QUANTS=ON、そして次を使用して --flash-attn で有効にします。次に --cache-type-k :
と一緒に使用できます:--cache-type-v f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1
最終更新
役に立ちましたか?

