05.4 · DeepInfer 推理框架总览:源码结构、开源与未开源部分对照

📦 GitHub: https://github.com/geekchow/deepseek-v41-flash-inference-guide

背景: 本文选自开源学习指南《DeepSeek V4.1 Flash 大规模推理部署实践》。全书用一个贯穿示例串联:编程 Agent 通过 Messages 协议发起第三轮请求,上下文 10 万 token、带一张截图、以 edit_file 工具调用结束;文中的"第 N 步"即指该示例中的步骤,完整场景见 04 贯穿示例。
你在哪里 :第 5 章第 4 篇。DeepInfer 本身是一个子系统,所以这里按同样的模式递归:先给一张迷你概念地图,再分 4 篇深入。

读完本文你将知道:DeepInfer 在系统中扮演哪几个角色、仓库里每个目录对应哪个概念、开源版能做什么不能做什么。


1. 角色回顾

DeepInfer 是每个 prefill / decode / VE 实例内部的推理引擎。在官方架构图里,黄色的 Prefill Service、橙色的 Decode Service、紫色的 Vision Encoder Service 都由它驱动,EPLB 也在引擎内部。

  • 出现在示例:第 ④(VE 编码截图)、第 ⑤(prefill 3,104 token + Bounded Replay)、第 ⑦(DSpark decode)、第 ⑨(SWA 快照拷贝)。

2. 迷你概念地图

引擎内概念 一句话 对应仓库位置 详见
Attention DP + MoE EP / EPLB 注意力数据并行、专家并行、专家重排 deepinfer/model_executor/parallel_utils/、model_executor/eplb/{policy,shuffle}.py 02-decode、负载均衡
Balanced CP 平衡的上下文并行(开源版支持 --cp,线上暂未使用) parallel_utils/cp.py 04-quickstart
YOCO 截断 / SWA Bounded Replay 解码器层只重放 prompt 最后 140 token model_executor/input_metadata/yoco.py、examples/yoco/ 01-prefill
DSpark(代码中为 DFlash 草稿头)+ 置信度调度验证 变长投机解码 input_metadata/dflash.py、worker/dflash_cuda_graph_runner.py、models/mtp/ 02-decode
零开销异步调度 CPU 调度与 GPU 计算重叠 csrc/engine/、worker/model_runner.py、input_metadata/prepare_tensor_input_zos.py 03-scheduling
结构化输出 语法自动机生成 token 掩码 deepinfer/structure_output/{compiler,matcher,mask}.py 03-scheduling
Batch-invariant / 确定性采样 结果与批组成无关、可复现 model_executor/layers/sampler.py 03-scheduling
视觉编码 图像预处理与 ViT deepinfer/ve/、models/vision_encoder/ 01-prefill
高性能算子 FlashMLA、DeepGEMM、DeepEP、TileKernels、DeepSelect、自研 TileLang 算子 model_executor/layers/tilelang_ops/、npu_ops/、vendor/ 下文第 4 节
硬件抽象 英伟达 / 昇腾设备与拓扑绑定 deep_cluster/hardware/{nvidia,ascend}.py、deep_cluster/topology/ 04-quickstart

下图回答:DeepInfer 内部从请求到 token 的分层结构。
#mermaid-svg-5ge8UzWdysPrKEcA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5ge8UzWdysPrKEcA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5ge8UzWdysPrKEcA .error-icon{fill:#552222;}#mermaid-svg-5ge8UzWdysPrKEcA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5ge8UzWdysPrKEcA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5ge8UzWdysPrKEcA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5ge8UzWdysPrKEcA .marker.cross{stroke:#333333;}#mermaid-svg-5ge8UzWdysPrKEcA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5ge8UzWdysPrKEcA p{margin:0;}#mermaid-svg-5ge8UzWdysPrKEcA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5ge8UzWdysPrKEcA .cluster-label text{fill:#333;}#mermaid-svg-5ge8UzWdysPrKEcA .cluster-label span{color:#333;}#mermaid-svg-5ge8UzWdysPrKEcA .cluster-label span p{background-color:transparent;}#mermaid-svg-5ge8UzWdysPrKEcA .label text,#mermaid-svg-5ge8UzWdysPrKEcA span{fill:#333;color:#333;}#mermaid-svg-5ge8UzWdysPrKEcA .node rect,#mermaid-svg-5ge8UzWdysPrKEcA .node circle,#mermaid-svg-5ge8UzWdysPrKEcA .node ellipse,#mermaid-svg-5ge8UzWdysPrKEcA .node polygon,#mermaid-svg-5ge8UzWdysPrKEcA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5ge8UzWdysPrKEcA .rough-node .label text,#mermaid-svg-5ge8UzWdysPrKEcA .node .label text,#mermaid-svg-5ge8UzWdysPrKEcA .image-shape .label,#mermaid-svg-5ge8UzWdysPrKEcA .icon-shape .label{text-anchor:middle;}#mermaid-svg-5ge8UzWdysPrKEcA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5ge8UzWdysPrKEcA .rough-node .label,#mermaid-svg-5ge8UzWdysPrKEcA .node .label,#mermaid-svg-5ge8UzWdysPrKEcA .image-shape .label,#mermaid-svg-5ge8UzWdysPrKEcA .icon-shape .label{text-align:center;}#mermaid-svg-5ge8UzWdysPrKEcA .node.clickable{cursor:pointer;}#mermaid-svg-5ge8UzWdysPrKEcA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5ge8UzWdysPrKEcA .arrowheadPath{fill:#333333;}#mermaid-svg-5ge8UzWdysPrKEcA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5ge8UzWdysPrKEcA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5ge8UzWdysPrKEcA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5ge8UzWdysPrKEcA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5ge8UzWdysPrKEcA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5ge8UzWdysPrKEcA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5ge8UzWdysPrKEcA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5ge8UzWdysPrKEcA .cluster text{fill:#333;}#mermaid-svg-5ge8UzWdysPrKEcA .cluster span{color:#333;}#mermaid-svg-5ge8UzWdysPrKEcA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5ge8UzWdysPrKEcA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5ge8UzWdysPrKEcA rect.text{fill:none;stroke-width:0;}#mermaid-svg-5ge8UzWdysPrKEcA .icon-shape,#mermaid-svg-5ge8UzWdysPrKEcA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5ge8UzWdysPrKEcA .icon-shape p,#mermaid-svg-5ge8UzWdysPrKEcA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5ge8UzWdysPrKEcA .icon-shape .label rect,#mermaid-svg-5ge8UzWdysPrKEcA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5ge8UzWdysPrKEcA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5ge8UzWdysPrKEcA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5ge8UzWdysPrKEcA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} entrypoints/llm.py

