垂直整合的代价:DeepInfer 只服务一种模型,64 卡以下拿不到它的收益
0次浏览0条评论0个赞
10 月 20 日,DeepSeek 把内部推理框架 DeepInfer 以 Apache-2.0 开源:270 个 Python 文件、约 5.5 万行[4]。
另有 33 个 C++/CUDA 源文件、约 5,900 行。README 里最值得先读的一句是:DeepInfer 最初主要基于 vLLM 构建,并参考了 SGLang 和 TensorRT-LLM[1]。
vLLM 官方随后回应,会借鉴它的思路继续改进对 V4.1-Flash 的支持[5]。
如果你正在 vLLM、SGLang 和这套栈之间选,性能排名帮不上忙,判断顺序才帮得上。DeepInfer 不是更快的 vLLM,是垂直整合的公开样板;三个核心优化通用引擎按成本算不出来,也不该做。
这四件事决定这套栈适不适合你,前两件是硬否决:
- 模型与平台:你的模型是否在 DeepSeek 生态内,硬件是否 SM100 或昇腾 950?不是,到此为止——它只认这一种模型结构,换模型等于自己维护一个 fork。
- 集群规模:你的集群是否跨过 64 卡?没有,Wide-EP 的吞吐与交互收益归零,但可复现性收益仍在。
- 流量形态:你的流量是否高交互、长上下文、MoE 宽 EP?不是,变长验证在低并发下可能倒退 1.5%。
- 可复现性:你是否需要可复现性(batch 无关 + 确定性采样)?不需要,这一条不构成选型理由,也不买吞吐。
第三件是权衡,第四件只在复现线上问题时加分。
主线:先拿答案,再看机制
第一节逐条回答四问,每问一节、答案在节首;第二节以后是支撑这些答案的机制。机制不是阅读目录,不必按顺序读完——它是给第一节的答案补证据。
一、结论:四问逐条落地
一句话答案:垂直整合买到的是默认值,不是能力。前两问决定能不能用,第三问决定用得好不好,第四问只决定能不能复现线上问题。
1. 模型与平台:只认 V4.1-Flash,只跑 SM100 / 昇腾 950
只认 V4.1-Flash,只跑 SM100 或昇腾 950(CUDA 13 / CANN 9.2)——这是硬否决,不是可调项。
换模型要改它的 model_executor,等于自己维护一个 fork;换平台则是另一套栈。第三方引擎能不能做这些优化是另一回事,这一问只回答”你能不能把现有的模型和卡直接搬上去”。
2. 集群规模:64 卡是这个方案的门槛
64 卡是这个方案的门槛:低于它,Wide-EP 的收益归零。
两张 decode Pareto 图能看出买到的是什么。同样是 131,072 上下文、同一固定接受率设定:
- EP8DP8:每用户 100 tok/s 时 24,900 tok/s/GPU;最高交互性点落在 241 tok/s/user,吞吐 2,000。
- EP64DP64:每用户 100 tok/s 时 26,000 tok/s/GPU;最高交互性点落在 326 tok/s/user,吞吐 2,400。
数字是图上标注的点位,DeepSeek 自测,未见第三方在相同硬件上复现[3]。在 100 tok/s/user 这个两个配置都覆盖的档位,差距只有 4%;到 200 tok/s/user 以上,EP8 的曲线已经到头,EP64 还在一路画到 326。Wide-EP 买的是高交互性那一端的可用域,不是平均值。
EP64DP64 是规模门槛的具体表现,不是 64×64 卡:64 卡实例,MoE 层按 EP64 切专家,attention 层按 DP64 分数据,同一批卡的两种视图。选型时关心的是”你的 decode 实例能不能拉到 64 卡以上”,不是 EP 和 DP 要不要相乘。
代价很硬。一个实例的所有 GPU 在同一个通信域里(decode 这一侧是 64–128 张卡),一张卡坏了整个实例不可用;恢复时平台按当前健康 GPU 数重新确定 EP size,用缩小的实例继续服务[2]。另外”最小高效部署单元”是 64 卡 prefill 加 64 卡 decode——1P+1D 能跑,但那个规模拿不到 Wide-EP 的收益。
这条门槛有一个分叉:低于 64 卡时,Wide-EP 的吞吐与交互收益归零,但如果你需要确定性采样或 batch-invariant 的线上复现能力,DeepInfer 在这两个维度上仍提供通用引擎不单独承诺的东西。它否决的是吞吐收益,不是全部选型理由。
3. 流量形态:收益集中在高交互 + 长上下文 + MoE 宽 EP 这个角落
收益集中在高交互 + 长上下文 + MoE 宽 EP 这个角落;短请求、低并发会倒退。
三个数先记住:接受长度几乎不变(3.29 对 3.20),每步验证的 token 少约 30%;16 并发是 −1.5%,零交点在 24 并发附近,60 并发才是生产工作点 +5.4%。短请求、低并发是权衡项,变长验证在这里是负收益。
| 并发(seqs/rank) | 固定 5 的验证长度 | 变长验证长度 | 固定 5 接受长度 | 变长接受长度 | 吞吐增益 |
|---|---|---|---|---|---|
| 16 | 5 | 4.44 | 3.32 | 3.24 | −1.5% |
| 32 | 5 | 3.65 | 3.25 | 3.17 | +1.6% |
| 48 | 5 | 3.94 | 3.3 | 3.26 | +3.6% |
| 60 | 5 | 3.58 | 3.3 | 3.21 | +5.4% |
| 72 | 5 | 3.24 | 3.29 | 3.12 | +6.7% |
| 96 | 5 | 3.24 | 3.3 | 3.15 | +11.0% |
长上下文那一半也绑在模型结构上:前缀缓存有 L−134 的硬上限。这个 134 不是拍出来的——SWA 窗口 128 加投机回溯 6 就是它;默认 140 给的是余量,两者差的 6 个 token 就是必须重放的那部分。对选型来说这是实现细节,不影响判断:你只需要知道长上下文的缓存复用有上限,具体机制在后面讲计算图的那一节。
4. 可复现性:要复现线上问题才加分,且只在 NVIDIA 可开
要复现线上问题才加分;它买的是可复现性,不是吞吐。
batch-invariant(不同 batch 组合下结果一致)和 deterministic sampling(同样输入、同样采样参数,输出逐字节一致)都在发布里,但只在 NVIDIA 上可开,后者还要求关掉 MTP 变长解码、给 SamplingParams 传固定的 seq_seed[1]。这是平台门槛:昇腾是另一套栈,两条线的优化不能直接搬。
二、四问之外:服务层是软缺口,要自建
服务层要自建:三块不在这次发布里,这是软缺口,代价是要自己补。
README 列出”完整推理服务所必需、但不在本次发布内”的三项:KV cache 系统、VE/Prefill/Decode 分离(引擎部分已实现)、DP 副本间的负载均衡[1]。代码结构也对得上:deepinfer/entrypoints 下只有 llm.py 一个入口,没有 OpenAI 兼容 server;engine 约 2,000 行、worker 约 2,800 行,而 model_executor 约 35,300 行。重心在模型与算子,不在服务。
这三块的自建成本:
- KV 存储:块级 KV 放专用 3FS 集群,10+2 纠删码;按逻辑大小约每 GPU 14.4 TB;单存储服务器 20 块 30.73 TB SSD,读不低于 40 GB/s、写不低于 5 GB/s,保留 24 小时[2]。
- 跨机房:每 8 卡约 400 Gbps 互联带宽;P 与 D 部署在不同但相邻的机房。
- 负载均衡:prefill 按上下文长度分四档(<16K / 16–64K / 64–256K / ≥256K),每步 chunk 大小由二次代价模型在时间预算内解出,上限 32,768 token;整套动态路由达到”完全均衡离线 benchmark 的约 80%“[2]。
所以准确的说法是:它开源的是一个引擎加一份部署说明书,不是一个能替代 vLLM 的服务。缺的这三块正是自建推理服务时最贵的三块。
三、不换引擎能搬走什么:三条都是实现细节,成本远低于换引擎
不换引擎也能搬:把三条思路搬回自己的栈,成本远低于移植整个引擎。
| 思路 | 你在自己的引擎里对应改什么 |
|---|---|
| 按模型结构定 prefill 重放上界 | 在缓存策略里加一个”结构安全截断点”计算:SWA 窗口 + 投机回溯 = 硬下限;前缀缓存命中上限 = L 减去硬下限 |
| decode 的 EP 拉到与可用卡数同阶 | 并行配置区分 prefill / decode:prefill 取小 EP(HBM 装得下就取最小),decode 取大 EP(可用卡数同阶);故障降级时按健康卡数重定 EP |
| 用置信度决定验证几个 token | 在投机解码(先草拟几个 token,再一次性验证)里加 Confidence Head,按累积接受概率做 batch 内 top-k 验证;先测零交点,低于零交点保持固定长度 |
三条都能单独搬,不必成套。第三条还有额外前提:模型要自带预测头,否则先补 MTP。前两条不需要改模型。
四、机制总览:三条耦合层是证据,不是目录
引擎之间的差别不在功能清单上——专家并行、EPLB、投机解码、PD 分离,vLLM 和 SGLang 都已经有[6][7]。差别在能力被绑得多深。三条耦合层,正好对应第一节的前三问:
- 计算图耦合:优化依赖某一种注意力结构(V4.1-Flash 的 SWA 加 YOCO 消费者层),决定长上下文能省多少,对应第 3 问。
- 通信拓扑耦合:并行策略按一种集群形状写死(decode 端的 Wide-EP),决定 64 卡门槛,对应第 2 问。
- 解码策略耦合:验证依赖模型自带的预测头(DSpark 的置信度调度),决定低并发会不会倒退,对应第 3 问。
每一层都能买到东西,也都要付一笔账。但这三层不并列:前两层是硬否决,解码策略只是权衡项。逐层展开,是给第一节的答案补证据。
五、机制一:通用引擎都在做同一笔交易
vLLM 靠 PagedAttention 起家:把 KV cache 切成固定大小的块,用页表式映射消除内存碎片,再配 continuous batching[6]。它的赌注是模型无关——同一套调度器服务任意 Transformer。代价是每个优化必须对大多数模型成立。“prefill 只重放 140 个 token”这种招它没法内置,因为那要求引擎知道你的第几层是消费者层。
SGLang 把前缀缓存做成基数树(RadixAttention),跨请求复用 KV 前缀,异步调度是它的招牌之一[7]。DeepInfer 的部署问答里写明,异步调度是”沿用已有实现(SGLang、NanoFlow)“[2]。一家把生产栈摊开的公司,也承认这条腿不是自己长出来的。
TensorRT-LLM 走编译式路线,把模型编译成引擎换极限性能,代价是构建期长、模型与硬件白名单严格[8]。它和 DeepInfer 的取向最接近——都是为已知模型深度特化,区别在 TensorRT-LLM 要对一批模型、一批 NVIDIA 卡同时成立,DeepInfer 只需要对一个模型成立。这个差别决定了能写死的程度。
三家做的是同一笔交易:用抽象换掉特化。抽象让新模型第二天就能跑,代价是所有”只对一个模型成立”的优化都得绕开主干、在插件层打补丁。
六、机制二:计算图耦合(服务”长上下文”)
SWA bounded replay 指的是:prefill 不重算整段前缀,只重放一段有界后缀。
V4.1-Flash 的解码器是 SWA 加 YOCO 结构:前段层做完整 prefill,后段的消费者层只依赖前面算出的共享 hidden。重放因此可以被截断。DeepInfer 的 compact 模式默认保留 140 个 token(DEEPINFER_YOCO_PREFILL_KEEP_TOKENS=140),保留长度必须覆盖 SWA 窗口(128)加投机回溯长度(6)[1]。于是前缀缓存出现硬上限:输入长度为 L 的请求,最多命中 L−134 个 token[2]。
这不是纯赚。它把前缀缓存从”要么全中、要么全不中”改成”有上限的部分命中”,而 134 这个数字由模型结构决定,调参改不动。通用引擎做不了,因为它不知道你这个模型第几层开始只吃共享 hidden。
这是实现细节,不影响选型判断。140 是默认余量,134 是结构硬下限;选型时关心的是”长上下文前缀缓存能复用多少”,不是这 6 个 token 的差。
七、机制三:通信拓扑耦合(服务”64 卡”)
MoE(混合专家:每个 token 只走其中一部分专家)的专家并行(EP)是把专家分散到多张卡,每张卡只算自己那部分专家,再 all-to-all 换 token。EP 越大,单卡要搬的专家权重越少,通信越贵。
DeepInfer 的默认配置两侧不对称:prefill 用 EP2–8 / DP2–8,HBM 装得下就取最小;decode 用 EP64–128 / DP64–128,可用 GPU 有多少就用多大;attention 侧 DP=EP[2]。decode 这一端它叫 Wide-EP。
Wide-EP 的收益全部在 200 tok/s/user 以上那一端(数据见第一节),代价是整台实例绑进一个通信域。
八、机制四:解码策略耦合(服务”低并发”)
投机解码是用小模型或模型自带的 MTP 头先草拟几个 token,再一次性验证,接受就白赚。常规做法是固定草稿长度,比如 5。
DSpark(DeepSeek 的变长投机解码方案)做的是变长验证:用一个 Confidence Head 预测每个草稿 token 的接受概率,把验证算力分给边际收益最高的那几个。生产上草稿仍一次给 5 个,真正送进验证的平均只有 3.2–4.4 个[2]。
这组数据自己承认了负收益区间。固定长度验证在低并发下并不吃亏——被浪费的验证算力本来也闲着;变长验证要多跑一个置信度头,还要在 GPU 上做累积乘积、全局排序取 top-k 和重映射 scatter[2]。这笔交换只在验证算力确实稀缺时成立。
九、机制五:两个能对账的开关(服务”复现”)
batch-invariant(不同 batch 组合下结果一致)和 deterministic sampling(同样输入、同样采样参数,输出逐字节一致)都在发布里,但只在 NVIDIA 上可开,后者还要求关掉 MTP 变长解码、给 SamplingParams 传固定的 seq_seed[1]。对外部服务这是”能复现线上问题”;通用引擎通常把这类行为交给采样实现的具体细节,不单独承诺。
三笔账在部署时对应三个开关:
export DEEPINFER_ACCELERATOR=nvidia
# 计算图:prefill 只重放有界后缀(默认 compact + 140 token)
DEEPINFER_YOCO_PREFILL_TRUNCATION_MODE=compact
DEEPINFER_YOCO_PREFILL_KEEP_TOKENS=140
# 解码:变长验证(草稿上限 5,按置信度决定真正验几个)
DEEPINFER_ENABLE_MTP_VARLEN=1
DEEPINFER_USE_NEXTN_DECODE=5
# 可复现:batch 无关 + 确定性采样(只在 NVIDIA 可开)
DEEPINFER_BATCH_INVARIANT=1
三个开关对应三笔账:第一个把命中长度压到 L−134(结构硬下限),第二个在低并发下倒亏,第三个只买到可复现性、不买吞吐。
十、四条路线并排:先看决策类型,再看默认值
| 维度 | 决策类型 | DeepInfer | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|---|---|
| 支持的模型 | 硬否决 | 1 个(V4.1-Flash) | 任意 HF 结构 | 任意 HF 结构 | 白名单 |
| 硬件 | 硬否决 | SM100 / 昇腾 950 | NVIDIA、AMD 等 | NVIDIA、AMD 等 | NVIDIA |
| 服务层 | 软缺口(可自建) | 不含(离线 only) | 自带 OpenAI 兼容 server | 自带 server | 自带 server |
| 并行默认 | 默认值差异 | prefill EP2–8,decode EP64–128 | TP/PP/EP 多组合 | 含大 EP | TP/PP/EP |
| EPLB | 默认值差异 | 内置,冗余专家 + 定期重排 | 有 | 有 | 未核 |
| 异步调度 | 默认值差异 | 有(沿用 SGLang/NanoFlow) | 有 | 有 | 有 |
| 投机解码 | 默认值差异 | DSpark 置信度变长验证 | EAGLE、Medusa 等 | EAGLE 等 | 多种 |
| 结构化输出 | 默认值差异 | 有,独立编译机 + 自动机掩码 | 有 | 有 | 有 |
| 许可 | 不影响选型 | Apache-2.0 | Apache-2.0 | Apache-2.0 | Apache-2.0 |
表格里”未核”表示本次没有查证,不是”没有”。先看”决策类型”这一列:硬否决两行决定”能不能用”,软缺口一行决定”要不要自建”,其余是默认值差异,扫一眼就知道哪几行值得细读。差别不在谁多一个勾:异步调度和结构化输出两行,四家全是「有」;EPLB 三家有、TensorRT-LLM 未核。差别在默认值和默认规模:DeepInfer 的每一行默认值都指向同一种负载。
十一、失效条件:这些条件一变,上面的答案就不成立
- 数字口径:全部是厂商自测,没有第三方在同一硬件、同一模型上复现;benchmark 固定 131,072 上下文与 75% 的每 token 接受率[2][3]。换上下文长度或换流量结构,曲线形状会变。
- 规模门槛:Wide-EP 的高交互性优势只在 64 卡以上成立,低于这个规模只剩通信开销。1P+1D 能部署,“最小高效单元”却是 64+64。
- 门槛的分叉:低于 64 卡时,Wide-EP 的吞吐/交互收益归零,但如果你需要确定性采样或 batch-invariant 的线上复现能力,DeepInfer 在这两个维度上仍提供通用引擎不单独承诺的东西。规模门槛否决的是”吞吐与交互收益”,不是”全部选型理由”。
- 集群门槛:3FS 存储、400G 互联、每 GPU 14.4 TB 的 KV 容量都是成本的一部分。只买引擎不买这些,收益会掉下来。
- 平台门槛:batch-invariant 和确定性采样只在 NVIDIA 路线可用;昇腾是另一套栈(CANN 9.2),两条线的优化不能直接搬。
- 负载门槛:收益集中在”高交互性 + 长上下文 + MoE 宽 EP”这个角落。流量若是短请求、低并发,变长验证会倒退 1.5%。
十二、口径与边界:8 条引用里,哪些数字是厂商自测的
- 所有吞吐、延迟数字来自 DeepInfer 仓库 README、
doc/inference_deployment_qa.md与doc/images下的 Pareto 图,均为厂商口径,未经第三方复现。 - 在本机核对过的是:仓库文件数与代码行数、
entrypoints只有llm.py、README 的”必需但不包含”清单、EPLB 策略代码的存在。端到端实测这一条是空的——它要求 SM100 或昇腾 950,本机不具备。 - vLLM / SGLang / TensorRT-LLM 的能力描述依据各自公开文档与仓库,未做同环境压测;表格中”未核”表示本次未查证。
- 图中读数(26,000 / 24,900 / 326 / 241)是从 PNG 的点位标注读出来的,不是仓库里的文本数字,量级可用、小数点不可信。
十三、如果只带走一句:这三层机制只用来做排除
所以别把这三层机制当成要背诵的知识:它们的用途只有一个——让你在前四问上做排除。模型和平台不对,直接换 vLLM 或 SGLang;集群到不了 64 卡,Wide-EP 这条收益就不成立;流量是短请求低并发,变长验证会倒退。三问都过,才值得往下看怎么搬那三条思路。
参考文献
[1] DeepSeek-AI. DeepInfer(README,含支持范围、环境变量、致谢与”未包含”清单). GitHub, 2026. https://github.com/deepseek-ai/DeepInfer
[2] DeepSeek-AI. DeepSeek V4.1 Flash Inference Deployment Q&A(含 EP/DP 配置、EPLB 参数、KV 存储、投机解码表). GitHub, 2026. https://github.com/deepseek-ai/DeepInfer/blob/main/doc/inference_deployment_qa.md
[3] DeepSeek-AI. DeepInfer decode Pareto 图(decode_pareto.png 与 wide_ep_decode_pareto.png). GitHub, 2026. https://github.com/deepseek-ai/DeepInfer/blob/main/doc/images/wide_ep_decode_pareto.png
[4] PyPI. deepinfer 0.1.0. 2026. https://pypi.org/project/deepinfer/
[5] The Next Web. “Sharing our production stack”: DeepSeek open-sources DeepInfer. 2026-10-20. https://thenextweb.com/news/deepseek-deepinfer-open-source-inference-engine
[6] vLLM Project. vLLM. GitHub. https://github.com/vllm-project/vllm
[7] SGLang Project. SGLang. GitHub. https://github.com/sgl-project/sglang
[8] NVIDIA. TensorRT-LLM. GitHub. https://github.com/NVIDIA/TensorRT-LLM





评论
填个昵称就能发,不需要注册或登录