Skip to content

Latest commit

 

History

History
100 lines (76 loc) · 4.94 KB

scenario-analysis.md

File metadata and controls

100 lines (76 loc) · 4.94 KB

三场景方案分析

场景概览

三个场景使用相同模型(Qwen3-32B)和相同集群(H800×8 + L40S×16),通过不同的流量特征和 SLO 约束验证系统在不同工作负载下的决策差异。

输入参数对比

场景一:客服 Chat 场景二:长文本生成 场景三:混合流量
请求数 500 300 400
输入 P50/P90/P99 3568/4668/4977 487/764/793 1281/4487/5751
输出 P50/P90/P99 304/469/498 2763/3740/3953 458/2113/2987
输入/输出比 11.5(极重 prefill) 0.2(极重 decode) 2.2(混合)
Prefix 覆盖率 100% 9% 51%
Prefix 复用率 0.99 0.50 0.99
Interactive 占比 91% 60% 76%
TTFT SLO 800ms(严格) 2000ms(宽松) 1500ms(中等)
ITL SLO 45ms 35ms(严格) 50ms(宽松)
最大 GPU 数 8 8 16
容量余量要求 20% 15% 15%

推荐方案对比

场景一 场景二 场景三
GPU 池 H800 NVLink H800 NVLink H800 NVLink
TP / PP 4 / 1 4 / 1 4 / 1
精度 FP8 FP8 FP8
副本数 1 1 1
Prefix Cache ✅ 启用 ❌ 关闭 ✅ 启用
Chunked Prefill ✅ 启用 ❌ 关闭 ✅ 启用
Prefill Chunk Size 2048 1024 1024
max_num_batched_tokens 16384 6104 16384
max_num_seqs 16 16 16
KV Cache Dtype auto (bf16) auto (bf16) auto (bf16)
预估单卡显存 21.8 GB 21.0 GB 25.3 GB
预估 TTFT 605ms 99ms 575ms
预估 ITL 16ms 16ms 16ms
每小时成本 $14.0 $14.0 $14.0
容量余量 96.5% 87.9% 97.6%

Reconcile 操作对比

场景一 场景二 场景三
操作 scale_replicas → 2 无(稳定) 无(稳定)
原因 TTFT 连续 4 窗口违反 所有指标正常 所有指标正常
风险等级 low — —

各场景决策逻辑解析

场景一:客服 Chat

核心特征:输入极长(P90=4668)、输出短、100% 请求携带 prefix、TTFT 要求严格。

决策逻辑:

  1. Prefix Cache 启用 — 覆盖率 100% + 复用率 99%,几乎所有请求都命中缓存,大幅节省 prefill 计算
  2. Chunked Prefill 启用 — 输入 P90=4668 远超 2048 阈值,需要分块处理避免单次 prefill 阻塞 decode
  3. Prefill Chunk Size=2048 — 输入 P50=3568 > 2048,选择较大分块以平衡 prefill 吞吐和 decode 延迟
  4. Reconcile 扩容 — Telemetry 显示 TTFT 连续违反 SLO(800ms),单副本在流量高峰时吞吐不足

为什么选 H800 而非 L40S:TTFT SLO 仅 800ms,L40S PCIe 通信惩罚 1.3× 会使 TTFT 从 605ms 升至 ~787ms,逼近 SLO 边界且无余量。

场景二:长文本生成

核心特征:输入极短(P90=764)、输出极长(P90=3740)、几乎无 prefix、ITL 要求严格。

决策逻辑:

  1. Prefix Cache 关闭 — 覆盖率仅 9%,91% 的请求完全无法受益,启用只会浪费显存
  2. Chunked Prefill 关闭 — 输入 P90=764 远低于 2048,单次 prefill 即可完成,无需分块
  3. max_num_batched_tokens=6104 — 输出长序列占用大量 decode 时间,限制 batch token 数避免单请求被过度延迟
  4. TTFT 极低(99ms) — 输入短,prefill 几乎不耗时
  5. Reconcile 无操作 — ITL 16ms 远低于 35ms SLO,系统运行健康

为什么显存更低(21.0 GB):输入短导致 KV Cache 的 context_length 估算更小(P99 input + P99 output ≈ 4746 vs 场景一的 5465)。

场景三:混合流量

核心特征:输入长度跨度极大(P50=1281, P99=5751)、输出中等偏长、51% 请求有 prefix。

决策逻辑:

  1. Prefix Cache 启用 — 覆盖率 51% + 复用率 99%,超过半数请求可受益且命中率极高
  2. Chunked Prefill 启用 — 输入 P90=4487 > 2048,长尾请求需要分块
  3. Prefill Chunk Size=1024 — 输入 P50=1281 接近 1024,选择较小分块以更好地交错 decode
  4. 显存最高(25.3 GB) — 输入 P99=5751 + 输出 P99=2987,context_length 估算最大
  5. Reconcile 无操作 — SLO 宽松(TTFT 1500ms),容量余量 97.6%

为什么 max_gpu_count=16 但只用了 4:FP8 TP=4 单副本已满足 SLO,无需更多资源。成本优先目标下不会过度配置。

方案一致性分析

三个场景都选择了 H800 TP=4 FP8 PP=1 单副本,原因:

  • Qwen3-32B FP8 在 TP=4 下单卡权重仅 ~7.5 GB,80 GB H800 有充足余量
  • TP=4 是满足 num_kv_heads=8 整除约束的最小有效 TP(TP=2 也可以,但 TP=4 延迟更低)
  • FP8 相比 BF16 显存减半,且质量损失 <0.5% 在 0.99 阈值内
  • PP=1 避免 pipeline bubble 带来的延迟增加
  • H800 NVLink 的通信惩罚为 1.0,比 L40S PCIe 的 1.3+ 更优

差异化体现在功能开关和 batch 参数,而非基础架构选择——这是合理的,因为模型和集群相同,不同的是工作负载特征。