LLM.generate
engine/llm_engine.py

请求与调度
csrc/engine

C++ 调度核心
worker/model_runner.py

CUDA Graph 执行
models/deepseek.py

v4_modules / mtp
tilelang_ops

自研算子
FlashMLA DeepGEMM

DeepEP DeepSelect
layers/sampler.py

采样 + SO 掩码
structure_output

语法编译
eplb

专家重排


3. 开源版能做什么 / 不能做什么

能做(README 列出) 不能做(README 明确列为"完整服务所需但未包含")
优化的算子、模型运行时、采样运行时 KV 缓存系统(kvcache-store + 3FS 接入)
Attention DP / balanced CP,MoE EP + EPLB VE / Prefill / Decode 分离部署(引擎侧功能大多已实现)
DSpark 与置信度调度验证 prefill 与 decode 的 DP 副本间负载均衡
SWA Bounded Replay 在线 HTTP 服务(需自己用 deepseek-recipe 搭)
异步调度(默认开启)
Batch-invariant 推理、确定性采样(仅英伟达)
结构化输出(regex / JSON schema / EBNF)
维度 取值
支持模型 仅 DeepSeek-V4.1-Flash(默认权重 deepseek-ai/DeepSeek-V4.1-Flash-1017)
支持硬件 英伟达 SM100 GPU(Blackwell 架构,如 B200 / GB200);华为昇腾 950 NPU
软件 Linux、GCC ≥ 13、Python 3.12、CUDA 13(英伟达)/ CANN 9.2(昇腾)
许可证 Apache-2.0
血统 最初主要基于 vLLM 构建,借鉴 SGLang 与 TensorRT-LLM
后续 未来 DeepSeek 模型的推理代码与性能优化会继续在此仓库开源

4. 算子层与内外版本差异

算子库 作用
FlashMLA 注意力解码 kernel
DeepGEMM FP8 / FP4 矩阵乘,含 MoE 分组 GEMM
DeepEP MoE 专家并行的 all-to-all 通信
TileKernels / DeepSelect DeepSeek 新近开源的 kernel 库;DeepSelect 从名称和 npu_ops/deep_select.py 看用于稀疏注意力的 top-k 选择(推断,未见官方说明)
TileLang 自研算子 tilelang_ops/ 下的融合算子,例如 DSpark 的 GPU 侧变长计算
Mega MoE 在一个 scale-up 域内,无论 EP 大小、批大小,融合的 Mega MoE 都明显快于非融合 MoE,是通用方案

开源版和内部版差多少 :DeepGEMM / FlashMLA 等基本一致,indexer 和 mega 系列略有差异;开源 FlashMLA 少一个手调 SASS(GPU 汇编)优化,解码 kernel 慢 5%--10%;端到端差距最多约 5%。内部草稿模型略新,性能差异很小。


5. 本文件夹的阅读顺序(按示例出场顺序)

  1. 05.4.1 Prefill ------ 第 ④⑤ 步
  2. 05.4.2 Decode ------ 第 ⑦ 步
  3. 05.4.3 调度与结构化输出 ------ 第 ⑦ 步的"每一步内部"
  4. 05.4.4 快速上手 ------ 自己跑起来

上一篇:05.3 负载均衡器 | 返回:概念地图


📚 返回专栏目录

相关推荐
Flynn Liang1 小时前
Spring AI 多模态实战(下):文生图 + TTS 语音合成(含 2.0 流式音频分片)
人工智能·spring·文生图·音视频·语音合成·tts·springai
长不大的杨瑞杰1 小时前
OpenCode v2 Custom Tools 实战:开发数据库、工单与发布工具
人工智能·typescript·开发工具·opencode·custom tools
羊仔AI探索1 小时前
离世仅仅半个月,张雪峰被蒸馏了
人工智能·aigc·蒸馏·张雪峰·skills
zhippt_10141 小时前
只剩截图没有源文件?图转PPT把图片还原成可编辑幻灯片
前端·人工智能·powerpoint
小oo呆2 小时前
【自然语言处理与大模型】自然语言处理的漫漫长路之深度学习时代
人工智能·深度学习·自然语言处理
JavaPub-rodert2 小时前
AI Agent 的记忆系统怎么设计?从短期记忆、长期记忆到 RAG,讲透 Memory 工程化
人工智能
智恒百亿2 小时前
一台 5090 八卡服务器怎么分给一个团队用?多模型多任务的显存分配实战
java·大数据·人工智能
MCT1236542 小时前
AI VRM 高频设计|功率电感磁材选型与电源损耗、效率关系
人工智能·dc-dc电源·功率电感·一体成型电感
汤姆宝库2 小时前
安全深拆:越狱、Sleeper与可解释性
人工智能