开源项目深度研究 · @scene#50 · 2026-11-08

DeepInfer:开源的是执行引擎,不是服务 对 deepseek-ai/DeepInfer 的源码实证、生产架构还原与可落地性判断

2026 年 10 月 20 日,DeepSeek 把支撑自家大规模在线服务的推理框架放上 GitHub。三周后它拿到 25,620 stars,却只有 6 次提交、4 位贡献者、0 个 release。这份报告不做功能复述,而是回答三个问题:它究竟给了什么、那些惊人的生产数字从哪来、以及一个团队该不该在上面投入。

研究对象 github.com/deepseek-ai/DeepInfer 快照 HEAD a679bb8 · 2026-11-03 61,664 行代码实证 13 章 · 9 图 · 证据分级

00摘要:九条核心论断

只读这一页也能用。以下每条论断都可在正文中找到代码路径、命令或一手来源;标注「观点」的是本报告判断,不是业界共识。

25,620
GitHub stars
2026-11-08 实测
61,664
Python + C++ 行数
本地 clone 统计
6 / 4 / 0
提交 / 贡献者 / release
GitHub API 实测
155 万亿
tokens / 天 / 集群
官方自报,未独立验证
C1它不是通用推理框架,而是 V4.1-Flash 的专用执行引擎。
只支持 1 个模型、2 类芯片、仅离线推理。CED / YOCO / Engram / DFlash 的执行路径与模型结构深度耦合,换模型不是改配置,而是重写执行路径。源码实证
C2开源的是「怎么把模型跑快」,不是「怎么把服务跑便宜」。
README 明列三项未提供:KV cache 系统、VE/Prefill/Decode 分离、跨 DP 副本负载均衡。而 96% 输入缓存命中率、$38/GPU·小时 这些数字恰恰由这三项支撑。文档对照
C3这是一次「代码快照式开源」,不是社区共建项目。
25.6k stars 对应 6 次提交、4 位贡献者、0 个 tag、0 个 release,包版本仍是 0.1.0 / Beta。热度与工程活跃度之间存在一个数量级的反差。API 实测
C4DSpark 的创新不在 draft 模型,而在「验证预算的在线最优分配」。
调度器最大化 期望接受长度 / 步耗时,步耗时由离线启动曲线、在线拟合斜率与采样器中位数共同估计。生产并发点收益 +4–7%,但并发 16 时是 −1.5%。源码实证 官方表格
C5此前「draft 比 target 多 7GB」的差异,是 3 个 MTP stage,不是一个独立模型。
两条独立口径交叉验证:V4-Flash→V4-Flash-DSpark 差 7.269 GB;V4.1-1017 内置 mtp.* 张量 7.933 GB(每个 stage 约 2.6 GB)。drafter 共享主模型 embedding 与 lm_head。权重实测
C6KV 缓存策略与模型架构是协同设计的,不是可插拔模块。
SWA Bounded Replay 用「近似重算最后 128 token」把重算代价压成与上下文长度、层数无关的常数,代价是近似状态;官方未给出精度影响的量化说明。官方文档
C7E/P/D 分离与 Wide-EP 是硬件拓扑驱动的结论,且 CP / TP 被显式否决。
Prefill 用 EP2–8(减 NVLink 流量、改善均衡),Decode 用 EP64–128(降 MoE 单步显存流量)。官方实测 CP 比 DP 端到端最慢 5%,TP 在模型放得下时不用。官方文档
C8性能曲线可用,但必须按测量口径打折。
官方 benchmark 的 decode 吞吐按 full-acceptance accounting 计算(每步固定记 1+nextn 个 token),与真实接受率无关;Pareto 图另按 75% 接受率换算。所有数据均为自测,截至快照无第三方独立复现。方法论警告
C9确定性是稀缺能力,但平台不对称。
批不变推理与确定性采样均标注 NVIDIA only;昇腾 950 在支持列表里,却拿不到这两项,也没有公开的性能曲线。README 明示

读者地图

你的角色先看核心问题
推理基础设施工程师02 / 05 / 06 / 07 / 08哪些机制可以移植到自己的栈?
平台选型 / 技术决策者00 / 09 / 10 / 11 / 12值不值得投人?门槛与缺口在哪?
研究 DSpark / V4 架构04 / 06 / 07draft 权重结构、验证调度、KV 压缩怎么落地?
合规 / 采购10 / 13双重许可、子模块许可、安全公告怎么处置?

一句话结论(本报告观点)

DeepInfer 是一份高质量、可复跑、结构极清晰的执行引擎参考实现,也是目前唯一能读到「置信度调度推测解码 + YOCO 有界重放 + 零开销调度」如何协同工作的公开代码;但它不是可复制的生产服务方案,把仓库跑起来离复现官方成本结构,还差一整套缓存与路由系统。

01范式判定:它到底算什么

把 DeepInfer 叫「推理框架」容易造成误判。更准确的说法是:面向单一模型结构、面向离线批执行、面向特定加速器拓扑深度优化的执行引擎(engine core),外部包着一层薄薄的 Python API。

时间轴:从模型开源到服务栈开源

时间事件对本次开源的意义证据强度
2026-07-06DSpark 论文提交 arXiv:2607.05147置信度调度验证 / 半自回归 draft 的理论先行一手论文
2026-10-16仓库创建(GitHub API created_at)建仓到首次提交间隔 4 天API 实测
2026-10-20首次提交 d585e65 initial commit + 官方公众号 / 知乎发文一次性推入完整代码树,非渐进式开发git log 官方一手
2026-10-20 ~ 10-25Q&A 英文档、DeepEP bump、布尔环境变量严格解析发布后主要在做文档与构建修复git log
2026-11-03a679bb8 docs: update V4.1 Flash Q&A to v0.2(+62 / −2 行)部署口径仍在修订,文档是活文档git show
2026-11-08本报告快照:25,620 stars / 3,138 forks / 247 open issues社区关注度极高,但 PR 与 issue 远多于官方提交API 实测

来源:GitHub REST API /repos/deepseek-ai/DeepInfer、本地 git log --oneline、知乎《DeepSeek V4.1 Flash 大规模推理部署实践》(2026-10-20)、arXiv:2607.05147。

三条判别式

① 模型绑定深度

通用引擎把模型当配置;DeepInfer 把 CED 编码器/解码器分层、YOCO consumer、Engram 词表分片、DFlash draft cache 写进了调度器与 cache_engine。

判据:能否只换 config.json 跑另一个模型?答案是否。

② 有无在线服务面

公开入口是 LLM(...).generate() 离线批式 API,没有 HTTP server、没有 OpenAI 兼容路由、没有持续批处理的服务端入口。

判据:Issue #147 正在请求「最小 OpenAI 兼容 chat server」。

③ 有无缓存与路由层

仓库里有 KV 的算子(state cache、block 读写),但没有分布式 KV 缓存系统,也没有 4 类负载均衡器。

判据:README「Required for a complete inference service」一节。

概念分野:和谁比,比什么

维度DeepInfer(本次开源)vLLM / SGLangTensorRT-LLM
定位单模型执行引擎核心通用在线 serving 框架编译式推理运行时
模型覆盖1 个:V4.1-Flash数十种主流架构主流架构 + 自定义插件
在线服务不含(离线批式 API)含 HTTP / OpenAI 兼容需配 Triton serving
缓存 / 路由算子有,系统无前缀缓存 + 路由运行时内 KV 管理
优化取向为 MoE + YOCO + DSpark 极致协同 generality 优先单卡 / 单机 kernel 极致
血缘README 致谢:主要基于 vLLM 构建,另受 SGLang 与 TensorRT-LLM 启发 官方一手
图 1 · 一次「执行引擎」而非「服务」的开源 左侧为仓库内可直接读到的实现;右侧为 README 明示未提供、或仅以文档描述存在的生产组件 已交付 · 仓库内可编译可复跑 未交付 · 需自建 / 仅文档描述 模型与采样运行时 · 35,307 行 deepinfer/model_executor/,含 v4_modules 全套结构 分布式 KV cache 系统 3FS 约 100 PiB SSD / kvcache-store / GDR 换入 高性能算子 · 6 个 vendor 子模块 FlashMLA / DeepGEMM / DeepEP / DeepSelect + 昇腾版 VE / Prefill / Decode 分离部署 引擎侧功能「大部分已实现」,编排层未给 DSpark 置信度调度 + YOCO 有界重放 csrc/engine/mtp_varlen.hpp、models/mtp/dflash.py 4 类负载均衡器 Prefill / Decode / VE / EPLB 的跨副本调度 零开销调度 / 批不变 / 结构化输出 ZOS 流水线、xgrammar 约束采样(NVIDIA 部分专属) 在线 serving 面 无 HTTP / 无 OpenAI 兼容 / 自动扩缩容与容错 可复跑的 benchmark / sweep / 评测 4 GPU prefill、64 GPU decode 的 Pareto 曲线脚本 生产可复现的命中率与成本 96% 命中率 / 155 万亿 tokens 每天 / $38 每卡每小时
图 1 交付边界。左侧全部来自本地源码树盘点;右侧依据 README「Required for a complete inference service (not included in this release)」与部署 Q&A。注意「未交付」不等于「未实现」——Q&A 对这些组件给出了相当详细的设计说明,只是代码与内部基础设施耦合,未随本次发布。
为什么这个判定重要:若按「通用推理框架」预期评估,会得出「功能残缺」的结论;若按「生产执行引擎参考实现」评估,它的价值反而极高——市面上没有第二份公开代码能把大规模 MoE 服务的调度、缓存与推测解码耦合关系写到这个粒度。

