詳細解釋
KV快取(Key-Value Cache)是Transformer架構 (變換器 / 注意力模型) (Switch Transformer)推理中的核心優化技術,存儲先前token的Key和Value,避免自回歸生成時的重複計算。
為何需要:
- 自回歸生成:逐token生成,每步都需所有歷史token的注意力
- 無KV Cache:每步重新計算所有歷史Key和Value
- 計算複雜度:O(n²d),n為序列長度,d為維度
- 實際情況:大部分計算浪費在重複計算上
工作原理:
- 存儲:每層每個token的Key和Value向量
- Prefill階段:首次計算並存儲所有prompt的KV
- Decode階段:只計算新token的Query,與存儲的K、V做注意力
- 更新:每步將新token的KV追加到Cache
記憶體需求:
- 每token每層:2 × hidden_dim × precision_bytes
- 總量:batch_size × seq_len × num_layers × hidden_dim × 2 × precision
- 示例:LLaMA 70B,FP16,batch=1,4K上下文 → ~10GB Cache
- 長上下文:是大型語言模型 (大語言模型 / 大模型)推理的主要記憶體瓶頸
優化技術:
- 多查詢注意力(多查詢注意力):所有頭共享同一KV,減少1/頭數
- 分組查詢注意力(分組查詢注意力):平衡方案和效果
- Flash Attention:記憶體高效的注意力計算
- PagedAttention(vLLM):動態分配,減少碎片
- 量化KV Cache:INT8存儲,FP16計算
- 滑動窗口:只保留最近N個token的KV
挑戰:
- 記憶體限制:長上下文時KV Cache占主導
- 上下文長度:支持百萬token需要專門設計
- 動態長度:不同序列長度差異大
KV Cache是現代大型語言模型 (大語言模型 / 大模型)高效推理的基石。