在线推理出现显存紧张、请求排队或长对话被拒绝时,先别只盯着模型权重。大模型在线服务的KV缓存容量规划,关键是算清同时驻留的令牌总量,再扣除运行时不能用于缓存的显存。下面按六步估算,并用压测校准结果。
六步核算KV缓存容量
1. 确认每张卡可用于缓存的预算
先从设备总显存中扣除模型权重、推理框架、临时计算空间及通信缓冲区。以监控中的峰值占用为准,不要把标称显存全部算作缓存空间。若采用张量并行,需按各卡实际分片核算;最紧张的那张卡决定能否接收新请求。

2. 读取模型的KV相关结构
从模型配置确认层数、KV头数、每个头的维度,以及缓存数据类型。单条序列的理论缓存量可按下式估算:2 × 层数 × KV头数 × 头维度 × 已驻留令牌数 × 每元素字节数。前面的2表示键和值。多头注意力(MHA)通常比多查询注意力(MQA)需要更多KV头;实际数值以模型配置为准。
3. 估算单请求的驻留长度
统计输入提示词和已生成内容的合计长度,并考虑系统提示、对话历史及工具调用结果。不能只用用户输入长度,也不能直接把最大上下文窗口当作每个请求的平均长度。建议分别记录常见请求、长请求和上限请求的令牌分布。
4. 用并发峰值求总需求
把各类请求按高峰时可能同时活跃的数量相加,再乘以对应的单请求缓存量。举例:假设模型有32层、8个KV头、头维度128,缓存采用每元素2字节,单条序列驻留4096个令牌,理论值约512 MiB;20条同等长度序列约需10 GiB。此例未计入块管理等额外开销,只用于展示算法,不能替代实际配置测量。
5. 扣除开销并设置预留余量
KV块、分配粒度、运行时临时占用和请求长度波动都会影响可用容量。可先将理论需求上调约10%—25%作为压测起点;波动大、长请求多或显存共享任务较多时,预留应更谨慎。这个区间是规划参考,不是固定标准。采用分页式缓存可降低连续分配造成的浪费,但不会增加物理显存总量。
6. 压测验证并调整接入策略
逐步提高并发,覆盖短请求、长上下文及不同输出长度,记录缓存占用、等待队列、请求失败和延迟。若显存先触顶,降低并发上限或缩短可保留历史;若队列先变长而缓存仍宽裕,再检查调度与计算瓶颈。前缀缓存能复用相同提示词的部分计算与缓存,但收益取决于前缀重复率,容量规划不应预先假定所有请求都能命中。
用实测结果定容量,而非只看理论值
上线前,按计划的峰值并发运行持续压测,并为突发流量保留可用空间。若不同请求长度差异很大,可分别设置最大输入、最大生成长度和并发限制,避免少数超长会话挤占全部缓存。大模型在线服务的KV缓存容量规划应随模型版本、精度、调度策略和真实流量变化重新核对;升级模型后,旧容量结论不一定仍成立。
常见问题
缓存不足一定要换更大显存的设备吗?
不一定。先检查并发限制、历史保留长度和缓存精度支持,再评估减少单请求占用或增加设备是否更合适。
为什么实测容量低于公式结果?
公式通常只算键和值张量,未覆盖运行时开销、分配粒度及其他显存占用;应以目标环境压测结果修正。
预留余量应固定为某个比例吗?
不建议。用流量波动和压测峰值决定余量,并在模型、配置或业务请求结构改变后重新测量。


