知识库
KV Cache 分层是什么?
KV Cache 是大模型处理上下文时算出的中间结果。分层是指显存放不下时,把它依次存到内存、本地盘和外部存储,再用到时读回来,不必重算。
KV Cache 为什么会占这么多空间?
模型每读入一个 token,都要为每一层保存一组键和值,供后面生成时反复查看。上下文越长、模型越大,这份缓存就越大,会话一多显存很快占满。
显存满了以后,推理服务只能把较早的会话缓存丢掉。等那个用户回来继续对话,模型就得把整段历史重新算一遍,这一步叫 prefill,是首 token 延迟的主要来源。
分层之后发生了什么变化?
分层之后,被挤出显存的缓存不再丢弃,而是写到更大的存储层。用户回来时从存储读回,代价从重新计算变成一次读盘,读得快首字就来得快。
R2 给出了量级:480B 模型、并发 16,现场重算的首 token 延迟中位数是 149.48 秒;从 FX100 读回是 11.85 秒;从本地 NVMe 单盘读回是 17.31 秒。
外部存储层和本地盘差在哪里?
本地盘只属于一台机器,别的节点读不到上面的缓存;外部全闪存储挂在网络上,多个节点、多个实例可以共用同一份缓存,容量也更大。
R3 验证了共享:两个四卡实例通过 fs:// 共享池读写同一份缓存,整机吞吐提升 35% 到 36%。方案的组成和落地方式见 KV Cache 分层加速方案。
什么情况下分层没有用?
如果请求都是互不相关的短问题,没有可复用的前缀,缓存命中不了,分层就帮不上忙。它对长上下文、多轮对话、共用长提示词的业务才有效果。
常见问题
KV Cache 和模型权重是一回事吗?
不是。权重是模型本身的参数,加载一次后不变;KV Cache 是处理某段具体上下文时产生的中间结果,每个会话都不一样,会随对话变长而增长。
KV Cache 存到外部存储会丢数据吗?
KV Cache 是可以重算的中间结果,不是业务数据。即使存储层出故障,最坏的结果是这部分会话退回重算,变慢但不会出错。联测的 G4 门禁会做故障注入。
首 token 延迟和吞吐是什么关系?
首 token 延迟是从发出请求到看见第一个字的时间,吞吐是整机每秒生成的 token 数。缓存读回省掉重算,两者同时改善:R2 里延迟降 26% 到 32%,吞吐升 29% 到 40%。