DeepSeek-V4-Flash を RTX PRO 6000 Blackwell Max-Q 96GB x 2 で動かしました。llama.cpp の WIP ブランチと community GGUF を使い、生成速度は TG 35 t/s 前後でした。

284B MoE / 13B active のモデルを、native FP4/FP8 GGUF で載せています。Flash Attention は無効で、DSV4 の処理も最適化途中です。以下は 2026-04-27 時点の結果です。

動画リンク: https://www.youtube.com/watch?v=Hjl4efNonxE

使用したモデルと速度

使ったのは nsparks/DeepSeek-V4-Flash-FP4-FP8-GGUF と、llama.cpp PR #22378 の wip/deepseek-v4-support ブランチです。Hugging Face の model card は 284B params、GGUF は deepseek4 architecture としています。

項目値
ModelDeepSeek-V4-Flash
Parameters284B MoE
Active parameters13B
Experts256 experts / 6 active
GGUFnsparks/DeepSeek-V4-Flash-FP4-FP8-GGUF
Runtimellama.cpp wip/deepseek-v4-support
Commit rangeb8942-ba173dd08
Quantizationnative FP4 + FP8
GGUF size146GB
BPW4.39
GPUsRTX PRO 6000 Blackwell Max-Q 96GB x 2

入力処理(PP)と生成(TG)の測定結果です。

指標値
Prompt eval (PP)36.5-39.4 t/s
Token generation (TG)34.1-41.7 t/s
PP average38.3 t/s
TG average35.7 t/s
VRAMGPU0: 75.1GB, GPU1: 72.8GB
Offloaded layers44/44
CPU mapped1010 MiB
Flash Attentiondisabled
GPU utilization30-40% burst
Peak powerGPU0: 97.8W, GPU1: 115W
Graph splits3

GPU 使用率は 30-40% の burst、消費電力は 100-115W 付近でした。300W TDP に対して低く、Flash Attention や expert dispatch graph の改善で速度が変わる余地はあると見ています。

DeepSeek-V4-Flash GGUF 実行中の DCGM GPU Monitoring ダッシュボード
llama.cpp WIP ブランチで DeepSeek-V4-Flash GGUF を動かしたときの DCGM。GPU utilization は 40% 前後、VRAM は GPU0 75.8GB / GPU1 73.4GB、power は 97.8W / 115W 付近に留まっていた。

起動コマンド

使った起動コマンドです。

  podman run --rm \
  -p 8000:8000 \
  --device nvidia.com/gpu=all \
  --shm-size 8g \
  -v /mnt/data/models/models--nsparks--DeepSeek-V4-Flash-FP4-FP8-GGUF:/models:Z \
  llama.cpp:deepseek-v4 \
  -s -m /models/snapshots/.../DeepSeek-V4-Flash-FP4-FP8-native.gguf \
  --n-gpu-layers 999 --threads 15 --threads-batch 24 \
  --ctx-size 8192 --parallel 1 -b 4096 -ub 2048 \
  --jinja --host 0.0.0.0 --port 8000 --alias deepseek-v4
  

llama-server に OpenAI 互換エンドポイントがあるため、公式 inference/ 用に作った API wrapper は不要になりました。

検証環境

項目値
GPUNVIDIA RTX PRO 6000 Blackwell Max-Q 96GB x 2
Compute Capabilitysm_120
Driver580.126.09
CUDA13.0
CPUAMD EPYC 9175F
RAM768GB DDR5-6400
ContainerPodman
Native FP4BLACKWELL_NATIVE_FP4 enabled

transformers で直接ロードした際は、GPU0/GPU1 とも VRAM を 80GB 前後使いました。初回 response は確認できましたが、prompt request で落ちました。公式推論コードも調べたあと、公開されていた GGUF に切り替えました。

リクエストごとの速度

短い prompt が中心です。長い入力での PP 性能を測った結果ではありません。

