大模型 RoPE 变体全景对比

DeepSeek-V3/V3.2 | GLM-4/4.5 | Qwen2.5/3 | LLaMA-3 | Mistral — 从原理到 GEMM 矩阵形状的系统性差异分析

目录

一、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 的旋转:

RoPE 旋转公式: 每 2 个维度为一组旋转 x = [x₀, x₁, x₂, x₃, ...] 原始 Q 或 K 向量 -> 对每一对 (x₂ᵢ, x₂ᵢ₊₁) 施加 2D 旋转 [ cos(m*θᵢ) -sin(m*θᵢ) ] [ x₂ᵢ ] [ sin(m*θᵢ) cos(m*θᵢ) ] [ x₂ᵢ₊₁ ] θᵢ = 1 / base^(2i/d) = RoPE(x, m) 位置编码后的向量 m = token 位置, d = head_dim, base = 旋转基频 (默认 10000)

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 三大核心变量维度 维度-1: base (旋转基频) theta_i = 1 / base^(2i/d) base 越大 -> 旋转越慢 -> 高频信息保留更多 范围: 10K ~ 1M+ 维度-2: 应用维度方式 Full: 全部 head_dim 旋转 Partial: 只旋转一半维度 Decoupled: 解耦独立 RoPE 通道 直接影响 GEMM 形状! 维度-3: 长上下文扩展 直接外推: 不做任何处理 ABF: 增大 base 频率 NTK: 按维度差异化缩放 YaRN: NTK + 温度因子

三、六大模型 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 结构。

三种 RoPE 应用方式对比: 以 head_dim=128 为例 Full RoPE Qwen / LLaMA-3 / Mistral Q [128 维] — 全部施加 RoPE K [128 维] — 全部施加 RoPE Q*K^T 计算: RoPE(Q)[1,128] x RoPE(K)^T[128,L] 全部 128 维参与 RoPE 旋转 KV Cache: K[128] + V[128] 优点: 实现最简单 缺点: 全部位置相关,无法压缩 Partial RoPE (factor=0.5) GLM-4 / GLM-4.5 Q_rope [64维] Q_pass [64维] K_rope [64维] K_pass [64维] Q*K^T 计算: RoPE(Q_rope)||Q_pass [1,128] x (RoPE(K_rope)||K_pass)^T [128,L] 前 64 维旋转,后 64 维直通 KV Cache: K[128] + V[128] 优点: 保留一半位置无关特征 缺点: KV Cache 大小不变 Decoupled RoPE DeepSeek-V3 / V3.2 (MLA) Q_nope [128维] Q_rope [64维] c_t [512维压缩] k_rope [64维] Score 分两路计算: Q'_nope x c_t^T Q_rope x k_rope^T score = score_nope + score_rope nope 在 512 维潜空间 (吸收) KV Cache: c_t[512] + k_rope[64] = 576 优点: KV Cache 压缩 ~57x 缺点: 需要矩阵吸收,算子复杂

五、差异点-2: GEMM 矩阵形状对比 — 各模型 Q*K^T 实际计算

这是最关键的工程差异。以单头 Decode(1 token query,L 个历史 token)为例,看看各模型做 attention score 时,实际的矩阵乘形状有什么不同:

5.1 Full RoPE 模型 (Qwen / LLaMA / Mistral)

Full RoPE: score = RoPE(Q) x RoPE(K)^T — 一步 GEMM RoPE(Q) [1, 128] — 全部旋转后 x RoPE(K)^T [128, L] = score [1, L] KV Cache 读取: K[L, 128] + V[L, 128] = L x 256 per head

5.2 Partial RoPE 模型 (GLM-4 / GLM-4.5)

Partial RoPE (GLM): score = concat(RoPE部分, 直通部分) dot — 一步 GEMM RoPE(Q_r) Q_pass 64维 64维 [1, 128] = [64旋转 | 64直通] x RoPE(K_r)^T K_pass^T [128, L] = [64旋转 | 64直通]^T = score [1, L] GLM 特殊点: 1. partial_rotary_factor = 0.5 2. Interleaved 旋转 (非 half-split) 3. KV Cache 仍是 L x 128 GEMM 形状与 Full RoPE 完全相同 [1,128]x[128,L],差异在旋转的维度范围

5.3 Decoupled RoPE 模型 (DeepSeek-V3 MLA)

Decoupled RoPE (DeepSeek MLA): score = score_nope + score_rope — 两路 GEMM 路径-1 (吸收): Q'_nope x c_t^T Q'_nope [1,512] x c_t^T [512, L] = score_nope [1,L] 路径-2 (标准): RoPE(Q_rope) x RoPE(k_pe)^T Q_rope [1,64] x k_rope^T [64, L] = score_rope [1,L] score = score_nope + score_rope KV Cache 读取: c_t[L, 512] + k_rope[L, 64] = L x 576 per head (共享)
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 越大,旋转角度越小,能表示的位置范围越大:

各模型 base 频率对比 (对数刻度) 10K 100K 500K 1M 10M LLaMA-2 10,000 DeepSeek 10,000 GLM-4 10,000 LLaMA-3 500,000 Qwen2.5/3 1,000,000 Mistral 1,000,000 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 旋转,配对方式有两种:

