MiaAI-Lab/DeepSeek-v4.1-Flash-DGX-Sparks · 上手攻略

  • 仓库:MiaAI-Lab/DeepSeek-v4.1-Flash-DGX-Sparks
  • 链接:https://github.com/MiaAI-Lab/DeepSeek-v4.1-Flash-DGX-Sparks
  • 分类:AI 推理 · 分布式推理
  • 作者:Tom
  • 更新:2026-09-16

是什么

这是一个在 3-4 台 NVIDIA DGX Spark 节点上通过 SGLang 部署 DeepSeek-V4.1-Flash 模型的生产级推理方案。模型以 MXFP4 稀疏专家 + FP8 密集权重运行,KV Cache 由 NVMe + 统一内存共同支撑,提供 OpenAI 兼容的 /v1/chat/completions 接口,支持 Tool Calling、Vision 和最长 1M token 的超长上下文。

⚠️ 硬件要求极高:每个 DGX Spark 节点配备 121.7 GiB 统一内存,3 节点合计约 365 GiB;4 节点方案权重占用 ~305 GiB GPU 内存(MXFP4 专家 ~77 GiB/节点)。非 DGX Spark 硬件无法直接复用此方案。

解决什么问题

DeepSeek-V4.1-Flash(MoE + 稀疏专家架构)原生 checkpoint 体积约 476 GiB,单卡或普通多卡服务器难以完整加载。此方案通过:

  1. 多节点 Tensor Parallel(TP=3/TP=4):将模型分布在 3-4 台 DGX Spark 节点上
  2. NCCL over ConnectX-7 RoCE:节点间通过高速互联聚合为统一推理引擎
  3. NVMe Engram 表外置:MoE 的 n-gram 查找表移至 NVMe,减少统一内存占用
  4. DSpark 投机解码:4-token 窗口投机解码,Decode 吞吐提升至 3-4 倍
  5. OpenAI 兼容接口:无需修改调用侧代码,直接对接现有应用

硬件与网络要求

DGX Spark 节点配置(3节点示例)

节点 IP 角色
spark1 10.0.0.1 Head(API + rank 0)
spark2 10.0.0.2 Worker(rank 1)
spark3 10.0.0.3 Worker(rank 2)
  • 每节点 121.7 GiB 统一内存
  • 节点间通过 ConnectX-7(InfiniBand HDR)RoCE 三角形互联
  • spark1 通过 NFSv4 导出模型 checkpoint,spark2/spark3 挂载
  • Engram 表(~189 GiB 总量)分散存储在各节点本地 NVMe

⚠️ 关键约束OFFLOAD_MODE=ram 禁止使用——会将 Engram 表 evict 出 GPU,导致无法服务。Host RAM 在 Spark 架构上就是 GPU 内存,所有 pinned 缓冲(CUDA Graph、tokenizer 等)共享同一份内存,head 节点 OOM 会卡住所有 rank。

4 节点(TP=4)与 3 节点对比

指标 3 Sparks(TP=3) 4 Sparks(TP=4)
权重/节点 ~101 GiB ~77 GiB
运行时空闲内存 ~6 GB ~40 GB
KV Pool 750k tokens 8M tokens( pinned)
上下文上限 256k 1M(已验证)
默认并发 4 8
单流 Decode 37.9 tok/s 45.4 tok/s
4 流 Decode 78.6 tok/s agg 103.1 tok/s agg

快速安装

