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

背景: 本文选自开源学习指南《DeepSeek V4.1 Flash 大规模推理部署实践》。全书用一个贯穿示例串联:编程 Agent 通过 Messages 协议发起第三轮请求,上下文 10 万 token、带一张截图、以 edit_file 工具调用结束;文中的“第 N 步”即指该示例中的步骤,完整场景见 04 贯穿示例。

你在哪里:DeepInfer 子系统第 4 篇,从“理解”转向“动手”。
读完本文你将知道:如何构建 DeepInfer、跑离线推理、复现官方 prefill / decode 曲线,以及所有环境变量的含义。以下命令均摘自官方 README 与 examples/README.md。


1. 前置条件

项要求
操作系统Linux
编译器GCC ≥ 13.0
Python3.12(建议新建空环境)
英伟达SM100 GPU(Blackwell),CUDA 13
华为昇腾 950 NPU,CANN 9.2
规模离线示例默认 --ep 8(单机 8 卡);官方基准为 prefill 4 卡、decode 64 卡,均在一个 scale-up 域内

2. 构建与运行

git clone https://github.com/deepseek-ai/DeepInfer && cd DeepInfer
# 新建并激活一个空的 Python 3.12 环境后:
export DEEPINFER_ACCELERATOR=nvidia      # 昇腾平台改为 ascend;运行时也要保持导出
./build.sh

# 离线推理:首次运行会把 deepseek-ai/DeepSeek-V4.1-Flash-1017 下载到 HF 缓存
python examples/offline_inference.py --ep 8
python examples/offline_inference.py --ep 2 --dp 8
python examples/offline_inference.py --ep 2 --cp 8

# 使用本地权重
export DEEPINFER_HF_MODEL_DIR=/path/to/DeepSeek-V4.1-Flash-1017

其他常用参数:--disable_eplb、--long_context(每样本 16,389 输入 / 4,096 输出)、--check_structured_output(跑完样本后复用同一 LLM 实例做 regex / JSON / EBNF 检查)。昇腾调试可设 ASCEND_LAUNCH_BLOCKING=1、ASCEND_SLOG_PRINT_TO_STDOUT=1。


3. 环境变量速查

变量作用默认 / 推荐
DEEPINFER_ACCELERATOR构建与运行平台nvidia 或 ascend
DEEPINFER_HF_MODEL_DIR默认模型的本地路径(不覆盖显式的 --model_name)—
DEEPINFER_ENABLE_MTP_VARLENDSpark 变长验证1 开启
DEEPINFER_USE_NEXTN_DECODE最大草稿长度5;0 关闭投机解码
DEEPINFER_YOCO_PREFILL_TRUNCATION_MODE解码器 SWA Bounded Replay 截断模式V4.1 用 compact(与 mask 等价)
DEEPINFER_YOCO_PREFILL_KEEP_TOKENS保留后缀长度V4.1 用 140
DEEPINFER_BATCH_INVARIANTbatch-invariant 推理(仅英伟达)1 开启
DEEPINFER_OVERRIDE_NUM_EXTRA_EXPERTS冗余专家数下限(会向上取整为 ep_size 的倍数)32
WORLD_SIZE / RANK / CUDA_VISIBLE_DEVICES节点数 / 节点序号 / 可见卡;ep_size = WORLD_SIZE × 可见卡数—

4. 复现官方基准

export WORLD_SIZE=1 RANK=0
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

python examples/benchmark.py                                   # 默认配置
python examples/benchmark.py --decode_num_requests 1           # 低时延:单请求 decode
python examples/benchmark.py --decode_num_requests 64 \
       --context_length 131072 --yoco_clip                     # 128K 上下文 + YOCO 截断(nightly 配置)
python examples/benchmark.py --prompt_mode image               # 图像输入,ViT 与 LLM 同引擎

# 扫描并绘制 Pareto 曲线(官方图即由此生成)
bash examples/sweep/run_sweep.sh decode  ce-128k 131072 3 0.75   # decode:并发 8…256,nextn=3,按 0.75 接受率换算
bash examples/sweep/run_sweep.sh prefill pe-128k 131072          # prefill:批 4096…65536
bash examples/sweep/run_sweep.sh encoder ve-800                  # VE:固定图像尺寸,扫每批图像数

注意 benchmark.py 的 decode 吞吐按全接受口径统计(每请求每步 1 + nextn 个 token),官方图再按 75% 每 token 接受率换算为 τ = 3.25。并行规模不出现在命令里(来自环境变量),习惯上写进 tag,例如 ep64-decode-128k。

用 examples/benchmark.py 采集的 profile trace 可以看到每个 kernel 用的是哪个后端——这是官方对“用了哪些 kernel”问题的标准回答。


5. 评测

eval/ 目录提供 AIME、GPQA、HLE 三个评测脚本(eval/run_eval.py、eval/score.py)。媒体转述的 Pass@1 结果:AIME 2026 99.9%、GPQA Diamond 93.4%、HLE(全集)42.6%(来源:掘金,未在官方 README 正文中核对)。


6. 从离线引擎到在线服务:你还需要自己补什么

下图回答:用开源组件搭一个最小在线服务,哪些是现成的、哪些要自建。

客户端

API 网关
自建 HTTP

deepseek-recipe
现成

路由与均衡
自建

DeepInfer 实例
现成

KV 缓存系统
自建,可基于 3FS

最小可行路径:单个 8 卡实例 + recipe 做协议层 + 简单的请求队列,先不做前缀缓存和 PD 分离;之后再按 07 下一步 的清单逐步补齐。


上一篇:05.4.3 调度与结构化输出 | 下一篇:05.5 弹性与容错 | 返回:概念地图


📚 返回专栏目录

Logo

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

更多推荐