DeepInfer Field Notes 独立 / 粉丝制作
笔记 / 基准测试

如何读懂 DeepInfer 的基准测试:V4.1-Flash 性能

DeepInfer 的 V4.1-Flash 基准很容易被引用,却很难被解释。这篇笔记讲清单位、取舍,以及两张图背后的假设——让你能拿它们和自己的负载对比,而不是和一句标题对比。

方法笔记/阅读 9 分钟/官方图表 + 示例文档

DeepInfer 的 V4.1-Flash 基准很容易被引用,却很难被解释。每秒 token 数不是引擎的固有属性,而是引擎、模型、批量、上下文长度、硬件配置和负载共同作用的结果。那张图只是一段旅程的地图,不是对你那段旅程的保证。

单位陷阱

服务相关的讨论里会出现三种速率,它们不能互换:

单位衡量什么谁关心
tokens/s/GPU总输出吞吐除以 GPU 数量容量规划、成本建模
tokens/s/user单个用户的流式输出推进得有多快产品团队、延迟敏感型应用
ms/step一次 prefill 或 decode 步的实际耗时算子工程师、SLO 负责人

一个系统完全可以同时拥有高 tokens/s/GPU 和低 tokens/s/user。decode 图展示的正是这一点:并发上升时,总吞吐上升,而每个用户的流变慢。这两个数字都不是引擎的“那个速度”。

端到端延迟还要加上网络、排队、tokenization、调度和 API 开销。这些都不在两张图里。100 ms/步的 decode 数字,不意味着 100 ms 的 time-to-first-token;325 tokens/s/user 也不意味着 325 ms 的响应时间。

Prefill:批量换来吞吐,延迟是代价

Prefill 处理 prompt 并构建 KV cache。批量越大,权重读取被摊得越薄,GPU 利用率越高,吞吐随之上升。但每一步也更耗时,延迟因此上升。

DeepInfer 的 prefill 图使用 4 块 SM100 GPU、131,072 token 上下文。标签是从 4,096 到 65,536 的批量大小。曲线先陡峭上升,然后趋平:

  • 每批 4,096 token 时,吞吐约 60k tokens/s/GPU,每步约 68 ms。
  • 16,384 时,吞吐约 81k,每步约 200 ms。
  • 65,536 时,吞吐约 89k,每步约 730 ms。

拐点比峰值更重要。如果你的 SLO 很紧,你就待在曲线左侧,用吞吐换延迟。如果你跑的是离线批量评测,可以待在右侧,接受更长的单步时间。哪一侧才对,图不会告诉你——你的负载会。

还要注意 prefill 图测的是什么:非缓存输入吞吐。如果你的 prompt 大部分都命中了缓存,prefill 的工作量会小得多,这条曲线就不是你的瓶颈。缓存命中率是另一个变量,也正是缺失的 KV cache 系统想要最大化的那个变量。

Decode:并发换来吞吐,交互性付账

Decode 每一步为每个请求生成一个 token。并发请求越多,GPU 每步做的有用功越多,总吞吐上升。但每个请求等待下一个 token 的时间变长,单用户速度下降。

DeepInfer 的 decode 图使用 64 块 SM100 GPU、131,072 token 上下文,nextn=3 fixed,单 token draft 接受率 75%。标签是每个 DP rank 的请求数:

  • 每个 rank 8 个请求时,总吞吐约 2.6k tokens/s/GPU,每个用户约 325 tokens/s。
  • 64 个请求时,吞吐约 15.5k,每个用户约 248 tokens/s。
  • 256 个请求时,吞吐约 26k,每个用户约 103 tokens/s。

这就是经典的服务取舍曲线。聊天产品可能选左侧;批量摘要或离线 agent 负载可能选右侧。这张图有价值,是因为它展示了整条前沿,而不是单个点。

示例 README 给出了 decode 吞吐数字背后的计算方式:

decode throughput = avg_SPS × decode_num_requests × (1 + nextn) / cp

这是“全接受记账”:它假设每个 draft token 都被接受,与真实接受率无关。图上的结果再按 0.75 的接受率假设缩放。如果你的文本更难预测,真实数字会更低;如果更好预测,则可能更高。

75% 这个假设

投机解码先提出 draft token,再一次性验证。收益取决于有多少 draft 被接受。decode 图假设单 token 接受率为 75%,对应每步平均接受长度约 3.25 个 token。

对于可预测的文本,这个假设是合理的;对于开放式推理、含有罕见标识符的代码,或者高度技术化的写作,就不那么合理了。DeepSeek 自己的生产数据显示,其 DSpark 配置的接受长度在 3.2–3.3 左右,所以图中的假设并非凭空而来——但它仍然是假设,不是你负载的属性。

相关的 DSpark 优化——变长验证——同样依赖负载。DeepSeek 称生产工作点吞吐提升 4–7%,但在低并发时会有小幅损失。这很好地说明了为什么“投机解码是免费的”是一种错误心智模型:收益取决于接受率,也取决于你还有多少验证算力可以闲置。

评测分数衡量的是什么

评测脚本不是服务基准。它们衡量模型在三个离线任务上的质量:

  • AIME 2026:30 个任务,每个 32 个样本,Pass@1 99.9%。
  • GPQA Diamond:198 个任务,每个 8 个样本,Pass@1 93.4%。
  • HLE-Full:2,500 个任务(2,158 文本、342 图像),每个 1 个样本,Pass@1 42.6%。

Pass@1 是单次采样正确的概率。AIME 每题 32 个样本,99.9% 是 960 次 rollout 的平均;HLE 只采一次,噪声大得多。评测 README 提醒,重复运行结果会有差异,而且只有当 coverage_complete 为 true 时,Pass@1 数值才有效。

这些数字告诉你,模型在默认配置下于这些基准上具备相应能力。它们不会告诉你,这个引擎比另一个引擎更快、更便宜或更可靠。要回答那个问题,你需要一个在相同硬件、上下文和负载下做的服务基准——最好还有第三方来跑。

一份阅读清单

看到一份推理基准时,先问:

  1. 单位是什么?tokens/s/GPU、tokens/s/user,还是 ms/step?
  2. 负载是什么?上下文长度、输入输出比例、缓存命中率、请求到达模式。
  3. 硬件是什么?GPU/NPU 型号、数量、互联、内存,以及是单节点还是集群。
  4. 批量或并发是多少?高并发下的吞吐峰值,对延迟敏感的产品可能毫无意义。
  5. 包含了什么?只有引擎,还是带 KV cache、路由和 API 开销的完整服务栈?
  6. 假设了什么?draft 接受率、缓存命中率、量化、张量并行/流水线并行。
  7. 谁跑的?厂商自测、独立实验室,还是带 commit hash 的复现?
  8. 对比对象是什么?同模型、同硬件、同负载、同 SLO?

如果一条主张在其中三项或更多上答不出来,就把它当作方向性信号,而不是采购数字。

更有用的问题

别问“DeepInfer 有多快?”要问“在我买得到的硬件上,DeepInfer 在什么批量、上下文长度和并发下能满足我的延迟 SLO,而每百万 token 的成本又是多少?”那张图可以开启这场对话,但没法替你结束它。

返回图表读数,或者继续读缺失的服务层。

↑