习慈羊xiciyang
联系
订阅
正在读取订阅状态…

垂直整合的代价:DeepInfer 只服务一种模型,64 卡以下拿不到它的收益

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,是垂直整合的公开样板;三个核心优化通用引擎按成本算不出来,也不该做。

这四件事决定这套栈适不适合你,前两件是硬否决:

  1. 模型与平台:你的模型是否在 DeepSeek 生态内,硬件是否 SM100 或昇腾 950?不是,到此为止——它只认这一种模型结构,换模型等于自己维护一个 fork。
  2. 集群规模:你的集群是否跨过 64 卡?没有,Wide-EP 的吞吐与交互收益归零,但可复现性收益仍在。
  3. 流量形态:你的流量是否高交互、长上下文、MoE 宽 EP?不是,变长验证在低并发下可能倒退 1.5%。
  4. 可复现性:你是否需要可复现性(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 要不要相乘。

两条 decode 曲线:每用户 100 tok/s 时 EP64 与 EP8 分别是 26.0k 与 24.9k tok/s/GPU,几乎重合;EP8 在 240 tok/s/user 处跌到 2.0k 后终止,EP64 一直画到 326 tok/s/user、2.4k

代价很硬。一个实例的所有 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 接受长度变长接受长度吞吐增益
1654.443.323.24−1.5%
3253.653.253.17+1.6%
4853.943.33.26+3.6%
6053.583.33.21+5.4%
7253.243.293.12+6.7%
9653.243.33.15+11.0%

折线图:并发从 16 到 96,变长验证的吞吐增益从 −1.5% 升到 +11.0%,零交点约在 24 并发,60 并发处标为生产工作点

长上下文那一半也绑在模型结构上:前缀缓存有 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]。差别在能力被绑得多深。三条耦合层,正好对应第一节的前三问:

  1. 计算图耦合:优化依赖某一种注意力结构(V4.1-Flash 的 SWA 加 YOCO 消费者层),决定长上下文能省多少,对应第 3 问。
  2. 通信拓扑耦合:并行策略按一种集群形状写死(decode 端的 Wide-EP),决定 64 卡门槛,对应第 2 问。
  3. 解码策略耦合:验证依赖模型自带的预测头(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(结构硬下限),第二个在低并发下倒亏,第三个只买到可复现性、不买吞吐。

十、四条路线并排:先看决策类型,再看默认值

维度决策类型DeepInfervLLMSGLangTensorRT-LLM
支持的模型硬否决1 个(V4.1-Flash)任意 HF 结构任意 HF 结构白名单
硬件硬否决SM100 / 昇腾 950NVIDIA、AMD 等NVIDIA、AMD 等NVIDIA
服务层软缺口(可自建)不含(离线 only)自带 OpenAI 兼容 server自带 server自带 server
并行默认默认值差异prefill EP2–8,decode EP64–128TP/PP/EP 多组合含大 EPTP/PP/EP
EPLB默认值差异内置,冗余专家 + 定期重排有有未核
异步调度默认值差异有(沿用 SGLang/NanoFlow)有有有
投机解码默认值差异DSpark 置信度变长验证EAGLE、Medusa 等EAGLE 等多种
结构化输出默认值差异有,独立编译机 + 自动机掩码有有有
许可不影响选型Apache-2.0Apache-2.0Apache-2.0Apache-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

评论

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