---
title: KV缓存
slug: kv-cache
date: '2026-08-17'
updated: '2026-08-17'
summary: >-
  **K**ey-**V**alue **C**ache，Transformer 自回归解码中的**键值缓存**。把已生成 token 在每一层
  Attention 中算出的 K、V 矩阵保留下来，避免下一轮重新计算——LLM 推理性能优化的第一性原理。
category: 芯片器件
tags:
  - KV缓存
  - KV Cache
  - Transformer推理
  - LLM推理
  - 注意力机制
  - 芯片器件
  - term
aliases:
  - KV Cache
  - Key-Value Cache
  - 键值缓存
  - KV-Cache
draft: false
batch: 2
faq: []
---

# KV缓存（KV Cache）

**K**ey-**V**alue **C**ache，Transformer 自回归解码中的**键值缓存**。把已生成 token 在每一层 Attention 中算出的 K、V 矩阵保留下来，避免下一轮重新计算——LLM 推理性能优化的第一性原理。

## 为什么需要 KV 缓存

```
无 KV 缓存的解码（每生成一个 token）：
  Prompt + 1个token → 整段重算 Attention（O(n²) FLOPs）

有 KV 缓存的解码：
  Prefill：一次性算出 prompt 的 K/V 并缓存
  Decode：每步只算新 token 的 Q，K/V 拼接历史缓存
    └── 复杂度从 O(n²) 降到 O(n)
```

**核心收益**：
- 算力节省：FLOPs/token 从 O(n) 降到 O(1)
- 延迟降低：每 token 解码时间从百 ms 级降到十 ms 级
- 吞吐提升：单 GPU 可并发多个序列

## 显存占用公式

```
KV Cache 单序列大小（字节）=
  2 × n_layers × n_kv_heads × head_dim × seq_len × bytes_per_elem
  │   │       │           │           │         │
  │   │       │           │           │         └─ FP16=2 / INT8=1 / INT4=0.5
  │   │       │           │           └─ 序列长度（context window）
  │   │       │           └─ head 维度（hidden_dim / n_heads），常 64-128
  │   │       └─ KV 头数（MHA=n_heads, MQA=1, GQA=中间值）
  │   └─ 层数（70B 模型约 80 层）
  └─ 2 = K 和 V 各一份

总占用 = 单序列大小 × batch_size
```

## 实战占用（FP16）

| 模型 | 层数 | KV 头 | 头维 | 1K token | 32K token | 128K token | 1M token |
|------|------|-------|------|----------|-----------|------------|----------|
| Llama-3 8B | 32 | 8 (GQA) | 128 | 128 MB | 4 GB | 16 GB | 128 GB |
| Llama-3 70B | 80 | 8 (GQA) | 128 | 320 MB | 10 GB | 40 GB | 320 GB |
| Llama-3.1 405B | 126 | 8 (GQA) | 128 | 504 MB | 16 GB | 64 GB | 504 GB |
| 典型 MHA 70B | 80 | 64 (MHA) | 128 | 2.5 GB | 80 GB | 320 GB | 2.5 TB |

> **关键事实**：长上下文场景下 KV Cache 单卡可超过 100 GB，是 HBM 容量升级的核心驱动力。

## 优化技术谱系

```
KV 缓存优化
  ├── 减少 K/V 数量
  │     ├── MQA（Multi-Query Attention）—— 所有头共享 1 组 K/V，KV 头数=1
  │     ├── GQA（Grouped Query Attention）—— 多个 Q 头共享 1 组 K/V，主流折中
  │     │     └── Llama-2/3、Mistral、Qwen 等采用 8 组 KV
  │     └── MLA（Multi-Latent Attention）—— DeepSeek-V2/V3，将 K/V 压缩到低秩潜空间
  │           └── KV 缓存相比 MHA 缩小 5-10x
  ├── 降低精度
  │     ├── KV Cache 量化（FP16 → INT8 / INT4）
  │     │     └── 字节数减半 / 减四倍，几乎无损
  │     └── 混合精度（关键层保留 FP16，浅层 INT4）
  ├── 内存管理
  │     ├── PagedAttention（vLLM）—— 虚拟内存/分页，显存利用率 4x
  │     ├── Sliding Window Attention —— 只保留最近 N 个 token 的 KV
  │     └── Token Eviction / Merging —— 主动丢弃/合并相似 KV
  └── 计算优化
        ├── FlashAttention —— IO 感知精确 Attention，不缩小 KV 但减少 HBM 读写
        └── FlashDecoding —— 长序列解码并行化
```

## 硬件影响（与电子产业的核心交叉）

KV Cache 直接定义 AI 加速器的**存储层次需求**：

