系列:推理系统基础设施手记

推理系统基础设施手记(五):从 MHA 到 HiCache——KV Cache 压缩方向的演进全景

0. 一句话主线

MHA:不压缩 → GQA:减 KV 头数 → MLA:沿「特征维」压缩 → DSA:沿「token 维」做稀疏选择 → CSA:先沿 token 维压缩再做稀疏 → HCA:沿 token 维极度压缩后直接 Dense → HiCache:架构压缩后的 KV 还要管「放 GPU / CPU / SSD 哪层」。

整条线最关键的变化,是 KV Cache 的压缩方向发生了转移——从「把每个 token 存得更小」(特征维)转向「把很长的历史本身压短」(token 维)。而最后一步 HiCache 已经不属于「压缩」,它是另一个维度的问题:这些 KV 已经产生了,该放在哪。


1. 完整演进链

KV Cache 演进:压缩方向从「特征维」走向「token 维」 MHA 每个 token 完整存 K/V,不压缩 KV 长度 = 上下文长度 N GQA 多个 Q 头共享 KV 头 → KV 头数↓ Token 数仍是 N,只减了 head 数 MLA 每个 token 压成低维 latent c(特征维) N 个 entry,但每个更小 ≈ 1/64 DSA Indexer 选 top-k 重要 token(token 维) 省算力,但 KV 仍要存(省算不省存) CSA 先 4 token→1 KV 块,再 top-k 稀疏 1M → 250K 压缩 KV,再选 1024 HCA 128 token→1 条目,对全部做 Dense 1M → ~7800 条目,不再需要 top-k HiCache 压缩后的 KV 分层存放(系统维) GPU HBM → CPU DRAM → SSD NVMe

图:从 MHA 到 HiCache 的完整演进。颜色标识压缩所在的「维」——蓝=特征维(MLA)/紫=token 维(CSA/HCA)/灰=不压缩(MHA)/青=减头(GQA)/靛=token 维选择(DSA)/紫=系统层(HiCache)。


2. 每一步到底在动什么刀

机制动刀位置压缩比解决什么不解决什么
MHA无1×基准:精确KV 随 N 线性膨胀
GQAKV 头数4–8×减 KV 头,省显存Token 数仍是 N
MLA特征维(每 token 更小)~1/64每 token 缓存变小entry 数仍是 N
DSAtoken 维(选重要的读)算力↓只算 top-k,省算力KV 容量没降(省算不省存)
CSAtoken 维(先压再选)4× + top-kKV 降到 1/4,再稀疏仍需 Indexer 选块
HCAtoken 维(极压后 Dense)128×KV 压到极致,稠密更快单 token 信息高度抽象
HiCache存储层级(放哪)—多级存、降 GPU 压力不做任何压缩

3. 最关键的一点:压缩方向变了

很多人把 MLA / DSA / CSA / HCA 混为一谈,其实它们的压缩方向完全不同:

一句话区分:MLA 在「特征维」动刀(每个 token 更小),DSA/CSA/HCA 在「token 维」动刀(历史变短或只挑重要的)。这是理解整条演进的钥匙。


4. MSA 在哪?

sys3 已经单独讲过 MSA / CSA / HCA 三者的对比与协作:MSA 只改「看哪里」(稀疏选择,不压 KV),CSA 先压再选,HCA 极压后稠密。本文的演进链把它们放进更大的上下文里——MSA 是 DSA 思路的「模型内原生」版本,而 DeepSeek V4 走的是 CSA/HCA 这条「先压后读」的路线。两者不是替代,是分层协作。


5. HCA ≠ HiCache:这是两级优化

这是最容易被混淆的一点。HCA 和 HiCache 不是竞品,是上下游。

第一层:模型压缩(架构层)
MHA → MLA → CSA / HCA
             ↓
         KV 体积下降(1M → 几个 GB)

第二层:系统分层(系统层)
HiCache
             ↓
     GPU HBM / CPU DRAM / SSD NVMe 分层
             ↓
     GPU HBM 压力进一步下降
HCA(架构压缩)与 HiCache(系统分层)是上下游两级优化 第一层 · 模型架构压缩 MHA → MLA → CSA / HCA:把 KV 表示量压下来,1M token 从 ~100GB 降到几个 GB KV Cache 第二层 · 系统分层(HiCache) GPU HBM(热)/ CPU DRAM(温)/ SSD NVMe(冷),按需 H2D/D2H 搬运,降 GPU 压力 GPU HBM L1 · 热 KV CPU DRAM L2 · 温 KV SSD NVMe L3 · 冷 KV

图:HCA 减少「KV 表示量」,HiCache 管理「KV 放哪层」。两者正交、可叠加,构成从架构到系统的两级优化。

顺带一提:DeepSeek-V4 的 KV 管理确实已经针对「CSA/HCA 压缩 KV + SWA 未压缩 KV」分别设计了 cache 结构——这正说明 HCA 的压缩与 HiCache 这种系统层 KV 管理是可以衔接起来的。如果你在看 GLM-5.2/5.3 的 DSA、HiCache 和 DeepSeek-V4 的 CSA/HCA 是不是同一套思想,这个区别尤其关键:DSA/CSA/HCA 解决「Attention 怎么读」,HiCache 解决「KV Cache 放哪里」。


6. 一句话串起来

MLA 是「每个 token 存得更小」,DSA 是「每次只读重要 token」,CSA 是「先把 token 压小再做稀疏读取」,HCA 是「把很长的历史直接压成很短的摘要后全读」,而 HiCache 则是在这些 KV 已经产生之后,解决「放 GPU、CPU 还是更低层存储」的问题。


7. 与已有文章的衔接

本文是把上面散落各篇的「压缩方向」主线,第一次串成一条从 MHA 到 HiCache 的完整链。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。