【本地部署DeepSeek-V4-Flash】本地推理调优实录:从 8 t/s 到 100 t/s 的优化之路
DeepSeek-V4-Flash 本地推理调优实录:从 8 t/s 到 100 t/s 的优化之路
发布时间:2026-08-10 | 运行环境:Windows + llama.cpp(CUDA 13.3)+ DeepSeek-V4-Flash-0731(Q2 主模型 + dspark 草稿模型)
引言
最近我在本地用 llama-server 部署了 DeepSeek-V4-Flash-0731(abliterated 版本),并配合 dspark 草稿模型 开启 speculative decoding(推测解码)来提速。整个调参过程像一场"打怪升级"——从最初的 8.46 t/s 一路优化到 103.73 t/s,速度提升超过 12 倍。
这篇博客完整记录了我调整的每一个参数、每一次实测数据,以及背后的关键规律。希望给同样在本地部署大模型的朋友一些可复现的经验。
一、部署背景
- 主模型:
DeepSeek-V4-Flash-Q2-0731.gguf(Q2 量化,显存友好) - 草稿模型(
-md,用于推测解码):dspark-DeepSeek-V4-Flash-0731-BF16.gguf(BF16,精度高)dspark-DeepSeek-V4-Flash-0731-MXFP4.gguf(MXFP4,显存更省)
- 推理后端:llama.cpp CUDA 版本 +
--kv-unified(主/草稿共享 KV 缓存)+--spec-type draft-dspark
推测解码(speculative decoding)的原理是:先用小而快的草稿模型"猜"一段 token,再由大模型批量验证。草稿模型质量越高、猜得越准,加速越明显。
二、完整调参时间线与实测数据
| # | 上下文 -c |
草稿模型 | 并行槽 -np |
关键参数 | 生成速度 tg |
草稿接受率 | 备注 |
|---|---|---|---|---|---|---|---|
| 1 | 1048576 (1M) | BF16 | 3 | -t 24 |
— | — | 草稿内存测量失败,无法启动 |
| 2 | 1048576 (1M) | BF16 | 3 | -t 16 |
8.46 t/s | 39.2% | 启动成功,速度极慢 |
| 3 | 524288 | MXFP4 | 3 | -ub 512 |
8.06 t/s | 36.4% | 换 MXFP4 草稿,几乎无提升 |
| 4 | 262144 | MXFP4 | 3 | — | 17.97 t/s | 36.3% | 上下文减半,速度翻倍 |
| 5 | 196608 | MXFP4 | 3 | -ngl 44 |
17.83 t/s | 35.2% | GPU 层全量加载,仍慢 |
| 6 | 262144 | MXFP4 | 1 | — | 64.11 t/s | 34.2% | ⚠️ 关键转折:槽位降为 1 |
| 7 | 262144 | MXFP4 | 1 | 复用缓存对话 | 103.68 t/s | 77.1% | 上下文命中复用,起飞 |
| 8 | 1040000 | MXFP4 | 1 | — | — | — | 超大上下文,显存不足失败 |
| 9 | 1040000 | BF16 | 1 | -ngl 44 -ub 1024 --reasoning-preserve |
20.70 t/s | 94.9% | BF16 草稿接受率飙升 |
| 10 | 524288 | BF16 | 1 | -ub 1024 --reasoning-preserve |
28.9 t/s | — | 缩短上下文,速度提升 |
| 11 | 524288 | BF16 | 1 | --no-mmap |
31.1 t/s | — | 关闭 mmap,加载更快 |
| 12 | 393216 | BF16 | 1 | --no-mmap |
38.1 t/s | — | 继续缩短上下文 |
| 13 | 196608 | BF16 | 1 | -ub 1024 --reasoning-preserve |
41.9 t/s | — | 逼近 42 t/s |
| 14 | 196608 | BF16 | 1 | -ub 512(去 reasoning) |
101.91 t/s | 76.8% | ⚠️ 关键转折:关闭保留推理 |
| 15 | 327680 | BF16 | 1 | -ub 512 |
22~28 t/s | — | 大上下文导致 prompt 极慢 |
| 16 | 196608 | BF16 | 1 | -ub 1024 |
33 t/s | — | 上下文大,prompt 拖慢 |
| 17 | 196608 | BF16 | 1 | -ub 512(最终) |
103.73 t/s | 80.6% | ✅ 最佳配置 |
三、五个关键发现(调参核心规律)
1. 并行槽位 -np:从 3 降到 1,速度从 18 飙升到 64 t/s
这是最震撼的一次跳跃。同样在 -c 262144、MXFP4 草稿下:
-np 3(3 个并行槽):17.97 t/s-np 1(单槽):64.11 t/s
原因:并行槽越多,同一时刻争抢 GPU 算力的推理流越多,单条流的 token 生成被严重稀释。本地单用户场景,-np 1 才是最优,-np 3 适合多客户端并发。
2. 上下文命中复用(LCP):第二次对话直接 103 t/s
单槽配置下,第一次请求(冷启动)是 64 t/s。但当用户紧接着发送第二条消息,日志显示:
selected slot by LCP similarity, f_sim_best = 0.990
系统检测到新消息与历史上下文高度相似(相似度 0.99),复用已有 KV 缓存,此时:
- 生成速度 103.68 t/s
- 草稿接受率从 34% 暴涨到 77%
这就是"上下文工程"的巨大威力——多轮对话比冷启动快近一倍。
3. 草稿模型:MXFP4 → BF16,接受率从 36% 升到 95%
同样是 --reasoning-preserve 下:
- MXFP4 草稿:接受率 35~36%,速度 18~20 t/s
- BF16 草稿:接受率 94.9%,速度 20.70 t/s
BF16 草稿"猜"得更准,虽然单次推理稍慢,但因为猜得准、几乎不需要重新采样,整体吞吐反而更高。草稿模型精度是提速的杠杆。
4. --reasoning-preserve:关闭后速度从 42 直接到 101 t/s
DeepSeek 类模型会输出"思考过程"(reasoning)。开启 --reasoning-preserve 保留推理链时:
- 196608 上下文下约 41.9 t/s
而关闭该参数(-ub 512)后:
- 101.91 t/s(接近 2.4 倍)
如果应用不需要向用户展示思考过程,果断关闭 --reasoning-preserve。
5. 上下文长度是"双刃剑"
- 1M 上下文:8.46 t/s(显存吃紧、KV 巨大)
- 196K 上下文:42~103 t/s
上下文越大,KV 缓存占用越多、每次推理的注意力计算越重。但也要注意:日志 #15/#16 显示,当 -c 327680 时 prompt eval 慢到 210~226 t/s(大 prompt 预处理极慢),反而拖垮整体体验。上下文要"够用就行",不是越大越好。
四、最终推荐配置(实测最佳)
llama-server ^
-m "F:\.lmstudio\huihui-ai\Huihui-DeepSeek-V4-Flash-0731-GGUF\DeepSeek-V4-Flash-Q2-0731.gguf" ^
-md "F:\modelscope\DeepSeek-V4-Flash-0731-GGUF\dspark\dspark-DeepSeek-V4-Flash-0731-BF16.gguf" ^
--alias "deepseek-v4-flash-0731-abli-Q2" ^
-c 196608 ^
-t 16 ^
-b 2048 ^
-ub 512 ^
-np 1 ^
--spec-type draft-dspark ^
--spec-draft-n-max 3 ^
--kv-unified ^
--host 0.0.0.0 ^
--port 12340
实测成绩(此配置):
- Prompt 预处理:531 t/s(15524 tokens 仅 29 秒)
- Token 生成:103.73 t/s(10374 tokens)
- 草稿接受率:80.6%
- 平均草稿长度:3.42
五、调参过程中踩过的坑(排错记录)
- 草稿模型内存测量失败(
failed to measure draft model memory):这是 dflash 初始化时的正常警告,属于显存拟合阶段,无需惊慌,后续会自动重试成功。 - 超大上下文启动失败:
-c 1040000在 MXFP4 草稿下直接^C中断——显存不足。改回 524288 以下即可。 - 无效参数:
--no-lm、--load-model均为无效写法,正确写法是--no-mmap(且新版已提示改用--load-mode mmap)。 - PowerShell 找不到命令:
llama-server不带.\前缀时 PowerShell 默认不加载当前目录命令,需写成.\llama-server。
六、结论与建议
- 本地推理优先
-np 1:单用户场景并行槽只会稀释性能。 - 用 BF16 草稿模型:接受率提升带来的吞吐红利远大于精度开销。
- 上下文够用就好:196K 是本次测试的甜点值,1M 纯属"听起来很酷"但实际拖垮速度。
- 多轮对话天然更快:善用 KV 缓存复用,冷启动后速度可翻倍。
- 不需要思考过程就关掉
--reasoning-preserve:代价是近 2.4 倍的速度损失。
从 8.46 t/s 到 103.73 t/s,同样的硬件、同样的模型,只是参数不同——推理性能从来不是硬件的"死值",而是配置的艺术。
附:完整运行日志见 DEEPSEEK不同脚本运行的速度日志.txt。测试数据为单机单次会话实测,不同环境/模型版本结果或有差异。
更多推荐



所有评论(0)