MiaAI-Lab/Qwen3.8-Flash-Next-Single-DGX-Spark · 上手攻略

  • 仓库:MiaAI-Lab/Qwen3.8-Flash-Next-Single-DGX-Spark
  • 链接:https://github.com/MiaAI-Lab/Qwen3.8-Flash-Next-Single-DGX-Spark
  • 分类:LLM 推理 · vLLM 部署 · DGX Spark
  • 作者:Tom
  • 更新:2026-09-09

这是什么

一个开箱即用的部署配方(recipe),用于在单台 NVIDIA DGX Spark(GB10,121 GiB 统一内存)上通过 vLLM 服务 Qwen3.8-Flash-Next-NVFP4 大模型。

核心工程挑战:Qwen3.8-Flash-Next 原版 FP8 权重约 135 GB,单台 Spark 只有 128 GB 统一内存,直接跑会 OOM。这个配方通过 NVFP4 量化(NVIDIA 官方出品)+ PLE 表(专家路由表)offload 到 NVMe + mmap,把显存占用压到 ~76 GB 活跃权重 + KV cache,完整塞进一台 Spark。Vision-Language Model,支持文本、图片、视频输入。

解决什么问题

  • 想在一台 DGX Spark(不额外借助多机 TP)上跑 Qwen3.8-Flash-Next 而不想自己折腾量化 + 内存分配
  • 需要在 Spark 上跑 Code Agent 场景(coding harness),要求 512k 超长上下文
  • 想用 vLLM 的 OpenAI-compatible API 快速接入现有 Agent 框架

快速安装

前提:DGX Spark 机器,~130 GiB 可用磁盘空间(99 GiB checkpoint + ~27 GiB PLE 表首次构建)

# 1. 复制环境配置
cp .env.sample .env
# 编辑 IMAGE / HF_TOKEN(如需)

# 2. 下载模型(约 99 GiB,可续传)
./download.sh

# 3. 启动服务(首次约 10-12 分钟到 /health)
./start.sh

# 4. 服务在 :8888 就绪
# 停止
./stop.sh

关键 env 参数(.env.sample 默认值):

HOST_RESERVE_GIB=26
KV_TARGET_GIB=20        # 实际会被 host 侧 cap 到 ~16.67 GiB(见坑与注意)
KV_CACHE_DTYPE=fp8      # 默认 fp8,约 2x KV pool;改为 auto 用 BF16
MAX_NUM_SEQS=4
MAX_NUM_BATCHED_TOKENS=2048

vLLM 服务启动后健康检查端点为 http://localhost:8888/health

dry-run(只看命令不跑):

./start.sh --no-launch

核心用法

API 调用(OpenAI-compatible)

curl http://localhost:8888/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen3.8-Flash-Next",
    "messages": [{"role": "user", "content": "用 Python 写一个快速排序"}],
    "max_tokens": 1024
  }'

多模态输入(图片/视频)

Qwen3.8-Flash-Next 是 Vision-Language Model,支持图片和视频理解:

curl http://localhost:8888/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen3.8-Flash-Next",
    "messages": [
      {"role": "user", "content": [
        {"type": "text", "text": "描述这张图片"},
        {"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
      ]}
    ]
  }'

切换上下文长度(YaRN)

# 启用 512k YaRN 上下文扩展(默认 262k)
export YARN=1
./start.sh

性能数据(官方实测,2026-09-04 ~ 09-06)

⚠️ 以下数字来自单台 DGX Spark 实测,不同配置(KV_TARGET_GIB / FP8 vs BF16 / YaRN 开闭)结果差异显著,详见 README 原始表格。

Decode 吞吐(512k YaRN,MTP=3,FP8):

并发数 单流速度 8 流聚合
1 stream 48.7 tok/s 48.7 tok/s
2 streams 74.6 tok/s 37.3 tok/s per stream
4 streams 113.7 tok/s 28.4 tok/s per stream
8 streams 162.9 tok/s 20.4 tok/s per stream

Prefill 速度(512k YaRN,BF16): - TTFT(400k prompt):260.3 s → 1,537 tok/s

