2026年AI基础设施面试的必问。不懂KV Cache就聊不了服务时延和内存容量。
自回归每步attention要读所有历史token的K/V。朴素每步重算是每步O(n²)。
KV Cache把每层K、V张量存下来。生成第t+1个token只需算第t个token的K、V,然后对整个cache做attention。
内存:cache大小=2×层数×头数×头维×序列长×batch×精度。70B模型4K上下文每请求能吃几十GB。
服务优化:PagedAttention(vLLM)像操作系统虚拟内存页一样管理KV——避免碎片。FlashAttention-2融合计算。
取舍:上下文越长cache越大。cache量化(fp16→int8/int4)省2-4倍内存,质量略损。
自回归生成每个新token的attention要用到前面所有token的K、V。不缓存就每步重算所有历史——二次方。KV Cache:算过就存;第t+1步只给新生成的token算K、V,对已存cache做attention。每步从O(n²)降到O(n)。代价是内存——两个张量×所有层×所有头×头维×序列长×batch。70B模型4K上下文每请求就能破10GB。这也是vLLM引入PagedAttention的原因——像虚拟内存分页管KV,不浪费slot,一张GPU扛高并发。再不够就量化KV Cache(int8甚至int4)。
KV Cache的存在导致首token时延(prefill)和单token时延(decode)性质不同——prefill计算密集、decode内存密集。
滑动窗口attention(Mistral)在长上下文下也能限住KV Cache大小。
即答侠把KV Cache跟具体数字绑(Llama 70B每token多少MB)——答起来像工程师而不是学生。
每步重算二次方——4K上下文等于每token多1600万次操作。时延不可用。
能——prefix caching把公共system prompt的KV共享给所有用户。聊天类应用大幅降本。