Enable validated prefix caching and record DGX Spark optimization benchmarks
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# 优化结果:采用 eager + 前缀缓存
|
||||
|
||||
2026-09-17,单台 DGX Spark / GB10,固定模型与镜像版本不变。
|
||||
最终启用前缀缓存及两处 Mamba 块对齐修正;保持原始权重、BF16 KV、MTP=2、
|
||||
262144 上下文、GPU 内存比例 0.80、并发 4、batch token 上限 2048、eager 执行。
|
||||
|
||||
## 实测比较
|
||||
|
||||
短请求取 3 次的中位数;长请求每种条件仅一个首次请求和一个重复请求,不是统计显著性结论。
|
||||
长输入比较使用相同 1024 输出预算;首次 `cold` 未清空 OS 页缓存。
|
||||
|
||||
| 指标 | 原 eager / 无前缀缓存 | eager / 有前缀缓存 |
|
||||
|---|---:|---:|
|
||||
| 短回答生成速度(近似 tokens/s) | 30.502 | 30.261 |
|
||||
| 短请求首 token(秒) | 0.2740 | 0.2798 |
|
||||
| 2 路并发总吞吐(tokens/s) | 41.120 | 40.862 |
|
||||
| 4 路并发总吞吐(tokens/s) | 68.149 | 71.728 |
|
||||
| 8K 首次请求首 token(秒) | 4.1596 | 3.9772 |
|
||||
| 8K 重复请求首 token(秒) | 3.4781 | 0.8719 |
|
||||
| 32K 首次请求首 token(秒) | 14.1514 | 15.3437 |
|
||||
| 32K 重复请求首 token(秒) | 14.0532 | 1.3408 |
|
||||
|
||||
重复输入的首 token 延迟分别降低约 75% 和 90%。收益针对可复用前缀;
|
||||
32K 首次输入本次反而慢约 8%,短回答生成速度基本不变,不适合宣称所有请求都更快。
|
||||
|
||||
**首 token 包括 reasoning,不等于最终正文出现。**
|
||||
8K 重复请求本次完整耗时由 8.1172 秒变成 18.8017 秒,生成的思考长度不同;
|
||||
32K 重复请求完整耗时由 17.2601 秒降至 10.4757 秒。
|
||||
因此不能把首 token 的约 10 倍改善宣传成完整回答快 10 倍。温度 0 也不保证思考过程逐字一致。
|
||||
|
||||
## 缓存正确性与运行状态
|
||||
|
||||
- 8K / 32K 检索均正确,正常 stop;实际 prefix hit 增量分别为 6400 / 30400 tokens。
|
||||
- 同一份约 11K token 的档案,连续查询前、中、后三个位置,再重复第一问,4 次答案精确匹配。
|
||||
这组专项测试实际命中增量为 24000 tokens。
|
||||
- 算术、中文、简单代码检查、2/4 并发、自动工具调用通过。
|
||||
- 本轮 KV 缓存 15.11 GiB,日志报告 534426 token 总容量;该数字随启动环境变化。
|
||||
- 主机测试后 used 约 103 GiB,available 约 18 GiB;约 258 MiB swap 存量不是持续换页速率。
|
||||
- 最终服务健康,restart=unless-stopped。原 MinerU 和旧 Qwen3.6 继续停止。
|
||||
- 未压测完整 262K 输入、长期高并发及多模态;这些小样本不代表全面质量测评。
|
||||
|
||||
## 未采用的 CUDA Graph 实验
|
||||
|
||||
新 nightly 使用 runtime breakable CUDA Graph。
|
||||
最初仅配置 splitting_ops 时,CPU 查表仍在捕获范围内;随后只包裹查表,
|
||||
又遇到 capture-time 前置哈希 kernel 未执行、索引未初始化的问题。
|
||||
将哈希与查表合并为 eager-break custom op 后,小型 GPU 变更输入重放测试通过,完整模型也启动成功。
|
||||
|
||||
该候选单流中位数 31.799 tokens/s(约 +4.3%),但 32K 重复请求用尽了最初的 256 输出预算,
|
||||
全部为 reasoning,没有最终正文,因而未通过完整验收。后台按设计恢复了原 eager 服务并完成 smoke test。
|
||||
这不能证明图执行算错;候选没有以更高输出预算重新完成验收,且性能收益有限,因此不作为默认。
|
||||
代码与说明单独保存在 `experiments/graph/`,不影响最终部署。
|
||||
|
||||
## 复现与回退
|
||||
|
||||
- 方法:`benchmark-method.md`。
|
||||
- 原始数据:`results/eager.jsonl`、`results/eager-long-1024.jsonl`、
|
||||
`results/graph2.jsonl`、`results/prefix-eager.jsonl`、`results/prefix-eager-check.jsonl`。
|
||||
- `scripts/start.sh no-prefix`:保留 262K + MTP,关闭前缀缓存。
|
||||
- `scripts/start.sh baseline`:32K,不启用 MTP 和前缀缓存。
|
||||
- `scripts/start.sh`:默认前缀缓存优化配置。
|
||||
|
||||
修正依据:
|
||||
https://github.com/blazux/qwen3.8-Flash-DGX/blob/main/src/patch_mamba_block_size.py
|
||||
Reference in New Issue
Block a user