开源项目深度研究 · @scene#50 · 2026-11-08
2026 年 10 月 20 日,DeepSeek 把支撑自家大规模在线服务的推理框架放上 GitHub。三周后它拿到 25,620 stars,却只有 6 次提交、4 位贡献者、0 个 release。这份报告不做功能复述,而是回答三个问题:它究竟给了什么、那些惊人的生产数字从哪来、以及一个团队该不该在上面投入。
只读这一页也能用。以下每条论断都可在正文中找到代码路径、命令或一手来源;标注「观点」的是本报告判断,不是业界共识。
期望接受长度 / 步耗时,步耗时由离线启动曲线、在线拟合斜率与采样器中位数共同估计。生产并发点收益 +4–7%,但并发 16 时是 −1.5%。源码实证 官方表格mtp.* 张量 7.933 GB(每个 stage 约 2.6 GB)。drafter 共享主模型 embedding 与 lm_head。权重实测full-acceptance accounting 计算(每步固定记 1+nextn 个 token),与真实接受率无关;Pareto 图另按 75% 接受率换算。所有数据均为自测,截至快照无第三方独立复现。方法论警告| 你的角色 | 先看 | 核心问题 |
|---|---|---|
| 推理基础设施工程师 | 02 / 05 / 06 / 07 / 08 | 哪些机制可以移植到自己的栈? |
| 平台选型 / 技术决策者 | 00 / 09 / 10 / 11 / 12 | 值不值得投人?门槛与缺口在哪? |
| 研究 DSpark / V4 架构 | 04 / 06 / 07 | draft 权重结构、验证调度、KV 压缩怎么落地? |
| 合规 / 采购 | 10 / 13 | 双重许可、子模块许可、安全公告怎么处置? |
DeepInfer 是一份高质量、可复跑、结构极清晰的执行引擎参考实现,也是目前唯一能读到「置信度调度推测解码 + YOCO 有界重放 + 零开销调度」如何协同工作的公开代码;但它不是可复制的生产服务方案,把仓库跑起来离复现官方成本结构,还差一整套缓存与路由系统。
把 DeepInfer 叫「推理框架」容易造成误判。更准确的说法是:面向单一模型结构、面向离线批执行、面向特定加速器拓扑深度优化的执行引擎(engine core),外部包着一层薄薄的 Python API。
| 时间 | 事件 | 对本次开源的意义 | 证据强度 |
|---|---|---|---|
| 2026-07-06 | DSpark 论文提交 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-25 | Q&A 英文档、DeepEP bump、布尔环境变量严格解析 | 发布后主要在做文档与构建修复 | git log |
| 2026-11-03 | a679bb8 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 / SGLang | TensorRT-LLM |
|---|---|---|---|
| 定位 | 单模型执行引擎核心 | 通用在线 serving 框架 | 编译式推理运行时 |
| 模型覆盖 | 1 个:V4.1-Flash | 数十种主流架构 | 主流架构 + 自定义插件 |
| 在线服务 | 不含(离线批式 API) | 含 HTTP / OpenAI 兼容 | 需配 Triton serving |
| 缓存 / 路由 | 算子有,系统无 | 前缀缓存 + 路由 | 运行时内 KV 管理 |
| 优化取向 | 为 MoE + YOCO + DSpark 极致协同 | generality 优先 | 单卡 / 单机 kernel 极致 |
| 血缘 | README 致谢:主要基于 vLLM 构建,另受 SGLang 与 TensorRT-LLM 启发 官方一手 | ||
先把「它有多大、哪部分最重」量出来。这个分布本身就是 C1(模型专用)最硬的证据:57.3% 的代码集中在模型执行层,而通用调度、服务、协议加起来不到一成。
model_executor 内部又细分为 models/v4_modules/(CED/YOCO/Engram/DFlash 结构)、layers/tilelang_ops/(CUDA 与 Ascend 双份 kernel)、eplb/、parallel_utils/——全部围绕 V4.1 单一架构。| 层 | 关键路径 | 职责 | 体量 |
|---|---|---|---|
| API | deepinfer/entrypoints/llm.py | LLM.generate() 离线批式入口 | 198 行 |
| 引擎 | deepinfer/engine/llm_engine.py | 多进程 worker 编排、ZOS 在途请求、延迟释放 | 1,029 行 |
| Worker | deepinfer/worker/ | 模型前向、KV cache 布局、CUDA graph、DFlash graph | 2,805 行 |
| 调度器 | csrc/engine/scheduler.hpp 等 | C++ 实现:prefill/decode 投票、抢占、MTP varlen、接受结果回填 | 1,329 行(单文件) |
| 桥接 | csrc/engine/pybind_*.cpp + deepinfer/_C/*.pyi | pybind11 暴露,含「借用存储的 numpy array」零拷贝约定 | 819 行桩 |
| 算子 | models/v4_modules/、layers/tilelang_ops/{cuda,asc}/、6 个 vendor | FlashMLA / 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.0b34 | CANN 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 个测试文件里包含三类高价值验证:
tests/models/offline_decode_ppl.json 按平台/工作负载存 PPL 基线,逐样本精确比对;长上下文(16,389 输入 / 4,096 输出 / nextn=5)单独覆盖。examples/yoco/yoco_equiv.py 提供 L1(单卡、秒级、不加载权重,比对 SWA pivot / 可见 key / store slot)与 L2(8 卡、teacher-forcing 逐元素比对 logprob 与 top-K,--mtp 5 时还逐位比对 confidence)。test_batch_invariant.py、test_ve_batch_invariant.py、test_cuda_sync_guards.py——后者在前向/采样 launch 期禁止 CPU-GPU 同步,直接守护 ZOS 的流水线性。好的理论章要能推出具体工程动作。DeepInfer 的每一个主要设计,都能从两条一阶关系推出来:算术强度决定 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 是一个高并发优化,不是通用加速器。
| 一阶关系 | 推出的动作 | 代码/文档落点 | 可证伪预测 |
|---|---|---|---|
| 算术强度 ∝ batch | Decode 用尽量大的 EP/DP(64–128),Prefill 用尽量小的 EP/DP(2–8) | Q&A「并行策略」;examples/benchmark.py 由 WORLD_SIZE × 可见设备数 推 ep_size | Prefill 扩 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) 反解 q | Q&A「Prefill Load Balancer」;csrc/engine/flops_estimator.hpp | 32,768 token 上限内,q 随已算前缀长度变化 |
| 缓存价值 = 命中率 × 复用间隔 | Block KV 用廉价 SSD 留 3–7 天;SWA KV 只在内存留约 180 秒 | 知乎原文 / Q&A「KV cache storage」;worker/cache_engine.py | SWA 落盘会浪费近一半持久缓存容量 |
如果一个团队只把 DSpark 的「draft 模型」搬走、不做置信度调度与零开销调度,那么它拿到的收益会远小于论文里的 60–85%;反过来,把 mtp_varlen.hpp 的预算搜索逻辑迁到自己的调度器上,即使 draft 结构不同,仍能复用其「按期望收益分配验证算力」的核心。这是本报告认为最值得移植的一块。
不理解模型结构,就无法理解 DeepInfer 为什么这么写。本节所有配置数字来自 HuggingFace 仓库的 config.json 原文,权重体积来自文件索引与 safetensors header 的实测解析。
| 字段 | 值 | 对推理引擎的约束 |
|---|---|---|
num_hidden_layers | 40 | 主模型层数;model_modules[num_hidden_layers+2:] 之后才是 draft 层 |
hidden_size / head_dim | 5120 / 512 | KV 单头维度大,KV 压缩收益高 |
n_routed_experts / num_experts_per_tok | 384 + 1 shared / top-6 | 专家数决定 EP 规模上限与冗余专家取整 |
sliding_window | 128 | 直接决定 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_layers | 3 | DFlash draft stage 数 |
dspark_block_size / dspark_target_layer_ids | 5 / [37, 38, 39] | 一次提 5 个 draft;取主模型末 3 层 hidden 做投影 |
dspark_markov_rank / dspark_n_routed_experts | 256 / 128(top-3) | draft 侧有独立的小 MoE,不是纯轻量头 |
quantization_config | fp8 / expert_dtype=fp4 / scale_fmt=ue8m0 | 与 Q&A 的「Main KV 用 e4m3、routed expert 权重用 MXFP4」一致 |
max_position_embeddings | 1,048,576 | 1M 上下文;YaRN factor=16 |
来源:huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash-1017/raw/main/config.json;模型卡标注 763B params、MIT 权重许可。一手配置
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。
?blobs=true 文件清单、model.safetensors.index.json 的 weight_map,以及 shard 44–46 的 safetensors header(HTTP Range 只取头部,按 data_offsets 累加)。复跑脚本见 13 章。一手实测这是本研究最值得单独回答的一个历史问题。把三条证据链拼起来,结论很明确:
| 证据 | 内容 | 强度 |
|---|---|---|
| 体积差 | V4-Flash 159,617,149,040 B → V4-Flash-DSpark 166,886,535,336 B,差 7,269,386,296 B,shard 46 → 48 | HF 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 | 一手源码 |
不需要。 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 的接受概率。
生产架构不是仓库代码,而是部署 Q&A 与知乎技术文章描述的系统。三条设计目标决定了整套拓扑:多厂商芯片、用普通 8 卡机做 Prefill / 64–128 卡超节点做 Decode、KV 缓存保留 72 小时以上。
doc/inference_deployment_qa.md;原图见仓库 doc/images/architecture_overview.png。注意三个 Service 框内还有一层「Expert-Parallel Load Balancer」,本图省略以突出主数据流。| 阶段 | 策略 | 取值逻辑 | 官方理由 |
|---|---|---|---|
| Prefill | EP2–8 / DP2–8 | 显存够就用尽可能小的 EP/DP | 每专家 batch 本就够大;小组改善 DP/EP 均衡并减少 NVLink 流量 |
| Decode | EP64–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 通信开销大,模型放得下就不用 | |
parallel_utils/cp.py、--cp 参数),但生产部署不启用」——评估时应区分代码能力与推荐配置。证据冲突官方描述的「冗余专家 + 周期重排」在仓库里有完整实现: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 权重搬运。
| 参数 | Prefill | Decode |
|---|---|---|
| 每卡冗余专家起点 | 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)。这条数字是判断「我的团队能不能照搬」的第一道门槛。
这是 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 独立 temperature | dflash.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)做的事,可以逐步复述:
SamplerRuntimeEstimator 取最近 9 个采样耗时的中位数(至少 5 个样本才生效);ForwardRuntimeEstimator 维护 5,000 步窗口,先按 graph size 分组取中位数、再对组中位数取中位数,用两个 multiset 做 O(log n) 动态维护。步耗时 = baseline(graph_size) + slope·graph_size + sampler_ms。p 压进两个优先队列。为避免「后面的 confidence 影响前面 token 是否被验证」,算总预算用 N−2 轮的值、分配每请求长度用 N−1 轮的值,靠 schedule_cnt / process_cnt 配对判断数据滞后几轮——源码注释把这件事讲得非常清楚。cur_expected / time_ms,取最大值得到 best_bsz。best_bsz − num_seqs 个额外验证位按第二个队列的顺序分给期望收益最高的请求,得到 seqlens_q。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 参数化。可复跑y = 300 − (v+3) × 14.667 换算。官方据 EP64/DP64 数据归纳为「生产工作点 +4–7%」;注意并发 16 时为负收益,与本报告第 3 章的推导一致。官方自测表| 并发 /rank | 固定5 验证长度 | 动态验证长度 | 固定5 接受长度 | 动态接受长度 | 固定5 吞吐 tok/s/rank | 动态吞吐 | 增益 |
|---|---|---|---|---|---|---|---|
| 16 | 5 | 4.44 | 3.32 | 3.24 | 4,891 | 4,816 | −1.5% |
| 32 | 5 | 3.65 | 3.25 | 3.17 | 8,964 | 9,111 | +1.6% |
| 48 | 5 | 3.94 | 3.30 | 3.26 | 12,032 | 12,467 | +3.6% |
| 60 | 5 | 3.58 | 3.30 | 3.21 | 13,730 | 14,466 | +5.4% |
| 72 | 5 | 3.24 | 3.29 | 3.12 | 14,962 | 15,961 | +6.7% |
| 96 | 5 | 3.24 | 3.30 | 3.15 | 16,817 | 18,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 的校准是分位置做的——因为后缀位置的接受率天然衰减,单一温度无法拟合。
如果说 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 状态 | 重算代价降为与上下文长度、层数无关的常数 |
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 值的框架变更都会让旧缓存失效。官方明确:生产从未做过缓存格式迁移。写失败不上报引擎,但读取时严格校验。
V4.1 的 KV 已被大幅压缩,读取又与请求排队、引擎计算重叠,官方判断集中式 CXL 缓存对 TTFT 改善有限,SSD 成本远低于 DRAM。唯一可能的好处是减少 SSD 写入、延长寿命,但当前未采用。
test_kl.py 与 PPL 逐样本基线是回归测试,不构成对「近似 vs 精确」的独立评估。这是评估该技术用于高精度场景时最应补的实验。这一组能力不改变算法,只改变「GPU 有没有在等 CPU」。它们对生产稳定性的价值,往往比多几个 kernel 点更高。
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。这类把安全公告写进配置的痕迹,比功能列表更能说明它确实跑在生产里。源码实证这一章回答「这些数字能不能信」。原则是:区分实测 / 建模 / 自报 / 二手转述,把方向相反的证据与口径缺陷同列,并做数量级自洽性反推。
| 级别 | 定义 | 本报告中的例子 |
|---|---|---|
| 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 |
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,坐标均按线性换算。官方受控实验| 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 倍。
| 请求/rank | tok/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。
| # | 口径 / 缺陷 | 原文依据 | 对解读的影响 |
|---|---|---|---|
| 1 | decode 吞吐按「满接受」记账:avg_SPS × decode_num_requests × (1 + nextn) / cp,每步固定计 1+nextn 个 token,与真实接受率无关 | examples/README.md「decode throughput」条 | 官方曲线是「推测解码工作正常时的上界」;真实负载下要乘实际接受长度比。图 8 的 decode 曲线另用 0.75 接受率换算 τ=3.25,两套口径不能混用 |
| 2 | profiler 会扰动稳态: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 自报 |
把「不能做什么」写清楚,比多列十条特性更有用。以下缺口均可回溯到官方 README、部署 Q&A、GitHub issue 列表或源码配置。
| 缺口 | 官方原话 / 状态 | 实际影响 |
|---|---|---|
| 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 Beta | git 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 | 按 (部署配置, 模型权重, 用户组) 失效;读取严格校验 |
把前面的判断变成动作。先做三选一,再按阶梯推进,任何一级不达标就停在当前级,不要越级采购硬件。
| 判断 | 否 → | 是 → |
|---|---|---|
| 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;接受吞吐损失 |
compute_capability 探测结果。DEEPINFER_ACCELERATOR 导出;注意 build.sh 会强制重装 NCCL 2.32.3。python examples/offline_inference.py --ep 8 与 --check_structured_output,验证 PPL 基线逐样本通过。python examples/yoco/yoco_equiv.py mask-compact(L1,秒级、不加载权重)验证构建产物与仓库一致。bash examples/sweep/run_sweep.sh prefill ... 与 decode ... 各出一条曲线,与官方 Pareto 对比读数。DeepEP-Ascend 许可文件,并做精度与性能验收(批不变 / 确定性不可用)。DEEPINFER_XGRAMMAR_CACHE_LIMIT_BYTES 为正值并监控缓存占用。a679bb8),把 PPL 基线、YoCo L1/L2 结果纳入自己的 CI。| 阶段 | 动作 | 可交付判据 |
|---|---|---|
| 第 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 决策,而非原型 |
以下为本报告观点,不是业界共识,也不是官方立场。
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 章专门把这三套口径拆开,正是为此。
它不是一个独立 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 数所暗示的水平,而它的可维护性风险也恰好来自同一件事。
| 字段 | 值 |
|---|---|
| 项目名称 | 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 兼容服务 |
| 来源 | 用途 | 级别 |
|---|---|---|
本地 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=true | 763B / 1M ctx / MIT、权重体积与张量归属 | A |
| GitHub REST API:repo 元数据、contributors、releases、tags、issues | 25,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 |
中新经纬 / 光明网 / 证券时报 / 中国基金报 / 北京日报(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 张量来源说明)。所有引用数据均已回溯到一手;无法回溯者已标注为二手或存疑。
# 仓库与元数据
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