Files

77 lines
4.4 KiB
Markdown
Raw Permalink 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.
# 优化结果:采用 eager + 前缀缓存
> 历史实验记录:保留当时的配置和恢复状态。当前部署已改为 128K eager 基线,见 [当前状态](README.md)。
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 GiBavailable 约 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
## 后续 2048 预算复测
上述 CUDA Graph 未完成验收是首次实验的状态。后续 graph+前缀缓存组合已通过三轮复测,
短回答中位速度提升约 4.4%,默认仍保留 eager。详见 [复测报告](cuda-graph-retest.md)。
## 后续长上下文容量边界
[64K / 128K / 接近 262K 测试](context262k-results.md)发现:两组均通过 64K/128K 的有限检索,
接近 260K 时两组均发生主机 OOM(图版本请求中断)。此前短上下文通过不能外推为满长稳定。