DeepSeek-V4をローカルで動かす方法:ProとFlashセットアップガイド
DeepSeek-V4をローカルで動かす方法:ProとFlashセットアップガイド
DeepSeek-V4はDeepSeekがこれまでにリリースした中で最も野心的なオープンウェイトモデルの一つです。このファミリーには、1.6Tパラメータ、49Bアクティベートパラメータを持つMixture-of-ExpertsモデルのDeepSeek-V4-Proと、より小型の284Bパラメータ、13BアクティベートパラメータのMoEモデルであるDeepSeek-V4-Flashが含まれます。両モデルとも最大100万トークンのコンテキスト長をサポートしています。
この組み合わせは非常に魅力的ですが、実際にDeepSeek-V4をローカルで動かせるのかという現実的な疑問も生じます。
答えは「はい」ですが、重要な注意点があります。DeepSeek-V4はノートパソコンサイズのモデルではありません。Flashバージョンでさえ、真剣なマルチGPU展開が必要です。このガイドでは、Hugging Face上の公式DeepSeekモデルリポジトリを使ったローカルセットアップの手順、計画すべきハードウェア、公式推論およびエンコーディングファイルの正しい使い方を説明します。
参考モデルページ:
DeepSeek-V4-Pro と DeepSeek-V4-Flash の違い
何かをダウンロードする前に、適切なモデルバリアントを選びましょう。
| モデル | 総パラメータ数 | アクティベートパラメータ数 | コンテキスト長 | 精度 | 推奨用途 |
|---|---|---|---|---|---|
| DeepSeek-V4-Flash | 284B | 13B | 1M | FP4 + FP8混合 | ローカルでの高速実験、低コストサービング、コーディングアシスタント、長コンテキストテスト |
| DeepSeek-V4-Pro | 1.6T | 49B | 1M | FP4 + FP8混合 | 最高品質、研究所、大規模GPUクラスター、本格的な推論やエージェントタスク |
最も重要な点は、DeepSeek-V4が**Mixture-of-Experts (MoE)**アーキテクチャを採用していることです。各トークンごとにモデルの一部のみがアクティベートされるため計算コストは削減されますが、モデルの重みは全て保存・読み込みが必要です。つまりGPUメモリとストレージの要件は依然として非常に高いままです。
ほとんどの開発者にとっては、DeepSeek-V4-Flashが現実的な出発点です。DeepSeek-V4-Proはクラスタ規模の展開として扱うべきです。
DeepSeek-V4の特徴とは?
DeepSeekのモデルカードによると、V4シリーズは以下の主要なアップグレードを導入しています:
- ハイブリッドアテンションアーキテクチャ:DeepSeekはCompressed Sparse Attention (CSA) と Heavily Compressed Attention (HCA) を組み合わせて長コンテキスト効率を向上。100万トークン設定では、DeepSeek-V4-ProはDeepSeek-V3.2よりもKVキャッシュを大幅に削減していると報告されています。
- Manifold-Constrained Hyper-Connections (mHC):非常に深いネットワークでの安定性を向上させつつ、モデル容量を維持。
- Muon Optimizer:トレーニング時にMuonを使用し、収束性と安定性を改善。
- 長コンテキスト対応:ProとFlashの両方が最大1Mトークンをサポートし、DeepSeekはThink Maxモードで少なくとも384Kコンテキストを推奨。
- 複数の推論モード:DeepSeek-V4はNon-think、Think High、Think Maxスタイルの使用をサポート。
ローカル展開で特に重要な実用的変更点は、混合FP4/FP8精度とカスタムチャットエンコーディングフォーマットです。
ハードウェア要件
DeepSeek-V4はRTX 4090のようなコンシューマーGPU向けには設計されていません(将来的に大幅に改変されたコミュニティ量子化を試す場合を除く)。公式の重みを使う場合はサーバーGPUを想定してください。
実用的なハードウェア計画
| 利用ケース | 推奨ハードウェア | 備考 |
|---|---|---|
| DeepSeek-V4-Flashテスト展開 | 4〜8台の大容量NVIDIA GPU | H100/H200/A100クラスのGPUが実用的なターゲット |
| DeepSeek-V4-Flash本番サービング | 8台以上の大容量GPU | GPU数が多いほどスループットと長コンテキスト処理に有利 |
| DeepSeek-V4-Pro研究展開 | 大規模マルチノードGPUクラスター | 単一ワークステーションモデルではなくクラスタインフラとして扱う |
| Think Max長コンテキスト | 追加のGPUメモリとKVキャッシュ予算 | DeepSeekはThink Maxに少なくとも384Kコンテキストを推奨 |
ストレージ要件
ダウンロード開始前に大容量のローカルストレージを計画してください:
- 可能な限りNVMe SSDストレージを使用
- 変換後の重み用に余裕を持った空き容量を確保
- 小容量のシステムディスクに直接ダウンロードしない
- ProモデルはFlashよりもはるかに多くのストレージを必要とすることを想定
安全なディレクトリ構成例:
/data/models/deepseek-v4-flash-hf # 元のHugging Faceファイル
/data/models/deepseek-v4-flash-infer # 変換済み推論用重み
/data/cache/huggingface # HFキャッシュクラウドGPUサーバーをレンタルする場合は、ローカルNVMe付きのインスタンスを選ぶか、大容量の高スループットボリュームをアタッチしてください。VPSスタイルの展開計画では、LightNodeなどのプロバイダーでGPUまたは大容量メモリサーバーを比較できますが、モデルに必要なGPUメモリが実際にあるか必ず確認してください。
ソフトウェア要件
Linux環境で最新のNVIDIAドライバーとCUDAが必要です。
推奨ベースライン:
| コンポーネント | 推奨 |
|---|---|
| OS | Ubuntu 22.04以降 |
| Python | 3.10以上 |
| GPUドライバー | 最新のNVIDIAデータセンター用ドライバー |
| CUDA | CUDA 12.x推奨 |
| PyTorch | CUDA対応ビルド |
| Git LFS | モデルファイル用に必須 |
| Hugging Face CLI | 安定したダウンロードに必須 |
基本ツールのインストール:
sudo apt update
sudo apt install -y git git-lfs python3 python3-venv python3-pip
git lfs install
pip install -U huggingface_hubPython仮想環境を使う場合:
python3 -m venv dsv4-env
source dsv4-env/bin/activate
pip install -U pip wheel setuptools
pip install -U huggingface_hub torch transformers safetensorsステップ1:DeepSeek-V4-Flashをダウンロード
ほとんどのユーザーはFlashから始めましょう:
mkdir -p /data/models
cd /data/models
huggingface-cli download deepseek-ai/DeepSeek-V4-Flash \
--local-dir DeepSeek-V4-Flash \
--local-dir-use-symlinks FalseProモデルが欲しい場合:
huggingface-cli download deepseek-ai/DeepSeek-V4-Pro \
--local-dir DeepSeek-V4-Pro \
--local-dir-use-symlinks Falseダウンロードが中断した場合は同じコマンドを再実行してください。Hugging Faceはダウンロードを再開します。
ステップ2:公式リポジトリ構造を確認
ダウンロード後、モデルフォルダを確認:
cd /data/models/DeepSeek-V4-Flash
lsモデルカードは以下の2つの重要なフォルダを指しています:
inference/- 公式のローカル推論コード(重み変換や生成スクリプト含む)encoding/- DeepSeek-V4用のプロンプトエンコーディングと出力解析ユーティリティ
これは重要です。DeepSeek-V4は通常のJinja形式のチャットテンプレートを同梱していません。一般的なOpenAI互換チャットラッパーがそのまま正しくプロンプトをフォーマットできるとは限りません。
ステップ3:公式推論用に重みを変換
公式推論READMEでは生成を実行する前に変換ステップがあります。
モデルリポジトリから:
cd /data/models/DeepSeek-V4-Flash/inference
export HF_CKPT_PATH=/data/models/DeepSeek-V4-Flash
export SAVE_PATH=/data/models/DeepSeek-V4-Flash-infer
export EXPERTS=256
export MP=4
export CONFIG=config.json
python convert.py \
--hf-ckpt-path ${HF_CKPT_PATH} \
--save-path ${SAVE_PATH} \
--n-experts ${EXPERTS} \
--model-parallel ${MP}パラメータ説明:
| 変数 | 意味 |
|---|---|
HF_CKPT_PATH | 元のHugging Faceモデルファイルのパス |
SAVE_PATH | 変換後の推論用重みの出力パス |
EXPERTS=256 | DeepSeek-V4推論変換で使用するエキスパート数 |
MP=4 | モデル並列サイズ。通常は実行に使うGPU数に合わせる |
CONFIG | 生成スクリプトで使うモデル設定ファイル |
GPU数が多い場合はMPを調整してください。例えば8GPUノードなら:
export MP=8FP8エキスパートオプション
公式推論READMEによると、FP4エキスパートの代わりにFP8エキスパートを使いたい場合は、config.jsonから以下の行を削除します:
"expert_dtype": "fp4"そして変換時に--expert-dtype fp8を渡します:
python convert.py \
--hf-ckpt-path ${HF_CKPT_PATH} \
--save-path ${SAVE_PATH} \
--n-experts ${EXPERTS} \
--model-parallel ${MP} \
--expert-dtype fp8ほとんどのユーザーはまずデフォルトの混合FP4/FP8設定で始めてください。動作するベースラインができてから精度を変更しましょう。
ステップ4:インタラクティブチャットを開始
変換が終わったら、公式の生成スクリプトを実行します:
cd /data/models/DeepSeek-V4-Flash/inference
export MP=4
export SAVE_PATH=/data/models/DeepSeek-V4-Flash-infer
export CONFIG=config.json
torchrun --nproc-per-node ${MP} generate.py \
--ckpt-path ${SAVE_PATH} \
--config ${CONFIG} \
--interactiveバッチ入力ファイルを使う場合:
torchrun --nproc-per-node ${MP} generate.py \
--ckpt-path ${SAVE_PATH} \
--config ${CONFIG} \
--input-file prompts.txtマルチノード実行の場合:
torchrun \
--nnodes ${NODES} \
--nproc-per-node $((MP / NODES)) \
--node-rank $RANK \
--master-addr $ADDR \
generate.py \
--ckpt-path ${SAVE_PATH} \
--config ${CONFIG} \
--input-file prompts.txtすべてのノードが変換済みチェックポイントパスにアクセスできるか、または変換済みファイルを各マシンの同じパスにコピーしてください。
ステップ5:正しいサンプリング設定を使う
DeepSeekはローカル展開に以下のサンプリングパラメータを推奨しています:
temperature = 1.0
top_p = 1.0生成スクリプトがCLIフラグとしてこれらを公開していれば直接使い、そうでなければスクリプトや設定ファイル内で設定してください。
Think Maxモードでは、DeepSeekは少なくとも以下のコンテキストウィンドウを推奨しています:
384Kトークン最初のテストでは巨大なコンテキストウィンドウから始めず、小さく始めてモデルが正しくロード・生成できることを確認し、GPUメモリを監視しながら徐々にコンテキスト長を増やしてください。
ステップ6:DeepSeek-V4チャットエンコーディングを理解する
DeepSeek-V4は標準的なJinjaチャットテンプレートを含みません。代わりにリポジトリにはPythonユーティリティを含むencoding/フォルダがあります。
基本的な使い方は以下の通りです:
from encoding_dsv4 import encode_messages, parse_message_from_completion_text
messages = [
{"role": "system", "content": "あなたは役に立つアシスタントです。"},
{"role": "user", "content": "2+2は何ですか?"},
]
prompt = encode_messages(messages, thinking_mode="thinking")
print(prompt)非思考チャットの場合はチャットモードを使います:
prompt = encode_messages(messages, thinking_mode="chat")思考モードではモデルは明示的な推論区切りを使います:
<think> ... </think>パーサーは生成テキストを構造化されたアシスタントメッセージに変換できます:
completion = "単純な算数です。</think>2 + 2 = 4.<|end▁of▁sentence|>"
parsed = parse_message_from_completion_text(completion, thinking_mode="thinking")
print(parsed)これはDeepSeek-V4のローカルAPIラッパーを自作する場合に特に重要です。
推論モードの説明
DeepSeek-V4は3つの実用的な推論スタイルをサポートしています:
| モード | 振る舞い | 利用ケース |
|---|---|---|
| Non-think | 高速な直接回答 | 簡単なQ&A、要約、日常的なコーディング支援 |
| Think High | 意図的な分析を伴う推論回答 | デバッグ、計画、数学、設計判断 |
| Think Max | 最大限の推論努力 | 難しいコーディングタスク、エージェントワークフロー、研究レベルの問題解決 |
ローカルサーバーでは、これらを別々のモデル名として公開することもできます。例:
deepseek-v4-flash-chat
deepseek-v4-flash-thinking
deepseek-v4-flash-max内部的には、それぞれ異なるプロンプトエンコーディング、コンテキスト制限、生成パラメータを使えます。
vLLMやSGLangでDeepSeek-V4は動くか?
リリース時点で最も安全な方法は、モデルリポジトリ内の公式DeepSeek推論コードを使うことです。汎用サービングフレームワークは、DeepSeek-V4のアーキテクチャ、混合精度、長コンテキスト挙動、カスタムエンコーディングを完全にサポートするにはアップデートが必要な場合があります。
実用的な手順は:
- まず公式の
inference/generate.pyを正常に動かす。 - 公式
encoding/ユーティリティで出力品質とプロンプトフォーマットを確認。 - 好みのフレームワークがDeepSeek-V4を明示的にサポートしているか確認。
- サポートが確認できてからvLLM、SGLang、TensorRT-LLMなどに移行。
これにより、モデルはロードできてもプロンプトテンプレートが間違っていてチャット品質が悪いというよくある失敗を避けられます。
シンプルなローカルAPIラッパーの構築
OpenAIスタイルのローカルエンドポイントを作りたい場合、公式生成パスをFastAPIなどでラップできます。実装はgenerate.pyの統合方法によりますが、大まかな流れは:
- OpenAI互換の
messagesを受け取る。 encoding_dsv4.encode_messages()で変換。- 変換したプロンプトをDeepSeek-V4推論エンジンに送る。
- 出力を
parse_message_from_completion_text()で解析。 - OpenAI互換のJSONレスポンスを返す。
疑似コード:
from encoding_dsv4 import encode_messages, parse_message_from_completion_text
messages = [
{"role": "system", "content": "あなたは役に立つアシスタントです。"},
{"role": "user", "content": "KVキャッシュを簡単に説明してください。"},
]
prompt = encode_messages(messages, thinking_mode="thinking")
# ローカルのDeepSeek-V4推論ワーカーにプロンプトを送信
raw_completion = run_deepseek_v4(prompt)
assistant_message = parse_message_from_completion_text(
raw_completion,
thinking_mode="thinking",
)
print(assistant_message["content"])本番環境では以下を追加してください:
- リクエストキューイング
- ストリーミング出力
- タイムアウト処理
- GPUヘルスチェック
- 最大コンテキスト制限
- 構造化ログ
- 認証
トラブルシューティング
1. CUDAメモリ不足
メモリ負荷を減らすには:
- コンテキスト長を短くする
- バッチサイズを減らす
- テンソル/モデル並列サイズを増やす
- GPU数を増やす
- ProではなくDeepSeek-V4-Flashから始める
デバッグ時はまず長コンテキストを減らすのが一般的です。
2. ダウンロードが失敗または停止する
ブラウザダウンロードではなくhuggingface-cli downloadを使いましょう。同じコマンドを再実行すると再開されます。
専用キャッシュディレクトリを設定することも可能:
export HF_HOME=/data/cache/huggingface
export HUGGINGFACE_HUB_CACHE=/data/cache/huggingface/hub3. モデルが変なチャット出力を生成する
プロンプトのフォーマットを確認してください。DeepSeek-V4は標準的なJinjaチャットテンプレートを使いません。公式のencoding/実装を使いましょう。
4. マルチGPU実行が失敗する
PyTorchがすべてのGPUを認識しているか確認:
python - <<'PY'
import torch
print(torch.cuda.device_count())
for i in range(torch.cuda.device_count()):
print(i, torch.cuda.get_device_name(i))
PYマルチノード実行の場合はNCCLネットワークも確認:
export NCCL_DEBUG=INFO5. Think Maxが遅すぎる
Think Maxは難しい推論に多くの計算を使う設計です。コストに見合うタスクでのみ使い、通常のアシスタント用途ではNon-thinkかThink Highが実用的です。
推奨展開戦略
DeepSeek-V4を初めてローカル展開する場合は以下の順序を推奨します:
- DeepSeek-V4-Flashから始める
- 公式推論コードを使う
- 小さなテストコンテキストで開始
- 公式エンコーディングが動作することを確認
- コンテキスト長を徐々に増やす
- ローカル生成が安定してからAPIラッパーを追加
- クラスタ規模のGPUリソースがある場合のみProを検討
最後に
DeepSeek-V4は強力ですが、気軽にローカルで動かせるモデルではありません。Flashバージョンが実用的な入り口であり、Proは本格的なマルチGPUまたはマルチノード環境向けです。成功するセットアップの鍵は公式ワークフローを尊重すること:Hugging Faceリポジトリをダウンロードし、付属の推論ツールで重みを変換し、torchrunで生成を実行し、汎用チャットテンプレートを使うのではなく専用のDeepSeek-V4エンコーディングユーティリティを使うことです。
プロンプト実験だけならホストされたDeepSeekチャットサービスやAPIルートの方が簡単ですが、データプライバシー、完全な制御、トークン単位の課金なし、カスタムインフラが必要なら、DeepSeek-V4をローカルで動かすことがプライベートな長コンテキストAIシステム構築の強力な基盤となります。