#内容prompt tokensPP (ms/t)PP (t/s)gen tokensTG (ms/t)TG (t/s)total (s)
1日本語質問1426.737.44127.136.91.5
2MoE説明2025.938.613227.836.04.2
3FP4 vs FP81925.938.712527.736.14.0
4system prompt3125.838.718227.836.05.9
5マルチターン5025.938.651228.035.715.6
6Go code2325.838.723027.835.97.0
7論理問題2325.938.720727.835.96.4
8比較分析3025.838.742728.035.812.7
9JSON出力2627.436.512229.334.14.3
10DSV4アーキテクチャ4525.838.741427.935.812.7

MoE 説明、コード生成、論理問題の短いテストでは、大きな破綻はありませんでした。ただし、日本語のストリーミングで 東東京圜 のような出力が何度かありました。テストブランチでの少数の試行なので、主に TG の目安として見ています。

Flash Attention は無効でした

ログでは、Flash Attention が自動で無効になっています。

  sched_reserve: layer 0 is assigned to device CUDA0 but the Flash Attention tensor is assigned to device CPU (usually due to missing support)
sched_reserve: Flash Attention was auto, set to disabled
  

DeepSeek-V4 は CSA、HCA、Indexer を含む独自の attention を使います。この WIP ブランチでは、対応する Flash Attention が実装途中に見えます。GPU 使用率が 30-40% に留まる主因ではないかと考えています。

Flash Attention 対応後は PP の改善を見込んでいます。一方、TG は 4.39 BPW の native FP4/FP8 GGUF を 2GPU に分散して読むため、メモリ帯域や expert dispatch の影響が大きいと見ています。

公式推論コードで止まった点

