📦 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. 本文件夹的阅读顺序(按示例出场顺序)
- 05.4.1 Prefill ------ 第 ④⑤ 步
- 05.4.2 Decode ------ 第 ⑦ 步
- 05.4.3 调度与结构化输出 ------ 第 ⑦ 步的"每一步内部"
- 05.4.4 快速上手 ------ 自己跑起来
上一篇:05.3 负载均衡器 | 返回:概念地图
📚 返回专栏目录