注意力架构#

GQA 家族#

MHA (Multi-Head Attention, 多头注意力)是最早在 Transformer 模型中提出的标准注意力机制。它没有让模型用一套注意力权重去学习所有信息, 而是将输入拆分成多个头(Head)。每个头独立学习输入序列在不同子空间中的表示,关注不同的信息(比如,一个头可能关注句法关系,另一个头关注语义 相似性)。最后,将所有头的输出拼接起来,通过一个线性层进行融合。MHA每个头都拥有自己独立的查询(Query, Q)、键(Key, K)和值(Value, V) 投影权重。如果有 h 个头,就有 h 套独立的 Q, K, V 权重。 其优点是强大的表示学习能力,效果好。缺点也很明显,计算量和内存占用最大。在模型 推理(生成)时,需要缓存每一层的 K 和 V,这个 K/V 缓存会非常大,成为推理速度的瓶颈。

为了解决 MHA 的推理效率问题而提出的优化,MQA (Multi-Query Attention, 多查询注意力)被提出。MQA 依然保留了多个查询头(Query Heads), 让模型能从不同角度去“查询”信息。但它让所有的查询头共享同一套键(Key)和值(Value)的投影权重和缓存。如果h 个 Q 头,但只有 1 个 K 头和 1 个 V 头。MQA极大地减小了 K/V 缓存的大小,显著提升了推理速度和吞吐量,同时对模型性能的负面影响相对较小。然而,相比 MHA,由于所有头共享 K/V, 可能会损失一些模型的表示能力,导致性能有轻微下降。

GQA 是 MHA 和 MQA 之间的一种折中方案,旨在平衡性能和效率。它将查询头(Query Heads)分成若干组,组内的查询头共享同一套键(Key)和值(Value) 投影。 假设有 h 个 Q 头,将它们分成 g 组,那么就有 g 个 K/V 头。每 h/g 个 Q 头共享一个 K/V 头。在推理效率上远超 MHA,在模型性能上通常优于 MQA。它提供了一个灵活的旋钮,可以通过调整组的数量 g 来权衡效率和效果。实现比 MQA 稍复杂,但带来的性能提升通常是值得的。

GQA Famil

为了简化,我们将MHA/MQA/GQA简化为GQA家族,即CT-HPKV认为MHA/MQA是GQA的特殊形式。GQA家族的模型在KV Cache的格式和管理上具有相同的形式,CT-HPKV 卸载方案对GQA家族模型均进行了全面支持。使用vLLM/SGLang启用CT-HPKV进行MHA/MQA/GQA模型部署时,没有额外的配置,CT-HPKV会自动识别模型的注意力架构特性, 启用对应的KV Cache卸载侧策略。MHA架构的模型包含早期的LLama2等, 现在大部分大模型的注意力部分基本都是GQA架构, MQA架构由于精度较差,基本被弃用, CT-HPKV理论上也是支持的。

MLA#

MLA(Multi-Head Latent Attention)由深度求索公司从DeepSeek-v2模型中提出,其注意力计算方式相比传统的多头注意力有了较大的变化。注意力架构的变化 也导致了其KV Cache的结构与Layout与传统多头注意力不同。比如, MLA中KV Cache分为RoPE和NoPE两部分。SGLang将RoPE和NoPE两部分KV Cache保存在了一 起,而在vLLM中却将两者分离, SGLang NPU的支持又做了特殊处理。此外,在MLA架构中,不同于GQA家族,每个TP Group纵向切分总的KV Head数量均分KV Cache 容量,MLA模型在TP Group内持有相同的KV Cache内容, CT-HPKV在进行KV卸载时也需要考虑以上各种特性之间的差异, 并且均作出了较好的支持。

Deepseek MLA

为了快速体验,我们可以选择模型参数叫较小的 deepseek-ai/DeepSeek-V2-Lite-Chat 模型为例,验证CT-HPKV对MLA的支持情况:

# 配置vLLM启用CT-HPKV
(base) hpkv@ctyunos:~$ export VLLM_ENABLE_HPKV=1

# 配置使用的内存池大小 (8G大小)
(base) hpkv@ctyunos:~$ export HPKV_KV_MEM_POOL_SIZE=8g

# 配置共享内存文件路径
(base) hpkv@ctyunos:~$ export HPKV_SHARE_MEM_FILE_PATH="/mnt/hpkv"

# 配置KV Cache文件存储路径
(base) hpkv@ctyunos:~$ export HPKV_KV_STORAGE_PATH="/mnt/hpkv/storage"

# 启动vLLM
(base) hpkv@ctyunos:~$ vllm serve /mnt/models/deepseek-ai/DeepSeek-V2-Lite-Chat \
                    --host 0.0.0.0  --port 8505  --trust-remote-code            \
                    --served-model-name deepseek-v2-lite --block-size 64        \
                    --max-num-batched-tokens 8192                               \
                    --gpu-memory-utilization 0.8                                \
                    --enable-prefix-caching                                     \
                    --kv-transfer-config '{"kv_connector":"HpkvConnectorV1", "kv_role":"kv_both"}' \
                    --disable-log-requests

MoE#

MOE 架构的基本思想是在传统Transformer模型中,将每个前馈网络(FFN)层替换为一个 MOE 层。一个MOE层通常由两个关键部分组成:

MoE FFN
  • 专家网络

每个专家是一个独立的子网络(通常是 FFN),在实际计算中只有部分专家会被激活参与处理。通过让多个专家分担不同数据子集的计算,模型在 预训练时可以以较低的计算开销获得大参数量带来的表示能力​。

  • 门控网络

负责根据输入词元的特征动态选择激活哪些专家,一般采用一个带 softmax 的简单前馈网络来计算每个专家的权重。经过训练后,门控网络会逐 步学会将相似的输入路由到表现更好的专家​。在 DeepSeek‑v3等MOE大模型中,正是通过这种将 FFN 层替换为 MOE 层的设计,模型在拥有海量 参数的同时,其实际计算量却与传统稠密模型相当,从而实现了高效预训练和快速推理。

实际上,KV Cache是有注意力部分产生,跟FFN部分没有关系,无论是原有的简单FFN, 还是后来以LLama3为代表的带门控的FFN,以及后来的大 规模稀疏模型,其不会影响KV Cache计算和存储的逻辑。因此,CT-HPKV重点关注对应的注意力架构。

Mamba#

重要

  • 2026.06.30 即将发布;

线性注意力#

重要

  • 2026.06.30 即将发布;

稀疏注意力#

重要

  • 2026.06.30 即将发布;