上周跟一个创业的朋友喝酒,他做AI服务的,刚融了一千万。
我问:钱够花吗?
他苦笑:够烧半年吧。你知道我们最大的成本是什么吗?不是买卡,不是电费,是内存。
我说:别闹,你又不是开网吧。
他把手机推过来,给我看监控面板:40%的A100显存被一个叫KV Cache的东西吃掉了。而且用户越多,对话越长,它吃得越狠。
先拿一个13B参数的模型来算。这个规模在中型部署里很常见,数据也透明。

KV Cache的占用公式是:
2(Key和Value两份) × 隐藏层维度 × 层数 × 数据类型字节
对于OPT-13B这样的模型:
代入:2 × 5120 × 40 × 2 = 819,200字节 ≈ 800KB/Token
这是论文里给出的典型值。
前提:这是FP16精度、MHA架构的计算结果。如果换成MQA/GQA,系数会小一些;如果换成INT8量化,字节数减半。
假设用户问了个500字的问题,你生成了500字的回答。中文场景下,1个汉字 ≈ 1-2个Token,咱们取中位数按1.5算:
1000字 × 1.5 = 1500个Token
1500 × 800KB = 1.2GB
这是单个请求的KV Cache占用。
前提:假设所有Token的KV Cache都保留,没有做任何压缩或稀疏化。
一块A100 40GB:
10GB ÷ 1.2GB ≈ 8个请求
这是理想情况——前提是:
现实中,能做到4-6并发,已经算优化得很好了。
这就是为什么大厂都在疯狂优化KV Cache——模型越大,内存墙越狠。
传统系统怎么管理KV Cache?预分配一整块连续内存,按最大可能长度(比如2048 Token)圈地。结果:
论文里给过一个触目惊心的数据:传统系统中,真正用于存放KV Cache的有效内存占比,最低只有20.4%。
vLLM团队从操作系统虚拟内存里抄了作业:

PagedAttention的CUDA内核做了精细的并行设计:


在并行采样或束搜索时,多个生成分支共享同一个Prompt。PagedAttention用写时复制(Copy-on-Write):
论文里的实测数据:

与HuggingFace Transformers比,吞吐量最高提升24倍;与HuggingFace TGI比,最高提升3.5倍。
单机优化到头了,阿里云开源的Mooncake把目光投向集群。

Mooncake的核心是以KVCache为中心的PD分离架构:
为什么要拆?因为Prefill和Decode的计算特征完全不同:
Mooncake构建了一个分布式KVCache池,让所有节点可以共享缓存的上下文。
比如:用户A问“公司上个季度财报怎么样”,系统算完把KV Cache存进池子。几分钟后用户B问同样的问题——直接从池子里读缓存,不用重新计算。
跨节点传输KV Cache是最大难点。Mooncake的解决方案:
论文里给出了传输成本的判断公式:只要满足 B/G > 2ds/[gqa×(apd +bd²)],传输就有正收益。其中B是带宽,G是算力,d是隐藏层维度。
前提:带宽达到100Gbps以上,收益即可为正。
Mooncake的调度器会为每个新请求选择最优的P节点和D节点:
说完系统层面,再说算法层面的“瘦身”。
KIVI团队对主流LLM的KV Cache元素分布做了研究,发现两个关键事实:
基于此,KIVI提出非对称量化策略:
Key缓存的按通道量化不能直接在流式场景中实现,因为量化过程跨越不同Token。KIVI的解决方案:
把Key缓存分成两部分:
XKg = XK[:l-r]:每G个Token一组,存储量化后的版本XKr = XK[l-r:]:保持全精度解码过程中,新到达的Key先添加到 XKr,当 XKr 积累到R个Token时,将其量化并与之前的 XKg 拼接,然后重置 XKr。
苹果的研究团队提出了Commutative Vector Quantization(CommVQ),利用加法量化(Additive Quantization)和与RoPE可交换的码本设计,实现了更激进的压缩。


关键数据:
前提:需要轻量级Encoder和EM算法训练码本,推理时用矩阵乘法解码。
最新的KVC-Q框架提出了一个更有趣的思路:不要均匀量化,按Token重要性动态分配精度。


三个核心机制:
效果:
ODCC和NVIDIA最近发了个评测,核心思路是分层存储:
结果:首Token延迟优化97%,吞吐量提升22倍。
上海交大、辉羲智能和微软亚洲研究院的ROMA/TOM系列研究,走得更远:
ROMA架构:

TOM架构(针对BitNet/Ternary模型):

应用场景:具身智能(机器人需要毫秒级确定性的“脊髓反射”)、深海/火星探测器(DRAM怕辐射,ROM天然稳定)、端侧隐私计算。
写到这,想起开头那个创业的朋友。
他说:你知道我现在最怕什么吗?不是技术跟不上,也不是融不到钱。是用户一多,内存就爆。爆一次,几十万就没了。
我说:那你怎么办?
他说:PagedAttention上了,量化在测,Mooncake还在看。实在不行,就去跟投资人讲个新故事——我们不只做大模型,我们还做KV缓存管理平台。
我说:投资人信吗?
他笑了:信不信不重要,重要的是现在谁家做推理不焦虑内存?谁焦虑,谁就得花钱。花钱,就是我们的机会。
我想了想,好像确实是这么个道理。
毕竟在Token的世界里,记忆力就是生产力,而生产力,从来都不便宜。