vLLM KV Cache:从显存账本到吞吐边界
用可计算的显存账本理解 KV Cache、并发请求和最大上下文之间的约束关系。
大模型推理的显存并不只由权重决定。进入在线服务后,KV Cache 往往决定可承载的并发、上下文长度和调度余量。
从约束开始
先把问题拆成权重、运行时工作区、KV Cache 和安全余量四部分。任何优化都应说明它改变了哪一项,而不是只汇报一个吞吐数字。
available = gpu_memory - weights - runtime_workspace - safety_margin
max_tokens = available // kv_bytes_per_token为什么需要上下文
同一个吞吐数字,在不同 batch、输入长度、输出长度、精度和 GPU 上没有可比性。文章中的 Benchmark 应至少记录:
| 维度 | 示例 |
|---|---|
| Hardware | GPU 型号与显存 |
| Model | 模型与参数规模 |
| Precision | BF16 / FP16 / INT8 |
| Workload | batch、input/output tokens |
| Software | CUDA、PyTorch、vLLM 版本 |
工程结论
先建立显存账本,再讨论 PagedAttention、前缀缓存或调度策略。没有账本的优化,很容易把瓶颈从显存移动到延迟而不自知。