2026 年 10 月 20 日,DeepSeek 宣布将支撑其线上服务的内部推理框架 DeepInfer 全面开源,并同步开放 Token 编解码组件 deepseek-recipe。本教程面向已经动手部署过大语言模型的读者,逐层拆解 DeepInfer 的集群架构与核心技术(Prefill/Decode 分离、KVCache 独立集群、SWA 有界重放、DSpark 推测解码、确定性输出等),并解读官方披露的性能数据与本次开源的边界。本教程属于技术解读型内容,DeepInfer 本身需要 SM100 级硬件才能运行,读者在普通电脑上即可完成全部学习与文中唯一的动手实验。
前置教程
如想快速开始学习本教程,你可能需要先完成以下前置教程:
- 大语言模型LLM服务商Api服务调用教程,理解 API 调用形态与计费口径,本文性能数据解读建立在消费端视角之上。
- Ollama本地部署大语言模型完整教程,单机推理的最小闭环,作为理解集群级推理架构的对照起点。
- vLLM的安装与多卡部署大语言模型完整教程,DeepInfer 的上游基础框架,本文大量并行与调度概念在 vLLM 中有对应实现。
资源下载
- DeepInfer 官方仓库,推理框架本体,Apache-2.0 许可。
- deepseek-recipe 官方仓库,协议编解码组件,MIT 许可,PyPI 包名
deepseek-recipe。 - DSpark 论文(arXiv:2607.05147),推测解码机制的设计依据。
- 本站快讯 DeepSeek 全面开源推理框架 DeepInfer,本教程解读对象的事件报道。
1. 事件背景:DeepSeek 这次开源了什么
1.1 两个仓库、两种角色
本次开源包含两个仓库,角色分工明确:
| 项目 | DeepInfer | deepseek-recipe |
|---|---|---|
| 定位 | 推理框架本体,承载模型计算与调度 | Token 编解码与协议转换组件 |
| 许可 | Apache-2.0 | MIT |
| 技术形态 | 基于 vLLM 构建的 Python 框架与自研算子 | Rust 库 + Python 绑定 |
| 获取方式 | GitHub 源码构建 | pip install deepseek-recipe |
| 运行平台 | Linux + 英伟达 SM100 / 华为昇腾 950 | Linux / macOS 有预编译包,Windows 无官方 wheel |
| 支持模型 | DeepSeek-V4.1-Flash | DeepSeek V4 与 V4.1 系列对话格式 |
deepseek-recipe 负责服务最外层的"翻译"工作:把 Chat Completions、Responses、Messages 三类 API 协议请求统一转换成内部对话格式,渲染成模型真正接收的 Prompt 文本,再把模型输出解析回对应协议的响应。DeepInfer 则负责中间最重的部分:调度、计算与吐字。
1.2 从开源权重到开源方法
此前 DeepSeek 开源的核心资产是模型权重(DeepSeek-V4.1-Flash 的发布可参阅本站快讯 DeepSeek V4.1-Flash-1017),拿到权重后社区可以用 vLLM、llama.cpp 等通用框架自行推理。本次开源的资产转向了另一层:DeepSeek 自己是如何把权重高效跑起来的,包括集群怎么分工、缓存怎么复用、调度怎么做到零开销。对推理系统方向的学习者而言,这是一份来自生产一线的参考实现。
值得注意的是,DeepInfer 官方说明其最初主要构建于 vLLM 之上,同时参考了 SGLang 与 TensorRT-LLM 的设计。它与上游社区的关系是叠加与回馈,替代关系并不成立。
2. 预备知识:一次大模型推理发生了什么
理解 DeepInfer 的全部设计,只需要先弄清楚两个阶段和一块缓存。
2.1 Prefill 与 Decode 两个阶段
大语言模型生成一段回答的过程分为两个性质完全不同的阶段:
- Prefill(预填充)阶段:用户发来一段提示词,模型对整段输入做一次性并行计算,为每个输入位置生成中间结果并写入缓存。这个阶段计算密集,输入越长消耗的算力越多。
- Decode(解码)阶段:从第一个输出 Token 开始逐个生成,每生成一个 Token 都要回头读取此前全部上下文的中间结果。这个阶段访存密集,瓶颈在显存带宽。
(本例平均 77K tokens)"] --> B["Prefill 阶段
并行计算全部输入"] B --> C[("KVCache
缓存键值中间结果")] C --> D["Decode 阶段
逐 Token 循环生成"] D --> E["输出文本
流式吐字"] style A fill:#e8f4f8,stroke:#1a6b8a style B fill:#d6eaf8,stroke:#2980b9 style C fill:#d5f5e3,stroke:#27ae60 style D fill:#ffecd6,stroke:#b7950b style E fill:#e8f4f8,stroke:#1a6b8a
两个阶段的资源画像差异巨大:Prefill 像短跑冲刺,Decode 像马拉松配速。把两者塞进同一批 GPU 互相抢资源,还是拆开各自独立扩缩容,正是第 3 章架构设计要回答的问题。
2.2 KVCache:推理加速的核心缓存
Transformer 逐 Token 生成时,每一步都要用到历史全部 Token 的 Key/Value 中间结果。把这些结果缓存下来(即 KVCache),可以避免每生成一个字就重算一遍整段上下文。KVCache 有两个关键性质:
- 体积与上下文长度成正比。官方口径下 DeepSeek 线上请求的平均输入长度约 77K tokens,单条请求的 KVCache 相当庞大。
- 可以跨请求复用。同一个系统提示词、同一份被多轮追问的文档,在大量请求之间是重复前缀。前缀对应的 KVCache 一旦算过,后续请求的 Prefill 可以直接跳过这部分计算,即"缓存命中"。
DeepInfer 的多数性能数字,本质上都建立在把 KVCache 管理到极致这件事上。
2.3 衡量推理服务的三个指标
| 指标 | 含义 | DeepInfer 官方数据 |
|---|---|---|
| TTFT(首 Token 延迟) | 用户发出请求到看到第一个字的等待时间(P99 指将全部请求按延迟从小到大排序后第 99% 位置的取值,即 99% 的请求延迟不超过该值,只有最慢的 1% 会超过它) | 平均 400ms,P99 为 1000ms |
| 吞吐(tps) | 单卡每秒处理的 Token 数,衡量集群效率 | Prefill 每卡 60K(未命中缓存)至 1.5M(含命中),Decode 每卡 14K |
| 单用户吐字速度 | 用户屏幕上的出字速度,决定体感 | 平均 230 tps,代码场景约 300 tps |
这三个指标之间存在天然的张力:追求吞吐会牺牲单用户体验,追求即时响应会浪费集群算力。DeepInfer 公开的多项技术(推测解码、异步调度、缓存复用)都是在调和这种张力。
3. DeepInfer 整体架构解读
3.1 请求链路:从一条 API 请求到吐字
结合官方披露与仓库文档,一条请求在 DeepInfer 集群中的完整旅程如下:
API 请求"] --> R["deepseek-recipe
协议编解码"] R --> E["Entrypoint
入口负载均衡"] E --> V["Vision Encoder
图像预处理"] V -- "图像编码结果" --> P["Prefill 集群
8 卡机"] E --> P E --> D["Decode 集群
64 至 128 卡超节点"] P -- "写入 KVCache" --> K[("KVCache 独立集群
不活跃后保留 72 小时")] K -- "读取缓存" --> D D --> O["流式响应
返回客户端"] style U fill:#e8f4f8,stroke:#1a6b8a style R fill:#d6eaf8,stroke:#2980b9 style E fill:#ebdef0,stroke:#8e44ad style V fill:#fadbd8,stroke:#c0392b style P fill:#ffecd6,stroke:#b7950b style D fill:#fdebd0,stroke:#e67e22 style K fill:#d5f5e3,stroke:#27ae60 style O fill:#e8f4f8,stroke:#1a6b8a
请求先经过 deepseek-recipe 完成协议转换,由 Entrypoint 分发到三路资源池:多模态请求的图像走 Vision Encoder 预处理,文本主体由 Prefill 集群计算,KVCache 写入独立存储集群,随后 Decode 集群从 KVCache 读取并逐 Token 吐字,以流式响应返回。
3.2 Prefill 与 Decode 分离部署
P/D 分离(Prefill/Decode disaggregation) 是当前大规模推理服务的主流架构。混合部署时,Prefill 的突发计算会挤占 Decode 所依赖的显存带宽,造成吐字卡顿;分离之后两类资源池独立扩缩容、独立配置机器规格,互不干扰。
DeepInfer 的具体形态:
- Prefill 由 8 卡机器承载,Decode 由 64 至 128 卡的"超节点"承载。
- 官方线上口径下 Prefill 与 Decode 的机器比约为 1:1;性能基准则是在同一 scale-up 域内用 4 张 SM100 卡跑 Prefill、64 张卡跑 Decode 测得的。两组数字口径不同,前者对应缓存高命中后的线上实际负载,后者是基准测试配置。
- 仓库 README 明确说明:引擎侧的分离功能大部分已实现,但部署编排未随框架开源(详见 6.3 节)。
3.3 KVCache 独立集群与 72 小时保留
DeepInfer 把 KVCache 从 GPU 显存中拆出来,放入独立的存储集群,Prefill 与 Decode 两侧都按需读写它。这个设计带来三个直接收益:
- 显存解耦:Decode 集群的显存全部留给计算与活跃上下文,不必为海量历史缓存买单。
- 长生命周期:缓存不活跃后仍保留 72 小时,跨天的多轮对话、定时任务里的固定系统提示词都能命中。
- 高命中率:官方披露的缓存命中率约 96%,输入 Token 的命中吞吐达到每卡 1.5M tps,为未命中吞吐(60K tps)的 25 倍。
缓存命中率是整套架构价值的核心变量。它带来的成本优势有多大,第 5 章会用官方定价做一次量化测算。
4. 核心技术拆解
4.1 SWA 有界重放:Prefill 高速的关键
DeepSeek-V4.1 系列采用滑动窗口注意力(SWA):远距离 Token 对当前计算的影响被限制在一个窗口范围内。这为缓存命中后的 Prefill 提供了一个重要性质:即使缓存只覆盖了前缀的大部分,需要重新计算的部分也只需处理"窗口内加少量回溯"的有界后缀。
DeepInfer 把这套机制实现为 SWA 有界重放(SWA bounded replay),通过两个环境变量控制:
| 环境变量 | 作用 | 参考值 |
|---|---|---|
DEEPINFER_YOCO_PREFILL_TRUNCATION_MODE |
Prefill 截断模式 | compact |
DEEPINFER_YOCO_PREFILL_KEEP_TOKENS |
重放时保留的后缀长度 | 140(V4.1 默认值) |
官方说明约束条件:保留的后缀必须覆盖 SWA 窗口加最大回溯长度。换句话说,重放多少 Token 由模型注意力机制的数学性质决定,配置只是在此前提下取最小值。
4.2 DSpark 推测解码:并行草稿与置信度调度
推测解码的通用思路是:用一个廉价的草稿器(通常是模型自带的 MTP 头)先猜出若干个候选 Token,再让目标模型一次性批量验证,猜对的部分直接采纳,猜错的位置回退重算。用一次验证的成本换回多个 Token 的进度。
DeepInfer 的 DSpark 在此基础上做了两点增强(设计细节见 arXiv:2607.05147 论文):
- 并行草稿器:多个草稿并行展开,扩大单次验证的候选覆盖面。
- 置信度调度验证:根据草稿 Token 的置信度估计动态决定何时发起验证,减少无谓的验证轮次。
并行生成候选 Token"] B --> C["置信度调度器
动态决定验证时机"] C --> D["目标模型
一次性批量验证"] D --> E["接受连续正确段
或从错误处回退"] E --> A style A fill:#e8f4f8,stroke:#1a6b8a style B fill:#d6eaf8,stroke:#2980b9 style C fill:#fadbd8,stroke:#c0392b style D fill:#ffecd6,stroke:#b7950b style E fill:#d5f5e3,stroke:#27ae60
相关配置:DEEPINFER_ENABLE_MTP_VARLEN=1 开启该特性,DEEPINFER_USE_NEXTN_DECODE 控制草稿长度上限(默认 5)。官方口径下,同等集群吞吐时单用户速度较 MTP-1 基线提升 60% 至 85%,整体吞吐提升约 6%。推测解码本质是用冗余计算换单请求时延,因此单用户体感提升明显、总吞吐提升有限,这是该技术路线的普遍特征。
4.3 异步批调度与零开销调度器
推理服务每一步都要在 CPU 上做"下一个批次谁进谁出"的调度决策。同步模式下 GPU 执行完当前批次后要等待 CPU 完成下一批决策,产生空泡。DeepInfer 默认开启异步调度,让 CPU 准备下一批与 GPU 执行当前批重叠进行,官方称之为零开销批调度器(zero-overhead batch scheduler)。这类思路在 vLLM 上游社区同样在持续演进,DeepInfer 的贡献在于把它打磨成了生产环境的默认行为。
4.4 确定性输出与批不变性
默认情况下,GPU 算子会根据批次形状选择不同的归约顺序,导致同一请求在不同批组合下产生微小的浮点差异。DeepInfer 提供批不变性(batch invariance):开启后同一请求无论与谁拼批,模型输出保持一致。在批不变的基础上再关闭 MTP 变长推理并传入固定随机种子 seq_seed,即可获得完全确定性输出:相同输入与采样参数永远得到相同结果。
| 配置项 | 取值 | 效果 |
|---|---|---|
DEEPINFER_BATCH_INVARIANT |
1 | 批不变,跨批次结果一致 |
DEEPINFER_ENABLE_MTP_VARLEN |
0 | 关闭 MTP 变长,消除推测解码引入的批间差异 |
SamplingParams 中的 seq_seed |
固定值 | 采样过程可复现 |
这项能力面向计费对账、评测复现、回归测试与高合规场景。注意两点:确定性采样与推测解码加速互斥,二者只能取其一;批不变与确定性输出目前仅在英伟达后端支持。
4.5 约束解码:让输出严格合规
结构化输出是 Agent 与数据抽取场景的刚需。DeepInfer 支持三类约束解码:正则表达式、JSON Schema 与 EBNF 文法,通过 SamplingParams 的 so_args 参数传入(参考仓库内 examples/_structured_output.py)。配合 deepseek-recipe 使用时,API 层的 response_format(json_schema 或 regex 类型)会被自动转换为后端的输出约束,全链路打通。
4.6 双硬件后端与并行策略
DeepInfer 是少数同时支持英伟达与国产算力的生产级推理框架:
| 维度 | 英伟达后端 | 昇腾后端 |
|---|---|---|
| 硬件 | SM100 GPU | 昇腾 950 NPU |
| 软件栈 | CUDA 13 | CANN 9.2 |
| 构建开关 | DEEPINFER_ACCELERATOR=nvidia |
DEEPINFER_ACCELERATOR=ascend |
| 代表数据 | 官方基准基于 SM100 | DeepGEMM-Ascend 在昇腾 950DT 上 Dense GEMM 利用率达 99.8%(官方口径) |
框架的算子底座来自 DeepSeek 系列开源组件的组合:FlashMLA(注意力)、DeepGEMM(矩阵乘)、DeepEP(MoE 通信)、TileKernels、DeepSelect 与自研 TileLang 算子。并行策略上支持 Attention 的数据并行(DP)、均衡的上下文并行(CP),以及 MoE 层的专家并行(EP)加专家负载均衡(EPLB)。
5. 性能数据解读
5.1 官方核心指标一览
| 指标 | 数值 | 说明 |
|---|---|---|
| 单集群日吞吐 | 155 万亿 tokens | 官方披露口径 |
| 单卡时收入 | 约 38 美元(谷价) | 理论收入口径,非利润 |
| TTFT | 平均 400ms,P99 1000ms | 平均输入 77K tokens 的前提下 |
| Prefill 每卡吞吐 | 未命中 60K tps,含命中 1.5M tps | 缓存命中率约 96% |
| Decode 每卡吞吐 | 14K tps | 单用户吐字 230 tps,代码场景 300 tps |
| 缓存保留时长 | 不活跃后 72 小时 | KVCache 独立集群 |
| 基准配置 | 4 张 SM100 跑 Prefill + 64 张跑 Decode | 同一 scale-up 域 |
| 确定性吞吐收益 | DSpark 单用户提速 60%-85%,整体吞吐 +6% | 对比 MTP-1 基线 |
5.2 单卡时收入 38 美元的交叉验算
官方披露按谷价计费口径下单卡时收入约 38 美元。利用官方 API 定价(输入命中 0.02 元、未命中 1 元、输出 4 元每百万 tokens)与第 5.1 节的吞吐数据,可以对这一数字做交叉验算:把 Prefill 命中、Prefill 未命中、Decode 输出三类流量分别乘以对应单价再加权,得到的估算值约 36.7 美元,与官方口径偏差约 3%。验算细节属于本站快讯的分析内容(见 /article/252),此处需要强调口径:这是理论收入,扣除硬件折旧、电力、机房与运维成本后才谈得上利润。
5.3 缓存命中率是成本生死线
输入 Token 命中与未命中的价差为 50 倍,因此命中率直接决定等效输入单价:
等效输入单价 = 命中率 × 命中价 + (1 - 命中率) × 未命中价
命中率 96% 时:0.96 × 0.02 + 0.04 × 1 = 0.0592 元/百万 tokens
命中率 60% 时:0.60 × 0.02 + 0.40 × 1 = 0.412 元/百万 tokens
后者约为前者的 7 倍
评估 DeepInfer 类架构对自身业务的价值时,第一个要测量的指标是输入前缀重复度:多轮长上下文、固定系统提示词、多用户共享文档的场景能充分享受高命中率收益;前缀高度随机的场景收益将大幅缩水。
6. 上手与边界:普通读者能做什么
6.1 运行环境要求与现实门槛
DeepInfer 的运行环境要求在推理框架中属于天花板级别:
# 环境要求:Linux、GCC 13.0 以上、Python 3.12
# 英伟达后端需 CUDA 13(SM100 GPU),昇腾后端需 CANN 9.2(昇腾 950)
git clone https://github.com/deepseek-ai/DeepInfer.git
cd DeepInfer
export DEEPINFER_ACCELERATOR=nvidia # 昇腾环境改为 ascend
./build.sh
python examples/offline_inference.py
首次运行会自动获取官方检查点 DeepSeek-V4.1-Flash-1017,也可通过 DEEPINFER_HF_MODEL_DIR 环境变量指向本地已有的模型目录;仓库内 examples/sweep/run_sweep.sh 提供了官方基准的复现脚本。现实门槛在于:SM100 与昇腾 950 均为当前最前沿的算力硬件,消费级显卡(含 RTX 4090 及以下全部型号)与 Windows 环境均无法运行。对绝大多数读者,DeepInfer 的正确打开方式是阅读源码与文档学习架构设计;想在本机动手跑推理,请回到前置教程的 Ollama、vLLM 或 llama.cpp 路线。
6.2 动手实验:渲染一条真实的 Prompt
deepseek-recipe 是本次开源中唯一能在普通电脑上完整体验的组件。它要求 Python 3.10 以上,PyPI 提供Linux 与 macOS 的预编译包,Windows 无官方 wheel(本机实测 Windows 源码安装会触发 Rust 工具链构建并失败),Windows 用户建议走 WSL2。本节实验在 WSL2 的 Ubuntu 环境实测通过:
# Ubuntu 24.04 需先补齐 venv 支持:sudo apt install python3.12-venv
python3 -m venv recipe-venv
source recipe-venv/bin/activate
pip install deepseek-recipe
用几行代码把一条 Chat Completions 请求渲染成模型真实接收的 Prompt:
from deepseek_recipe import ChatCompletionRequest, ConversionOptions, DeepseekV41Encoding
request = ChatCompletionRequest({
"model": "DeepSeek-V4.1-Flash",
"messages": [{"role": "user", "content": "你好,请介绍一下你自己"}],
})
converted = request.convert(ConversionOptions())
rendered = DeepseekV41Encoding().render_conversation(converted.conversation)
print(rendered.prompt)
实际运行输出:
<|begin▁of▁sentence|><|System|>Reasoning Effort: 75 (range 1-100, the higher the value, the more thorough the reasoning)
<|User|>你好,请介绍一下你自己<|Assistant|><think>
这条输出值得仔细看三个细节:模型真正接收的是带特殊标记的原始文本,messages 数组只是面向调用者的封装;系统头部默认声明了推理努力值 75(范围 1-100,数值越高思考越充分);助手回合以 <think> 标记开头,对应默认开启的思考模式。Rust 侧可通过 cargo add deepseek-recipe@0.2 引入同一套能力。
6.3 开源边界:仓库里没有的三样东西
README 明确列出了构成完整推理服务所必需、但本次未开源的三个组件:
- KVCache 系统:独立缓存集群的存储与生命周期管理本体。
- VE/Prefill/Decode 分离部署编排:引擎侧功能大部分已实现,跨集群的部署调度脚本未包含。
- 数据并行副本间的负载均衡:Prefill 与 Decode 多副本之间的流量分配。
对 DeepInfer 的合理定位是:一份可以学习、可以在同等硬件上复现性能曲线的一线生产框架源码,距离拿来即用的开箱生产服务栈仍有明确的组件缺口。
6.4 对开发者与企业的参考价值
对推理系统方向的开发者,DeepInfer 提供了 P/D 分离、KVCache 独立集群、批不变推理等关键设计的教科书级参考实现,且可以对照 vLLM 源码观察生产级强化与社区版本之间的差距。对企业读者,本次开源同时补齐了昇腾后端的服务侧闭环,为国产算力路线提供了官方级参考。三个问题仍需持续观察:官方性能数字外部暂不可独立验证;缺失的三个组件是否会后续补齐;目前仅支持 DeepSeek-V4.1-Flash 且绑定 SM100 与昇腾 950,对存量 A100、H800 级集群的适配尚无路线图。
7. 总结
7.1 核心内容回顾
- DeepSeek 于 2026 年 10 月 20 日开源推理框架 DeepInfer(Apache-2.0)与协议编解码组件 deepseek-recipe(MIT),开源边界从模型权重扩展到生产推理方法。
- DeepInfer 的架构主线是 Prefill/Decode 分离加 KVCache 独立集群:Prefill 8 卡机、Decode 64 至 128 卡超节点,缓存不活跃后保留 72 小时,命中率约 96%。
- SWA 有界重放让缓存命中后的 Prefill 只需重算 140 Token 级别的有界后缀,是输入吞吐提升 25 倍的机制基础。
- DSpark 推测解码以并行草稿器加置信度调度,换来单用户 60%-85% 的速度提升;异步批调度默认开启,做到调度零开销。
- 批不变性与确定性输出面向计费与合规场景,仅英伟达后端支持,且与推测解码加速互斥。
- 官方口径下单集群日吞吐 155 万亿 tokens、单卡时收入约 38 美元;交叉验算偏差约 3%,属理论收入而非利润。
- 运行门槛为 Linux、CUDA 13、SM100 或昇腾 950;KVCache 系统、部署编排与副本负载均衡未随框架开源。
7.2 常见问题与解答
问:DeepInfer 能在本机 Windows 或消费级显卡上部署吗?
答:不能。官方要求 Linux 环境与 SM100 或昇腾 950 级硬件,Windows 与全部消费级显卡均不在支持范围。本机学习建议阅读源码与文档,动手实验可先完成 6.2 节的 deepseek-recipe 渲染实验;本地跑模型推理请使用 Ollama、vLLM 或 llama.cpp 路线。
问:DeepInfer 会取代 vLLM 吗?
答:官方说明 DeepInfer 最初主要构建于 vLLM 之上,并参考了 SGLang 与 TensorRT-LLM。它的定位是 DeepSeek 模型的深度定制生产框架,与通用推理框架之间是叠加与回馈关系,各自服务不同的场景。
问:为什么 DeepInfer 目前只支持 DeepSeek-V4.1-Flash 一个模型?
答:框架的多项核心机制(SWA 有界重放的后缀长度、DSpark 的草稿配置等)与 V4.1 架构深度绑定,属于为自家模型定制的参数。其他模型的适配与更广泛硬件的支持,官方均未给出时间表。
问:96% 的缓存命中率在我的业务上能复现吗?
答:取决于输入前缀的重复度。多轮对话、固定系统提示词、多用户共享同一份文档的场景命中率会显著偏高;请求之间前缀高度随机的场景则远达不到该水平。接入前建议先统计自身流量的前缀重合度,再对照 5.3 节的敏感性测算评估收益。
举手提问