02代码盘点:61,664 行的形状

先把「它有多大、哪部分最重」量出来。这个分布本身就是 C1(模型专用)最硬的证据:57.3% 的代码集中在模型执行层,而通用调度、服务、协议加起来不到一成。

图 2 · 纯代码行数按子系统分布(本地 clone 实测) 统计口径:.py / .cpp / .hpp / .pyi,排除 .git 与 vendor 子模块,合计 61,664 行;横轴为线性刻度 0 17,654 35,307 行 model_executor csrc/engine tests 其他 deepinfer 模块 examples(含 sweep / yoco) worker engine + entrypoints eval 其余 6 项合计 35,307 · 57.3% 5,217 · 8.5% 3,117 · 5.1% 3,024 · 4.9% 3,018 · 4.9% 2,805 · 4.5% 2,155 · 3.5% 1,694 · 2.7% 5,327 · 8.6% 橙 = 模型结构实现 蓝 = 调度与执行时 绿 = 测试与示例 紫 = 评测 灰 = 其余
图 2 复跑命令见 13 章。model_executor 内部又细分为 models/v4_modules/(CED/YOCO/Engram/DFlash 结构)、layers/tilelang_ops/(CUDA 与 Ascend 双份 kernel)、eplb/、parallel_utils/——全部围绕 V4.1 单一架构。

分层栈:Python 编排 + C++ 调度 + 双后端 kernel

