知识点总结

摘要

DeepSeek 把支撑自家线上服务的推理框架 DeepInfer 开源了,同时放出一份部署问答,讲清了 V4.1 Flash 的线上服务是怎么搭起来的。这次开源只包含离线推理,但其中的工程思路,做推理的人都值得看一遍。

是什么

大模型能做什么,由模型本身决定;能用多低的成本把它卖给海量用户,则取决于夹在中间的推理框架。DeepInfer 就是 DeepSeek 线上服务背后的那一层。

根据官方部署问答披露的数据:

  • 单个集群每天服务 155 万亿 token;
  • 按谷时价格计算,整体收入约 每 GPU 小时 38 美元。

这次开源的是两个仓库:

  • DeepInfer:推理引擎本体,集成了高性能算子(FlashMLA、DeepGEMM、DeepEP、TileLang 算子等),支持分布式推理、推测解码、SWA Bounded Replay、结构化输出等能力,可运行在英伟达和华为昇腾两个平台上。
  • deepseek-recipe:生产级的 Token 编解码组件,用 Rust 实现并提供 Python 绑定,把 Chat Completions、Responses、Messages 三种 API 协议统一转换为模型的 token 序列,处理逻辑与 DeepSeek 官方 API 完全对齐。

DeepInfer 最初主要基于 vLLM 构建,也借鉴了 SGLang 和 TensorRT-LLM。官方表示,DeepSeek 后续新模型的推理代码也会继续在这个仓库里更新。

先把边界说清楚,这次开源的是离线推理部分,一套完整的在线服务还缺三块:

  1. KV 缓存系统;
  2. 视觉编码 / Prefill / Decode 分离部署(引擎侧大部分功能已实现);
  3. 跨数据并行副本的负载均衡。

KV 缓存管理和负载均衡跟 DeepSeek 内部基础设施耦合较深,所以代码暂未开源,只在技术报告和部署问答里讲了设计。

核心优势

1. Wide-EP:Decode 阶段用 64~128 卡做专家并行

V4.1 Flash 是 MoE 模型。DeepInfer 的做法是:Prefill 用尽量小的并行规模(EP2~8),Decode 则在显存允许的范围内用尽量大的 EP(EP64~128,即 Wide-EP)。专家分得越散,每一步 MoE 部分的显存读取量越低,吞吐就越高。

官方基准(64 卡 Decode、128K 上下文、按 75% 草稿接受率折算):

每个 DP rank 的并发单卡输出吞吐单用户速度
8约 2,600 token/s约 325 token/s
64约 15,700 token/s约 246 token/s
256约 26,300 token/s约 103 token/s

Prefill 侧在 4 卡、32K 批大小下,单卡未命中缓存的输入吞吐约 87,000 token/s。

2. DSpark:推测解码不再“一刀切”

普通推测解码每步固定验证 N 个草稿 token,可不同请求、不同位置的草稿被接受的概率差别很大,固定长度就会把算力浪费在低概率 token 上。

DSpark 用一个置信度头预测每个草稿 token 的接受率,再把验证算力优先分给收益最高的那些。线上草稿模型一次生成 5 个 token,动态验证后每步实际验证的数量降到 3.2~4.4 个(减少约 30%),平均接受长度基本不变。在生产工作点(每个 rank 约 60 条并发)上,吞吐提升 4%~7%。

3. SWA Bounded Replay:把重算成本压成常数

V4.1 用了滑动窗口注意力(SWA)。缓存命中但 SWA 缓存缺失时,常规做法是把窗口内的历史全部重算一遍。DeepInfer 只重放最近 128 个 token,并把注意力窗口截断在重放段内,用近似的 SWA 缓存代替精确重建,重算成本因此与上下文长度、层数都无关。

把它用在解码器层后(精确重建本需把最后 2,560 个 token 过一遍 20 层解码器),每次 Prefill 的总计算量几乎减半。

4. 零开销异步调度

传统流程里,GPU 算完一步要等 CPU 做完后处理和下一步调度,中间存在空转。DeepInfer 借鉴 SGLang 和 NanoFlow 的思路,让 CPU 在 GPU 执行第 N 步时就并行完成第 N+1 步的调度,GPU 全程不空闲。这个功能默认开启。

5. 结果可复现:Batch 不变性与确定性采样

同一个请求,无论和哪些请求拼在一个 batch 里,模型结果都保持一致;输入和采样参数相同,就能得到完全相同的输出。做评测、回归测试和线上排障时,这一点非常实用(目前仅支持英伟达平台)。

6. KV 缓存保留超过 72 小时

这部分没开源,但设计值得一看:主体的块 KV 缓存不放在本机内存,而是存进专用的 3FS 存储集群,约 100 PiB SSD,Agent 流量保留 3 天,对话流量保留 7 天。任何一台 Prefill 机器都能命中任意前缀,路由时就不必再去照顾前缀亲和性。

