Qwen2 论文解读:把 GQA 焊死在每个 size 上,这才叫工程自觉
论文:Qwen2 Technical Report 作者:An Yang 等 62 人(阿里通义实验室),提交人 Xuancheng Ren 这篇报告发布于 2024 年 7 月,是 Qwen 系列从”能用”跨到”能打”的关键一步。它不是一篇讲新 idea 的论文,而是一份工程集大成的交付清单——GQA 全 size 铺开、上下文从 8K 拉到 128K、预训练数据从 3T 翻到 7T,外加一个从 7B 长出来的 57B MoE。说白了,Qwen2 证明了一件事:把已知最佳实践做到极致,本身就是一种竞争力。
一、先搞清楚 Qwen2 到底发了什么
Qwen2 一口气发了五个规模的模型:0.5B、1.5B、7B、72B 四个稠密模型,加上一个总参数 57B、每 token 只激活 14B 的 MoE 模型(记作 57B-A14B)。每个规模都有 base 和 Instruct 两个版本。
这个产品矩阵的意图很明确:0.5B 和 1.5B 是给手机、耳机、智能眼镜这些端侧设备准备的;7B 是社区主力,16GB 显存就能跑 16-bit 推理;72B 是旗舰,对标 Llama-3-70B;57B-A14B 则是给想要”大模型效果、小模型推理成本”的团队准备的甜点。
跟 Qwen1.5 比,最直观的变化是砍掉了 4B、14B、32B、110B 这些中间档位,换成更精炼的梯度。这不是偷懒,是团队想明白了:与其铺一堆不上不下的 size,不如把每个档位都打磨到位。
二、架构:没有什么新发明,但每个选择都很老练
1. GQA 全 size 化——这才是 Qwen2 最该被记住的事
分组查询注意力(Grouped Query Attention, GQA)不是 Qwen2 发明的,LLaMA-2 70B 和 Mistral 早就用了。但 Qwen2 做了一件别人没做彻底的事:从 0.5B 到 72B,所有模型全部用 GQA,一个不落。
具体数字:0.5B 是 14 个 Query head 配 2 个 KV head(7<1>1>),1.5B 是 12<2>2>(6<1>1>),7B 是 28<4>4>(7<1>1>),72B 是 64<8>8>(8<1>1>)。这意味着什么?意味着不管你部署哪个 size,KV cache 的显存占用都被压到最低。
对比一下 Qwen1.5:小模型还在用传统 MHA,每 token 的 KV 尺寸远大于 Qwen2。论文原话说”Qwen2 系列每 token 的 KV 尺寸显著低于 Qwen1.5”。对于长上下文推理来说,这不是锦上添花,是生死线。
2. 其他架构选择
剩下的部分像是把 2023-2024 年的”正确答案”抄了一遍:
- SwiGLU 激活函数(替代 ReLU/GELU)
- RoPE 旋转位置编码
- RMSNorm + pre-normalization
- QKV 加 bias(这个跟 LLaMA 不同,LLaMA 不加)
- 词表 151,646 个 token,字节级 BPE,所有模型共用
词表值得多说一句:151K 的词表比 LLaMA 的 128K 大不少,但 Qwen 团队声称压缩率更优,对多语言更友好。这是中文团队的天然优势——你得把中文、日文、泰文、阿拉伯文都伺候好,词表小了根本不够用。
3. 各 size 配置速览
| 项目 | 0.5B | 1.5B | 7B | 72B | 57B-A14B (MoE) |
|---|---|---|---|---|---|
| 隐藏维度 | 896 | 1,536 | 3,584 | 8,192 | 3,584 |
| 层数 | 24 | 28 | 28 | 80 | 28 |
| Query heads | 14 | 12 | 28 | 64 | 28 |
| KV heads | 2 | 2 | 4 | 8 | 4 |
| 中间层维度 | 4,864 | 8,960 | 18,944 | 29,568 | 2,560/专家 |
| 路由专家数 | — | — | — | — | 64 |
| 激活专家数 | — | — | — | — | 8 |
| 共享专家数 | — | — | — | — | 8 |
| 训练 token 数 | 12T | 7T | 7T | 7T | 4.5T |
注意 0.5B 用了 12T token 训练,比其他模型多 70%。论文说他们试过用 12T 数据训大模型,效果没比 7T 好多少——但小模型确实能从更多数据里榨出油水。这个发现挺实在的。
三、训练数据:从 3T 到 7T,不只是堆量
1. 数据量翻倍只是表面
Qwen1.5 用了 3T token,Qwen2 直接干到 7T。但论文里有个细节容易被忽略:他们曾经放宽质量阈值搞了一版 12T 的数据集,结果大模型效果没比 7T 好。结论是——对大模型来说,数据质量的边际收益远大于数据数量。
所以最终方案是:用更严格的过滤(加入模型辅助的质量打分),用 Qwen 自己合成高质量数据,通过小规模实验反复调数据配比。
2. 重点加码的方向
相比 Qwen1.5,Qwen2 显著增加了三类数据的比例:高质量代码、数学、多语言。这直接解释了为什么 Qwen2 在 HumanEval 上从 46.3 跳到 64.6(+18.3),MATH 从 34.1 跳到 51.1(+17.0)。
另外,预训练阶段就混入了高质量多任务指令数据。这不是新招,但 Qwen2 把它作为正式流程写进了报告——说明 base 模型的 in-context learning 能力不是天上掉下来的,是预训练阶段就刻意培养的。
四、上下文长度:从 4K 到 128K 的三级跳
1. 训练阶段怎么做的
预训练前期上下文长度是 4,096,后期专门有一个阶段拉到 32,768,同时引入更多高质量长文本数据。RoPE 的 base frequency 从 10,000 调到 1,000,000——这是让位置编码在更长序列上不退化的标准操作。
2. 推理阶段怎么外推
两个关键技术:
- Dual Chunk Attention (DCA):把长序列切成可管理的块,分别处理块内和块间的相对位置关系。如果输入本身就在一个块内,结果跟标准注意力完全一致——这保证了短文本不受影响。
- YARN:对注意力权重做重缩放,改善长度外推时的困惑度退化。
两者结合后,Qwen2 可以处理最长 131,072 token(128K)。Needle in a Haystack 测试中,Qwen2-72B-Instruct 在 128K 全文范围内都能准确检索信息,7B-Instruct 也能到 128K,MoE 版本稳定在 64K。
3. 实际效果
在更严格的 LV-Eval(多跳长文 QA)上,Qwen2-72B 加 YARN+DCA 在 256K 长度上还能拿到 42.35 分,而 ChatGLM4-9B-1M 在同样长度只有 36.95。当然,7B 在超过 128K 后就基本崩了(256K 只有 0.55),所以别指望小模型能无限制外推。
五、MoE:从 7B 长出来的 57B
1. 设计哲学
Qwen2-57B-A14B 不是从零训的,是从 Qwen2-7B 通过 upcycling 扩展而来。具体操作:
- 把 7B 的 FFN 按目标专家数复制;
- 在中间维度上打乱参数,让各专家产生差异;
- 切成细粒度专家后,每个专家随机重新初始化 50% 的参数;
- 再用 4.5T token 继续预训练。
2. 细粒度专家 + 共享专家
64 个路由专家,每次激活 8 个,外加 8 个共享专家(所有 token 都过)。每个专家的中间维度只有 2,560——比 7B 的 18,944 小得多。这就是”细粒度”的含义:专家更小、组合更多,理论上能覆盖更多样化的输入模式。
3. 效果
只激活 14B 参数,MMLU 拿到 76.5,HumanEval 53.0,GSM8K 80.7。对比 Yi-1.5-34B(全量激活 32B)的 MMLU 77.1、HumanEval 46.3——MoE 用不到一半的激活参数,在代码上反而赢了 7 个点。这就是 MoE 的性价比故事。
六、后训练:SFT + DPO 的组合拳
1. SFT 阶段
超过 50 万条指令数据,覆盖指令遵循、代码、数学、逻辑推理、角色扮演、多语言、安全。训练 2 个 epoch,序列长度 32,768,学习率从 7e-6 衰减到 7e-7。
2. RLHF 阶段
这里 Qwen2 用了一个两阶段方案:
- 离线 DPO:先用偏好数据做标准 DPO,拉大优选回复和非优选回复的似然差。
- 在线 DPO:从当前策略模型采样多个回复,用奖励模型挑出最好和最差的,组成偏好对,再做一轮 DPO。
另外用了 Online Merging Optimizer 来缓解对齐税(alignment tax)——就是模型变”乖”之后能力下降的问题。
3. 数据构建的四个花活
- Rejection sampling:数学题生成多条推理路径,只留结论正确的。
- Execution feedback:代码题实际编译运行,用测试结果构造偏好对。
- Data repurposing:从公共文学作品中提取素材,生成不同详细程度的指令。
- Constitutional feedback:编制原则集,让模型生成符合/偏离准则的回复。
这些招数单独看都不新鲜,但全部系统化地跑通并写进报告,说明后训练流水线已经相当成熟。
七、Benchmark:数字说话
1. 旗舰对决(Base 模型)
| 数据集 | Llama-3-70B | Qwen1.5-72B | Qwen2-72B | 提升幅度 |
|---|---|---|---|---|
| MMLU | 79.5 | 77.5 | 84.2 | +6.7 vs Qwen1.5 |
| MMLU-Pro | 52.8 | 45.8 | 55.6 | +9.8 |
| HumanEval | 48.2 | 46.3 | 64.6 | +18.3 |
| GSM8K | 83.0 | 79.5 | 89.5 | +10.0 |
| MATH | 42.5 | 34.1 | 51.1 | +17.0 |
| BBH | 81.0 | 65.5 | 82.4 | +16.9 |
| C-Eval | 65.2 | 84.1 | 91.0 | +6.9 |
Qwen2-72B 在几乎所有指标上同时超过了 Llama-3-70B 和自家前代。特别是代码和数学,提升幅度是两位数。BBH 从 65.5 到 82.4 这个跳跃尤其夸张——Qwen1.5 在推理任务上一直是短板,Qwen2 算是把这个坑填上了。
2. 7B 级别的屠杀
| 数据集 | Llama-3-8B | Qwen1.5-7B | Qwen2-7B |
|---|---|---|---|
| MMLU | 66.6 | 61.0 | 70.3 |
| HumanEval | 33.5 | 36.0 | 51.2 |
| GSM8K | 56.0 | 62.5 | 79.9 |
| MATH | 20.5 | 20.3 | 44.2 |
Qwen2-7B 在 MMLU 上超了 Llama-3-8B 将近 4 个点,代码和数学更是碾压。考虑到 Qwen2-7B 能在 16GB 显存上跑,这对社区部署来说是个非常强的选择。
3. 指令模型
Qwen2-72B-Instruct:MT-Bench 9.12,Arena-Hard 48.1,IFEval 77.6,MATH 69.0。对比 Qwen1.5-72B-Chat 的 MT-Bench 8.61、Arena-Hard 36.1、IFEval 55.8——对齐质量的提升比基础能力的提升更显著。
但论文也坦承:在英文 in-house 评测中,Qwen2-72B-Instruct(72.94)略低于 Llama-3-70B-Instruct(74.06)。团队归因于英文预训练 token 量和后训练数据的多样性。这份坦诚在技术报告里不多见。
八、多语言与安全
1. 30 种语言不是虚的
预训练覆盖约 30 种语言,多语言数学(MGSM)从 Qwen1.5-72B 的 61.7 跳到 76.0,提升 14 个点。人工评测中,Qwen2-72B-Instruct 在 10 种语言上平均得分 3.93/5,超过 GPT-4-Turbo(3.98 接近)和 GPT-4o(4.09),略低于 Claude-3-Opus(4.15)。
考虑到 Qwen2 是开源模型,能跟闭源旗舰在多语言上掰手腕,这本身就是成绩。
2. 安全评测
在非法、欺诈、隐私三个维度上,Qwen2-72B-Instruct 的越狱率都低于 GPT-4。色情类别(22.91%)仍高于理想水平,但跟 GPT-4(23.63%)基本持平。
收尾:我的一点看法
第一,Qwen2 是一篇”反创新”的好论文。 它没有任何一个组件是首创的——GQA 是 Ainslie et al. 2023 的,SwiGLU 是 Shazeer 2020 的,YARN 是 Peng et al. 2023 的,DPO 是 Rafailov et al. 2023 的。但 Qwen2 的价值在于:它证明了在 LLM 这个领域,系统级的工程整合能力本身就是护城河。你不需要发明新轮子,你需要的是把 20 个轮子全部装对位置,然后让整车跑起来比别人的快。
第二,GQA 全 size 化这个决策,比看起来重要得多。 很多团队在大模型上用 GQA、小模型上省成本用 MHA,觉得小模型反正上下文短、batch 小,KV cache 不是瓶颈。Qwen2 说不对——端侧模型的显存更紧张,长上下文的趋势不可逆,GQA 应该是无差别标配。这种”从第一天就为部署做设计”的思路,是真正的工程成熟度。
第三,数据策略的诚实让人舒服。 论文直接说了”12T 数据训大模型没比 7T 好”,也承认英文能力不如 Llama-3。在一个充斥着”我们全面领先”话术的领域,这种实事求是的态度反而增加了其他数据的可信度。
第四,MoE 的 upcycling 路线值得关注。 从 7B 稠密模型出发,通过参数打乱+重初始化+继续训练得到 57B MoE,这条路比从零训 MoE 省资源得多。如果这个范式被验证可复现,对中小团队来说是个福音——你不需要从头攒 57B 的训练预算,你只需要一个训好的 7B 加上 4.5T token 的续训资源。
第五,放在 Qwen 系列演进里看。 Qwen1 是”证明我能做”,Qwen1.5 是”证明我能做好”,Qwen2 是”证明我能做到开源第一梯队”。从 Qwen1.5-72B 被 Llama-3-70B 全面压制,到 Qwen2-72B 全面反超,中间只隔了不到半年。这个迭代速度,加上全 size 开源权重、支持量化部署、提供完整工具链——Qwen2 不只是一个模型,是一个生态位宣言。
附:核心数据速查
旗舰模型关键 Benchmark
| 指标 | Qwen2-72B (Base) | Qwen2-72B-Instruct | Llama-3-70B (Base) |
|---|---|---|---|
| MMLU | 84.2 | 82.3 | 79.5 |
| MMLU-Pro | 55.6 | 64.4 | 52.8 |
| GPQA | 37.9 | 42.4 | 36.3 |
| HumanEval | 64.6 | 86.0 | 48.2 |
| GSM8K | 89.5 | 93.2 | 83.0 |
| MATH | 51.1 | 69.0 | 42.5 |
| BBH | 82.4 | — | 81.0 |
| MT-Bench | — | 9.12 | — |
| Arena-Hard | — | 48.1 | — |
| IFEval | — | 77.6 | — |
| LiveCodeBench | — | 35.7 | — |
训练配置
| 项目 | 数值 |
|---|---|
| 预训练数据量(大模型) | 7T tokens |
| 预训练数据量(0.5B) | 12T tokens |
| MoE 续训数据量 | 4.5T tokens |
| 预训练上下文(前期/后期) | 4,096 / 32,768 |
| 最大推理上下文 | 131,072 (128K) |
| SFT 数据量 | 500K+ 条 |
| SFT 学习率 | 7e-6 → 7e-7 |
| SFT epochs | 2 |
| RoPE base frequency | 1,000,000 |
| 词表大小 | 151,646 |
关键概念清单
| 术语 | 含义 |
|---|---|
| GQA (Grouped Query Attention) | 多个 Query head 共享少量 KV head,压缩 KV cache |
| SwiGLU | 结合 Swish 激活和门控线性单元的 FFN 激活函数 |
| RoPE (Rotary Position Embedding) | 通过旋转矩阵编码相对位置的方案 |
| RMSNorm | 只用均方根做归一化,比 LayerNorm 少一次均值计算 |
| DCA (Dual Chunk Attention) | 将长序列分块处理,兼顾块内和块间位置关系 |
| YARN | 对注意力分数做温度缩放以改善长度外推 |
| DPO (Direct Preference Optimization) | 绕过奖励模型直接用偏好对优化策略 |
| Upcycling | 从稠密模型权重出发初始化 MoE 专家 |
| Alignment Tax | 对齐训练导致基础能力下降的代价 |
| Online Merging Optimizer | 缓解对齐税的优化器策略 |
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