层关键路径职责体量
APIdeepinfer/entrypoints/llm.pyLLM.generate() 离线批式入口198 行
引擎deepinfer/engine/llm_engine.py多进程 worker 编排、ZOS 在途请求、延迟释放1,029 行
Workerdeepinfer/worker/模型前向、KV cache 布局、CUDA graph、DFlash graph2,805 行
调度器csrc/engine/scheduler.hpp 等C++ 实现:prefill/decode 投票、抢占、MTP varlen、接受结果回填1,329 行(单文件)
桥接csrc/engine/pybind_*.cpp + deepinfer/_C/*.pyipybind11 暴露,含「借用存储的 numpy array」零拷贝约定819 行桩
算子models/v4_modules/、layers/tilelang_ops/{cuda,asc}/、6 个 vendorFlashMLA / DeepGEMM / DeepEP / DeepSelect + 手写 TileLang主体 35,307 行
硬件deep_cluster/hardware/{nvidia,ascend}.py、topology/bind.py设备发现、NUMA 绑定、SM 版本探测656 行

体量由本地 wc -l 汇总;路径均可在 HEAD a679bb8 定位。一手源码

一个容易被忽略的工程细节:scheduler.hpp 明确写了 pybind 返回的 numpy array 借用 C++ vector 的存储,Python 侧必须在下一次 schedule 前消费完。这类零拷贝契约贯穿全仓(DeferredRelease、pinned buffer、symm_mem 权重重排),说明性能目标被写进了 API 设计,而不是事后优化。源码实证

构建门槛与依赖锁定

项NVIDIA 路径昇腾路径
硬件SM100(Blackwell)Ascend 950 NPU
软件栈CUDA 13、torch==2.13.0+cu132、flash-attn-4==4.0.0b34CANN 9.2、torch==2.13.0+cpu + torch-npu==2.13.0rc1
通信库build.sh 强制 nvidia-nccl-cu13==2.32.3(--force-reinstall)
公共依赖tilelang==0.1.15、tile-kernels==2.1.0、xgrammar==0.2.2、transformers==4.50.0、pybind11==3.0.1
系统Linux、GCC ≥ 13、Python 3.12、干净的空虚拟环境(README 明确要求)
构建方式仅源码构建:DEEPINFER_ACCELERATOR=nvidia|ascend ./build.sh,无 wheel、无 Docker 镜像、无 release
算子子模块FlashMLA、DeepEP、DeepGEMM、DeepSelect + DeepEP-Ascend、DeepGEMM-Ascend(.gitmodules)

验证强度:仓库自带的可证伪机制

这不是只有 README 的代码包。17 个测试文件里包含三类高价值验证:

但这些验证都要求硬件。本次研究在 macOS 上完成,只能做静态盘点与文档/权重侧交叉验证,没有执行任何 GPU 用例。下文所有性能数字均为官方自测或第三方转述,本报告不声称复现。

03理论根基:为什么必须是这个形状

好的理论章要能推出具体工程动作。DeepInfer 的每一个主要设计,都能从两条一阶关系推出来:算术强度决定 decode 的并行规模,边际期望收益决定验证长度。

推导一:decode 的吞吐–延迟前沿

MoE 模型 decode 每步必须把被激活专家的权重从显存读入,这部分流量近似与 batch 无关;增大 batch 提高算术强度、摊薄单 token 的权重读取成本。于是:

单步时间 T(B) ≈ T₀ + α·B (T₀ 含固定的权重读取与通信)
每用户速度 ≈ 1 / T(B);每卡吞吐 ≈ B·τ / T(B)

两式相乘的方向相反:B 增大时吞吐上升、单用户速度下降——这正是官方 decode Pareto 曲线从 (105 tok/s/user, 26.3k tok/s/GPU) 一路滑到 (325 tok/s/user, 2.5k tok/s/GPU) 的形状,而不是任何一方的工程妥协。

由此推出的工程动作是「让每步的 T₀ 变小,而不是把 B 调小」:Wide-EP 把专家分散到更多卡,降低单卡每步的 MoE 权重流量;EPLB 让最慢 rank 靠近均值,避免同步空转。官方给出的边界同样自洽:EP 超过 32 后收益停滞,因为显存带宽不再是瓶颈,通信与同步开销开始主导。

推导二:推测解码的验证长度是可优化的,不是超参数

固定验证 5 个 draft token 时,第 i 个 token 被用上的概率是前 i 个都接受的前缀存活概率,取累计乘积 P_i = ∏_{j≤i} p_j。期望产出 τ(B) = Σ_{i≤B} P_i 随 B 增速递减,而 T(B) 仍在线性增长。最优验证量应最大化:

B* = argmax_B  τ(B) / [ baseline(B) + slope·B + sampler_ms ]

这不是报告的比喻。csrc/engine/mtp_varlen.hpp:228-258 的 update_best() 逐项累加 cur_expected += acc.first、cur_bsz += 1,用 cur_throughput = cur_expected / time_ms 取最大值,其中 time_ms = baseline_ms + slope_ms * graph_size + sampler_ms。变量名一一对应。

这条推导能直接解释官方表格里最反直觉的一格:并发 16 时动态验证反而 −1.5%。低并发下固定开销占比大、验证长度调整的可用预算小,调度决策的估计误差与 kernel 开销可能吃掉收益;并发升到 60–96 时,节省下来的验证 token 才转化为 +5.4% ~ +11.0% 吞吐。换句话说,DSpark 是一个高并发优化,不是通用加速器。

理论 → 工程动作对照表

一阶关系推出的动作代码/文档落点可证伪预测
算术强度 ∝ batchDecode 用尽量大的 EP/DP(64–128),Prefill 用尽量小的 EP/DP(2–8)Q&A「并行策略」;examples/benchmark.py 由 WORLD_SIZE × 可见设备数 推 ep_sizePrefill 扩 EP 会因 NVLink 流量与负载不均变慢
τ(B) 边际递减按 confidence 排序,只验证 top-k 前缀mtp_varlen.hpp:213-266;tilelang_ops/schedule_mtp_varlen.py平均验证长度降 30%,平均接受长度几乎不变
CPU 气泡 = Amdahl 上限把 schedule/post-process 与 GPU forward 重叠,GPU 侧重算每请求长度csrc/engine/zos.cpp:279;DEEPINFER_ZERO_OVERHEAD_SCHEDULING关闭 ZOS 后每步出现可测的 GPU 空闲
chunk 时间预算可反解Prefill 不固定 chunk size,用二次代价模型 cost(q, c) 反解 qQ&A「Prefill Load Balancer」;csrc/engine/flops_estimator.hpp32,768 token 上限内,q 随已算前缀长度变化
缓存价值 = 命中率 × 复用间隔Block KV 用廉价 SSD 留 3–7 天;SWA KV 只在内存留约 180 秒知乎原文 / Q&A「KV cache storage」;worker/cache_engine.pySWA 落盘会浪费近一半持久缓存容量

本章推论(可检验)

如果一个团队只把 DSpark 的「draft 模型」搬走、不做置信度调度与零开销调度,那么它拿到的收益会远小于论文里的 60–85%;反过来,把 mtp_varlen.hpp 的预算搜索逻辑迁到自己的调度器上,即使 draft 结构不同,仍能复用其「按期望收益分配验证算力」的核心。这是本报告认为最值得移植的一块。

04模型约束:V4.1-Flash 决定了引擎的形状

不理解模型结构,就无法理解 DeepInfer 为什么这么写。本节所有配置数字来自 HuggingFace 仓库的 config.json 原文,权重体积来自文件索引与 safetensors header 的实测解析。

config.json 关键字段(一手)

字段值对推理引擎的约束
num_hidden_layers40主模型层数;model_modules[num_hidden_layers+2:] 之后才是 draft 层
hidden_size / head_dim5120 / 512KV 单头维度大,KV 压缩收益高
n_routed_experts / num_experts_per_tok384 + 1 shared / top-6专家数决定 EP 规模上限与冗余专家取整
sliding_window128直接决定 SWA KV 保存 134 token(128 + 6 回退)
compress_ratios长度 43 = 40 + 3前 20 层 ratio 0 或 2,第 20 层起 ratio 1 进入 YOCO consumer;_n_prefill_layer() 取首个 ratio==1
engram_layer_ids / engram_num_embeddings[1, 14] / [384,006,168 · 384,016,682]两张超大 n-gram 表,需 ENP 分组与主机内存 RDMA 侧加载
num_nextn_predict_layers3DFlash draft stage 数
dspark_block_size / dspark_target_layer_ids5 / [37, 38, 39]一次提 5 个 draft;取主模型末 3 层 hidden 做投影
dspark_markov_rank / dspark_n_routed_experts256 / 128(top-3)draft 侧有独立的小 MoE,不是纯轻量头
quantization_configfp8 / expert_dtype=fp4 / scale_fmt=ue8m0与 Q&A 的「Main KV 用 e4m3、routed expert 权重用 MXFP4」一致
max_position_embeddings1,048,5761M 上下文;YaRN factor=16

来源:huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash-1017/raw/main/config.json;模型卡标注 763B params、MIT 权重许可。一手配置

权重构成:510 GB 里有两个 94.5 GiB 的「巨无霸」

V4.1-Flash-1017 共 48 个 safetensors shard、510,311,045,295 B(510.31 GB / 475.26 GiB)、96,085 个张量。索引里最反常的是最后两个 shard 各约 94.5 GiB,却各自只装 6 个张量——都是 layers.1.engram.* 与 layers.14.engram.*。这两张 Engram 表合计 203.07 GB,占整个 checkpoint 的 39.8%,也解释了 V4.1 权重为何远大于 V4 时代的 160 GB。

图 3 · 权重构成与「7GB 之差」的两个独立口径 体积为十进制 GB;上组刻度 0–510 GB,下组为便于读差值使用独立刻度 0–170 GB,已分别标注 上:DeepSeek-V4.1-Flash-1017 · 510.31 GB / 48 shards 主体 + 视觉编码 299.31 GB Engram 双表 203.07 GB · 39.8% mtp.* 7.93 GB / 2,401 张量 · 内置 drafter shard 47 / 48 各只有 6 个张量(layers.1 / layers.14 的 Engram);drafter 分布在 shard 44–46 下:V4 时代两份 checkpoint · 独立刻度 0–170 GB DeepSeek-V4-Flash · 159.62 GB · 46 shards DeepSeek-V4-Flash-DSpark · 166.89 GB · 48 shards 红色 = 新增 Δ 7,269,386,296 B(7.269 GB / 6.77 GiB),即 3 个 MTP stage + Markov / confidence head 交叉验证:V4.1-1017 内置 mtp.* 张量实测 7.933 GB(stage 0/1/2 分别 2.653 / 2.574 / 2.706 GB)
图 3 数据来源:HuggingFace ?blobs=true 文件清单、model.safetensors.index.json 的 weight_map,以及 shard 44–46 的 safetensors header(HTTP Range 只取头部,按 data_offsets 累加)。复跑脚本见 13 章。一手实测

解开「7GB 之谜」:draft 不是独立模型

这是本研究最值得单独回答的一个历史问题。把三条证据链拼起来,结论很明确:

证据内容强度
体积差V4-Flash 159,617,149,040 B → V4-Flash-DSpark 166,886,535,336 B,差 7,269,386,296 B,shard 46 → 48HF API 实测
张量归属V4.1 索引中 mtp.* 共 2,401 个张量,落在 shard 44/45/46;V4 社区的 GGUF 转换说明同样指出 drafter 只在 checkpoint 的 shard 46–48索引解析 社区二手
源码切片models/mtp/dflash.py:92-95:model_modules = model.module.module,取 modules = model_modules[num_non_mtp_layers:],其中 num_non_mtp_layers = num_hidden_layers + 2(主层数 + embedding + lm_head)。剩下全部必须是 DFlashNextPredictHeadHC一手源码
权重共享同一个 DFlash 类把主模型的 embed_tokens 与 lm_head 直接传入复用,drafter 自己只有 3 个 decoder layer、projection、Markov 双线性层与 confidence head一手源码

对「要不要单独上传 target model」的直接回答

不需要。 DeepSeek-V4-Flash-DSpark 仓库本身是「完整主 checkpoint + 附加 DSpark drafter 模块」,不是只有 drafter 的独立模型;第三方 GGUF 转换说明也明确其来源是「the DeepSeek-V4-Flash checkpoint plus the DSpark drafter module」,只是转换时只取了 drafter 张量。到了 V4.1-1017,DeepSeek 更进一步把 3 个 MTP stage 直接合并进同一个 48-shard checkpoint,连独立仓库都不再需要。

所以那 7GB 既不是量化差异,也不是一个「小一号的完整语言模型」,而是挂在主模型末层特征上的半自回归提议头:读第 37/38/39 层 hidden、投影后跑 3 层小 MoE(128 experts / top-3)、用 Markov rank=256 建模块内依赖、再用 confidence head 给出每个 draft 的接受概率。

精度口径提醒:「7GB」是十进制 GB;若按 GiB 是 6.77 GiB。V4.1 侧的 7.933 GB 与 V4 侧 7.269 GB 不完全相等,因为两代模型结构不同(V4.1 有 Engram、层数与专家数不同),drafter 的 MoE 规模也不同——两者只在数量级与构成上互相印证,不应相加或视为同一个数。

05部署架构:E/P/D 分离与 Wide-EP

生产架构不是仓库代码,而是部署 Q&A 与知乎技术文章描述的系统。三条设计目标决定了整套拓扑:多厂商芯片、用普通 8 卡机做 Prefill / 64–128 卡超节点做 Decode、KV 缓存保留 72 小时以上。

图 4 · 生产推理系统:E/P/D 分离 + 独立 KV 存储 重绘自官方 architecture_overview.png,叠加部署 Q&A 给出的规模与带宽数字 User Request / Response DeepSeek Recipe(Rust 编解码) Entrypoint(前缀哈希链匹配) Vision Encoder LB Prefill LB(4 档分桶) Decode LB(双维度均衡) Vision Encoder Service 单卡 / 建议更便宜的卡 Prefill Service EP2–8 / DP2–8 · 8 卡普通机 Decode Service EP64–128 Wide-EP · 超节点 KV 传递 embedding External KVCache Storage · 3FS 约 100 PiB SSD · 峰值聚合读 10 TiB/s 黑箭头 = 请求流 蓝箭头 = KV 数据流 Prefill 与 Decode 各自独立扩缩容;跨机 SWA 命中走 400G VLAN
图 4 架构与数字来自知乎官方长文与 doc/inference_deployment_qa.md;原图见仓库 doc/images/architecture_overview.png。注意三个 Service 框内还有一层「Expert-Parallel Load Balancer」,本图省略以突出主数据流。

并行策略:两侧的取值方向相反

阶段策略取值逻辑官方理由
PrefillEP2–8 / DP2–8显存够就用尽可能小的 EP/DP每专家 batch 本就够大;小组改善 DP/EP 均衡并减少 NVLink 流量
DecodeEP64–128 / DP64–128(Wide-EP)用尽可能大的 EP/DP大幅降低 MoE 专家部分单步显存流量,配合 EPLB 提高 TPS
VE单卡一个实例按图片 patch 数路由纯单卡计算,建议用更便宜的卡
Engram独立 ENP 组,按词表维切分Prefill ENP8;Decode ENP = DP/EP词表存主机内存、RDMA 单边读到显存;NPU 暂不支持 CPU offload
CP / TP均未使用(README 仍列 balanced CP 为支持特性)CP 实测端到端最多比 DP 慢 5%、恶化 EP 均衡、引入 kernel/CPU 开销;TP 通信开销大,模型放得下就不用
一处公开文档的内部不一致:README 把「Attention DP / balanced CP」列为支持特性,部署 Q&A 却明确写「TP and CP are not used for now」,第三方分析也指出这一差异未获解释。合理解读是「引擎具备 CP 能力(源码有 parallel_utils/cp.py、--cp 参数),但生产部署不启用」——评估时应区分代码能力与推荐配置。证据冲突

EPLB:把「热点专家复制几份」写成了可复跑的贪心算法

官方描述的「冗余专家 + 周期重排」在仓库里有完整实现:model_executor/eplb/policy.py 的 rebalance_experts_global() 先按 tokens_per_expert / logical_count 逐个贪心复制热点 logical expert,再用 _batch_greedy_indices() 把物理副本逐层排布到各 rank,目标是最小化 Σ_step max_rank(负载);shuffle.py 负责跨卡 P2P / 机内 IPC 权重搬运。

参数PrefillDecode
每卡冗余专家起点4(向上取整到 ep_size 倍数)1;EP64 时取整后每卡 7 个专家(不含共享专家)
统计窗口 / 重排间隔100 步 / 1,000 步1,000 步 / 10,000 步
实测 moe_lb(最慢 rank / 均值)中文长文:1.0320(EP2/DP2)、1.0618(EP4/DP4)
英文 Q&A:1.045(EP2DP2)、1.074(EP4DP4)
1.090(中英一致)
可复跑开关DEEPINFER_EXPERT_COUNT_WINDOW_SIZE、DEEPINFER_EXPERT_REARRANGEMENT_STEP_INTERVAL、DEEPINFER_FORCE_LOAD_BALANCE、DEEPINFER_SHOW_EPLB_DETAIL

证据强度说明:中英两版文档的 prefill moe_lb 数值不一致(差异约 0.01–0.03),且都未说明测量窗口与流量构成。这属于官方自报、口径未披露,不应作为容量规划依据;整体「达到完美均衡离线 benchmark 的约 80%」同样如此。口径存疑

存储、网络与容错数字

存储

3FS 为 KV 提供约 100 PiB SSD,10+2 擦除码,每组容 2 节点故障;读请求并发发给组内 11 个节点,任意 10 个返回即可解码。KV block 粒度约 112 KiB,峰值聚合读 10 TiB/s、写约 850 GiB/s。每 GPU 约 14.4 TB 逻辑容量。TTL:agent 流量 3 天、chatbot 7 天;SWA KV 只在内存留约 180 秒、命中率 98%+。

网络与容错

跨数据中心部署按每 8 卡约 400 Gbps 预留互联;官方节点位于不同但相邻的数据中心。大 EP 下任一卡故障即整实例不可用,重启按当前健康卡重定 EP 规模;重启耗时分钟量级,容错靠配额冗余 + 请求级重路由,而非缩短重启。配额利用率 > 0.8 时禁止缩容。

最小可部署单元是 1P + 1D,但 Decode 推荐 EP≥64,故最小高效单元为 64 张 prefill 卡 + 64 张 decode 卡(约 1:1,合计 128 GPU)。这条数字是判断「我的团队能不能照搬」的第一道门槛。

06DSpark:置信度调度的推测解码

这是 DeepInfer 里理论最完整、源码最漂亮、也最值得移植的一块。核心命题不是「猜得更准」,而是「把有限的验证算力花在边际回报最高的 draft token 上」。

论文与代码的分工

层内容来源 / 强度
论文arXiv:2607.05147《DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation》,2026-07-06 提交。半自回归结构(并行主干 + 轻量顺序模块)缓解后缀接受率衰减;置信度调度按前缀存活概率与引擎吞吐曲线动态决定每请求验证长度。生产对比 MTP-1 基线,在同等吞吐下单用户生成速度 +60–85%一手论文
模型3 个 DFlashNextPredictHeadHC stage;dspark_target_layer_ids=[37,38,39] 的 hidden 经 projection + RMSNorm 作为条件;markov_rank=256 的 Markov 双线性头建模块内依赖;ConfidenceHead 是 ReplicatedLinear(hidden_size + markov_rank → 1),按 step 独立 temperaturedflash.py / config.json
调度csrc/engine/mtp_varlen.hpp:C++ 侧搜索最优 total_q;tilelang_ops/schedule_mtp_varlen.py 与 cuda|asc/schedule_mtp_varlen.py:GPU 侧重分配每请求长度一手源码
运行时MTPInfoPool 存 proposal(token / logprob / confidence);scheduler.hpp:1196 process_MTPInfo 把 confidence 累乘后写入序列状态,供下一轮调度使用一手源码

调度器逐行还原:一个在线的吞吐最大化搜索

MTPVarlen::schedule()(mtp_varlen.hpp:150-267)做的事,可以逐步复述:

  1. 时间估计:用两个滑动中位数估计器消化实测值——SamplerRuntimeEstimator 取最近 9 个采样耗时的中位数(至少 5 个样本才生效);ForwardRuntimeEstimator 维护 5,000 步窗口,先按 graph size 分组取中位数、再对组中位数取中位数,用两个 multiset 做 O(log n) 动态维护。步耗时 = baseline(graph_size) + slope·graph_size + sampler_ms。
  2. 置信度入队:把每个请求每个 draft 位置的接受率估计 p 压进两个优先队列。为避免「后面的 confidence 影响前面 token 是否被验证」,算总预算用 N−2 轮的值、分配每请求长度用 N−1 轮的值,靠 schedule_cnt / process_cnt 配对判断数据滞后几轮——源码注释把这件事讲得非常清楚。
  3. 搜索最优批大小:按接受率降序排序,从「只验证 golden token」开始逐个加入 draft,每加一个就重算 cur_expected / time_ms,取最大值得到 best_bsz。
  4. 分配:每请求基础长度 1,把 best_bsz − num_seqs 个额外验证位按第二个队列的顺序分给期望收益最高的请求,得到 seqlens_q。
  5. ZOS 下再修正:CPU 排 schedule(N+1) 时第 N 步的 confidence 还没回,因此 CPU 只定总预算;GPU 上由 TileLang kernel 做 cumprod → 稳定降序 argsort → rank < extra_budget 的 top-k → 按 remap scatter,把每请求长度写回 pinned buffer(zos.cpp:279)。
参考实现 compute_seqlens_q_by_confidence_rates_ref() 只有 30 行,却完整给出了语义:新请求 confidence 视为 0,cum_rates = cumprod(gathered_rates),稳定排序后 wins = (ranks < extra_budget).sum(dim=1),seqlens_q = 1 + wins。仓库还自带 9 组形状参数化测试逐元素比对 GPU kernel 与参考实现,以及 5 档 benchmark 参数化。可复跑
图 5 · 动态长度验证的吞吐增益随并发增长 数据来源:部署 Q&A「Open-PerfectBlend / EP64DP64」表;横轴为每 rank 并发序列数,纵轴为相对固定 5-token 验证的吞吐增益 +12%+10%+5% 0−3% 02040 6080100 并发序列数 / rank 生产工作点 ~60 −1.5%+1.6%+3.6% +5.4%+6.7%+11.0% 同表:平均验证长度 5.00 → 3.2–4.4(约 −30%),平均接受长度 3.29 → 3.20(几乎不变)——省掉的是低收益验证算力
图 5 纵轴为线性刻度(−3% 到 +12%),数据点按 y = 300 − (v+3) × 14.667 换算。官方据 EP64/DP64 数据归纳为「生产工作点 +4–7%」;注意并发 16 时为负收益,与本报告第 3 章的推导一致。官方自测表

收益全景(官方表格原值)

并发 /rank固定5 验证长度动态验证长度固定5 接受长度动态接受长度固定5 吞吐 tok/s/rank动态吞吐增益
1654.443.323.244,8914,816−1.5%
3253.653.253.178,9649,111+1.6%
4853.943.303.2612,03212,467+3.6%
6053.583.303.2113,73014,466+5.4%
7253.243.293.1214,96215,961+6.7%
9653.243.303.1516,81718,660+11.0%

来源:doc/inference_deployment_qa.md「Speculative decoding」节。估值为「基于 EP64/DP64 benchmark 数据计算」,属于建模值而非独立实测,报告未给出方差或重复次数。建模值

开箱配置与可复跑实验

# README 给出的启用方式
DEEPINFER_ENABLE_MTP_VARLEN=1            # 开启动态长度验证
DEEPINFER_USE_NEXTN_DECODE=5             # 最大 draft 长度,默认 5,设 0 完全关闭投机解码
DEEPINFER_DFLASH_CONFIDENCE_HEAD_TEMPERATURE=1.0   # 也可给逗号分隔的 5 个 per-step 温度

# 关闭动态验证、走确定性路径(仅 NVIDIA)
DEEPINFER_BATCH_INVARIANT=1 DEEPINFER_ENABLE_MTP_VARLEN=0

# 复跑 Pareto 曲线
bash examples/sweep/run_sweep.sh decode ep64-128k 131072 3 0.75

源码里还有一层易被忽略的自由度:DEEPINFER_DFLASH_CONFIDENCE_HEAD_TEMPERATURE 支持按 draft step 给不同温度(长度必须等于 USE_NEXTN_DECODE,否则 environ.py:148 直接报错)。这说明 confidence head 的校准是分位置做的——因为后缀位置的接受率天然衰减,单一温度无法拟合。

07SWA Bounded Replay 与 KV 缓存经济

如果说 DSpark 优化 decode,这一节优化的就是 prefill 与缓存成本。它同时是 V4 → V4.1 架构演进中最有信息量的一处取舍:放弃精确,换取常数代价。

三代策略的取舍

方案做法代价生产结论
V4:落盘 + 精确重算SWA KV 写两份到持久存储;未命中时按「层数 × 窗口」完整前向逐层恢复SWA KV 占持久缓存近一半容量;用「数天留存」的 SSD 承载「分钟级生命期」的数据多轮短对话下不划算
V4 技术报告:Zero SWA Caching完全不落盘,只靠精确重算重算代价过高官方明确:生产未采用
V4.1:SWA Bounded Replay只重算最近 128 token,并把注意力窗口截断在重放段内:query 在位置 i 只看 max(s, i−127) .. i 的 key得到的是近似 SWA KV 状态重算代价降为与上下文长度、层数无关的常数
图 6 · Decoder SWA 重建:从 2,560 token 到 128 token 两个矩形宽度共用同一线性刻度(0–2,560 token → 0–700 px),高度表示 20 个 decoder 层 V4 · 精确重建 20 decoder 层 × 2,560 token → 完整前向 V4.1 · Bounded Replay 20 decoder 层 × 128 token(重放段) query i 只与 max(s, i−127) 到 i 区间的 key 计算 → 得到近似 SWA KV,重算量恒定 20:1 Encoder 侧同理:命中前缀末尾 128 token 重算,Block KV 原样复用、不重算也不覆写 官方结论:总 prefill 计算量近乎减半;但未给出近似状态对生成质量的量化影响
图 6 数值与机制来自知乎官方长文「SWA Bounded Replay」节与 doc/inference_deployment_qa.md。examples/yoco/ 提供 L1/L2 等价性验证,但验证的是 mask 与 compact 两种截断模式彼此等价,不是「近似重放与精确重算」等价。

命中策略:三层缓存,两套生命周期

内容介质副本 / 生命周期管理方
在途 Block KV + State KV推理卡显存—Prefill / Decode 实例
SWA KV(State cache)本机内存单副本、3FS 上没有;TTL 约 180 秒、命中率 98%+实例 + Entrypoint 内存目录,跨机 400G VLAN 拉取
分页 Block KV(main KV + indexer K)独立 3FS 集群应用层无副本,靠 3FS 冗余;TTL agent 3 天 / chatbot 7 天kvcache-store

SWA 状态槽位的物理布局是精算过的:StateBlock 分成「需保存区(SWA)」与「丢弃区(YOCO consumer SWA + C2 压缩边界累加器)」,V4.1 保存前 20 层,每层 134 token(128 窗口 + 6 投机回退)、MXFP8 格式 528 B/token,合计 20 × 134 × 528 = 1,415,040 B / 序列。只在 128 token 整数倍位置存储;decode 阶段在显存另开副本区,每跨一个 128 边界就拷一次窗口,最多越过边界 5 个 token,由 ring 多出的 6 个位置吸收。

命中长度的规则同样精确到 token:输入长度 L 的最大命中 ≤ L − 134;先查 Block KV 得 L1(128 的倍数),若 L1−128 .. L1 区间存在 SWA KV 则命中 L1,否则退一块命中 L1−128 并重算 128 token。

关键路径上只剩「匹配」藏不掉

官方把命中开销拆成三段,并说明哪段能被重叠掉:匹配(Entrypoint 本机 CHECK 角色做哈希链前缀匹配,只查元数据,但命中长度必须在路由前算出,无法隐藏)→ 取 KV(独立进程异步把 KV 从 3FS 搬进宿主机 shm)→ 换入(engine 内线程做 shm→HBM,目标是把逐层 H2D 与前向计算重叠;因 CUDA copy engine 对细粒度块拷贝表现差,换入用 GDR,让 RDMA 网卡打满 PCIe 且不占 SM)。

版本兼容靠元组,不靠迁移

缓存可用性由 (部署配置, 模型权重, 用户组) 标识;模型权重、block 字节布局、tokenizer、或改变 KV 值的框架变更都会让旧缓存失效。官方明确:生产从未做过缓存格式迁移。写失败不上报引擎,但读取时严格校验。

为什么不上 CXL L2

V4.1 的 KV 已被大幅压缩,读取又与请求排队、引擎计算重叠,官方判断集中式 CXL 缓存对 TTFT 改善有限,SSD 成本远低于 DRAM。唯一可能的好处是减少 SSD 写入、延长寿命,但当前未采用。

本报告最关心的精度空白:Bounded Replay 明说得到的是「近似 SWA KV cache」,但官方 Q&A 与评测文档都没有给出近似带来的质量损失量化(没有 logprob 偏移、没有任务分数对照)。仓库的 test_kl.py 与 PPL 逐样本基线是回归测试,不构成对「近似 vs 精确」的独立评估。这是评估该技术用于高精度场景时最应补的实验。

08零开销调度、确定性与结构化输出

这一组能力不改变算法,只改变「GPU 有没有在等 CPU」。它们对生产稳定性的价值,往往比多几个 kernel 点更高。

图 7 · 零开销批调度:消掉 GPU 的等待气泡 同一时间轴刻度;红色斜纹块为 GPU 空闲,蓝色块为 forward / sample,浅色块为 CPU 逻辑 同步 GPU forward N 空闲 forward N+1 空闲 forward N+2 CPU schedule N post-process N schedule N+1 post-process N+1 ZOS GPU forward N forward N+1 forward N+2 forward N+3 CPU schedule N+1 / launch_forward post-process N−1 / launch_sample GPU 无空闲 实现参考 SGLang / NanoFlow;CPU 只定总预算,每请求 seqlen_q 由 GPU 上的 TileLang kernel 按 confidence 重分配
图 7 时序依据部署 Q&A「Asynchronous scheduling」节;代码落点为 DEEPINFER_ZERO_OVERHEAD_SCHEDULING、csrc/engine/zos.cpp、deepinfer/worker/zos_status.py 与 llm_engine.py:826-827。方块为示意,不代表实测耗时比例。

确定性与批不变:稀缺,但有平台门槛

能力作用启用条件平台
Batch-invariant inference同一请求在不同 batch 组合下结果一致(浮点规约顺序不再随批大小漂移)DEEPINFER_BATCH_INVARIANT=1仅 NVIDIA
Deterministic sampling相同输入 token + 采样参数产出完全相同输出BATCH_INVARIANT=1 + ENABLE_MTP_VARLEN=0 + SamplingParams(seq_seed=固定值)仅 NVIDIA
CUDA sync guard前向 / 采样 launch 期禁止 CPU-GPU 同步,守护流水线默认开;DEEPINFER_DISABLE_SYNC_GUARD=1 仅调试用通用

注意确定性路径要求关掉动态长度验证——这是一个隐含的取舍:要可复现,就得放弃 DSpark 的自适应调度。对做回归测试、A/B 评测、离线数据生成的团队是合理交换;对在线服务则相反。

结构化输出:编译与推理解耦

支持 regex / JSON Schema / EBNF,入口是 SamplingParams(so_args={"schema_type": ..., "schema": ...})。约束在专用 SO 机器上异步编译成语法自动机(基于 xgrammar==0.2.2),请求进引擎前取编译结果;runtime 每步推进自动机、算出合法 token 集合并生成 mask 作用于采样。

一处值得表扬的工程细节:structure_output/compiler.py 的注释直接点名 CVE-2025-32381,说明 xgrammar 缓存曾在 0.1.x 引发生产事故,因此保留 DEEPINFER_XGRAMMAR_DISABLE_CACHE 作为 kill switch,并在 DEEPINFER_XGRAMMAR_CACHE_LIMIT_BYTES <= 0 时打出「缓存无上限可能 OOM(DoS 向量)」的警告。默认值 10 GiB、编译超时 20 秒、编译线程 4。这类把安全公告写进配置的痕迹,比功能列表更能说明它确实跑在生产里。源码实证

09证据全景:性能、口径与反证据

这一章回答「这些数字能不能信」。原则是:区分实测 / 建模 / 自报 / 二手转述,把方向相反的证据与口径缺陷同列,并做数量级自洽性反推。

证据强度分级(本报告口径)

级别定义本报告中的例子
A · 一手可复跑源码、配置、权重索引、git 历史,读者可用命令重算61,664 行、7.269 GB 差值、mtp_varlen.hpp 目标函数、HF config.json
B · 官方受控实验官方给出测量条件与复跑脚本,但未独立复核4 GPU / 64 GPU Pareto 曲线、PPL 基线、DSpark 吞吐表(含建模成分)
C · 官方自报生产口径或架构说明,无方法学、无复跑路径155 万亿 tokens/天、$38/GPU·h、moe_lb、3FS 带宽、KV 命中率
D · 二手转述媒体 / 社区 / 分析文章,需回溯一手96% 输入缓存命中率、TTFT ~400 ms、230 tok/s、HN 情绪分布、第三方集成 PR
图 8 · 官方性能 Pareto 曲线(按原图读数重绘) 两子图指标不同、不共享刻度;读数来自仓库 doc/images 下的 PNG,条件标注照录官方副标题 上 · Prefill:非缓存输入吞吐 vs. 每步延迟 EP4DP4 · 384+32 experts · ctx 131,072 · Bounded Replay 140 token 100k75k50k25k0 0200400 600800 ms 4,0968,19216,384 32,76865,536 点标签 = prefill_batch_size(每 DP rank token);4 张 SM100,单一 scale-up 域 下 · Decode:输出吞吐 vs. 每用户速度(EP64 对 EP8) ctx 131,072 · nextn=3 · 接受率 75% → τ=3.25 30k20k10k0 0100200 300350 tok/s/user 2561286432 EP64DP64(384+64 experts) EP8DP8(384+32 experts) 蓝线上点标签 = 每 DP rank 并发请求数(256 → 8,从高吞吐端向高交互性端) 读图要点:EP64 曲线全程位于 EP8 上方且向右延伸——在相同每用户速度下吞吐更高,在相同吞吐下交互性更好。 口径警告:官方 decode throughput 按 full-acceptance accounting 计算,与实际接受率无关;图上曲线另按 0.75 接受率换算。
图 8 按仓库 prefill_pareto.png、decode_pareto.png、wide_ep_decode_pareto.png 目视读数重绘,点为近似值(原图未给数据点表格)。上子图纵轴 0–100k tokens/s/GPU、横轴 0–800 ms;下子图纵轴 0–30k、横轴 0–350 tok/s/user,坐标均按线性换算。官方受控实验

Pareto 读数表

Prefill(4 × SM100)
batch延迟 ms吞吐 tok/s/GPU
4,096~68~60,000
8,192~120~72,000
16,384~205~82,000
32,768~375~87,000
65,536~730~90,000

边际收益迅速饱和:batch 从 4,096 翻到 65,536(16 倍),吞吐只涨 50%,延迟涨约 10.7 倍。

Decode(64 × SM100,EP64DP64)
请求/ranktok/s/user吞吐 tok/s/GPU
256~105~26,300
128~180~22,900
64~245~15,800
32~297~9,600
16~317~5,100
8~325~2,500

吞吐与单用户速度此消彼长;EP8 曲线整体在左下方,最高仅约 25,000 tok/s/GPU。

三个必须打折的地方

#口径 / 缺陷原文依据对解读的影响
1decode 吞吐按「满接受」记账:avg_SPS × decode_num_requests × (1 + nextn) / cp,每步固定计 1+nextn 个 token,与真实接受率无关examples/README.md「decode throughput」条官方曲线是「推测解码工作正常时的上界」;真实负载下要乘实际接受长度比。图 8 的 decode 曲线另用 0.75 接受率换算 τ=3.25,两套口径不能混用
2profiler 会扰动稳态:bsz=1 时 trace 内 step time 膨胀近 50%,profiler 退出后仍有 7–11% 残余减速,因此测量窗口之后不能再排测量examples/README.md「Stage decoupling and metrics」说明官方对测量方法学是认真的;但也意味着任何不遵守该顺序的自测数字都不可比
3无第三方独立复现:多家分析文章明确声明「未构建代码、未复现 benchmark」;公开曲线均在 NVIDIA SM100 上取得,昇腾无公开曲线is4.ai、toolworthy.ai、techrounder.com(2026-10)25.6k stars 是关注度,不是验证度

生产账本的溯源与数量级反推

数字一手出处反推 / 反证级别
155 万亿 tokens/天 / 集群知乎官方长文(2026-10-20);英文 Q&A 同句约 1.79e9 token/s。若按 decode 曲线 20k tok/s/GPU 量级估算,需约 9 万张卡量级;官方未给集群规模,因此无法判定合理性。is4.ai 认为「单集群数字大得不合理、可能误报」,但一手原文确实存在C 自报
$38 / GPU·小时(谷价)知乎官方长文 / Q&A官方未说明卡型;HN 讨论以 H100 租金约 $2.75/h 作对比,指出这是「收入」不是「成本」,不可直接对标租赁价C 自报
96% 输入缓存命中率 / TTFT ~400 ms / 230 tok/s媒体与分析文章转述,官方 README 与 Q&A 未列表命中率依赖未开源的 KV 缓存系统;用 DeepInfer 单独部署无法复现D 二手
AIME 2026 99.9% / GPQA Diamond 93.4% / HLE-Full 42.6%eval/README.md「Reference results」官方明确标注「indicative rather than exact,用于检查部署配置是否正确」;LLM judge 默认、HLE 只支持 judge,AIME 的 960 个 rollout 上 rule 与 llm 判分一致B 官方评测
开源内核 vs 内部内核差 ≤5%Q&A「Kernel implementation」FlashMLA 缺一项手写 SASS 优化,decode kernel 慢 5–10%,端到端最多差 5%;Mega MoE / indexer 内部版略有不同C 自报
负载均衡达到完美均衡离线 benchmark 的 ~80%Q&A「Data-parallel load balancing」未给统计口径;prefill moe_lb 中英两版数值不一致(见 05 章)C 自报
数量级反推的结论:155 万亿/天 与 26k tok/s/GPU 的 decode 曲线在算术上并不矛盾(差的是集群规模),但没有披露规模就无法做容量或成本对标。把它当「厂商自述的商业口径」使用,不要当 benchmark。反过来,Pareto 曲线因为给了 GPU 数、context、nextn、专家数与复跑脚本,是本报告认为最可信的一组性能数据。

方向相反的证据

10缺口清单与风险

把「不能做什么」写清楚,比多列十条特性更有用。以下缺口均可回溯到官方 README、部署 Q&A、GitHub issue 列表或源码配置。

三件套缺口(README 明示)

缺口官方原话 / 状态实际影响
KV cache 系统「A KV cache system」未提供;Q&A 称与内部基础设施耦合深拿不到跨请求前缀复用、96% 命中率、72h+ 留存。仓库里的 cache_engine.py 只是显存内块布局与算子,不是分布式缓存服务
VE / Prefill / Decode 分离「most required engine functionality is already implemented」——引擎侧有,编排层无无法独立扩缩容 P/D,无法分别优化 TTFT 与 TBT
跨 DP 副本负载均衡4 类 LB(Prefill / Decode / VE / EPLB)设计公开、代码未给大规模下负载倾斜,达不到「完美均衡 benchmark 的 80%」
在线 serving 面无 HTTP server、无 OpenAI 兼容接口、无自动扩缩容与请求级重路由Issue #147 正是社区在请求「最小 OpenAI 兼容 chat server」

社区的真实诉求:恰恰是「服务层」和「更多硬件」

按评论数排序拉取开放 issue(2026-11-08 快照,共 247 个),高频主题高度集中,反过来印证了交付边界:

主题代表 issue说明
在线服务面#147「Add a minimal OpenAI-compatible chat server over the offline engine」(11 条评论,最高)最强烈的单点需求
补齐 KV 传输 / 缓存层#214 Mooncake Transfer Engine 做 P/D KV 传输;#216 Mooncake Store 作 L3 缓存层社区在自建 Q&A 里描述的那一层
老架构 GPU 移植#92 / #47 SM90(H20-3E、Hopper);#201 AMD ROCm MI350X;#125 Apple Silicon官方只支持 SM100
昇腾型号扩展#152 Ascend 910B (A2);#46 / #267 910C;#190 V4-0731 on 910B官方只支持 950,而 910B 是存量主力
评测与工程修复#217 覆盖率误判、#281 未完成 rollout 计分、#280 记录 MTP 设置、#277 缓存清理误删早期仓库的正常打磨

来源:GitHub REST API /issues?state=open&sort=comments 前 40 条。一手实测

风险清单

层风险证据缓解
战略把「开源」理解成「可复制官方成本结构」三件套缺口 + 128 GPU 最小高效单元立项前先明确目标:学机制 / 用引擎 / 复刻服务,三者投入差一个数量级
工程硬件与工具链锁死:SM100 / Ascend 950、CUDA 13 / CANN 9.2、GCC≥13、Python 3.12、源码构建README + requirements-*.txt先用 4/8 卡小规模验证构建,再谈集群;Hopper 存量集群需等社区 PR
工程能力平台不对称:批不变 / 确定性采样仅 NVIDIA,昇腾无公开性能曲线README 括注「NVIDIA only」昇腾路线需单独做精度与性能验收
质量SWA Bounded Replay 是近似状态,官方未量化质量影响;确定性路径又要求关闭动态验证Q&A「近似 SWA KV cache」;README 确定性配置自建「精确重算 vs 近似重放」的 logprob / 任务分数对照实验
治理仓库极早期:6 commits / 4 contributors / 0 release / 0 tag / 版本 0.1.0 Betagit log + GitHub API + pyproject.toml按「上游快照」而非「依赖」管理,锁定 commit,自建回归
合规代码 Apache-2.0、权重 MIT、deepseek-recipe MIT、6 个 vendor 子模块各自许可;DeepEP-Ascend 在 GitHub API 中无 SPDX 许可标识LICENSE / HF 模型卡 / GitHub API部署前单独确认 DeepEP-Ascend 的许可文件;Apache-2.0 衍生需保留版权、许可证、NOTICE 与修改声明
安全xgrammar 缓存曾有生产事故(源码注释点名 CVE-2025-32381);默认 10 GiB 上限、可关structure_output/compiler.py保持 DEEPINFER_XGRAMMAR_CACHE_LIMIT_BYTES 为正值,暴露给运维监控

许可与合规建议(具体动作)

可以用于商业 / 内部项目

Apache-2.0 允许商用、修改、再分发与闭源衍生,含明确专利授权。必须:随分发保留 LICENSE 与版权声明;修改过的文件加显著变更说明;若上游有 NOTICE 则一并保留。模型权重 MIT,另有独立条款,二者不要混为一谈。

需要单独核对的部分

6 个 vendor 子模块中 FlashMLA / DeepEP / DeepGEMM / DeepSelect / DeepGEMM-Ascend 均为 MIT;DeepEP-Ascend 的 GitHub 元数据未标注 SPDX,接入昇腾路径前须查其仓库内 LICENSE 文件。另有 torch、flash-attn-4、tilelang、xgrammar 等第三方依赖,各自许可需按发行方式复核。

反模式清单

反模式症状修正
把 stars 当成熟度「25k stars 的项目应该很稳」看 commit / release / issue 比;当前是 6 / 0 / 247
拿 decode 曲线对标线上 SLA直接把 26k tok/s/GPU 写进容量规划先乘真实接受长度比,再扣负载均衡折损(官方 ~80%)
照搬 128 GPU 拓扑中小团队按 64P+64D 采购先从 4 卡 prefill / 8 卡 decode 的 offline 验证起步
只搬 draft 模型移植 3 个 MTP stage 后期待 +60–85%收益主要来自置信度调度 + 零开销调度 + Wide-EP 的系统组合
把 CP 当长上下文默认解看到 1M 上下文就开 CP官方实测 CP 比 DP 慢最多 5%;按 Q&A 走 DP/EP
忽略缓存版本元组升级权重/tokenizer 后复用旧 KV按 (部署配置, 模型权重, 用户组) 失效;读取严格校验

11落地:决策树、成熟度阶梯与检查清单

把前面的判断变成动作。先做三选一,再按阶梯推进,任何一级不达标就停在当前级,不要越级采购硬件。

决策树

判断否 →是 →
Q1 你有 SM100 或 Ascend 950 可用?停在 L0:读源码、移植 mtp_varlen.hpp 的预算搜索逻辑到自有调度器;不要尝试本地运行进 Q2
Q2 目标是复现官方的成本结构 / 命中率?L1:用 offline_inference.py + benchmark.py 做离线批推理与 PPL 回归,这是本仓库最成熟的用法进 Q3
Q3 能自建分布式 KV 缓存、4 类 LB、P/D 编排与 ≥128 GPU?改用云 API 或 vLLM / SGLang;把 DeepInfer 当参考实现而非底座L3–L4:按 Q&A 从 1P+1D 起步,先打通 KV 传递与命中路径,再逐步扩 EP
Q4 需要可复现输出(评测 / 数据生成)?保持 DSpark 动态验证开启,追求吞吐NVIDIA 上设 BATCH_INVARIANT=1 + ENABLE_MTP_VARLEN=0 + 固定 seq_seed;接受吞吐损失
图 9 · 落地成熟度阶梯:每一级都有明确的退出条件 矩形高度表示所需投入(示意);底边对齐,从左到右能力递进,越级投入是本项目最常见的浪费 L0 · 研究 读源码 / 架构文档 零硬件成本 L1 · 离线复跑 4–8 卡,源码构建 PPL 基线 / sweep 退出:曲线对得上 L2 · 能力移植 预算搜索 / ZOS 结构化输出 / 批不变 迁到自有引擎 退出:A/B 有增益 L3 · 补齐服务层 分布式 KV 缓存 P/D 分离编排 4 类负载均衡 在线 API / 可观测 退出:命中率可测 L4 · 生产对齐 EP64–128 超节点 3FS / 100 PiB 级 跨 DC 400G / 8 卡 配额冗余 / 容错 成本与 SLA 对齐 官方公开代码覆盖 L0–L2;L3 只有设计文档与算子;L4 主要为部署说明与自报口径。 建议:绝大多数团队的合理终点是 L1 或 L2,继续上探的边际成本陡增且无官方代码可依。
图 9 阶梯为本报告基于交付边界与部署 Q&A 的归纳,不是官方分级。矩形高度为投入示意,不代表量化人月。

动手前检查清单

90 天路线(建议节奏,非工期承诺)

阶段动作可交付判据
第 1–2 周源码精读 + 构建环境打通 + L1 等价性验证离线样例跑通、PPL 基线通过、两份架构笔记(调度 / KV)
第 3–6 周复跑 prefill / decode sweep;按真实接受率重算吞吐;做 DSpark 开关 A/B自有硬件上的 Pareto 曲线 + 一份口径说明(含与官方差异)
第 7–10 周选定 1–2 项机制移植(推荐预算搜索 / ZOS 流水线 / 结构化输出)在自有引擎上的 A/B 数据与回归测试
第 11–13 周评估是否需要 L3:KV 缓存层与路由的选型(3FS、Mooncake、自研)一份带成本估算的 go / no-go 决策,而非原型

12结论与判断

以下为本报告观点,不是业界共识,也不是官方立场。

判断一:这是一次「把服务栈的确定性部分交出去」的开源

DeepSeek 交出的是 kernel 怎么切、并行怎么排、验证怎么调度、回放怎么截断——这些是最难被复制、也最能建立技术标准话语权的部分。留下的是缓存与路由,也就是与内部基础设施、与真实流量分布、与数据强耦合的部分。这个边界划得相当理性:它足以让第三方把 V4.1-Flash 跑快,却不足以让第三方直接复制官方的成本结构。

判断二:对绝大多数团队,正确的用法是「读」而不是「部署」

SM100 / Ascend 950 的硬件门槛、128 GPU 的最小高效单元、三件套缺口,三者叠加后,能照着跑的团队本就很少。但 mtp_varlen.hpp 的预算搜索、schedule_mtp_varlen.py 的 GPU 侧重分配、ZOS 的流水线性守护、xgrammar 的安全注释,这些是与硬件无关的、可读可移植的工程知识。把它们读进自己的调度器,收益比编译一次这个仓库大得多。

判断三:最值得警惕的不是功能缺口,而是数据口径

官方对 benchmark 方法学的披露其实相当诚实(连 profiler 退出后 7–11% 残余减速都写了)。风险在于二次传播:把 full-acceptance 的 decode 吞吐、按 0.75 接受率换算的 Pareto 曲线、以及生产自报的 155 万亿/天混在一起引用,会得出完全错误的容量结论。本报告在图 8 与第 9 章专门把这三套口径拆开,正是为此。

判断四:DSpark 的 7GB 问题,答案比预想的更「省」

它不是一个独立 draft 模型,而是挂在主模型末 3 层 hidden 上的 3 个半自回归 stage,共享 embedding 与 lm_head,靠 projection + Markov head + confidence head 工作。V4 时代需要单独一份 DSpark checkpoint(本质是主模型 + 这 7GB 附加层),V4.1 已合并进同一份 48-shard 权重。对做权重分发、缓存与加载的工程团队,这意味着不需要为 draft 单独管理一份 target 权重。

最后一个观察:仓库只有 6 次提交,却包含中文注释的 C++ 调度器、双硬件后端的 TileLang kernel、逐样本 PPL 基线、YoCo 等价性 L1/L2 验证、以及一份仍在修订(v0.2)的部署 Q&A。这不像一个为发布而拼凑的开源项目,更像把一份成熟内部代码树做了一次脱敏后的快照。因此它的价值密度远高于 commit 数所暗示的水平,而它的可维护性风险也恰好来自同一件事。

13参考来源与复跑命令

结构化项目档案

字段值
项目名称DeepInfer(GitHub 规范名 deepseek-ai/DeepInfer,pyproject 包名 deepinfer,版本 0.1.0 Beta)
类别大模型推理执行引擎(离线批式),单模型专用,生产服务同源
定位支撑 DeepSeek V4.1 Flash 大规模在线服务的高性能推理框架;本次开源提供离线推理与规模化服务所需的核心特性
应用场景离线批推理 / 合成数据生成 / 批量评测 / 确定性可复现生成 / 大规模 MoE 服务架构研究与机制移植
支持模型DeepSeek-V4.1-Flash(默认 checkpoint DeepSeek-V4.1-Flash-1017)
支持硬件NVIDIA SM100、Huawei Ascend 950
关键依赖Python 3.12 / GCC≥13 / CUDA 13 或 CANN 9.2;torch 2.13.0、flash-attn-4 4.0.0b34、tilelang 0.1.15、tile-kernels 2.1.0、xgrammar 0.2.2、transformers 4.50.0;6 个 vendor 子模块
许可证代码 Apache-2.0(可商用、含专利授权、需保留 NOTICE 与修改声明);权重 MIT;deepseek-recipe MIT;vendor 多为 MIT,DeepEP-Ascend 需单独核对
不含KV cache 系统、完整 VE/P/D 分离编排、跨 DP 副本负载均衡、在线 HTTP / OpenAI 兼容服务

一手来源(A / B / C 级)

来源用途级别
本地 clone a679bb8:README.md、doc/inference_deployment_qa.md、examples/README.md、eval/README.md、pyproject.toml、requirements-*.txt、.gitmodules、LICENSE功能边界、部署口径、依赖、评测、许可A
csrc/engine/mtp_varlen.hpp、scheduler.hpp、zos.cpp;deepinfer/model_executor/models/mtp/dflash.py、eplb/policy.py、structure_output/compiler.py、environ.py、hugging_face/config.py算法与运行时实证A
doc/images/*.png 四张官方图Pareto 读数、EP8/EP64 对比、架构图B
HuggingFace:DeepSeek-V4.1-Flash-1017 模型卡 / config.json / safetensors index;DeepSeek-V4-Flash 与 DeepSeek-V4-Flash-DSpark 的 ?blobs=true763B / 1M ctx / MIT、权重体积与张量归属A
GitHub REST API:repo 元数据、contributors、releases、tags、issues25,620 stars、6 commits、247 issues 等A
知乎《DeepSeek V4.1 Flash 大规模推理部署实践》2026-10-20三目标、EPLB 数值、3FS 带宽、SWA 演进、参考文献C
arXiv:2607.05147《DSpark: Confidence-Scheduled Speculative Decoding with Semi-Autoregressive Generation》2026-07-06方法学、+60–85% 生产提升A / B

二手来源(D 级,仅作线索与反证据)

中新经纬 / 光明网 / 证券时报 / 中国基金报 / 北京日报(2026-10-20 ~ 10-21,官宣与产业解读);is4.ai、techrounder.com、toolworthy.ai、zendot.org、mlllm.io、technologypulse.app、n1n.ai、aiguide.cc(2026-10,缺口与门槛分析、第三方复现缺失声明);微信公众号「DeepSeek 开源 DeepInfer」长文(2026-10-28,HN 讨论、第三方集成 PR、issue 统计);HuggingFace 社区 GGUF 卡片 sakamakismile/DeepSeek-V4-Flash-DSpark-support-ds4-GGUF(drafter 张量来源说明)。所有引用数据均已回溯到一手;无法回溯者已标注为二手或存疑。

复跑命令(本报告全部 A 级数字的出处)

# 仓库与元数据
git clone https://github.com/deepseek-ai/DeepInfer.git && cd DeepInfer
git log --oneline --date=short --pretty='%h %ad %s'          # 6 次提交
curl -s https://api.github.com/repos/deepseek-ai/DeepInfer     # stars / license / created_at

# 代码体量:只数 .py/.cpp/.hpp/.pyi,排除 .git 与 vendor
python3 - <<'PY'
import os, collections
c = collections.Counter()
for dp, dns, fns in os.walk('.'):
    dns[:] = [d for d in dns if d not in {'.git', 'vendor'}]
    for f in fns:
        if f.endswith(('.py','.cpp','.hpp','.pyi')):
            p = os.path.join(dp, f)
            c[p.split(os.sep)[1] if len(p.split(os.sep)) > 2 else '(root)'] += sum(1 for _ in open(p, errors='ignore'))
print(sum(c.values()), c.most_common(8))
PY

# 权重差值:HF API 文件清单
curl -s 'https://huggingface.co/api/models/deepseek-ai/DeepSeek-V4-Flash?blobs=true'
curl -s 'https://huggingface.co/api/models/deepseek-ai/DeepSeek-V4-Flash-DSpark?blobs=true'
# 用 siblings[].size 求和(仅 .safetensors)得 159,617,149,040 与 166,886,535,336 B

# 内置 drafter 体积:解析 index.json + 各 shard 的 safetensors header(HTTP Range)
curl -sL .../model.safetensors.index.json | python3 -c "import json,sys; d=json.load(sys.stdin); ..."
# 按 weight_map 找 mtp.* 所在 shard,再按 data_offsets 累加 → 7,932,874,632 B

# 官方曲线(需要 SM100)
bash examples/sweep/run_sweep.sh prefill pe-128k 131072
bash examples/sweep/run_sweep.sh decode ce-128k 131072 3 0.75
python examples/yoco/yoco_equiv.py mask-compact
研究边界声明:本报告在 macOS 环境完成,执行的是源码静态盘点、git/API/模型索引取证与官方文档交叉验证,未编译、未运行任何 GPU 用例。所有涉及运行时性能的数字均标注为官方自测、建模或二手转述;本报告不构成独立性能验证。