前置条件

  • 3 台(TP=3)或 4 台(TP=4)DGX Spark 节点,统一网络互通
  • NVIDIA DGX Spark 镜像(lmsysorg/sglang:dev-dsv41
  • Docker、NCCL、InfiniBand 驱动已配置
  • checkpoint 存放于 spark1 可访问路径(~/NewModels/DS4.1

启动流程(3 节点)

# 1. 复制环境配置模板
cd ~/NewModels/DS4.1
cp -n .env.example .env   # 编辑填入节点 IP、SSH 用户等

# 2. 预检(检查 SSH、Docker、IB、checkpoint 分片、GPU 状态)
./start.sh doctor

# 3. 构建 Docker 镜像
./start.sh build

# 4. 导出 checkpoint + 创建 docker volume
./start.sh share

# 5. 将 Engram 表打包到各节点 NVMe(仅首次,约 10 分钟)
./start.sh pack

# 6. 启动推理服务(先起 worker,再起 head)
./start.sh serve

# 查看状态/日志
./start.sh status
./start.sh logs worker1  # 查看指定 worker 日志

完整启动约 12-13 分钟(读取 476 GiB checkpoint 约 8 分钟 + draft model + KV pool + CUDA Graph capture)。

4 节点启动(TP=4)

cp -n .env.tp4.example .env.tp4   # 填入 4 节点 IP 配置
./start-tp4.sh doctor
./start-tp4.sh build
./start-tp4.sh share
./start-tp4.sh pack   # Engram 分片为 of4.bin(~48 GiB/节点)
./start-tp4.sh serve

核心用法

调用 API

服务启动后,OpenAI 兼容端点为 http://10.0.0.1:8888/v1/chat/completions

curl http://10.0.0.1:8888/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <API_KEY>' \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "What is 19 + 23?"}],
    "max_tokens": 32,
    "chat_template_kwargs": {"thinking": false}
  }'

⚠️ thinking 参数:传入 thinking: false(或 enable_thinking: false)关闭思考链输出。仅在 max_tokens 足够时生效;若两者冲突,thinking 优先。建议始终传入 max_tokens,服务会自动填充并上限 clamp 到 32768,防止生成过长。

⚠️ TTFT(Time To First Token):长上下文首 token 时间较长,例如 128K context 的 prefill TTFT 约 40 秒,属正常现象。

性能基准(4 Sparks,TP=4)

Decode(prose,256 completion tokens):

并发 TTFT 聚合吞吐 单流吞吐
×1 212 ms 45.4 tok/s 45.4 tok/s
×2 232 ms 72.9 tok/s 37.9 tok/s
×4 270 ms 103.1 tok/s 26.7 tok/s
×8 2.70 s 114.1 tok/s 23.2 tok/s
×16 12.45 s 134.2 tok/s 22.0 tok/s

⚠️ 8+ 并发是吞吐优化点,不是延迟优化点。16 流时 TTFT 达 12.45 秒,延迟已不可接受。

Prefill:

上下文 Prompt Tokens TTFT 吞吐
4K 4,118 1.23 s 3,350 tok/s
16K 16,400 4.34 s 3,782 tok/s
32K 32,788 8.70 s 3,768 tok/s
64K 65,557 18.57 s 3,531 tok/s
128K 131,093 40.32 s 3,251 tok/s

Prefill 在 16K-32K 区间达到峰值约 3.8k tok/s。

关键环境变量

变量 默认值 说明
TP_SIZE / EP_SIZE 3 / 3 Tensor Parallel / Expert Parallel 数量
CONTEXT_LENGTH 262144(TP3)/ 1048576(TP4) 单请求上下文上限
MAX_TOTAL_TOKENS 750000(TP3)/ 8000000(TP4) KV Pool 大小(pinned)
MAX_RUNNING_REQUESTS 4(TP3)/ 8(TP4) 最大并发请求数
MEM_FRACTION_STATIC 0.95(TP3)/ 0.80(TP4) 静态内存保留比例
SPEC_ALGO DSPARK 投机解码算法(off 禁用)
DSPARK_BLOCK_SIZE 3 4-token 验证窗口
API_KEY 未设置 Bearer Token 鉴权(需在 .env 配置)

典型适用场景

  1. 超长上下文推理:1M token 上下文 Needle-in-a-Haystack 已验证,适合超长文档分析、多文档比对
  2. 高吞吐批量推理:多流并发下 Aggregate 134 tok/s,适合内容生成类应用
  3. Tool Calling / Agent 场景:内置 tool call 支持,可直接作为 Agent 后端
  4. 多模态(Vision):支持图像输入
  5. DSpark 投机解码加速:Decode 吞吐可达 3-4 倍提升(需 MoE 稀疏特性配合)

坑与注意

⚠️ 硬件门槛极高:必须使用 DGX Spark(统一内存架构),普通 GPU 服务器无法复用。Checkpoint 本身 476 GiB,普通 A100/H100 多卡方案也不够。

⚠️ Head 节点 OOM 全局卡死:TP 同步机制决定了 head 节点内存耗尽会阻塞所有 rank。KV pool 满时 head 首先达到上限,此时应降低 MAX_RUNNING_REQUESTSMEM_FRACTION_STATIC,而非提升。

⚠️ Engram 表不能 offload 到 RAM:Spark 架构下 host RAM = GPU memory,OFFLOAD_MODE=ram 会把 Engram 表 evict 掉。运行日志中 full_token= 数字是唯一判断标准,低于预期值说明 KV 被压占。

⚠️ TP3 时 rank 2 是全 padding:由于 heads=64/o_groups=8/draft_experts=128 无法被 3 整除,rank 2 的注意力分片完全为 padding,GPU 利用率不对称。

⚠️ NCCL 调试复杂:多节点 NCCL over RoCE 配置繁琐,首次部署建议开启 NCCL_DEBUG=INFO 查看通道和协议选择。

⚠️ 4 节点需 RoCE 交换机:3 节点可直连三角形,但 4 节点无法形成完整三角形,需要支持 InfiniBand HDR 的 RoCE 交换机,或配置 NCCL ring 模式。

⚠️ Docker 镜像为 dev 版本lmsysorg/sglang:dev-dsv41 是开发版镜像,非生产稳定版,存在非预期行为风险。

与同类对比

特性 本方案 vLLM 单机 SGLang 单机 DeepSeek API
硬件要求 3-4× DGX Spark 单机 8× A100/H100 单机 8× A100/H100 云服务
上下文 1M(已验证) 最高 1M 最高 1M 128K
投机解码 DSpark(3-4×) Speculative Decoding RadixAttention 不透明
KV Pool 8M tokens(pinned) PagedAttention PagedAttention 不透明
部署难度 极高(多节点)
成本 硬件成本极高 中等 中等 按量付费

一句话推荐结论

专业级分布式推理方案,面向拥有 DGX Spark 集群、需要 1M 超长上下文和高吞吐的场景;硬件门槛极高,普通用户建议直接使用 DeepSeek 官方 API 或社区的单机 SGLang/vLLM 方案。