2026-07-08 02:17:13 +00:00

7.7 KiB
Raw Blame History

vllm-dspark Benchmark 结果评估

对应结果:/data/user1/yy/bench_results/dspark_grid_20260707-132641
运行时间2026-07-07
硬件8× NVIDIA H200 143GB
模型:/data/models/DeepSeek-V4-Flash-DSpark
服务配置TP=8FP8 KV cache--spec-method dspark --spec-tokens 5block-size=256max-num-seqs=256
压测工具:sglang.bench_serving --backend vllm


1. 总体结论

本次 grid 测试覆盖了从轻量 chat 到超长上下文、从重 decode 到高并发压测的多种场景。整体上看:

  • DSpark 在短输入、中高并发场景下表现优秀chat_short 在并发 64 时达到约 9580 tok/sstress_standard 在并发 128 时达到约 17465 tok/s。
  • 低并发下 DSpark 的 draft 开销明显,部分场景单并发延迟和吞吐都不如预期。
  • 超长上下文场景存在明显的吞吐拐点long_rag32K 输入)在并发 4 达到峰值后,并发 8 吞吐腰斩。
  • 延迟长尾P95/P99普遍较重,提示调度、内存或投机解码验证阶段存在抖动。

2. 异常点分析

2.1 低并发c=1下 DSpark 收益被开销吃掉

chat_standardinput=1000, output=256为例

并发 req/s mean E2E(ms) P99 E2E(ms) mean TTFT(ms) P99 TTFT(ms)
1 0.49 2040.65 10715.53 1412.48 8430.71
8 4.35 1819.35 15165.63 327.62 4404.92
16 8.32 1885.15 10491.31 443.50 8567.07
32 10.00 3156.73 12936.08 560.77 7129.66
  • 单并发吞吐仅 0.49 req/s,远低于无投机基线可预期的水平。
  • P99 TTFT 高达 8.4s,说明单请求首次预填充极不稳定,可能是 draft 验证/编译缓存未命中或 warmup 不充分导致。
  • 并发提升到 8 后TTFT 均值下降到 327ms说明 DSpark 的 draft 计算需要 batch 才能摊薄。

判断:这是 DSpark 的典型特征——低并发下 draft 固定开销无法被摊薄,导致延迟尾和单请求吞吐都较差。

2.2 超长上下文出现吞吐断崖

long_raginput=32000, output=512

并发 Total tok/s mean TTFT(ms) P99 TTFT(ms)
1 16104.98 549.72 1163.96
2 43215.62 192.57 409.32
4 70040.54 191.57 427.69
8 34141.70↓51% 930.98 2742.48

long_context_probeinput=16000, output=512也有类似模式

并发 Total tok/s mean TTFT(ms)
1 11051.09 316.59
2 26862.06 110.65
4 43042.77 127.38
8 29255.46↓32% 453.93
16 43292.68 444.14

判断

  • 32K/16K 长 prefill 在并发 4 时达到最佳,继续加并发反而下降,可能与 KV cache 显存带宽瓶颈prefill 阶段 scheduling 阻塞hybrid KV cache manager 的换入换出 有关。
  • long_rag 在 c=8 时 P99 TTFT 暴涨到 2.7s,进一步印证内存/调度压力。

2.3 延迟长尾普遍偏重

几乎所有场景的 P99 E2E 都是 mean E2E 的 2~4 倍:

场景 并发 mean E2E P99 E2E 倍数
chat_standard 32 3156.73 12936.08 4.1×
generation_standard 32 2908.89 6938.03 2.4×
summarization 32 5587.21 14541.75 2.6×
decode_heavy 32 5562.57 12822.35 2.3×
stress_standard 128 4417.43 14850.43 3.4×

判断:投机解码的 draft 验证失败会导致 fall back 到逐个 target 前向,造成明显的延迟毛刺;另外 vLLM v1 引擎的 scheduling 在高并发下也可能产生队列等待。

2.4 高并发下 TPOT/ITL 增长较快

stress_standardinput=1000, output=256

并发 mean TPOT P95 TPOT P99 TPOT mean ITL
96 29.46 67.30 123.42 113.64
128 35.20 76.85 141.17 136.57

TPOT 从 29ms 升到 35msP99 超过 140ms说明 decode 阶段在极限并发下已经接近饱和。