Half-split (前后对半配对) DeepSeek / Qwen / LLaMA / Mistral 向量 x = [x₀, x₁, x₂, x₃, x₄, x₅, x₆, x₇] 拆成前半 + 后半: x₀ x₁ x₂ x₃ x₄ x₅ x₆ x₇ 配对: (x₀,x₄) (x₁,x₅) (x₂,x₆) (x₃,x₇) 前d/2和后d/2 一一对应 代码: cat([-x[d/2:], x[:d/2]]) * sin + x * cos freqs = cat([freqs, freqs], dim=-1) Interleaved (奇偶交错配对) GLM-4 / GLM-4.5 向量 x = [x₀, x₁, x₂, x₃, x₄, x₅, x₆, x₇] 相邻两个为一组: x₀ x₁ x₂ x₃ x₄ x₅ 配对: (x₀,x₁) (x₂,x₃) (x₄,x₅) (x₆,x₇) 相邻两个维度直接配对 代码: stack([-x[::2], x[1::2]]) * sin freqs = repeat_interleave(freqs, 2)
数学等价但工程不同:两种配对方式在数学上是等价的(可以通过维度重排互相转换),最终的 Q*K^T 值相同。但工程实现不同:① 权重转换时需要注意维度排列;② 不同 CUDA kernel 可能针对特定排列优化(如 FlashAttention 默认 half-split);③ 模型权重不能直接在两种格式间混用。

八、差异点-5: 长上下文扩展方案 — NTK / YaRN / ABF

8.1 三大扩展方案原理对比

长上下文 RoPE 扩展方案对比 ABF (Adjusted Base Frequency) LLaMA-3 / Mistral 主要方案 核心思路: 直接增大 base 原始: theta = 1/10000^(2i/d) 新: theta = 1/500000^(2i/d) 效果: 所有维度旋转角度 等比例缩小 优点: 简单,无需修改算子 预训练时确定,无需微调 缺点: 高频信息丢失 局部位置分辨率下降 扩展能力: 2-8x LLaMA-3: 500K (50x base) NTK-aware Interpolation 中间方案,各模型可选 核心思路: 按维度差异化缩放 高频维度(小i): 少缩放 低频维度(大i): 多缩放 base' = base * alpha^(d/(d-2)) alpha = 目标长度/训练长度 优点: 保留高频局部信息 低频维度获得更大位置范围 缺点: 需要确定最优 alpha 推理时计算开销略大 扩展能力: 4-16x YaRN (Yet Another RoPE eXtensioN) DeepSeek / Qwen / GLM 主要方案 核心思路: NTK + 温度因子 = NTK-by-parts 差异化缩放 + sqrt(1/t) 注意力温度调节 将维度分为三段: 高频(不缩) | 中间(插值) | 低频(外推) 优点: 最优质量-效率平衡 少量微调即可大幅扩展 缺点: 实现较复杂 需要微调训练 扩展能力: 16-64x 目前主流首选方案

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 差异全景对比 对比维度 DeepSeek-V3 GLM-4/4.5 Qwen2.5/3 LLaMA-3 Mistral 注意力类型 MLA (128头) GQA GQA GQA GQA + Sliding RoPE 维度 64 (解耦独立) 64 (半维度) 128 (全部) 128 (全部) 128 (全部) 应用方式 Decoupled Partial (0.5) Full Full Full base (theta) 10,000 10,000 1,000,000 500,000 1,000,000 旋转配对 Half-split Interleaved Half-split Half-split Half-split 扩展策略 YaRN YaRN YaRN + DCA ABF + NTK ABF Score GEMM (decode 1 token) [1,512]x[512,L] +[1,64]x[64,L] [1,128]x[128,L] [1,128]x[128,L] [1,128]x[128,L] [1,128]x[128,L] KV Cache/token 576 (共享) 256 x n_kv 256 x n_kv 256 x n_kv 256 x n_kv 核心差异总结 DeepSeek 独特: Decoupled RoPE + MLA 矩阵吸收,RoPE 仅 64 维独立通道,主体在 512 维潜空间计算,KV Cache 压缩 ~57x GLM 独特: Partial RoPE (factor=0.5) + Interleaved 旋转,一半维度不旋转保留语义特征,是唯一用交错配对的主流模型 Qwen/LLaMA/Mistral: Full RoPE 最标准,核心差异在 base 频率 (10K vs 500K vs 1M) 和扩展策略 (ABF vs YaRN)

十、推理工程视角: RoPE 差异对 KV Cache 和算子设计的影响

10.1 KV Cache 存储差异

各模型 KV Cache 存储结构 (per token per layer) Full RoPE (Qwen/LLaMA) K [128 维] — 全部 RoPE 后存储 V [128 维] — 原始存储 per head: 256 维 Partial RoPE (GLM-4) K_rope [64] K_pass [64] V [128 维] per head: 256 维 (同 Full) Decoupled (DeepSeek MLA) c_t [512 维] — 压缩潜向量 (K+V 共享) k_rope [64] 所有头共享: 576 维 (vs 128头x256=32768)

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