一、DeepInfer 是什么

DeepInfer 是 DeepSeek 用在自家线上服务里的推理框架,10 月 20 日以 Apache 2.0 许可证开源。README 的定位是“离线推理加规模化服务所需的核心功能”。

它最早主要基于 vLLM 构建,借鉴了 SGLang 和 TensorRT-LLM 的思路,并使用 DeepSeek 此前开源的 FlashMLA、DeepGEMM、DeepEP 等内核库。配套的 deepseek-recipe 库(Rust 编写,提供 Python 接口)负责把对话请求转换成模型输入,行为与官方接口对齐。

二、硬件和软件要求

2.1 支持范围
项目要求
模型仅 DeepSeek-V4.1-Flash
英伟达 GPUSM100 架构(计算能力 10.0),CUDA 13
华为 NPU昇腾 950,CANN 9.2
系统Linux,GCC ≥ 13,Python 3.12

SM100 是英伟达数据中心级 Blackwell 显卡所用的架构。Hopper 及更早的英伟达架构不在列表里。

2.2 一键预检脚本

把下面的脚本保存为 precheck.sh,执行 bash precheck.sh:

#!/usr/bin/env bash
ok()   { echo "[通过] $*"; }
warn() { echo "[注意] $*"; }

gcc_major=$(gcc -dumpversion 2>/dev/null | cut -d. -f1)
if [ -n "$gcc_major" ] && [ "$gcc_major" -ge 13 ]; then ok "GCC $gcc_major"; else warn "需要 GCC >= 13"; fi

py=$(python3 -c 'import sys; print("%d.%d" % sys.version_info[:2])' 2>/dev/null)
[ "$py" = "3.12" ] && ok "Python $py" || warn "需要 Python 3.12,当前:${py:-未安装}"

if command -v nvidia-smi >/dev/null 2>&1; then
  nvidia-smi --query-gpu=index,name,compute_cap --format=csv,noheader | while IFS=, read -r idx name cap; do
    cap=$(echo "$cap" | tr -d ' ')
    [ "$cap" = "10.0" ] && ok "GPU $idx:$name SM100" || warn "GPU $idx:$name 计算能力 $cap,不在支持范围"
  done
fi

三、构建与运行

3.1 构建
git clone https://github.com/deepseek-ai/DeepInfer.git
cd DeepInfer
python3.12 -m venv .venv && source .venv/bin/activate
export DEEPINFER_ACCELERATOR=nvidia   # 昇腾平台用 ascend
./build.sh
3.2 离线推理
# 可选:使用本地权重
export DEEPINFER_HF_MODEL_DIR=/path/to/DeepSeek-V4.1-Flash-1017
python examples/offline_inference.py
3.3 功能开关
功能环境变量或参数说明
投机解码DEEPINFER_ENABLE_MTP_VARLEN=1草稿长度上限由 DEEPINFER_USE_NEXTN_DECODE 控制,默认 5
预填充裁剪DEEPINFER_YOCO_PREFILL_TRUNCATION_MODE=compact、DEEPINFER_YOCO_PREFILL_KEEP_TOKENS=140只重算有限长度的尾部
批次无关推理DEEPINFER_BATCH_INVARIANT=1仅英伟达
确定性采样上一项加 DEEPINFER_ENABLE_MTP_VARLEN=0,并传固定 seq_seed仅英伟达
结构化输出SamplingParams(so_args={...})支持正则、JSON Schema、EBNF

四、本次没有开源的部分

README 写明,完整推理服务还需要以下组件,本次未包含:

  • KV 缓存系统:官方使用专用存储集群,缓存保留时间为智能体请求 3 天、聊天请求 7 天。
  • 预填充 / 解码分离编排:预填充一次处理整段输入,主要吃算力;解码每步只生成一个词,计算量小,但要反复读取模型权重和 KV 缓存,主要吃显存带宽。两者混在同一批卡上会互相拖慢,所以 DeepSeek 把它们放在不同机器上。引擎侧大部分功能已实现,编排没有放出。
  • 数据并行副本间的负载均衡:预填充和解码各有一套策略。

官方解释是这部分和内部基础设施耦合紧密。

五、部署规模与网络要求

5.1 规模

部署问答给出的最小高效单元是 64 卡预填充加 64 卡解码。README 的性能测试则用了 4 张 SM100 做预填充、64 张做解码,均在同一高速互联域内,可以用examples/sweep/run_sweep.sh 复现。

这两组配置对应不同用途,不能直接等同:64 + 64 是部署问答给出的线上部署建议规模;4 + 64 是 README 分别测试预填充和解码性能时用的配置,只说明性能图怎么测出来,不代表 4 张卡就能撑起线上预填充。

DeepSeek-V4.1-Flash 是混合专家模型,由许多“专家”子网络组成。专家并行就是把专家分散到多张卡上;部署问答说,卡数越多,每张卡每一步要读取的专家权重越少,所以解码要用 64—128 张卡的大规模专家并行。

5.2 网络
  • 解码的大规模专家并行依赖同一高速互联域。这里的“高速互联域”指通过显卡间高速总线直接连在一起的一组卡(即超节点),卡与卡之间不经过普通网络。
  • KV 缓存换入走 RDMA 网卡直写显存,数据不经过 CPU,也不占用显卡的计算单元;
  • 预填充和解码分属不同数据中心时,每 8 张卡约需 400Gbps 互联带宽。

六、常见问题

能在 H100 上跑吗? README 只列出 SM100 和昇腾 950,Hopper 不在支持范围。

部署后是现成的接口服务吗? README 只给出离线推理示例,没有给出服务启动命令。线上服务需要自己补齐上面三块组件。

官方的性能数据能参考吗? 都是 DeepSeek 在英伟达硬件、超大规模集群上测得的,小规模部署不能直接套用。

七、总结

DeepInfer 开源了 DeepSeek 推理引擎的核心部分,但当前发布内容并不是一套可直接启动的完整线上服务。先用预检脚本确认硬件,再跑离线示例;是否自建线上服务,取决于你能否补齐 KV 缓存、分离编排和负载均衡,以及有没有足够的卡和网络。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