Needle-in-Haystack 检索(512k YaRN): - 512k YaRN + KV_TARGET_GIB=22 + FP8:15/20 通过(FP8 精度问题,见坑) - 512k YaRN + KV_TARGET_GIB=22 + BF16:12/14 通过

冷启动时间: 约 10 分 51 秒(从 NVMe 读取 checkpoint)

长时间稳定性(2.5 小时 coding harness 压测): - 38 个请求,19 个 50-100k token,3 并发 - 内存余量在 14.2 ~ 14.9 GiB 间,GPU driver 使用 96.6 → 97.5 GiB - 全程零 NV_ERR_NO_MEMORY 报错

典型适用场景

  1. 单 DGX Spark Coding Agent:不想搭多机集群,在一台 Spark 上跑 Qwen3.8-Flash-Next 做代码生成/推理
  2. 超长上下文 RAG:512k YaRN 上下文 + prefix caching,适合代码库级别检索
  3. Vision Agent:图片/视频理解 + Code 生成一体化 pipeline
  4. vLLM 生态集成:直接用 OpenAI-compatible API 接入 LangChain/LlamaIndex/Ollama 等现有框架

坑与注意

⚠️ KV_TARGET_GIB=20 实际被 host cap 到 ~16.67 GiB。README 明确记载:KV_TARGET_GIB shipped as 22, then 20,都导致过服务器崩溃(2026-09-04 三台)。当前 host 侧有 cgroup/HOST_RESERVE_GIB 限制,KV_TARGET_GIB=20 实际可用 KV 只有 16.67 GiB(约 992k tokens)。如果需要更大 KV pool,需要同时调 GPU_MEMORY_UTILIZATION 并留意 watchdog 内存地板(~6 GiB)。

⚠️ FP8 KV cache 精度问题:在 Needle 检索测试中,FP8 配置(15/20)低于 BF16(12/14 实际更好,但样本不同)。涉及高精度检索时请用 BF16 或注意 fp8_e4m3 精度损失。

⚠️ Prefill + Decode 并发时 chunk 延迟翻倍:Decode 期间有 64k prompt prefill 到达时,两个流之间的输出间隔从安静服务器的 78ms 扩大到 1,057ms(p50)。这是 shipped chunk width 导致的已知 trade-off。

⚠️ CUDA graph 兼容性:v2 model runner 默认启用 CUDA graph,但在某些 sweep 场景(FULL decode graph at 8 streams)下与 BF16 recurrent state 配合有特殊效果。如果遇到 decode 性能异常,检查 GRAPHS 设置。

⚠️ stop.sh 后 /dev/shm 残留:容器以 --ipc host 运行,vLLM 的 POSIX shared memory 段在 SIGTERM 后可能残留,除非重启机器。用 ./stop.sh --force 也无法清理。重启前确认 df -h /dev/shm

⚠️ YaRN vs 原生 rope:.env.sample 默认关闭 YaRN(262k context),启用 YaRN 后才是 512k。两者内存布局不同,性能数据不可直接对比。

与同类对比

方案 硬件 量化 上下文 TTFT (32k) Decode
本配方(FP8,512k YaRN) 1× Spark NVFP4+fp8 512k ~1,769 tok/s 162.9 tok/s @8s
官方 Qwen3.8 DGX Solo(FP8) 1× Spark FP8 262k ~21.6 tok/s
本配方(NVFP4 纯 GPU) 1× Spark NVFP4 262k ~1,042 tok/s ~19.1 tok/s
两台 Spark TP=2 2× Spark FP8 32k

NVFP4 + PLE offload 方案的核心价值在于单卡 99 GB 以内完整运行 180B MoE 模型,无需双机 Tensor Parallelism。

一句话推荐结论

想在单台 DGX Spark 上完整跑起 Qwen3.8-Flash-Next 且获得 ~160 tok/s 8 并发吞吐?这个配方是目前最省事的开源解法——一个脚本下载,一个脚本启动,OpenAI API 就绪。⚠️ 注意 KV_TARGET_GIB 和 FP8 精度坑,长上下文场景建议开 YaRN + BF16。


来源:GitHub README + NVIDIA Developer Forums + ai-muninn.com 基准测试 ⚠️ 性能数字均来自特定硬件实测,配置不同会有显著差异,引用前请核对 README 最新版本