面向人群

  • 大模型推理 / 基础设施工程师:这是少有的、来自一线大规模服务的完整工程实践,部署问答里的参数(EP 规模、冗余专家数、负载均衡策略)可以直接拿来对照。
  • 计划私有化部署 DeepSeek 的企业:官方建议的最小高效部署单元是 64 卡 Prefill 加 64 卡 Decode,评估资源前值得先读一遍部署问答。
  • 用昇腾做推理的团队:DeepInfer 原生支持昇腾 950,国产算力也有了一份官方参考实现。

普通开发者手里的消费级显卡跑不起来,硬件门槛是英伟达 SM100 架构(B200、GB200 这类 Blackwell 数据中心卡)或昇腾 950。不过,结构化输出、确定性采样、异步调度这些思路,在其他推理框架里同样适用。

如何使用

环境要求

  • Linux,GCC 13 及以上,Python 3.12
  • 英伟达平台需要 CUDA 13,昇腾平台需要 CANN 9.2
  • 目前只支持 DeepSeek-V4.1-Flash 一个模型

编译安装

先创建一个干净的 Python 3.12 环境,然后:

git clone https://github.com/deepseek-ai/DeepInfer.git
cd DeepInfer

# 昇腾平台改成 ascend;运行时也要保持这个环境变量
export DEEPINFER_ACCELERATOR=nvidia
./build.sh

离线推理

首次运行会自动把 DeepSeek-V4.1-Flash-1017 权重下载到 Hugging Face 缓存目录。已有本地权重的话,用环境变量指定路径:

export DEEPINFER_HF_MODEL_DIR=/path/to/DeepSeek-V4.1-Flash-1017

# 默认 8 卡专家并行
python examples/offline_inference.py --ep 8

# 2 路专家并行 + 8 路数据并行
python examples/offline_inference.py --ep 2 --dp 8

常用开关

几个特性都通过环境变量控制:

# 推测解码 + 置信度调度验证;NEXTN 控制最大草稿长度,默认 5
export DEEPINFER_ENABLE_MTP_VARLEN=1
export DEEPINFER_USE_NEXTN_DECODE=5

# 解码器 SWA Bounded Replay(V4.1 默认配置)
export DEEPINFER_YOCO_PREFILL_TRUNCATION_MODE=compact
export DEEPINFER_YOCO_PREFILL_KEEP_TOKENS=140

# Batch 不变性(仅英伟达)
export DEEPINFER_BATCH_INVARIANT=1

如果要确定性采样,需要同时设置 DEEPINFER_BATCH_INVARIANT=1 和 DEEPINFER_ENABLE_MTP_VARLEN=0,并给 SamplingParams 传入固定的 seq_seed。

结构化输出

通过 SamplingParams 的 so_args 参数,可以把输出约束到正则、JSON Schema 或 EBNF 语法。下面的写法取自仓库 examples 目录,llm 是用 examples 里的辅助函数创建的引擎实例:

import json
from deepinfer.sampling_params import SamplingParams

schema = {
    "type": "object",
    "properties": {
        "color": {"type": "string", "enum": ["red", "green", "blue"]},
        "count": {"type": "integer", "enum": [1, 2, 3]},
    },
    "required": ["color", "count"],
    "additionalProperties": False,
}

params = SamplingParams(
    temperature=0,
    max_tokens=128,
    so_args={"schema_type": "json", "schema": json.dumps(schema)},
)
outputs = llm.generate(prompts=["随便描述一个物体"], sampling_params=[params])

schema_type 还可以取 regex 或 ebnf。

验证部署是否正确

仓库的 eval 目录提供了 AIME 2026、GPQA Diamond、HLE 三套评测脚本,官方参考 Pass@1 分别为 99.9%、93.4%、42.6%(HLE 为全量集)。部署完跑一遍,分数接近就说明配置没问题。注意脚本不会自动下载数据集,需要先按 eval 文档准备好 JSONL;评分默认调用一个 LLM 裁判服务:

# LLM 裁判服务(OpenAI 兼容接口)
export EVAL_JUDGE_BASE_URL=https://api.deepseek.com
export EVAL_JUDGE_API_KEY=<key>
export EVAL_JUDGE_MODEL=deepseek-v4-flash

EP=8 N_SAMPLE=4 TAG=smoke bash eval/aime/run.sh   # 冒烟测试

没有裁判服务的话,AIME 和 GPQA 可以改用规则判分:python eval/score.py --out-dir eval/outputs/aime/<TAG> --judge rule(HLE 只支持 LLM 裁判)。

对接 API:deepseek-recipe

想在自己的推理后端前面接一层和官方行为一致的 API,可以用 deepseek-recipe:

python3 -m pip install deepseek-recipe

它负责请求转换、提示词编码和输出解析(思考内容、工具调用、结构化输出),模型推理和 HTTP 服务由调用方自己提供。

项目地址:github.com/deepseek-ai/DeepInfer

写在最后:三行速记

  • 能跑什么:DeepSeek-V4.1-Flash 离线推理,硬件为英伟达 SM100 或昇腾 950,在线服务所需的 KV 缓存与负载均衡需自建。
  • 最值得学:Wide-EP 大规模专家并行、DSpark 动态验证、SWA Bounded Replay、零开销异步调度。
  • 最先读的:仓库里的部署问答文档,并行规模、冗余专家数、存储配比这些参数都写在里面。
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