内容提要
本文介绍大模型缓存技术,涵盖KV Cache、PagedAttention、Prefix/Prompt/Context Cache及Semantic/Response Cache等层级。文章解释各缓存机制、作用阶段、显存估算及工程观测指标,并对比厂商缓存产品形态,强调缓存主要降低重复输入成本,而非输出成本,需结合场景选择策略。
延伸解读
缓存价格信号:成本模型已变
价格表中出现 cached input、cache read 等字段,说明缓存已从内部实现细节变成 API 成本模型的一等公民。工程团队应意识到,输入 token 成本不再单一,重复前缀可显著降低费用。但需注意,价格和规则时效性强,正式测算应以官方文档和 usage 字段为准。
缓存分层:机制与产品形态需区分
KV Cache 是模型内部机制,Prompt/Prefix Cache 是跨请求复用,Context Cache 是显式缓存对象,Semantic/Response Cache 是应用层复用。理解分层有助于工程决策:不同层解决不同问题,由不同角色控制,观测指标也不同。避免混淆概念,才能正确评估缓存收益。
缓存命中率不等于整体性能
Prompt Cache 主要优化 Prefill,不减少 Decode 时间。即使命中率高,长输出任务仍可能受限于 Decode。此外,TTFT 不稳定可能源于部分命中、block 粒度、缓存淘汰或调度策略。工程上应综合观测 prefill_latency、queue_time、TTFT 等指标,而非只看命中率。
缓存有风险,需谨慎设计
缓存可能带来过期内容复用、多租户隔离不当、语义误命中等问题。动态内容放入稳定前缀会导致缓存失效,成本测算忽略 cache write 也会失真。应用层缓存尤其要关注时效、权限和正确性,关键场景应增加二次校验。
Q&A
大模型缓存技术主要分为哪几个层级?
大模型缓存技术主要分为四个层级:模型推理层的KV Cache、推理服务层的PagedAttention和Prefix Cache、API产品层的Prompt Cache和Context Cache、应用层的Semantic Cache和Response Cache。
KV Cache是什么?它如何工作?
KV Cache是Transformer自回归生成时,缓存历史token的Key和Value张量,避免在生成每个新token时重复计算所有历史token的K/V。在Prefill阶段生成并保存输入token的K/V,在Decode阶段复用这些K/V并追加新token的K/V。
如何估算KV Cache的显存占用?
KV Cache显存占用近似公式为:2 × num_layers × num_kv_heads × head_dim × seq_len × batch_size × bytes_per_element。其中2代表Key和Value两份,bytes_per_element在FP16/BF16下通常为2。例如7B模型、32层、8个KV heads、head_dim=128、seq_len=4096、batch_size=1时,KV Cache约0.5 GiB。
PagedAttention是什么?它解决了什么问题?
PagedAttention是vLLM提出的KV Cache显存管理机制,借鉴操作系统分页思想,将KV Cache划分为固定大小的block,通过block table映射逻辑位置到物理位置,支持非连续内存分配。它解决了显存碎片问题,支持更高batch size、请求间共享prefix blocks,并为Prefix Cache提供基础。
Prompt Cache和Context Cache有什么区别?
Prompt Cache是自动的,基于exact prefix match,开发者无需显式创建,通过优化prompt结构(静态内容放前面)来提高命中率。Context Cache是显式的,开发者需先创建缓存对象(如长文档),后续请求引用该缓存,适合反复使用的大上下文。
Semantic Cache和Response Cache有什么不同?
Response Cache是精确匹配缓存,key为完全相同请求,value为模型返回结果。Semantic Cache基于语义相似度(如embedding)匹配,即使问题不完全相同也能复用答案。两者可组合使用,Response Cache处理精确匹配,Semantic Cache处理近似匹配。
大模型缓存能降低所有成本吗?
不能。缓存主要降低重复输入的成本和prefill延迟,但输出token成本仍然存在。对于长输出任务,缓存收益有限。此外,缓存写入也可能产生额外成本,需通过break-even分析判断是否划算。
如何观测大模型缓存的效果?
API层可记录cached_input_tokens、cache_read_input_tokens、TTFT等;推理服务层可监控prefix_cache_hit_rate、kv_cache_usage、prefill_latency等。成本测算需区分普通输入、缓存写入、缓存读取和输出token的价格。