GGUF の前に、公式 repository の inference/*.py を試しました。generate.py でローカル生成する構成で、HTTP endpoint はありません。そこで tokenizer、model、distributed runtime を呼ぶ FastAPI + uvicorn の wrapper を作り、OpenAI 互換の /v1/chat/completions を用意しました。

weight 変換は MP=2 で成功しました。transformers 直ロードでは各 GPU に 80GB 前後を使い、公式 inference/*.py 経由でも初回 response を確認しました。起動時の nvtop では、GPU0/GPU1 それぞれの process が 79680MiB 程度を使い、VRAM 使用率は約 81% でした。

公式 inference コード起動時に nvtop で両 GPU の VRAM 使用量を確認している画面
公式 `inference/*.py` 系の試行では、Python process が GPU0/GPU1 にそれぞれ 79,680MiB 程度を確保していた。初回 response までは確認できたが、prompt request で落ちた。

ただし、prompt request でプロセスが落ちました。次の問題を調べましたが、NGC コンテナの torch version と DSV4 の FP4 dtype 要件が最後まで残りました。

  python convert.py --hf-ckpt-path ${HF_CKPT_PATH} --save-path ${SAVE_PATH} \
  --n-experts 256 --model-parallel 2
  
  NCCL_NET_PLUGIN=none NCCL_IB_DISABLE=1 PYTHONPATH=. \
torchrun --standalone --nproc-per-node 2 main.py \
  --ckpt-path ${SAVE_PATH} --config ${CONFIG} --port 8000
  

調べた問題と対処です。

問題状態
NCCL segfaultbroadcast 時に ncclNetPluginInit 周辺で segfault。NCCL_NET_PLUGIN=none NCCL_IB_DISABLE=1 で回避
tilelang が CUDA を検出しないベアメタル側に CUDA toolkit がなく、container overlay から nvcc を symlink して回避
sparse attention の shared memorytilelang の CSA sparse attention kernel が 104KB dynamic shared memory を要求
block size 調整sparse attention の block size を 64 -> 32 に落として shared memory 側は回避
NGC torch が古いnvcr.io/nvidia/pytorch:25.04-py3 は torch 2.7.0
DSV4 FP4 dtypeDeepSeek-V4-Flash が使う torch.float4_e2m1fn_x2 は torch 2.11+ 前提

Blackwell は 228KB/SM まで dynamic shared memory を使えます。tilelang の sparse attention kernel が求める 104KB は、ハードウェア上は収まるはずです。実際には block size を 64 -> 32 に下げると、この問題を越えられました。

NGC コンテナは torch 2.7.0 に固定され、DSV4 が使う float4_e2m1fn_x2 に対応していませんでした。依存関係の制約もあり、単純な差し替えでは解決しません。公式 inference/*.py の試行はここで止め、native FP4/FP8 GGUF の検証に移りました。

GGUF の自前変換

nsparks の WIP ブランチにある convert_hf_to_gguf.py でも変換を試しました。

  python3 convert_hf_to_gguf.py ${HF_SNAP} \
  --outtype native \
  --torch-threads 16 \
  --outfile dsv4-flash-native.gguf
  

変換では、次の問題がありました。

段階結果
torch 2.6F8_E8M0 KeyError
torch 2.11 CPUF8_E8M0 は通る
transformersdeepseek_v4 model_type 未認識
tokenizerPreTrainedTokenizerFast への差し替えで一部回避
pre-tokenizerjoyai-llm 未対応で断念

この時点で community GGUF が公開されていたため、自前変換を続けず、推論を試すことにしました。

使用した GGUF の変換方法

nsparks/DeepSeek-V4-Flash-FP4-FP8-GGUF の model card は、元のモデルを deepseek-ai/DeepSeek-V4-Flash としています。掲載されている変換コマンドです。

  python3 convert_hf_to_gguf.py /mnt/models/hf/DeepSeek-V4-Flash \
  --outtype moe-f8-e4m3-mxfp4 \
  --torch-threads 96 \
  --outfile DeepSeek-V4-Flash-FP4-FP8-native.gguf
  

DeepSeek 公式の Hugging Face repository は MIT License です。

2026-04-27 時点の upstream

2026-04-27 時点では、llama.cpp 本家の DeepSeek-V4 対応は WIP でした。

PR / Discussion内容
llama.cpp PR #22378wip/deepseek-v4-support。runtime graph、FP4/FP8 support、performance hot path を含む draft PR
llama.cpp PR #22359DeepSeek-V4 GGUF conversion script
Discussion #22376DeepSeek-V4 support discussion
nsparks GGUFnative FP4/FP8 GGUF
official HFofficial DeepSeek-V4-Flash weights

PR #22378 では、FP4/FP8 support、DeepSeek4 runtime state save、F8 decode tuning、TOP_K fast path、RMSNorm/copy kernel tuning が進んでいました。TG が -ot exps=CPU 時に近づく可能性もあります。

用途と長い文脈への期待

35 t/s なら、SFT、DPO 用の蒸留データやパイプライン、バッチ処理に使えると考えています。

自作エージェントでは GLM-5.1、Kimi-k2.6、Qwen3.5-397B をオーケストレーターの候補としていました。DeepSeek-V4-Flash も ik_llama.cpp や llama.cpp の最適化が進めば、CPU/GPU hybrid 構成の候補になりそうです。

KV cache を約 90% 減らすという情報から、GPU に全体を載せたまま長い ctx を扱う用途にも期待しています。

DeepSeek の公称値では、DSV4 の attention は V3.2 比で KV cache を 93%、FLOPs を 90% 減らします。

元の記録にある VRAM 使用量です。

  • VRAM 合計: 192GB
  • モデル: GPU0 75.1GB + GPU1 72.8GB = 147.9GB
  • 空き: GPU0 21.5GB + GPU1 23.9GB = 45.4GB

KV cache が通常の 7% で済むなら、32-45GB の空き VRAM で大きな文脈を扱える可能性があります。複数モデルを役割ごとに動かして ctx を管理していた処理を、単一モデルにまとめられるかに関心があります。実現すれば、オーケストレーションの一部を減らせるかもしれません。