DeepSeek-V4-Flash on DGX Spark: 12 到 24 tok/s 速度翻倍的原因
- URL: https://mp.weixin.qq.com/s/JIPqZCTpRKiHZIiXjjETng
- Date Saved: 2026-08-08
- Source: WeChat (靳岩岩)
- Tags: local-llm, ai-engineering
- Repo: https://github.com/tonyd2wild/Deepseek-v4-Flash-TP2-DGX-Spark-500k-CTX
Summary
作者在 DGX Spark 上跑 DeepSeek V4 Flash,从旧方案 (jasl fork + Marlin) 的 12 tok/s 提升到新方案 (tonyd2wild) 的 24.5 tok/s,逐行读代码调查原因。
真正起作用的三条
-
CUDA graph(大头) — 旧方案被迫用 —enforce-eager(sm_121 上 CUDA graph 有 bug),CPU 每步逐个下发上千次 kernel 启动;新方案开了整模型 CUDA graph,每步只重放一次,连双机通信都包在图里。
-
B12X 专用 MoE kernel(大头) — 旧方案用通用 Marlin kernel(为前代架构设计);新方案用专为 sm_121 + V4 Flash 特化的 B12X kernel 库——专属布局、按专家路由预排、针对这颗芯片调寄存器。贡献与 CUDA graph 不相上下。
-
注意力零中间搬运(中等) — 旧方案部分形状下需先解压 FP8 KV 到 16 比特再计算;新方案 kernel 直接消费 FP8 分页缓存,不落地。
三笔容易记错的账
- ❌ “激活降到 8 比特” — 新方案代码硬编码 w4a16,激活位宽没变
- ❌ “新版调度把通信藏进计算” — 老版本早就有异步调度,而且两边都没有真正重叠通信和计算
- ❌ “新版本隔代红利” — 逐项剥开后就是上面三条,其余零散优化是小头
Kernel 生态层次(很好的科普)
- 第一层(造 kernel 的工具):CUDA C++, CUTLASS, Triton, TileLang
- 第二层(kernel 库/成品):Marlin(通用4bit), DeepGEMM(DS官方FP8/FP4), FlashInfer(attention), B12X(sm_121专用)
- 第三层(vLLM 后端插槽):—moe-backend marlin 还是 b12x,指定谁掌勺
最新进展
tonyd2wild 已有新方案:KV cache 压到 4 比特 + 修复 DSpark 投机解码 bug(12 个草稿头权重被静默丢弃,接受率从 60% 掉到 25%)。部署后峰值 83.8 tok/s,代码生成 52.6 tok/s。
核心洞察
- 没有魔法开关 — 三个”绕”字换成三个”直”字就翻倍
- “为什么变好了”和”为什么变坏了”是同一枚硬币
- 最顺嘴的故事最危险:不读代码几乎必定把功劳记给”更激进的量化”