```
LLM 推理的存储层次
  ├── [SRAM](/wiki/sram/)（片上，MB 级）
  │     └── 当前 step 的 Q / 拼接后的 K、V
  │           └── KV Cache SRAM 容量决定单批 seq 长度上限
  │                 └── H100: ~50MB L2 / B200: ~72MB L2
  ├── [HBM](/wiki/hbm/)（封装外，GB 级）
  │     └── 完整 KV Cache 存储
  │           └── H100: 80GB / H200: 141GB / B200: 192GB
  │                 └── 192GB HBM 是 Llama-3 70B 128K context 的入场券
  └── [DRAM](/wiki/dram/)（系统主存，TB 级，可用 KV Cache offload）
        └── ZeRO-Inference、FlexGen 等技术用 SSD/DRAM 分层卸载
```

### 关键硬件决策

| 决策 | 由 KV Cache 驱动的方向 |
|------|----------------------|
| HBM 容量 | 70B 模型 128K context → 至少 80GB HBM/卡 |
| HBM 带宽 | Decode 阶段每 token 需读全部 KV，1.6T+ 模型对带宽压力 > 训练 |
| SRAM 规模 | Apple M 系列用超大 SRAM（96MB+ L2）放得下更多 KV |
| 批处理大小 | 长序列 + 大模型 = 只能 batch=1，GPU 利用率下降 |

## 代表厂商与技术方案

- **vLLM**（PagedAttention）：UC Berkeley 开源，KV Cache 显存利用率从 20-40% 提升到 80%+
- **DeepSeek MLA**：Multi-Latent Attention，KV 缩小 5-10x
- **SGLang**：RadixAttention，前缀共享 KV 缓存
- **TensorRT-LLM**（NVIDIA）：KV Cache 量化、Continuous batching
- **HuggingFace TGI**：paged attention + prefix caching
- **Anthropic Prompt Caching**：API 层共享 KV 缓存，命中降本 90%

## 关键洞察：KV Cache 是 LLM 推理的"内存税"

> 与训练阶段**算力受限**（FLOPs-bound）不同，推理阶段**内存受限**（memory-bound）—— 每生成一个 token 都必须把整个序列的 KV Cache 从 HBM 读出。**HBM 容量**和**HBM 带宽**共同决定单卡推理性能上限，驱动了 H100 → H200（141GB）→ B200（192GB）→ B300（288GB 路线）的容量竞赛。

## 核心关系

```
[KV缓存](/wiki/kv-cache/)（Transformer 推理核心数据结构）
  ├── 上游算法
  │     ├── Self-Attention 机制（Q/K/V 投影）
  │     ├── FlashAttention（IO 感知精确 Attention）
  │     └── MLA / GQA / MQA（KV 头压缩）
  ├── 内存管理
  │     ├── PagedAttention（vLLM 虚拟内存分页）
  │     ├── Prefix Caching（SGLang RadixAttention）
  │     └── KV Cache 量化（INT8/INT4）
  ├── 下游硬件影响
  │     ├── [HBM](/wiki/hbm/)（容量与带宽决定 decode 性能）
  │     ├── [SRAM](/wiki/sram/)（片上容量决定单批 seq 长度）
  │     ├── [XPU](/wiki/xpu/)（架构设计需考虑 KV Cache 访存模式）
  │     └── 内存墙 / [3D DRAM](/wiki/3d-dram/)（容量突破路径）
  ├── 服务对象
  │     ├── [AIDC](/wiki/aidc/)（AI 数据中心推理服务）
  │     ├── [AI服务器](/wiki/ai-server/)（单卡/多卡推理部署）
  │     └── [AI推理终端](/wiki/edge-ai-device/)（边缘 KV 压缩与缓存）
  └── 经济模型
        ├── 长上下文 = 成本线性增长（每 token 都需读 KV）
        ├── Prompt Caching = 缓存复用降本 90%
        └── 推理服务商业模式受 KV Cache 物理规律约束
```

## 关键参数速查

| 参数 | 典型值 | 说明 |
|------|--------|------|
| 单 token KV 大小（70B GQA） | 5 MB | 32 层 × 8 KV 头 × 128 维 × 2 × 2B |
| 1M context KV（70B GQA） | 5 GB | 长文本应用基准 |
| 70B 模型 batch=8, 32K context | 80 GB | 接近 H100 容量极限 |
| KV 量化收益（INT8） | 50% 容量 | 质量损失 < 0.1% |
| PagedAttention 收益 | 4x 吞吐 | 显存碎片化消除 |
| MLA 收益（vs MHA） | 5-10x KV 缩小 | DeepSeek-V3 报告 |
