最终优化:在1块RTX 3090上,DeepSeek-V4-Flash-0731在128K上下文下从约10 tok/s提升至约15 tok/s
摘要
详细测试和调优,以在RTX 3090上优化GGUF格式的DeepSeek-V4-Flash-0731,通过不同的量化和加载参数,在128K上下文下达到约15 tok/s。
我花了很多时间在单块RTX 3090上优化DeepSeek-V4-Flash-0731 GGUF。我对每种配置的绝对要求是:模型必须在128000个token的上下文窗口下保持可用。我测试了GPU卸载、CPU专家放置、KV缓存量化、批处理大小、内存映射以及CPU/GPU内存分配的各种组合。以下参数是在我的系统上,每种量化级别下能达到最佳性能的配置。
硬件与软件
GPU:NVIDIA GeForce RTX 3090 24 GB
CPU:AMD Ryzen 9 9900X
RAM:128 GB DDR5-5600,已启用AMD EXPO
主板:MSI X870E Gaming Plus WiFi
BIOS:最新可用版本
后端:llama.cpp b10291
前端:文本生成Web界面
操作系统:Windows
常见参数
这些参数在四次测试中保持不变:
模型加载器:llama.cpp
GPU层数:44
上下文大小:128000
KV缓存类型:q8_0
分割模式:按层
并行槽位:1
线程数:0 / 自动
批次线程数:0 / 自动
批次大小:512
微批次大小:512
目标大小:512 MiB
StreamingLLM:已禁用
KV卸载:已启用
no-mmap:已启用
mlock:已禁用
NUMA:已禁用
投机解码:已禁用
我在Web界面中取消了“CPU MoE”复选框,并通过--n-cpu-moe显式控制专家在CPU上的放置。因此,每种量化所要调整的主要参数,就是其专家张量保留在CPU上的MoE层数。
测试 1/4 — UD-IQ4_XS — 128K上下文下约10 tok/s
量化:UD-IQ4_XS
完全卸载时的VRAM估算:135412 MiB
附加选项:--n-cpu-moe 38
加载时间:65.83秒
平均生成速度:约9.9 tok/s
生成期间的内存使用情况
系统RAM:约122 / 125 GB
专用VRAM:约23.7 / 24.0 GB
GPU共享内存:约0.9 GB
GPU使用率:约81%
CPU使用率:约59%
CPU频率:约5.36 GHz
这是所测试的最重量级量化,将系统RAM和专用VRAM推到了极限。
测试 2/4 — UD-IQ3_S — 128K上下文下约12.1 tok/s
量化:UD-IQ3_S
完全卸载时的VRAM估算:115330 MiB
附加选项:--n-cpu-moe 38
加载时间:52.76秒
平均生成速度:约12.1 tok/s
生成期间的内存使用情况
系统RAM:约105 / 125 GB
专用VRAM:约22.1 / 24.0 GB
GPU使用率:约85%
CPU使用率:约55%
CPU频率:约5.35 GHz
与UD-IQ4_XS相比,UD-IQ3_S的生成速度提升了约22%,同时RAM占用减少了约17GB。
测试 3/4 — UD-IQ3_XXS — 128K上下文下约12.5 tok/s
量化:UD-IQ3_XXS
完全卸载时的VRAM估算:103763 MiB
附加选项:--n-cpu-moe 37
加载时间:47.76秒
平均生成速度:约12.5 tok/s
生成期间的内存使用情况
专用VRAM:运行期间约22–23 GB
GPU活动:在生成停止前保持较高水平
任务管理器截图是在运行结束后立即截取的,因此GPU使用率和已分配VRAM的骤降可以说明这一点。显示的14GB系统RAM并不能代表生成期间的内存使用情况。
有趣的是,在此配置下,UD-IQ3_XXS仅比UD-IQ3_S快约0.4 tok/s。模型权重的减小并没有带来解码速度的同比提升。
测试 4/4 — UD-IQ2_M — 128K上下文下约14.9 tok/s
量化:UD-IQ2_M
完全卸载时的VRAM估算:90812 MiB
附加选项:--n-cpu-moe 36
加载时间:42.72秒
平均生成速度:约14.9 tok/s
生成期间的内存使用情况
系统RAM:约81 / 125 GB
专用VRAM:约22.6 / 24.0 GB
GPU使用率:约91%
CPU使用率:约61%
CPU频率:约5.27 GHz
这是所测试配置中最快的,在保持相同的128K上下文配置和相同的Q8_0 KV缓存的情况下,接近15 tok/s。
最重要的优化是在以下方面找到合适的平衡:将密集层和非专家层保留在GPU上;将q8_0 KV缓存保留在GPU上;仅将所需数量的MoE专家张量移至系统RAM;几乎填满RTX 3090的VRAM,同时避免显存不足错误。
--n-cpu-moe的最佳值因每种量化的大小而异:
UD-IQ4_XS:--n-cpu-moe 38
UD-IQ3_S:--n-cpu-moe 38
UD-IQ3_XXS:--n-cpu-moe 37
UD-IQ2_M:--n-cpu-moe 36
结果还表明,降低量化大小并不会带来完全线性的速度提升。UD-IQ3_S和UD-IQ3_XXS的性能相当接近,而UD-IQ2_M的提升最大,生成速度比UD-IQ4_XS高出约50%。
此对比仅涉及生成性能和内存使用。我尚未包含四种量化之间质量或精度的可控对比。
相似文章
Deepseek V4 Flash 在 RTX 5090 MoE 上运行
用户分享了在 RTX 5090 上使用 llama.cpp 的一个分支运行 DeepSeek-V4-Flash (Q2_K) 的优化基准测试结果,实现了 21.3 token/秒的生成速度和 100 万上下文大小。
DeepSeek V4 Flash(98GB)在单块4060 Ti加CPU上本周速度提升300% [从2t/s到7t/s]
DeepSeek V4 Flash(98GB)现在通过CPU卸载,在单块RTX 4060 Ti上运行速度可达每秒7个token,相比上周的2t/s提升了3倍。
DeepSeek-V4-Flash W4A16+FP8 结合 MTP 自推测:在 2 张 RTX PRO 6000 Max-Q 上以 524K 上下文长度实现 85 tok/s
这篇文章详细介绍了一个经过定制并量化的 DeepSeek-V4-Flash 模型版本,启用了 MTP 自推测功能。通过修改后的 vLLM 设置,在双 RTX PRO 6000 Max-Q GPU 上实现了显著的速度提升。
[Deepseek-V4-Flash-0731] 在单张RTX5090 + DDR5桌面配置下,通过VLLM CPU/内存卸载实现完整1M上下文,~800 tps预填充 & 15+ tps解码 [智能体编码]
关于在单张 RTX 5090 + 256GB DDR5 台式机上使用 vLLM 配合 CPU/内存卸载运行 DeepSeek-V4-Flash-0731 完整 100 万 token 上下文的技术报告,实现了约 800 tokens/秒的预填充速度和约 15 tokens/秒的解码速度。
@superalesha: 我在4张RTX 3090上把DeepSeek V4 Flash推理速度提升了29倍!!!不是开玩笑。15 → 443 t/s。一个23K的提示原本需要25分钟……
一位用户通过优化llama.cpp,在4张RTX 3090 GPU上实现了DeepSeek V4 Flash推理速度29倍提升,将23K提示从25分钟缩短至53秒。