把显存/并发/KV 缓存的关系讲清楚,给压测与调参清单。
🎯 文章目标
- 明确显存与并发/吞吐/上下文的关系
- KV/Prefix Cache 的收益与使用方式
📚 背景/前置
- 显存:模型参数 + KV 缓存 + 激活 + 额外开销
- 并发:批处理带来吞吐提升,但会引入头阻塞
- 缓存:相同前缀/相同请求收益显著
🔧 核心内容
1) 容量估算
- 粗略估:显存 ≈ 模型大小 × 系数(量化后更小)+ KV × 并发
- 观测 tokens/s、TTFB、P95/P99,定位瓶颈
2) KV/前缀缓存
- 同一前缀复用,大幅降低 prefill 时间
- 场景:模板固定、系统提示较长
3) 并发与批处理
- 按“token 数”限流,避免大输入拖慢整体
- 动态调 batch,目标是提升吞吐但不牺牲长尾
💡 实战示例:vLLM 参数
bash
--max-num-batched-tokens 8192 --gpu-memory-utilization 0.9
📊 对比/取舍(速查)
- 吞吐 vs 延迟:批处理/缓存/量化与模板瘦身组合调优
🧪 踩坑与经验
- 盲目放大 batch 导致头阻塞
- 未开启前缀缓存,白白浪费 prefill
📎 参考与延伸
- KV/Prefix Cache、 vLLM/TGI/LMDeploy 文档
💭 总结
- 用“容量估算 + 缓存 + 动态 batch + 观测”稳住性能