一、RoPE 基础原理回顾
核心思想 RoPE (Rotary Position Embedding) 通过对 Q 和 K 向量施加与位置相关的旋转变换,使得 Q*K^T 的内积自然编码了两个 token 之间的相对距离。
1.1 旋转公式
对于位置 m 的向量 x,RoPE 将每对相邻维度 (x_{2i}, x_{2i+1}) 视为一个 2D 复数平面上的点,施加角度为 m*theta_i 的旋转:
1.2 核心性质
RoPE 的关键性质:RoPE(q,m)^T * RoPE(k,n) = f(q,k, m-n),即 Q*K^T 的结果只依赖相对位置差 m-n。这为 attention 提供了天然的相对位置编码。
为什么不同模型的 RoPE 会有差异? 虽然 RoPE 公式固定,但各模型在以下维度做出了不同选择:① 旋转基频 base 的值;② 对哪些维度应用 RoPE(全部 / 部分 / 解耦);③ 维度配对方式(half-split / interleaved);④ 长上下文扩展策略(NTK / YaRN / ABF)。这些选择深刻影响了推理性能和 KV Cache 设计。
二、RoPE 的三大核心变量维度
三、六大模型 RoPE 配置一览表
| 模型 |
注意力类型 |
head_dim |
RoPE 维度 |
应用方式 |
base (theta) |
旋转方式 |
长上下文扩展 |
预训练长度 |
| DeepSeek-V3/V3.2 |
MLA (128头) |
128+64 |
64 (解耦) |
Decoupled RoPE |
10,000 |
Half-split |
YaRN |
128K |
| GLM-4 / 4.5 |
GQA |
128 |
64 (partial=0.5) |
Partial RoPE |
10,000 |
Interleaved |
YaRN |
128K |
| Qwen2.5 / Qwen3 |
GQA |
128 |
128 (全部) |
Full RoPE |
1,000,000 |
Half-split |
YaRN + DCA |
32K (扩展128K) |
| LLaMA-3 / 3.1 |
GQA |
128 |
128 (全部) |
Full RoPE |
500,000 |
Half-split |
ABF + NTK |
128K |
| Mistral / Mixtral |
GQA + Sliding Window |
128 |
128 (全部) |
Full RoPE |
1,000,000 |
Half-split |
ABF |
32K (扩展128K) |
| LLaMA-2 (参考) |
GQA |
128 |
128 (全部) |
Full RoPE |
10,000 |
Half-split |
无 |
4K |
关键观察:① DeepSeek 是唯一使用 Decoupled RoPE 的(因为 MLA 架构需要);② GLM 是唯一使用 Partial RoPE + Interleaved 旋转的;③ Qwen/LLaMA-3/Mistral 都用 Full RoPE,但 base 频率差异巨大(10K vs 500K vs 1M)。
四、差异点-1: RoPE 应用维度 — Full vs Partial vs Decoupled
这是各模型之间最根本的架构差异,直接决定了 Q*K^T 计算的 GEMM 形状和 KV Cache 结构。
五、差异点-2: GEMM 矩阵形状对比 — 各模型 Q*K^T 实际计算
这是最关键的工程差异。以单头 Decode(1 token query,L 个历史 token)为例,看看各模型做 attention score 时,实际的矩阵乘形状有什么不同:
5.1 Full RoPE 模型 (Qwen / LLaMA / Mistral)
5.2 Partial RoPE 模型 (GLM-4 / GLM-4.5)
5.3 Decoupled RoPE 模型 (DeepSeek-V3 MLA)
GEMM 形状核心差异总结:
Qwen/LLaMA/Mistral (Full): 一个 [1,128] x [128,L] 的标准 GEMM
GLM (Partial): 同样 [1,128] x [128,L],但内部前64维旋转+后64维直通
DeepSeek (Decoupled): 拆成两个 GEMM: [1,512] x [512,L] + [1,64] x [64,L],计算量更大但 KV Cache 是共享压缩的
六、差异点-3: base 频率 — 决定旋转速度和长上下文能力
theta_i = 1 / base^(2i/d),base 越大,旋转角度越小,能表示的位置范围越大:
为什么 DeepSeek base 只有 10K 但上下文也能到 128K?因为 DeepSeek 的 RoPE 只应用在独立的 64 维 k_pe 上(Decoupled),主体 512 维通过压缩潜空间传递位置信息,不依赖 RoPE 做长距离建模。而 Qwen/Mistral 全维度都靠 RoPE 编码位置,所以需要更大的 base 来保证远距离 token 可区分。
七、差异点-4: 旋转方式 — Half-split vs Interleaved
RoPE 将 d 维向量配对成 d/2 组 2D 旋转,配对方式有两种:
数学等价但工程不同:两种配对方式在数学上是等价的(可以通过维度重排互相转换),最终的 Q*K^T 值相同。但工程实现不同:① 权重转换时需要注意维度排列;② 不同 CUDA kernel 可能针对特定排列优化(如 FlashAttention 默认 half-split);③ 模型权重不能直接在两种格式间混用。
八、差异点-5: 长上下文扩展方案 — NTK / YaRN / ABF
8.1 三大扩展方案原理对比
8.2 各模型实际采用的扩展策略
| 模型 |
预训练 base |
扩展方案 |
训练长度 |
扩展后长度 |
核心配置 |
| DeepSeek-V3 |
10,000 |
YaRN |
4K -> 128K (多阶段) |
128K+ |
仅对 64 维 RoPE 通道做 YaRN |
| GLM-4 |
10,000 |
YaRN |
8K -> 128K |
128K (推荐 >8K 时启用) |
factor=4.0, 仅对 64 维 RoPE 部分 |
| Qwen2.5 / Qwen3 |
1,000,000 |
YaRN + DCA |
32K |
128K+ |
ABF base=1M + YaRN 4x + Dual Chunk Attention |
| LLaMA-3.1 |
500,000 |
ABF + NTK |
8K -> 128K |
128K |
ABF base=500K, 渐进式训练 |
| Mistral |
1,000,000 |
ABF |
32K |
128K |
全局层 base=1M, 滑动窗口层 base=10K |
九、一图总结: 各模型 RoPE 差异全景
十、推理工程视角: RoPE 差异对 KV Cache 和算子设计的影响
10.1 KV Cache 存储差异
10.2 推理算子实现差异
| 工程要素 |
Full RoPE (Qwen/LLaMA) |
Partial RoPE (GLM) |
Decoupled RoPE (DeepSeek) |
| RoPE 计算时机 |
Q, K 投影后立即旋转 |
只旋转前半维度,后半直通 |
只旋转独立的 q_pe/k_pe 通道 |
| KV Cache 存储 |
RoPE 后的 K 和原始 V |
RoPE 后的 K 和原始 V |
压缩 c_t + RoPE 后的 k_rope |
| Attention Kernel |
标准 FlashAttention |
标准 FlashAttention |
FlashMLA (定制 kernel) |
| 矩阵吸收 |
不需要 |
不需要 |
必须 (W_UK 吸收到 Q 侧) |
| KV Cache 压缩比 |
1x (无压缩) |
1x (无压缩) |
~57x (极致压缩) |
| 权重转换注意 |
Half-split 维度排列 |
Interleaved 维度排列 |
需要额外吸收权重矩阵 |
给推理引擎开发者的建议: ① 实现 Qwen/LLaMA/Mistral 时可以复用同一套 Full RoPE + GQA kernel;② 实现 GLM 时需注意 interleaved 旋转和 partial factor,权重加载时维度排列不同;③ 实现 DeepSeek MLA 时需要专门的 FlashMLA kernel,支持矩阵吸收路径和两路 score 合并,且 FlashMLA 对 head 数有 64/128 对齐要求。
参考来源:DeepSeek-V3 Technical Report (arXiv:2412.19437) |
GLM-4 HuggingFace Documentation |
Qwen3 Technical Report (arXiv:2505.09388) |
LLaMA-3 Paper |
YaRN (arXiv:2309.00071) |
EleutherAI RoPE Blog