05.4.4 · DeepInfer 快速上手:SM100 / 昇腾 950 构建、离线推理、环境变量与基准复现
📦 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 |
| Python | 3.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_VARLEN | DSpark 变长验证 | 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_INVARIANT | batch-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. 从离线引擎到在线服务:你还需要自己补什么
下图回答:用开源组件搭一个最小在线服务,哪些是现成的、哪些要自建。
最小可行路径:单个 8 卡实例 + recipe 做协议层 + 简单的请求队列,先不做前缀缓存和 PD 分离;之后再按 07 下一步 的清单逐步补齐。
上一篇:05.4.3 调度与结构化输出 | 下一篇:05.5 弹性与容错 | 返回:概念地图
📚 返回专栏目录
更多推荐



所有评论(0)