Files
qwen38-flash-next-dgx-spark/README.md
T

117 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Qwen3.8 Flash Next NVFP4 on DGX Spark
在单台 NVIDIA DGX SparkGB10 / ARM64 / 128 GB 统一内存)上部署
`nvidia/Qwen3.8-Flash-Next-NVFP4` 的可复现配置。
来自 2026-09-17 的实际部署:262144 上下文上限、MTP 2 tokens、OpenAI 兼容 API。
优化版启用经验证的前缀缓存,保持 eager 执行;32K 重复前缀首个 token 约从 14.05 秒降至 1.34 秒。
这里的首个 token 包括思考内容,完整回答不会因此保证快 10 倍。详见 [优化报告](docs/optimization-results.md)。
PLE 查找表通过磁盘映射按需读取;原始模型权重未重新量化。
> 这是针对固定 nightly 的社区适配,非 NVIDIA/vLLM 官方支持方案。
> 已验证短问答、工具调用及有限的 128K 单请求检索;接近 260K 已触发主机 OOM。仅适用于此模型、单 GPU / ETP=1。
## 快速开始
需要 Linux ARM64、GB10、Docker Compose(支持 `gpus: all`)、NVIDIA Container Toolkit
以及至少约 150 GiB 的模型下载空间,另留 Docker 镜像和缓存空间。
实测驱动为 580.173.02。首次启动约需 1013 分钟。
```bash
cp .env.example .env
# 编辑 .env:模型缓存目录、现有 API Key 文件、代理和端口
# API_KEY_FILE 指向非空的纯文本密钥文件,不把密钥写入 .env。
./scripts/download.sh
./scripts/build.sh
./scripts/start.sh
./scripts/wait.sh
./scripts/test.sh
```
已有 Hugging Face 缓存时,`HF_CACHE_DIR` 应指向包含 `hub/` 的目录。
下载脚本固定模型 revision,支持断点续传;服务离线读取该快照。
已有本项目所固定的基础镜像时,可在 `.env` 设置 `BASE_IMAGE=local/vllm-base:0bfc7a15`
请先核实本地 tag 对应 [版本清单](docs/provenance.md) 中的 digest,不能用任意 nightly 替代。
API 地址:`http://<Spark-IP>:8000/v1`;模型名:`qwen3.8-flash-next`
使用 `Authorization: Bearer <已有密钥>`。代理仅供模型下载/容器出网使用。
## 当前配置
| 参数 | 设置 |
|---|---|
| 上下文上限 | 262144 tokens |
| MTP | 2 speculative tokens |
| 同时调度请求数 | 4 |
| 批处理 token 上限 | 2048 |
| GPU 内存比例 | 0.80 |
| KV 精度 | auto(本配置为 BF16 |
| 执行 | eager,未启用 CUDA Graph |
| Prefix caching | 开启,含 Mamba 块对齐修正 |
| API | 8000,启用密钥、reasoning parser、工具调用 |
| 自动重启 | unless-stopped |
0.80 留出的内存供系统和 PLE 文件缓存使用,并非浪费。
增加 KV 分配会挤占页缓存,不一定提高响应速度,见 [内存说明](docs/architecture.md)。
`mem_limit: 112g` 沿用实测配置;统一内存/CUDA 占用不能只用 Docker stats 判断,需结合主机内存。
## 运维与回退
```bash
docker compose logs -f vllm
docker compose ps
docker compose stop vllm
# 切换为已验证的 32K、不启用 MTP 的基础配置(会重建服务)
./scripts/start.sh baseline
./scripts/wait.sh
./scripts/test.sh
# 保持 262K + MTP,只关闭前缀缓存
./scripts/start.sh no-prefix
# 恢复默认 262K + MTP + 前缀缓存
./scripts/start.sh
```
首次迁移到本项目时,先停止旧部署中占用同一端口/模型内存的服务;不要并行启动两份。
项目脚本不会自动停止 MinerU 或其他业务容器。原部署的容器与回退配置可以保留。
`tests/test_disk_adapter.py` 验证 FP8 字节、边界/重复索引、缩放、原始哈希和 torch.compile。
可用 `scripts/test-adapter.sh` 单独执行,需要真实 CUDA GPU 和额外内存。
该测试通过不代表完整模型的 CUDA Graph 已验证。
## 长上下文实测边界
64K、128K 的单请求合成检索在 eager 和 CUDA Graph 下均通过;接近 260K 时两组均发生主机 OOM,
即使 eager 返回正确答案也不能视为稳定通过。当前 262144 配置上限不是容量保证。
详见 [长上下文测试报告](docs/context262k-results.md),其中包含资源证据、受影响服务和恢复记录。
## 文件说明
- `Dockerfile`:固定基础镜像,安装 PLE 适配、两项 GB10 FLA 修改及 Mamba 缓存块对齐修正。
- `patches/`:针对当前 nightly 的适配层。
- `vendor/`:保持原样的社区 mmap 代码及许可证。
- `configs/baseline-32k.yaml`:基础配置的 Compose override。
- `docs/optimization-results.md`:基准比较、缓存正确性与未采用的图执行实验。
- `docs/cuda-graph-retest.md`:2048 输出预算下的图执行复测、失败样本及验证边界。
- `experiments/graph/`:通过有限复测但未采用为默认的图执行实现与复现说明。
- `docs/validation.md`:实测结果和未验证边界。
- `docs/troubleshooting.md`:故障依据、上游修复与排查步骤。
- `docs/provenance.md`:模型/镜像/第三方源码的固定版本和校验值。
`.env`、密钥、权重、日志、运行缓存均不提交。仓库不包含模型权重;模型使用条件以
[NVIDIA 模型页](https://huggingface.co/nvidia/Qwen3.8-Flash-Next-NVFP4) 为准。
第三方代码按其原许可证使用,见 [第三方声明](THIRD_PARTY_NOTICES.md)。
## 复测优化
```bash
./scripts/benchmark.sh current > benchmark.jsonl
python3 scripts/summarize-benchmark.py benchmark.jsonl
./scripts/test-prefix.sh
```
测试只使用合成输入。方法、首字时间口径与小样本限制见 docs/benchmark-method.md。
## CUDA Graph 性能剖析
Nsight 已确认图重放生效,短回答约提升 4.5%;长输入预填充未被当前小尺寸图覆盖,
GPU 活动本已接近连续。详见 [性能剖析报告](docs/cuda-graph-profile.md),包括 PLE 等待/查表区分及原始证据摘要。