3. 可重点优化的方向

3.1 按并发动态调整 --spec-tokens

参考历史对比数据(dsv4_inference_comparison_report.md

spec-tokens 低并发c=1 高并发c=64
3 1.03 req/s, 254 tok/s 14.53 req/s, 3507 tok/s
5 1.07 req/s, 257 tok/s 9.36 req/s, 2210 tok/s
7 1.03 req/s, 251 tok/s 9.13 req/s, 2218 tok/s

当前部署固定使用 --spec-tokens 5

  • 对低并发c=1~16相对友好
  • 对高并发c≥64不是最优st=3 在高并发下接受率更高、验证开销更小。

建议

  • 高并发服务场景:改用 --spec-tokens 3
  • 若负载混合,可考虑不同 endpoint/队列按并发分桶,或测试 st=3/st=5 在本 grid 下的完整表现。

3.2 长上下文场景优化

针对 long_rag32Klong_context_probe16K的吞吐断崖

  1. KV cache dtype 对比测试:当前是 FP8可测试 BF16 是否改善长上下文稳定性和吞吐。
  2. block-size 调整:当前 256可尝试 128 或 64 看是否减少内存碎片。
  3. hybrid KV cache manager:当前 --no-disable-hybrid-kv-cache-manager,可对比关闭后的表现。
  4. 限制长上下文并发:若业务允许,对 32K 输入设置更低的 max-num-seqs 或独立队列,避免 c=8 后的内存带宽瓶颈。
  5. attention backend:可测试 FLASHINFER_MLA_SPARSE_DSV4(脚本 start_dsv4_dspark_8card_flashinfer.sh)在长上下文下的表现。

3.3 降低延迟长尾

  1. 增加 warmup:当前仅 10 条 warmup。DSpark 的 JIT 编译/算子 warmup 在首次运行时较重,建议增加到 50~100 条或先跑一轮 discard。
  2. compilation cache 持久化:确认 TORCH_EXTENSIONS_DIRVLLM_CACHE_ROOT 等环境变量已设置并复用,避免每次重启重新编译 deep_gemm/tilelang。
  3. 调度参数:尝试调整 --max-num-batched-tokens--max-num-seqs、chunked prefill 相关参数,减少队列等待。
  4. P99 TTFT 抖动:高并发下 P99 TTFT 高通常与 prefill batching 有关,可尝试限制 prefill 阶段 batch 大小或启用 prompt chunked prefill。

3.4 低并发场景是否需要 DSpark

对于 chat_standard c=1

  • 当前 0.49 req/s、P99 E2E 10.7s 的服务质量较差。
  • 若业务存在大量单用户/低并发请求,可考虑:
    • 部署无投机基线 vLLM 专门服务低并发流量;
    • 或设置最小 batch 阈值,累积少量请求后再用 DSpark 处理。

3.5 对比 baseline 与 SGLang

本次测试只有 DSpark 单一配置,建议补充:

  1. vLLM-dspark 无投机基线:用同样的 sglang.bench_serving --backend vllm 测一遍相同 grid计算真实加速比。
  2. SGLang EAGLE:在相同 grid 下复测,验证 DSpark 在不同场景下的相对优势。
  3. 不同 --spec-tokens 的完整 gridst=3 和 st=5 各跑一遍,绘制并发-吞吐曲线。

4. 推荐下一步实验

优先级 实验 预期收益
P0 高并发改用 --spec-tokens 3 提升 c≥64 场景吞吐 20~50%
P0 长上下文16K/32K对比 BF16 KV cache 改善吞吐断崖和 P99 TTFT
P1 增加 warmup / 预热缓存 降低 P99 TTFT 和首请求延迟
P1 测试 FLASHINFER_MLA_SPARSE_DSV4 backend 可能提升长上下文吞吐
P2 跑无投机基线 grid 获得真实加速比
P2 对比 st=3/st=5 完整曲线 找到最佳投机长度配置

5. 结论

当前 DSpark 部署在 短输入、中高并发 场景下已经展现出明显优势,但在 低并发超长上下文 场景下存在明显短板。最优先的优化是:

  1. 高并发服务改用 --spec-tokens 3
  2. 针对 16K/32K 长上下文做 KV cache dtype 和 attention backend 的调优;
  3. 补充 baseline 测试,量化 DSpark 的真实收益。