本文译自 Sebastian Raschka 的 The Big LLM Architecture Comparison1,副标题「From DeepSeek V3 to GLM-5: A Look At Modern LLM Architecture Design」,2025 年 7 月 19 日首发,此后持续增补,最后一次更新是 2026 年 4 月 2 日(在第 23 节加入 Gemma 4)。这是一篇只谈架构的长文——不谈 benchmark、不谈训练算法,逐个拆开 23 个旗舰开源权重模型的结构,看七年过去 Transformer 到底被改动了哪些地方。全文 23 节全部译出,66 张配图逐张核过;Substack 的订阅块、文末书籍推广和评论区不译,作者提到的自家其他文章转成脚注。

原文开头有一段作者自己录的讲解视频,是本文的删节口述版,这里无法嵌入,需要的话到原文页面看。


距离最初的 GPT 架构被开发出来,已经过去七年了。乍看之下,回望 GPT-2(2019)、再看向 DeepSeek V3 和 Llama 4(2024–2025),你可能会惊讶于这些模型在结构上竟然还是如此相似。

当然,位置嵌入已经从绝对位置演进到旋转位置(RoPE),Multi-Head Attention 基本上让位给了 Grouped-Query Attention,更高效的 SwiGLU 也取代了 GELU 之类的激活函数。但在这些细微改良之下,我们真的见到了开创性的变化吗,还是只是在打磨同一套架构地基?

对比 LLM、找出哪些关键成分造就了它们好(或者不那么好)的表现,是出了名的困难:数据集、训练技巧、超参数千差万别,而且往往没有被好好记录下来。

不过我认为,考察架构本身的结构变化仍然很有价值,能看出 LLM 开发者们在 2025 年都在做什么。(其中一部分展示在下面的图 1 里。)

本文涵盖的部分架构,六张结构图并排:上排 Llama 3.2 1B(词表 128k、16 层、32 head、embedding 2,048、隐层 8,192,标注为「更宽的架构」)、Qwen3 4B(词表 151k、36 层、32 head、embedding 2,560、隐层 9,728,带 Q/K RMSNorm)、SmolLM3 3B(词表 128k、36 层、16 head、embedding 2,048、隐层 11,008,每第 4 层用 NoPE);下排 DeepSeek V3 671B(词表 128k、61 层、MLA、MoE 层 1 shared + 8 routed 激活、37B 激活参数,前 3 个 block 用隐层 18,432 的稠密 FFN)、Qwen3 235B-A22B(词表 151k、94 层、GQA、8 expert 激活、22B 激活参数、expert 中间层 1,536)、Kimi K2 1T(词表 160k、61 层、64 head、MLA、1 shared + 8 routed 激活、32B 激活参数)
本文涵盖的部分架构,六张结构图并排:上排 Llama 3.2 1B(词表 128k、16 层、32 head、embedding 2,048、隐层 8,192,标注为「更宽的架构」)、Qwen3 4B(词表 151k、36 层、32 head、embedding 2,560、隐层 9,728,带 Q/K RMSNorm)、SmolLM3 3B(词表 128k、36 层、16 head、embedding 2,048、隐层 11,008,每第 4 层用 NoPE);下排 DeepSeek V3 671B(词表 128k、61 层、MLA、MoE 层 1 shared + 8 routed 激活、37B 激活参数,前 3 个 block 用隐层 18,432 的稠密 FFN)、Qwen3 235B-A22B(词表 151k、94 层、GQA、8 expert 激活、22B 激活参数、expert 中间层 1,536)、Kimi K2 1T(词表 160k、61 层、64 head、MLA、1 shared + 8 routed 激活、32B 激活参数)

所以在这篇文章里,我不写 benchmark 表现、也不写训练算法,而是聚焦于定义了当今旗舰开源模型的架构进展。

(你可能还记得,我不久前写过多模态 LLM2;在这篇文章里我只关注近期模型的文本能力,多模态能力的讨论留到以后。)

1 DeepSeek V3/R1

想必你已经不止一次听说过,DeepSeek R13 在 2025 年 1 月发布时造成了很大的冲击。DeepSeek R1 是一个建立在 DeepSeek V3 架构4之上的推理模型,而后者是 2024 年 12 月推出的。

尽管我这里关注的是 2025 年发布的架构,我认为把 DeepSeek V3 纳进来是合理的,因为它是在 2025 年 DeepSeek R1 发布之后才获得广泛关注和采用的。

如果你对 DeepSeek R1 的训练本身感兴趣,我今年早些时候的那篇文章可能也有用5

本节我聚焦 DeepSeek V3 引入的两项关键架构技术,它们提升了计算效率,也把它和许多其他 LLM 区分开来:

  • Multi-Head Latent Attention(MLA)
  • Mixture-of-Experts(MoE)

1.1 Multi-Head Latent Attention(MLA)

在讨论 Multi-Head Latent Attention 多头潜在注意力(MLA)之前,我们先简单过一下背景,说明它为什么被用起来。为此,先从 Grouped-Query Attention 分组查询注意力(GQA)说起——近几年它已经成了 Multi-Head Attention 多头注意力(MHA)的新标准替代品,在计算和参数上都更高效。

那么,这里是 GQA 的一段简短总结。MHA 里每个 head 都有自己的一套 key 和 value;GQA 与之不同,为了减少内存占用,它把多个 head 分组,让它们共享同一套 key 和 value 投影。

举例来说,如下面图 2 进一步展示的,如果有 2 个 key-value 组和 4 个 attention head,那么 head 1 和 head 2 可能共享一套 key 和 value,而 head 3 和 head 4 共享另一套。这减少了 key 和 value 的计算总量,从而降低内存占用、提升效率(根据消融实验,且不会明显影响建模表现)。

MHA 与 GQA 的对比。左侧 Multi-head Attention:4 个 head 各自有独立的 q、k、v。右侧 Grouped-query Attention:4 个 q head 但只有 2 套 k、v,head 1 与 head 2 共享一套、head 3 与 head 4 共享另一套,图中箭头标注「多个 query head 共享同一套 key 和 value head」
MHA 与 GQA 的对比。左侧 Multi-head Attention:4 个 head 各自有独立的 q、k、v。右侧 Grouped-query Attention:4 个 q head 但只有 2 套 k、v,head 1 与 head 2 共享一套、head 3 与 head 4 共享另一套,图中箭头标注「多个 query head 共享同一套 key 和 value head」

所以 GQA 背后的核心想法是:通过让多个 query head 共享 key 和 value,来减少 key 和 value head 的数量。这样做(1)降低了模型的参数量,(2)减少了推理期间 key 和 value 张量的内存带宽占用,因为需要从 KV cache 里存取的 key 和 value 变少了(KV-Cache 基础)。

(如果你好奇 GQA 在代码里长什么样,我的 GPT-2 到 Llama 3 转换指南6里有一个不带 KV cache 的版本,带 KV cache 的变体在这里7。)

虽然 GQA 主要是 MHA 的一种计算效率变通方案,但消融实验(比如原始 GQA 论文8和 Llama 2 论文9里的那些)表明,在 LLM 建模表现上它和标准 MHA 相当。

现在说 MLA。它提供了一种不同的省内存策略,而且和 KV caching 配合得特别好。MLA 不像 GQA 那样共享 key 和 value head,而是在把 key 和 value 张量存进 KV cache 之前,先把它们压缩到一个更低维的空间里。

推理时,这些被压缩的张量在使用前会被投影回原来的尺寸,如下面图 3 所示。这多出一次矩阵乘法,但减少了内存占用(DeepSeek MLA)。

MLA(用在 DeepSeek V3 和 R1 里)与常规 MHA 的对比。左侧是 DeepSeek V3/R1 的整体结构:Token embedding、61 层带 Multi-head Latent Attention 与 MoE 的 block、Final RMSNorm、Linear output layer。右侧展开对比:MLA 在推理步 $t$ 上,输入 $x_t$ 经 $W_q$ 得 Query、经 $W_{dkv}$ 得压缩后的 Key 和 Value(图中标注「核心想法:减少 KV cache 的内存占用」),再分别经 $W_{uk}$ 和 $W_{uv}$ 还原成 Key 和 Value;常规 MHA 则是 $x_t$ 直接经 $W_q$、$W_k$、$W_v$ 得到 Query、Key、Value
MLA(用在 DeepSeek V3 和 R1 里)与常规 MHA 的对比。左侧是 DeepSeek V3/R1 的整体结构:Token embedding、61 层带 Multi-head Latent Attention 与 MoE 的 block、Final RMSNorm、Linear output layer。右侧展开对比:MLA 在推理步 $t$ 上,输入 $x_t$ 经 $W_q$ 得 Query、经 $W_{dkv}$ 得压缩后的 Key 和 Value(图中标注「核心想法:减少 KV cache 的内存占用」),再分别经 $W_{uk}$ 和 $W_{uv}$ 还原成 Key 和 Value;常规 MHA 则是 $x_t$ 直接经 $W_q$、$W_k$、$W_v$ 得到 Query、Key、Value

(顺带一提,query 也会被压缩,但只在训练时,推理时不压缩。)

另外,MLA 并不是 DeepSeek V3 才有的新东西,它的前身 DeepSeek-V210 就用过(而且正是它提出的)。此外,V2 论文里有几个有意思的消融实验,可能解释了 DeepSeek 团队为什么选 MLA 而不是 GQA(见下面图 4)。

来自 DeepSeek-V2 论文的两张表格,带作者标注。上方 Table 8 对比 7B 稠密模型分别用 MQA、GQA(8 组)、MHA:参数量 7.1B / 6.9B / 6.9B,BBH(EM)33.2 / 35.6 / 37.0,MMLU 37.9 / 41.2 / 45.2,C-Eval 30.0 / 37.7 / 42.9,CMMLU 34.6 / 38.4 / 43.5,标注写「与以往论文的发现不同,这篇论文发现 MHA 明显优于 GQA」。下方 Table 9 对比 MLA 与 MHA:Small MoE 的每 token KV cache 从 MHA 的 110.6K 降到 MLA 的 15.6K,标注写「MLA 的内存需求远低于 MHA」;Large MoE 上 BBH 46.6 → 50.7、MMLU 57.5 → 59.0、C-Eval 57.9 → 59.2、CMMLU 60.7 → 62.5,标注写「MLA 表现优于 MHA(这里是在 Mixture-of-Experts 架构上测的)」
来自 DeepSeek-V2 论文的两张表格,带作者标注。上方 Table 8 对比 7B 稠密模型分别用 MQA、GQA(8 组)、MHA:参数量 7.1B / 6.9B / 6.9B,BBH(EM)33.2 / 35.6 / 37.0,MMLU 37.9 / 41.2 / 45.2,C-Eval 30.0 / 37.7 / 42.9,CMMLU 34.6 / 38.4 / 43.5,标注写「与以往论文的发现不同,这篇论文发现 MHA 明显优于 GQA」。下方 Table 9 对比 MLA 与 MHA:Small MoE 的每 token KV cache 从 MHA 的 110.6K 降到 MLA 的 15.6K,标注写「MLA 的内存需求远低于 MHA」;Large MoE 上 BBH 46.6 → 50.7、MMLU 57.5 → 59.0、C-Eval 57.9 → 59.2、CMMLU 60.7 → 62.5,标注写「MLA 表现优于 MHA(这里是在 Mixture-of-Experts 架构上测的)」

如上面图 4 所示,GQA 看起来比 MHA 差,而 MLA 提供了比 MHA 更好的建模表现,这大概就是 DeepSeek 团队选 MLA 而不选 GQA 的原因。(要是能看到 MLA 与 GQA 之间「每 token KV Cache」的节省对比就更有意思了!)

在进入下一个架构组件之前先小结一下本节:MLA 是一个聪明的技巧,它减少了 KV cache 的内存占用,同时在建模表现上甚至还略微超过 MHA。

1.2 Mixture-of-Experts(MoE)

DeepSeek 里另一个值得一提的主要架构组件,是它对 Mixture-of-Experts 混合专家(MoE)层的使用。MoE 不是 DeepSeek 发明的,但它今年重新火了起来,我们后面会讲到的许多架构也都采用了它(MoE)。

你大概已经熟悉 MoE 了,但快速回顾一下可能有帮助。

MoE 的核心想法是把 transformer block 里的每个 FeedForward 模块替换成多个 expert 层,而这些 expert 层每一个也都是一个 FeedForward 模块。也就是说,我们把单个 FeedForward block 换成多个 FeedForward block,如下面图 5 所示。

DeepSeek V3/R1 的 MoE 模块(右)与带标准 FeedForward block 的 LLM(左)对比。左侧「不带 MoE 的架构(稠密)」:61 层 block 里是 RMSNorm 1、Multi-head Latent Attention、RMSNorm 2、Feed forward,右上展开 FeedForward(SwiGLU)模块。右侧「DeepSeek V3/R1 带 MoE(稀疏)」:同样结构但 Feed forward 被替换成红框标注的 MoE,右下展开 MoE layer——Router 从 1 个 shared 和 256 个 routed FeedForward 中做选择,下方注明资源节省:模型总量 671B,但每 token 只激活 1 个 shared 加 8 个 expert,每个推理步只有 37B 参数是激活的
DeepSeek V3/R1 的 MoE 模块(右)与带标准 FeedForward block 的 LLM(左)对比。左侧「不带 MoE 的架构(稠密)」:61 层 block 里是 RMSNorm 1、Multi-head Latent Attention、RMSNorm 2、Feed forward,右上展开 FeedForward(SwiGLU)模块。右侧「DeepSeek V3/R1 带 MoE(稀疏)」:同样结构但 Feed forward 被替换成红框标注的 MoE,右下展开 MoE layer——Router 从 1 个 shared 和 256 个 routed FeedForward 中做选择,下方注明资源节省:模型总量 671B,但每 token 只激活 1 个 shared 加 8 个 expert,每个推理步只有 37B 参数是激活的

transformer block 里的那个 FeedForward block(上图中深灰色的块)通常包含了模型总参数的很大一部分。(注意 transformer block、进而 FeedForward block,在一个 LLM 里会重复很多次;DeepSeek V3 的情况是 61 次。)

所以把单个 FeedForward block 替换成多个 FeedForward block(MoE 的做法)会大幅增加模型的总参数量。但关键的技巧在于,我们不会为每个 token 都用上(「激活」)所有 expert。相反,一个 router 只为每个 token 选出一小部分 expert。(考虑到时间,或者说文章篇幅,router 我以后再详细讲。)

因为同一时刻只有少数 expert 是激活的,MoE 模块常被称为稀疏的,与之相对的是总是用上全部参数的稠密模块。不过 MoE 带来的巨大总参数量提升了 LLM 的容量,意味着它在训练时能吸收更多知识。而稀疏性又让推理保持高效,因为我们不会同时用上所有参数。

举例来说,DeepSeek V3 每个 MoE 模块有 256 个 expert,总参数 6,710 亿。但推理时同一时刻只有 9 个 expert 是激活的(1 个 shared expert 加上 router 选出的 8 个)。这意味着每个推理步只用到 370 亿参数,而不是全部 6,710 亿。

DeepSeek V3 的 MoE 设计里有一个值得注意的特性,是 shared expert 的使用。这是一个对每个 token 都始终激活的 expert。这个想法并不新,DeepSeek 2024 年的 MoE 论文11和 2022 年的 DeepSpeedMoE 论文12里就已经引入了。

来自「DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models」的配图,带作者标注。三联图从左到右:(a) 常规 Top-2 Routing——标注「早期 MoE:expert 更大更少,只激活少数几个(这里是 2 个)」;(b) 加上细粒度 expert 切分——标注「细粒度 MoE 用更多但更小的 expert,激活更多个(这里是 4 个)」;(c) 加上 shared expert 隔离(DeepSeekMoE)——标注「带 shared expert 的 MoE:同样用许多小 expert,但加了一个始终激活的 shared expert」,图中绿色块是 Shared Expert、蓝色块是 Routed Expert
来自「DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models」的配图,带作者标注。三联图从左到右:(a) 常规 Top-2 Routing——标注「早期 MoE:expert 更大更少,只激活少数几个(这里是 2 个)」;(b) 加上细粒度 expert 切分——标注「细粒度 MoE 用更多但更小的 expert,激活更多个(这里是 4 个)」;(c) 加上 shared expert 隔离(DeepSeekMoE)——标注「带 shared expert 的 MoE:同样用许多小 expert,但加了一个始终激活的 shared expert」,图中绿色块是 Shared Expert、蓝色块是 Routed Expert

拥有 shared expert 的好处最早是在 DeepSpeedMoE 论文里被注意到的,他们发现相比不带 shared expert,它提升了整体建模表现。这大概是因为,常见或重复出现的模式不必被多个独立的 expert 分别学一遍,从而给它们留出更多空间去学更专门化的模式。

1.3 DeepSeek 小结

总结一下,DeepSeek V3 是一个庞大的 6,710 亿参数模型,发布时它的表现超过了包括 405B Llama 3 在内的其他开源权重模型。尽管它更大,但得益于 Mixture-of-Experts(MoE)架构每个 token 只激活一小部分参数(仅 370 亿),它在推理时高效得多。

另一个关键的区别性特性,是 DeepSeek V3 用 Multi-Head Latent Attention(MLA)而不是 Grouped-Query Attention(GQA)。在使用 KV caching 时,MLA 和 GQA 都是标准 Multi-Head Attention(MHA)的推理高效替代品。虽然 MLA 实现起来更复杂,DeepSeek-V2 论文里的一项研究表明它能给出比 GQA 更好的建模表现。

2 OLMo 2

非营利机构 Allen Institute for AI 的 OLMo 系列模型值得注意,原因在于它在训练数据和代码上的透明度,以及相对详细的技术报告。

虽然你大概不会在任何 benchmark 或排行榜的顶部看到 OLMo 模型,但它们相当干净,更重要的是,得益于这份透明度,它们是开发 LLM 的一份很好的蓝图。

而且,虽然 OLMo 模型是因为透明而受欢迎的,它们也并不差。事实上,在 1 月发布时(Llama 4、Gemma 3 和 Qwen 3 之前),OLMo 213 模型正处在算力—性能的 Pareto 前沿上,如下面图 7 所示。

不同 LLM 的建模 benchmark 表现(越高越好)对预训练成本(FLOPs,越低越好),来自 OLMo 2 论文并经作者标注。横轴是近似预训练 FLOPs($4\times10^{22}$ 到 $2\times10^{24}$),纵轴是 10 项 benchmark 的平均表现(35 到 70+)。黄色区域标注为 Pareto 前沿,说明是「在给定算力下取得最高 benchmark 表现的最高效模型」。OLMo-2-7B(约 63 分)和 OLMo-2-13B(约 68 分)以粉色星形标出、落在前沿上;对比对象包括 Gemma-2-9B、Qwen-2.5-7B、Qwen-2.5-14B、Llama-3.1-8B、StableLM-2-12B、DCLM-7B、Llama-2-13B、MAP-Neo-7B、OLMo-7B、OLMo-0424-7B、Amber-7B
不同 LLM 的建模 benchmark 表现(越高越好)对预训练成本(FLOPs,越低越好),来自 OLMo 2 论文并经作者标注。横轴是近似预训练 FLOPs($4\times10^{22}$ 到 $2\times10^{24}$),纵轴是 10 项 benchmark 的平均表现(35 到 70+)。黄色区域标注为 Pareto 前沿,说明是「在给定算力下取得最高 benchmark 表现的最高效模型」。OLMo-2-7B(约 63 分)和 OLMo-2-13B(约 68 分)以粉色星形标出、落在前沿上;对比对象包括 Gemma-2-9B、Qwen-2.5-7B、Qwen-2.5-14B、Llama-3.1-8B、StableLM-2-12B、DCLM-7B、Llama-2-13B、MAP-Neo-7B、OLMo-7B、OLMo-0424-7B、Amber-7B

如本文前面提到的,为了把篇幅控制在可管理的范围内,我只关注 LLM 的架构细节(不谈训练和数据)。那么 OLMo 2 里有意思的架构设计选择是什么?主要归结为归一化:RMSNorm 层的位置,以及 QK-Norm 的加入,下面我会讨论这两点。

另一件值得一提的事是,OLMo 2 仍然用传统的 Multi-Head Attention(MHA),而不是 MLA 或 GQA。

2.1 归一化层的位置

总体上,OLMo 2 大体沿用了最初的 GPT 模型架构,和其他同期 LLM 类似。不过有一些值得注意的偏离。我们先从归一化层说起。

和 Llama、Gemma 以及大多数其他 LLM 类似,OLMo 2 从 LayerNorm 切换到了 RMSNorm。

但既然 RMSNorm 已经是老话题了(它基本上就是可训练参数更少的简化版 LayerNorm),我就跳过 RMSNorm 与 LayerNorm 的讨论。(好奇的读者可以在我的 GPT-2 到 Llama 转换指南14里找到 RMSNorm 的代码实现。)

不过 RMSNorm 层的位置值得讨论。最初的 transformer(出自「Attention is all you need」论文15)把 transformer block 里的两个归一化层分别放在 attention 模块和 FeedForward 模块之后

这也被称为 Post-LN 或 Post-Norm。

GPT 以及此后大多数 LLM 把归一化层放在 attention 和 FeedForward 模块之前,这被称为 Pre-LN 或 Pre-Norm。Post-Norm 和 Pre-Norm 的对比见下图。

Post-Norm、Pre-Norm,以及 OLMo 2 那一版 Post-Norm 的对比。左侧「最初 Transformer 的 decoder 模块」:Masked multi-head attention 之后接 LayerNorm 1、Feed forward 之后接 LayerNorm 2,两个 LayerNorm 都在残差相加之后,红字标注 Post-Norm,底部还有 Position embedding layer。中间「Llama 3 8B」:RMSNorm 1 在 Masked grouped-query attention 之前、RMSNorm 2 在 Feed forward 之前,蓝字标注 Pre-Norm。右侧「OLMo 2 7B」:RMSNorm 1 在 Masked multi-head attention 之后、RMSNorm 2 在 Feed forward 之后,但两者都在残差连接<em>内部</em>,粉字标注「Post-Norm 但位于残差内部」
Post-Norm、Pre-Norm,以及 OLMo 2 那一版 Post-Norm 的对比。左侧「最初 Transformer 的 decoder 模块」:Masked multi-head attention 之后接 LayerNorm 1、Feed forward 之后接 LayerNorm 2,两个 LayerNorm 都在残差相加之后,红字标注 Post-Norm,底部还有 Position embedding layer。中间「Llama 3 8B」:RMSNorm 1 在 Masked grouped-query attention 之前、RMSNorm 2 在 Feed forward 之前,蓝字标注 Pre-Norm。右侧「OLMo 2 7B」:RMSNorm 1 在 Masked multi-head attention 之后、RMSNorm 2 在 Feed forward 之后,但两者都在残差连接<em>内部</em>,粉字标注「Post-Norm 但位于残差内部」

2020 年,Xiong 等人16表明 Pre-LN 在初始化时能得到更良性的梯度。此外,研究者们提到,Pre-LN 即使不做细致的学习率 warm-up 也能工作良好,而 warm-up 对 Post-LN 来说是个关键工具。

我提这个的原因是,OLMo 2 采用了一种形式的 Post-LN(但用的是 RMSNorm 而不是 LayerNorm,所以我称它为 Post-Norm)。

在 OLMo 2 里,归一化层不是放在 attention 和 FeedForward 层之前,而是放在它们之后,如上图所示。但请注意,与最初的 transformer 架构不同,这些归一化层仍然位于残差层(skip connection)内部。

那么,他们为什么要移动归一化层的位置?原因是这有助于训练稳定性,如下图所示。

Pre-Norm(如 GPT-2、Llama 3 等)与 OLMo 2 那一版 Post-Norm 的训练稳定性对比,来自 OLMo 2 论文并经作者标注。横轴是训练 step(0 到 160,000),纵轴是梯度的 L2 范数(对数刻度)。蓝线是 pre-attention norm,橙线是 post-attention norm 加 QK-norm。标注写「Pre-Norm 的 loss 尖刺更多」和「Post-Norm 的梯度更平滑,因此训练稳定性更好」
Pre-Norm(如 GPT-2、Llama 3 等)与 OLMo 2 那一版 Post-Norm 的训练稳定性对比,来自 OLMo 2 论文并经作者标注。横轴是训练 step(0 到 160,000),纵轴是梯度的 L2 范数(对数刻度)。蓝线是 pre-attention norm,橙线是 post-attention norm 加 QK-norm。标注写「Pre-Norm 的 loss 尖刺更多」和「Post-Norm 的梯度更平滑,因此训练稳定性更好」

遗憾的是这张图把重排序的结果和 QK-Norm 一起展示了,而 QK-Norm 是另一个独立的概念。所以很难判断归一化层重排序本身贡献了多少。

2.2 QK-Norm

既然上一节已经提到了 QK-Norm,而且我们后面要讨论的其他 LLM(比如 Gemma 2 和 Gemma 3)也用了 QK-Norm,那就简单讲讲它是什么。

QK-Norm 本质上就是又一个 RMSNorm 层。它被放在 Multi-Head Attention(MHA)模块内部,在施加 RoPE 之前作用于 query(q)和 key(k)。为了说明这一点,下面是我为自己的 Qwen3 从零实现17写的一个 Grouped-Query Attention(GQA)层的节选(GQA 里 QK-Norm 的施加方式和 OLMo 的 MHA 类似):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class GroupedQueryAttention(nn.Module):
    def __init__(
        self, d_in, num_heads, num_kv_groups,
        head_dim=None, qk_norm=False, dtype=None
    ):
        # ...

        if qk_norm:
            self.q_norm = RMSNorm(head_dim, eps=1e-6)
            self.k_norm = RMSNorm(head_dim, eps=1e-6)
        else:
            self.q_norm = self.k_norm = None

    def forward(self, x, mask, cos, sin):
        b, num_tokens, _ = x.shape

        # Apply projections
        queries = self.W_query(x)
        keys = self.W_key(x)
        values = self.W_value(x)

        # ...

        # Optional normalization
        if self.q_norm:
            queries = self.q_norm(queries)
        if self.k_norm:
            keys = self.k_norm(keys)

        # Apply RoPE
        queries = apply_rope(queries, cos, sin)
        keys = apply_rope(keys, cos, sin)

        # Expand K and V to match number of heads
        keys = keys.repeat_interleave(self.group_size, dim=1)
        values = values.repeat_interleave(self.group_size, dim=1)

        # Attention
        attn_scores = queries @ keys.transpose(2, 3)
        # ...

如前所述,QK-Norm 和 Post-Norm 一起稳定了训练。注意 QK-Norm 不是 OLMo 2 发明的,它可以追溯到 2023 年的 Scaling Vision Transformers 论文18

2.3 OLMo 2 小结

简而言之,OLMo 2 架构里值得注意的设计决策主要是 RMSNorm 的位置:RMSNorm 放在 attention 和 FeedForward 模块之后而不是之前(一种 Post-Norm 的变体),以及在 attention 机制内部为 query 和 key 加上 RMSNorm(QK-Norm),两者合在一起有助于稳定训练 loss。

下面这张图进一步把 OLMo 2 和 Llama 3 并排对比;可以看到,除了 OLMo 2 仍然用传统 MHA 而不是 GQA 这一点,两者的架构在其他方面相对相似。(不过 OLMo 2 团队三个月后发布了一个用 GQA 的 32B 变体19。)

Llama 3 8B 与 OLMo 2 7B 的架构对比。左侧 Llama 3 8B:词表 128k、32 层、32 head、embedding 维度 4,096、FFN 隐层 14,336、支持上下文 128k token,RMSNorm 1 与 RMSNorm 2 都在模块之前(Pre-Norm),attention 是 Masked grouped-query attention。右侧 OLMo 2 7B:词表 100k、32 层、32 head、embedding 维度 4,096、FFN 隐层 11,008、支持上下文 4k token,两个 RMSNorm 都在模块之后(Post-Norm),attention 是 Masked multi-head attention,并额外带一个 QK-Norm
Llama 3 8B 与 OLMo 2 7B 的架构对比。左侧 Llama 3 8B:词表 128k、32 层、32 head、embedding 维度 4,096、FFN 隐层 14,336、支持上下文 128k token,RMSNorm 1 与 RMSNorm 2 都在模块之前(Pre-Norm),attention 是 Masked grouped-query attention。右侧 OLMo 2 7B:词表 100k、32 层、32 head、embedding 维度 4,096、FFN 隐层 11,008、支持上下文 4k token,两个 RMSNorm 都在模块之后(Post-Norm),attention 是 Masked multi-head attention,并额外带一个 QK-Norm

3 Gemma 3

Google 的 Gemma 模型一直都相当好,我觉得相比 Llama 系列这类热门模型,它们一直被低估了一点。

Gemma 的一个区别性特点是相当大的词表(为了更好地支持多语言),以及对 27B 这个尺寸的更强侧重(相对于 8B 或 70B)。但要注意 Gemma 2 也有更小的尺寸:1B、4B 和 12B。

27B 这个尺寸正好落在一个很不错的甜点上:它比 8B 模型能干得多,但又不像 70B 那么吃资源,而且在我的 Mac Mini 上本地跑起来毫无问题。

那么 Gemma 3 里还有什么有意思的?如前面讨论过的,Deepseek V3/R1 这类模型用 Mixture-of-Experts(MoE)架构,在给定模型尺寸下降低推理时的内存需求。(MoE 方案也被我们后面要讨论的另外几个模型采用。)

Gemma 3 用了一个不同的「技巧」来降低计算成本,也就是 sliding window attention。

3.1 Sliding Window Attention

借助 sliding window attention 滑动窗口注意力(SWA,最初在 2020 年的 LongFormer 论文20里提出,Gemma 221 也已经用过),Gemma 3 团队大幅减少了 KV cache 的内存需求,如下图所示。

来自 Gemma 3 论文并经作者标注的配图,展示滑动窗口注意力带来的 KV cache 内存节省。横轴是上下文长度(1K 到 128K),纵轴是 KV cache 内存(MB,标注「越高越差」)。黄线是 2B 纯全局注意力,在 128K 时接近 7,000 MB,标注「常规注意力占用更多内存」;红线是 2B 局部比全局 5:1、窗口 1024,在 128K 时约 1,100 MB,标注「滑动窗口注意力更省内存」
来自 Gemma 3 论文并经作者标注的配图,展示滑动窗口注意力带来的 KV cache 内存节省。横轴是上下文长度(1K 到 128K),纵轴是 KV cache 内存(MB,标注「越高越差」)。黄线是 2B 纯全局注意力,在 128K 时接近 7,000 MB,标注「常规注意力占用更多内存」;红线是 2B 局部比全局 5:1、窗口 1024,在 128K 时约 1,100 MB,标注「滑动窗口注意力更省内存」

那么什么是 sliding window attention?如果我们把常规自注意力看成一种全局注意力机制——因为每个序列元素都能访问其他所有序列元素——那么我们可以把 sliding window attention 看成局部注意力,因为这里我们把上下文尺寸限制在当前 query 位置的周围。下图说明了这一点。

常规注意力(左)与滑动窗口注意力(右)的对比。左侧「常规因果自注意力掩码」:以 The / cat / sat / on / the 五个 token 为例的下三角 0-1 掩码矩阵,说明「用因果注意力掩码时,当前 token 只能注意到之前的 token(加上自己)」。右侧「滑动窗口注意力」:同样的下三角,但左下角被红框标出的两个位置也被置 0,标注「不去注意,以节省计算」,说明「用因果注意力掩码时,当前 token 只能注意到某个限度内的之前 token」
常规注意力(左)与滑动窗口注意力(右)的对比。左侧「常规因果自注意力掩码」:以 The / cat / sat / on / the 五个 token 为例的下三角 0-1 掩码矩阵,说明「用因果注意力掩码时,当前 token 只能注意到之前的 token(加上自己)」。右侧「滑动窗口注意力」:同样的下三角,但左下角被红框标出的两个位置也被置 0,标注「不去注意,以节省计算」,说明「用因果注意力掩码时,当前 token 只能注意到某个限度内的之前 token」

请注意 sliding window attention 既可以和 Multi-Head Attention 一起用、也可以和 Grouped-Query Attention 一起用;Gemma 3 用的是 grouped-query attention。

如上所述,sliding window attention 也被称为局部注意力,因为那个局部窗口围绕着当前 query 位置、并随之移动。相比之下,常规注意力是全局的,因为每个 token 都能访问所有其他 token。

现在,如上面简要提到的,前代 Gemma 2 架构此前也用过 sliding window attention。Gemma 3 的不同之处在于,他们调整了全局(常规)注意力与局部(滑动)注意力之间的比例。

举例来说,Gemma 2 用的是一种把滑动窗口(局部)和全局注意力按 1:1 比例结合的混合注意力机制。每个 token 能注意到一个 4k token 的邻近上下文窗口。

Gemma 2 是每隔一层用一次 sliding window attention,而 Gemma 3 现在是 5:1 的比例,意味着每 5 个滑动窗口(局部)注意力层才有 1 个全注意力层;此外,滑动窗口的尺寸也从 4096(Gemma 2)减到了仅 1024(Gemma 3)。这把模型的重心推向更高效的、局部化的计算。

根据他们的消融实验,使用 sliding window attention 对建模表现的影响很小,如下图所示。

来自 Gemma 3 论文并经作者标注的配图,展示滑动窗口注意力对 LLM 输出困惑度几乎没有影响。左图「全(常规)注意力 vs 滑动窗口注意力」:横轴是局部比全局的比例(1:1、3:1、5:1、7:1),纵轴是困惑度变化 $\Delta$Perplexity,2B 与 9B 两条线都在 0 附近小幅波动,说明「用 1:1(Gemma 2)还是 5:1(Gemma 3)的全局与滑动窗口层比例,对建模表现没有显著影响」。右图「滑动窗口尺寸」:横轴是窗口 512 / 1024 / 2048 / 4096,纵轴同样是 $\Delta$Perplexity,两条线(2B 局部比全局 1:1 与 3:1)幅度在 $\pm0.02$ 以内,说明「窗口用 1024(Gemma 3)还是 4096(Gemma 2),建模表现差异可以忽略」
来自 Gemma 3 论文并经作者标注的配图,展示滑动窗口注意力对 LLM 输出困惑度几乎没有影响。左图「全(常规)注意力 vs 滑动窗口注意力」:横轴是局部比全局的比例(1:1、3:1、5:1、7:1),纵轴是困惑度变化 $\Delta$Perplexity,2B 与 9B 两条线都在 0 附近小幅波动,说明「用 1:1(Gemma 2)还是 5:1(Gemma 3)的全局与滑动窗口层比例,对建模表现没有显著影响」。右图「滑动窗口尺寸」:横轴是窗口 512 / 1024 / 2048 / 4096,纵轴同样是 $\Delta$Perplexity,两条线(2B 局部比全局 1:1 与 3:1)幅度在 $\pm0.02$ 以内,说明「窗口用 1024(Gemma 3)还是 4096(Gemma 2),建模表现差异可以忽略」

虽然 sliding window attention 是 Gemma 3 最值得注意的架构方面,我还想简单过一下归一化层的位置,作为前面 OLMo 2 那节的后续。

3.2 Gemma 3 的归一化层位置

一个小而有趣的点是,Gemma 3 在它的 grouped-query attention 模块周围,同时以 Pre-Norm 和 Post-Norm 两种方式使用 RMSNorm。

这和 Gemma 2 类似,但仍值得一提,因为它不同于(1)最初 transformer(「Attention is all you need」)里用的 Post-Norm,(2)由 GPT-2 带火、此后被许多架构采用的 Pre-Norm,以及(3)我们前面看到的 OLMo 2 那一版 Post-Norm。

OLMo 2 与 Gemma 3 的架构对比,注意 Gemma 3 多出来的归一化层。左侧 OLMo 2 7B:词表 100k、32 层,RMSNorm 1 在 Masked multi-head attention 之后、RMSNorm 2 在 Feed forward 之后,外挂 QK-Norm 和 RoPE。右侧 Gemma 3 4B:词表 256k、34 层,每个模块前后各有一个归一化层——Pre-RMSNorm 1、Sliding window attention、Post-RMSNorm 1,然后 Pre-RMSNorm 2、Feed forward、Post-RMSNorm 2,同样外挂 QK-Norm 和 RoPE
OLMo 2 与 Gemma 3 的架构对比,注意 Gemma 3 多出来的归一化层。左侧 OLMo 2 7B:词表 100k、32 层,RMSNorm 1 在 Masked multi-head attention 之后、RMSNorm 2 在 Feed forward 之后,外挂 QK-Norm 和 RoPE。右侧 Gemma 3 4B:词表 256k、34 层,每个模块前后各有一个归一化层——Pre-RMSNorm 1、Sliding window attention、Post-RMSNorm 1,然后 Pre-RMSNorm 2、Feed forward、Post-RMSNorm 2,同样外挂 QK-Norm 和 RoPE

我觉得这种归一化层的位置安排是一个相对直观的做法,因为它两头的好处都拿到了:Pre-Norm 和 Post-Norm。在我看来,多一点归一化不会有坏处。最坏的情况下,如果这些额外的归一化是冗余的,那也只是通过冗余增加了一点低效。但实践中,既然 RMSNorm 在整个大局里相对便宜,这应该不会有任何明显影响。

3.3 Gemma 3 小结

Gemma 3 是一个表现良好的开源权重 LLM,在我看来它在开源圈子里有点被低估。最有意思的部分是用 sliding window attention 来提升效率(未来把它和 MoE 结合起来会很有意思)。

此外,Gemma 3 有一套独特的归一化层位置安排,把 RMSNorm 层同时放在 attention 和 FeedForward 模块之前和之后。

3.4 附带:Gemma 3n

Gemma 3 发布几个月后,Google 分享了 Gemma 3n22,这是一个为小设备效率做了优化的 Gemma 3 模型,目标是能在手机上跑。

Gemma 3n 为获得更好效率所做的改动之一,是所谓的 Per-Layer Embedding(PLE)参数层。这里的核心想法是只把模型参数的一个子集保留在 GPU 内存里。token-层特定的 embedding,比如文本、音频和视觉各模态的那些,则按需从 CPU 或 SSD 流式取入。

下图说明了 PLE 的内存节省,图中给标准 Gemma 3 模型列的是 54.4 亿参数。这大概指的是 Gemma 3 的 40 亿变体。

来自 Google Gemma 3n 博客并经作者标注的配图,说明 PLE 的内存节省。左侧「标准执行」:加载参数 5.44B,四块蓝色分别是 Text parameters 1.91B、Vision parameters 0.3B、Audio parameters 0.68B、Per-Layer Embedding parameters 2.55B,标注「这大概指的是 Gemma 3 4B 模型」。右侧「跳过部分参数并缓存 PLE」:加载参数 1.91B,只有 Text parameters 1.91B 是蓝色,Vision 和 Audio 变灰,Per-Layer Embedding 那块用虚线框出并注明「PLE 数据缓存到快速存储」,标注「这些参数只在需要时才加载」
来自 Google Gemma 3n 博客并经作者标注的配图,说明 PLE 的内存节省。左侧「标准执行」:加载参数 5.44B,四块蓝色分别是 Text parameters 1.91B、Vision parameters 0.3B、Audio parameters 0.68B、Per-Layer Embedding parameters 2.55B,标注「这大概指的是 Gemma 3 4B 模型」。右侧「跳过部分参数并缓存 PLE」:加载参数 1.91B,只有 Text parameters 1.91B 是蓝色,Vision 和 Audio 变灰,Per-Layer Embedding 那块用虚线框出并注明「PLE 数据缓存到快速存储」,标注「这些参数只在需要时才加载」

54.4 亿和 40 亿这个参数量的差异,是因为 Google 有一套有意思的 LLM 参数量报告方式。他们经常把 embedding 参数排除在外,让模型显得更小,除了像这种把它们算进来更方便、能让模型显得更大的情形。这不是 Google 独有的,这种做法在整个领域里已经变得很常见。

另一个有意思的技巧是 MatFormer 概念23(Matryoshka Transformer 的简称,即俄罗斯套娃 Transformer)。举例来说,Gemma 3n 用单一的共享 LLM(transformer)架构,它可以被切成更小的、能独立使用的模型。每个切片都被训练成能自己单独工作,所以推理时我们可以只跑需要的那一部分(而不是整个大模型)。

4 Mistral Small 3.1

Mistral Small 3.1 24B24 在 3 月、也就是 Gemma 3 之后不久发布,值得注意之处在于它在若干 benchmark 上超过了 Gemma 3 27B(数学除外),同时还更快。

Mistral Small 3.1 相比 Gemma 3 推理延迟更低的原因,大概在于他们自己的 tokenizer,以及缩小了 KV cache 和层数。除此之外它是个标准架构,如下图所示。

Gemma 3 27B 与 Mistral 3.1 Small 24B 的架构对比。左侧 Gemma 3 27B:词表 256k、62 层、32 个 attention head 与 16 个 key &amp; value head、embedding 维度 5,376、FFN 隐层 21,504、支持上下文 128k token,每个模块前后各一个 RMSNorm(Pre-RMSNorm 1 / Post-RMSNorm 1 / Pre-RMSNorm 2 / Post-RMSNorm 2),attention 是带滑动窗口的 Grouped-query attention 并外挂 QK-Norm,FFN 用 GELU 激活。右侧 Mistral 3.1 Small 24B:词表 256k、40 层、40 个 attention head 与 8 个 key &amp; value head、embedding 维度 5,120、FFN 隐层 32,768、支持上下文 128k token,只有 Pre-RMSNorm 1 和 Pre-RMSNorm 2,attention 是不带滑动窗口的 Grouped-query attention 且没有 QK-Norm,FFN 用 SiLU 激活
Gemma 3 27B 与 Mistral 3.1 Small 24B 的架构对比。左侧 Gemma 3 27B:词表 256k、62 层、32 个 attention head 与 16 个 key &amp; value head、embedding 维度 5,376、FFN 隐层 21,504、支持上下文 128k token,每个模块前后各一个 RMSNorm(Pre-RMSNorm 1 / Post-RMSNorm 1 / Pre-RMSNorm 2 / Post-RMSNorm 2),attention 是带滑动窗口的 Grouped-query attention 并外挂 QK-Norm,FFN 用 GELU 激活。右侧 Mistral 3.1 Small 24B:词表 256k、40 层、40 个 attention head 与 8 个 key &amp; value head、embedding 维度 5,120、FFN 隐层 32,768、支持上下文 128k token,只有 Pre-RMSNorm 1 和 Pre-RMSNorm 2,attention 是不带滑动窗口的 Grouped-query attention 且没有 QK-Norm,FFN 用 SiLU 激活

有意思的是,早期的 Mistral 模型曾用过 sliding window attention,但如果看官方 Model Hub 配置文件25里的默认设置("sliding_window": null),他们在 Mistral Small 3.1 里似乎放弃了它。而且 model card26 里也完全没提到它。

所以,既然 Mistral 用的是常规 Grouped-Query Attention 而不是 Gemma 3 那种带滑动窗口的 Grouped-Query Attention,也许因为能用上更优化的代码(也就是 FlashAttention),会带来额外的推理算力节省。举例来说,我推测虽然 sliding window attention 减少了内存占用,但它并不必然减少推理延迟,而后者才是 Mistral Small 3.1 关注的东西。

5 Llama 4

本文前面关于 Mixture-of-Experts(MoE)那段冗长的引入,在这里又派上用场了。Llama 427 也采用了 MoE 方案,除此之外遵循一个相对标准的架构,和 DeepSeek V3 非常相似,如下图所示。(Llama 4 包含原生多模态支持,和 Gemma、Mistral 这类模型类似。但既然本文聚焦语言建模,我们只关注文本模型。)

DeepSeek V3(6,710 亿参数)与 Llama 4 Maverick(4,000 亿参数)的架构对比。左侧 DeepSeek V3 标注「更多、更小的 expert」:词表 129k、61 层、MLA、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 个 shared 加 256 个 routed,每 token 激活 1 shared + 8 expert、每步 37B 参数激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Llama 4 Maverick 标注「更少、更大的 expert」:词表 202k、48 层、Grouped-query Attention、embedding 维度 5,120、expert 中间隐层 8,192、支持上下文 512k token,MoE layer 里 1 个 shared 加 128 个 routed,每 token 激活 1 shared + 1 expert、每步 17B 参数激活,稠密与 MoE block 每隔一层交替、稠密层隐层 16,384
DeepSeek V3(6,710 亿参数)与 Llama 4 Maverick(4,000 亿参数)的架构对比。左侧 DeepSeek V3 标注「更多、更小的 expert」:词表 129k、61 层、MLA、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 个 shared 加 256 个 routed,每 token 激活 1 shared + 8 expert、每步 37B 参数激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Llama 4 Maverick 标注「更少、更大的 expert」:词表 202k、48 层、Grouped-query Attention、embedding 维度 5,120、expert 中间隐层 8,192、支持上下文 512k token,MoE layer 里 1 个 shared 加 128 个 routed,每 token 激活 1 shared + 1 expert、每步 17B 参数激活,稠密与 MoE block 每隔一层交替、稠密层隐层 16,384

虽然 Llama 4 Maverick 的架构整体上和 DeepSeek V3 非常像,还是有一些值得一提的有趣差异。

首先,Llama 4 和它的前代一样用 Grouped-Query Attention,而 DeepSeek V3 用的是我们在本文开头讨论过的 Multi-Head Latent Attention。其次,DeepSeek V3 和 Llama 4 Maverick 都是非常大的架构,DeepSeek V3 的总参数量大约大 68%。然而,以 370 亿激活参数计,DeepSeek V3 的激活参数是 Llama 4 Maverick(170 亿)的两倍多。

Llama 4 Maverick 用的是一种更经典的 MoE 配置,expert 更少但更大(2 个激活 expert,每个隐层尺寸 8,192),相比 DeepSeek V3(9 个激活 expert,每个隐层尺寸 2,048)。另外,DeepSeek 在每个 transformer block 里都用 MoE 层(前 3 个除外),而 Llama 4 是每隔一个 transformer block 交替使用 MoE 和稠密模块。

考虑到架构之间存在这么多细小差异,很难确定它们对最终模型表现的确切影响。不过主要的结论是,MoE 架构在 2025 年的流行度显著上升了。

6 Qwen3

Qwen 团队持续交付高质量的开源权重 LLM。我在 NeurIPS 2023 协助共同指导 LLM 效率挑战赛时,记得胜出的头部方案全都是基于 Qwen2 的。

现在,Qwen3 又是一个在各自尺寸档位排行榜顶部的热门模型系列。有 7 个稠密模型:0.6B、1.7B、4B、8B、14B 和 32B。还有 2 个 MoE 模型:30B-A3B 和 235B-A22B。

译注:原文写「7 个稠密模型」,但后面只列出 6 个尺寸(0.6B / 1.7B / 4B / 8B / 14B / 32B),Qwen3 的稠密档实际也是这 6 个,「7」疑为笔误。

(顺带一提,注意「Qwen3」里没有空格不是打字错误;我只是尽量保留 Qwen 开发者自己选的原始写法。)

6.1 Qwen3(稠密)

我们先讨论稠密模型架构。在写这篇文章时,0.6B 模型很可能是目前最小的当代开源权重模型。而且根据我个人的经验,考虑到它这么小的体量,它表现得相当好。如果你打算本地跑,它有很好的 token/秒 吞吐和很低的内存占用。不仅如此,由于体量小,它还很容易在本地训练(用于教学目的)。

所以对我来说,Qwen3 0.6B 在大多数用途上已经取代了 Llama 3 1B。这两个架构的对比见下图。

Qwen3 0.6B 与 Llama 3 1B 的架构对比;注意 Qwen3 是层数更多的更深架构,而 Llama 3 是 attention head 更多的更宽架构。左侧 Llama 3.2 1B:词表 128k、16 层、32 head、embedding 维度 2,048、FFN 隐层 8,192、支持上下文 131k token,粉字标注「更宽的架构」;下方性能表:Llama3Model 1B 为 42 tokens/sec、2.91 GB,compiled 后 170 tokens/sec、3.12 GB。右侧 Qwen3 0.6B:词表 151k、28 层、16 head、embedding 维度 1,024、FFN 隐层 3072、支持上下文 41k token,带 Q/K RMSNorm,蓝字标注「更深的架构」;下方性能表:Qwen3Model 0.6B 为 24 tokens/sec、1.49 GB,compiled 后 101 tokens/sec、1.99 GB
Qwen3 0.6B 与 Llama 3 1B 的架构对比;注意 Qwen3 是层数更多的更深架构,而 Llama 3 是 attention head 更多的更宽架构。左侧 Llama 3.2 1B:词表 128k、16 层、32 head、embedding 维度 2,048、FFN 隐层 8,192、支持上下文 131k token,粉字标注「更宽的架构」;下方性能表:Llama3Model 1B 为 42 tokens/sec、2.91 GB,compiled 后 170 tokens/sec、3.12 GB。右侧 Qwen3 0.6B:词表 151k、28 层、16 head、embedding 维度 1,024、FFN 隐层 3072、支持上下文 41k token,带 Q/K RMSNorm,蓝字标注「更深的架构」;下方性能表:Qwen3Model 0.6B 为 24 tokens/sec、1.49 GB,compiled 后 101 tokens/sec、1.99 GB

如果你对一份不依赖任何外部第三方 LLM 库、人类可读的 Qwen3 实现感兴趣,我最近从零实现了 Qwen3(纯 PyTorch)28

上图里的计算性能数字,来自我自己的从零 PyTorch 实现在一张 A100 GPU 上的运行结果。可以看到,Qwen3 的内存占用更小,因为它整体上是个更小的架构,而且用了更小的隐层和更少的 attention head。不过它用了比 Llama 3 更多的 transformer block,这导致运行时更慢(token/秒 的生成速度更低)。

6.2 Qwen3(MoE)

如前所述,Qwen3 也有两个 MoE 版本:30B-A3B 和 235B-A22B。为什么有些架构,比如 Qwen3,会同时出常规(稠密)和 MoE(稀疏)变体?

如本文开头提到的,MoE 变体有助于降低大型 base 模型的推理成本。同时提供稠密和 MoE 版本,让用户能根据自己的目标和约束灵活选择。

稠密模型通常在微调、部署,以及跨各种硬件做优化上更直截了当。

另一方面,MoE 模型是为 scaling 推理而优化的。举例来说,在固定的推理预算下,它们能取得更高的整体模型容量(也就是因为更大而在训练时吸收更多知识),而推理成本不必成比例增加。

通过同时发布两种类型,Qwen3 系列可以支持更广泛的使用场景:稠密模型用于稳健性、简洁性和微调,MoE 模型用于大规模高效服务。

为了收尾本节,我们来看看 Qwen3 235B-A22B(注意 A22B 代表「220 亿激活参数」)对 DeepSeek V3,后者的激活参数几乎是它的两倍(370 亿)。

DeepSeek V3 与 Qwen3 235B-A22B 的架构对比。左侧 DeepSeek V3(671B):词表 129k、61 层、Multi-head Latent Attention、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 个 shared 加 256 个 routed,每 token 激活 1 shared + 8 expert、每步 37B 参数激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Qwen3 235B-A22B:词表 151k、94 层、Grouped-query Attention 并带 Q/K RMSNorm、embedding 维度 4,096、expert 中间隐层 1,536、支持上下文 128k token,MoE layer 里 1 到 128 个 routed expert、没有 shared expert,每 token 激活 8 个 expert、每步 22B 参数激活
DeepSeek V3 与 Qwen3 235B-A22B 的架构对比。左侧 DeepSeek V3(671B):词表 129k、61 层、Multi-head Latent Attention、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 个 shared 加 256 个 routed,每 token 激活 1 shared + 8 expert、每步 37B 参数激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Qwen3 235B-A22B:词表 151k、94 层、Grouped-query Attention 并带 Q/K RMSNorm、embedding 维度 4,096、expert 中间隐层 1,536、支持上下文 128k token,MoE layer 里 1 到 128 个 routed expert、没有 shared expert,每 token 激活 8 个 expert、每步 22B 参数激活

如上图所示,DeepSeek V3 和 Qwen3 235B-A22B 的架构相似得惊人。不过值得注意的是,Qwen3 模型不再使用 shared expert 了(更早的 Qwen 模型,比如 Qwen2.5-MoE29,确实用过 shared expert)。

遗憾的是,Qwen3 团队没有披露他们放弃 shared expert 的任何理由。如果要我猜,也许只是当他们把 expert 从 2 个(Qwen2.5-MoE)增加到 8 个(Qwen3)之后,shared expert 对他们那套设置的训练稳定性来说已经不必要了。然后他们就能通过只用 8 个而不是 8+1 个 expert 来省下额外的算力和内存开销。(不过这没法解释为什么 DeepSeek V3 还在保留他们的 shared expert。)

更新。Qwen3 的开发者之一 Junyang Lin 回应如下30

当时我们没有发现 shared expert 带来足够显著的提升,而且我们担心 shared expert 会给推理侧的优化带来麻烦。老实说,这个问题没有直接的答案。

7 SmolLM3

SmolLM331 或许远没有本文涵盖的其他 LLM 那么受欢迎,但我认为它仍然是个值得纳入的有趣模型,因为它在一个相对小而方便的 30 亿参数尺寸上提供了相当好的建模表现,正好落在 Qwen3 的 1.7B 和 4B 之间,如下图所示。

此外,它也分享了大量训练细节,和 OLMo 类似,这很罕见,也总是令人感激!

来自 SmolLM3 发布博文并经作者标注的配图,对比 SmolLM3 与 Qwen3 1.7B、Qwen3 4B 以及 Llama 3 3B、Gemma 3 4B 的胜率。横轴是模型尺寸(20 亿到 45 亿参数),纵轴是在 12 项流行 LLM benchmark 上测得的胜率(2.0% 到 5.0%),并标注纵轴「越高越好」、横轴向左「更快 / 更便宜」。SmolLM3 3B 位于约 3.05B、4.1% 处,标注「Qwen3 的一个有意思的替代品」;对比点有 Qwen3 4B(约 4.0B、4.8%)、Gemma 3 4B(约 4.3B、4.2%)、Qwen2.5 3B(约 3.1B、3.05%)、Llama3.2 3B(约 3.1B、2.2%)、Qwen3 1.7B(约 2.0B、2.3%)
来自 SmolLM3 发布博文并经作者标注的配图,对比 SmolLM3 与 Qwen3 1.7B、Qwen3 4B 以及 Llama 3 3B、Gemma 3 4B 的胜率。横轴是模型尺寸(20 亿到 45 亿参数),纵轴是在 12 项流行 LLM benchmark 上测得的胜率(2.0% 到 5.0%),并标注纵轴「越高越好」、横轴向左「更快 / 更便宜」。SmolLM3 3B 位于约 3.05B、4.1% 处,标注「Qwen3 的一个有意思的替代品」;对比点有 Qwen3 4B(约 4.0B、4.8%)、Gemma 3 4B(约 4.3B、4.2%)、Qwen2.5 3B(约 3.1B、3.05%)、Llama3.2 3B(约 3.1B、2.2%)、Qwen3 1.7B(约 2.0B、2.3%)

如下面的架构对比图所示,SmolLM3 的架构看起来相当标准。不过或许最有意思的方面是它对 NoPE(No Positional Embeddings)的使用。

Qwen3 4B 与 SmolLM3 3B 的架构并排对比。左侧 Qwen3 4B:词表 151k、36 层、32 head、embedding 维度 2,560、FFN 隐层 9,728、支持上下文 41k token,带 Q/K RMSNorm 和 RoPE。右侧 SmolLM3 3B:词表 128k、36 层、16 head、embedding 维度 2,048、FFN 隐层 11,008、支持上下文 65k token,位置编码那一路标注「每第 4 层用 NoPE」,即 NoPE 与 RoPE 并存
Qwen3 4B 与 SmolLM3 3B 的架构并排对比。左侧 Qwen3 4B:词表 151k、36 层、32 head、embedding 维度 2,560、FFN 隐层 9,728、支持上下文 41k token,带 Q/K RMSNorm 和 RoPE。右侧 SmolLM3 3B:词表 128k、36 层、16 head、embedding 维度 2,048、FFN 隐层 11,008、支持上下文 65k token,位置编码那一路标注「每第 4 层用 NoPE」,即 NoPE 与 RoPE 并存

7.1 No Positional Embeddings(NoPE)

在 LLM 的语境里,NoPE 是一个更早的想法,可以追溯到 2023 年的一篇论文32(The Impact of Positional Encoding on Length Generalization in Transformers),主张移除显式的位置信息注入(比如早期 GPT 架构里那种经典的绝对位置嵌入层,或者如今的 RoPE)。

在基于 transformer 的 LLM 里,位置编码通常是必要的,因为自注意力对待 token 时不考虑顺序。绝对位置嵌入通过增加一个额外的嵌入层来解决这个问题,该层把信息加到 token embedding 上。

来自作者《Build A Large Language Model (From Scratch)》一书并经修改的配图,说明绝对位置嵌入。图中三行自下而上:Token embeddings(为简化起见假设所有 token embedding 都相同,均为 <code>[1, 1, 1]</code>)、Positional embeddings(<code>[1.1, 1.2, 1.3]</code>、<code>[2.1, 2.2, 2.3]</code>、<code>[3.1, 3.2, 3.3]</code>、<code>[4.1, 4.2, 4.3]</code>,标注说明这些值来自一个额外的嵌入层,图里选了好看的数字,实际通常是随机的、学出来的数)、两者相加得到 Input embeddings(<code>[2.1, 2.2, 2.3]</code>、<code>[3.1, 3.2, 3.3]</code>、<code>[4.1, 4.2, 4.3]</code>、<code>[5.1, 5.2, 5.3]</code>),标注说明加入位置信息之后,喂给 LLM 的输入 embedding 就各不相同了,尽管底部原始的 token embedding 全都一样
来自作者《Build A Large Language Model (From Scratch)》一书并经修改的配图,说明绝对位置嵌入。图中三行自下而上:Token embeddings(为简化起见假设所有 token embedding 都相同,均为 <code>[1, 1, 1]</code>)、Positional embeddings(<code>[1.1, 1.2, 1.3]</code>、<code>[2.1, 2.2, 2.3]</code>、<code>[3.1, 3.2, 3.3]</code>、<code>[4.1, 4.2, 4.3]</code>,标注说明这些值来自一个额外的嵌入层,图里选了好看的数字,实际通常是随机的、学出来的数)、两者相加得到 Input embeddings(<code>[2.1, 2.2, 2.3]</code>、<code>[3.1, 3.2, 3.3]</code>、<code>[4.1, 4.2, 4.3]</code>、<code>[5.1, 5.2, 5.3]</code>),标注说明加入位置信息之后,喂给 LLM 的输入 embedding 就各不相同了,尽管底部原始的 token embedding 全都一样

而 RoPE 则是通过按 token 位置旋转 query 和 key 向量来解决这个问题。

但在 NoPE 层里,完全不加任何这类位置信号:不加固定的、不加学出来的、不加相对的。什么都不加。

即便没有位置嵌入,模型仍然知道哪些 token 在前面,这要归功于因果注意力掩码。这个掩码阻止每个 token 去注意未来的 token。结果是位置 t 上的 token 只能看到位置 ≤ t 的 token,从而保住了自回归的顺序性。

所以虽然没有显式加入的位置信息,模型的结构里仍然烘焙进了一种隐式的方向感,而 LLM 在常规的基于梯度下降的训练中,如果发现这对优化目标有利,是可以学会利用它的。(更多信息见 NoPE 论文里的定理。)

所以总体上,NoPE 论文不仅发现不需要注入位置信息,还发现 NoPE 有更好的长度泛化,也就是说 LLM 的回答表现随序列长度增加而退化得更少,如下图所示。

来自 NoPE 论文并经作者标注的配图,展示 NoPE 有更好的长度泛化。六张子图分别是 Copy、Addition、SCAN、Reverse、Summation、PCFG 任务,横轴是问题长度、纵轴是准确率,灰色阴影区标注为「训练集里的输入长度」。六条曲线分别对应 NoPE、T5&rsquo;s Relative PE、ALiBi、Rotary、Absolute Position Embedding 五种位置编码,标注写「NoPE 比其他位置编码方法泛化得更好」——在 Copy 任务上 NoPE 一直保持接近 1.0 的准确率,而其他方法在超出训练长度后迅速跌到 0
来自 NoPE 论文并经作者标注的配图,展示 NoPE 有更好的长度泛化。六张子图分别是 Copy、Addition、SCAN、Reverse、Summation、PCFG 任务,横轴是问题长度、纵轴是准确率,灰色阴影区标注为「训练集里的输入长度」。六条曲线分别对应 NoPE、T5&rsquo;s Relative PE、ALiBi、Rotary、Absolute Position Embedding 五种位置编码,标注写「NoPE 比其他位置编码方法泛化得更好」——在 Copy 任务上 NoPE 一直保持接近 1.0 的准确率,而其他方法在超出训练长度后迅速跌到 0

注意上面展示的实验是在一个约 1 亿参数的相对小的 GPT 式模型上、以及相对小的上下文尺寸下做的。这些发现能多好地泛化到更大的当代 LLM 上,还不清楚。

正因如此,SmolLM3 团队大概只在每第 4 层「施加」了 NoPE(或者更准确地说,省掉了 RoPE)。

8 Kimi K2 与 Kimi K2 Thinking

Kimi K233 最近在 AI 社区引起了很大的波澜,因为它是一个表现好得惊人的开源权重模型。根据 benchmark,它和最好的闭源模型(Google 的 Gemini、Anthropic 的 Claude、OpenAI 的 ChatGPT 系列)不分上下。

一个值得注意的方面是它使用了相对新的 Muon 优化器34的一个变体,而不是 AdamW。据我所知,这是 Muon 第一次在这个体量的任何生产模型上取代 AdamW(此前它只被证明能 scale 到 16B35)。这带来了非常漂亮的训练 loss 曲线,大概也帮助这个模型被推上了前面说的那些 benchmark 的顶部。

虽然有人评论说这条 loss 特别平滑(因为没有尖刺),我认为它并不算特别平滑(比如可以看下图里 OLMo 2 的 loss 曲线;另外,梯度的 L2 范数大概是追踪训练稳定性的更好指标)。不过,真正值得注意的是这条 loss 曲线衰减得有多好。

但如本文引言里提到的,训练方法论是另一个话题,以后再谈。

来自 Kimi K2 发布博文与 OLMo 2 论文并经作者标注的配图。上半部分「Kimi K2 训练 loss 曲线」:横轴是 token 数(0 到 16 万亿),纵轴是 loss(2.0 降到约 1.28),整条曲线带密集的毛刺但持续下行。下半部分「OLMo 与 OLMo 2 训练 loss 曲线」:纵轴 loss 从 3.0 降到约 2.0,蓝线 OLMo 0424 7B 带多次明显的竖直尖刺,橙线 OLMo 2 1124 7B 位置略高但平滑得多
来自 Kimi K2 发布博文与 OLMo 2 论文并经作者标注的配图。上半部分「Kimi K2 训练 loss 曲线」:横轴是 token 数(0 到 16 万亿),纵轴是 loss(2.0 降到约 1.28),整条曲线带密集的毛刺但持续下行。下半部分「OLMo 与 OLMo 2 训练 loss 曲线」:纵轴 loss 从 3.0 降到约 2.0,蓝线 OLMo 0424 7B 带多次明显的竖直尖刺,橙线 OLMo 2 1124 7B 位置略高但平滑得多

译注:图 24 的原始图注把 OLMo 2 论文的链接写成了 arxiv.org/abs/2305.19466,那其实是上一节 NoPE 论文的编号;OLMo 2 论文是 arxiv.org/abs/2501.00656,也就是第 2 节引的那篇13

模型本身有 1 万亿参数,这真的很了不起。

在写这篇文章时,它可能是这一代里最大的 LLM(前提是 Llama 4 Behemoth 没有发布、闭源 LLM 不算,而 Google 那个 1.6 万亿的 Switch Transformer36 是上一代的 encoder-decoder 架构)。

这也算是绕回了原点,因为 Kimi K2 用的就是我们本文开头讲过的 DeepSeek V3 架构,只不过他们把它做得更大了,如下图所示。

DeepSeek V3/R1(6,710 亿)与 Kimi K2(1 万亿)的架构对比。左侧 DeepSeek V3/R1 标注「更多 head、更少 expert」:词表 129k、61 层、128 个 head、Multi-head Latent Attention、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 256 routed,每 token 激活 1 shared + 8 expert、每步 37B 激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Kimi K2 标注「更少 head、更多 expert」:词表 160k、61 层、64 个 head、同样是 MLA、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 384 routed,每 token 同样激活 1 shared + 8 expert、每步 32B 激活,只有第 1 个 block 用稠密 FFN
DeepSeek V3/R1(6,710 亿)与 Kimi K2(1 万亿)的架构对比。左侧 DeepSeek V3/R1 标注「更多 head、更少 expert」:词表 129k、61 层、128 个 head、Multi-head Latent Attention、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 256 routed,每 token 激活 1 shared + 8 expert、每步 37B 激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Kimi K2 标注「更少 head、更多 expert」:词表 160k、61 层、64 个 head、同样是 MLA、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 384 routed,每 token 同样激活 1 shared + 8 expert、每步 32B 激活,只有第 1 个 block 用稠密 FFN

如上图所示,Kimi K2 基本上和 DeepSeek V3 一样,除了它在 MoE 模块里用了更多 expert、在 Multi-Head Latent Attention(MLA)模块里用了更少的 head。

Kimi K2 不是凭空出现的。更早的 Kimi 1.5 模型,也就是「Kimi k1.5: Scaling Reinforcement Learning with LLMs」论文37里讨论的那个,同样令人印象深刻。然而它运气不好,DeepSeek R1 的论文正好在同一天、1 月 22 日发表。此外,据我所知 Kimi 1.5 的权重从未公开分享。

所以 Kimi K2 团队大概是把这些教训记在心上了,在 DeepSeek R2 发布之前就把 Kimi K2 作为开源权重模型分享了出来。在写这篇文章时,Kimi K2 是最令人印象深刻的开源权重模型。

更新:2025 年 11 月 6 日,Kimi K2 团队还发布了他们新的「Thinking」模型变体( 后续的 K2.5)。架构与上面的 Kimi K2 相比没有变化,除了他们把上下文尺寸从 128k 扩到了 256k。

根据 Kimi 团队分享的 benchmark38,这个模型超过了领先的闭源 LLM 的表现。(遗憾的是没有和 DeepSeek R1 的直接对比。)

上半部分是 DeepSeek R1(6,710 亿)与 Kimi K2 Thinking(1 万亿)的架构对比:两者都是 61 层、MLA、embedding 维度 7,168、expert 中间隐层 2,048、每 token 激活 1 shared + 8 expert;差别在于 Kimi K2 Thinking 词表更大(160k 对 129k,标注「更大的词表」)、支持上下文 256k(对 128k)、head 更少(64 对 128,标注「更少的 head」)、routed expert 更多(384 对 256,标注「更多的 expert」)、稠密 block 更少(只有第 1 个 block 对前 3 个 block,标注「更少的稠密(非 MoE)block」)、每步激活 32B(对 37B)。下半部分是 Kimi K2 Thinking 的 benchmark 柱状图,分三组:Agentic Reasoning(Humanity&rsquo;s Last Exam 纯文本带工具)、Agentic Search(BrowseComp、Seal-0)、Coding(SWE-Multilingual、SWE-bench Verified、LiveCodeBench V6),每组里 Kimi K2 为蓝色柱,对比 GPT-5 与 Claude Sonnet 4.5 Thinking
上半部分是 DeepSeek R1(6,710 亿)与 Kimi K2 Thinking(1 万亿)的架构对比:两者都是 61 层、MLA、embedding 维度 7,168、expert 中间隐层 2,048、每 token 激活 1 shared + 8 expert;差别在于 Kimi K2 Thinking 词表更大(160k 对 129k,标注「更大的词表」)、支持上下文 256k(对 128k)、head 更少(64 对 128,标注「更少的 head」)、routed expert 更多(384 对 256,标注「更多的 expert」)、稠密 block 更少(只有第 1 个 block 对前 3 个 block,标注「更少的稠密(非 MoE)block」)、每步激活 32B(对 37B)。下半部分是 Kimi K2 Thinking 的 benchmark 柱状图,分三组:Agentic Reasoning(Humanity&rsquo;s Last Exam 纯文本带工具)、Agentic Search(BrowseComp、Seal-0)、Coding(SWE-Multilingual、SWE-bench Verified、LiveCodeBench V6),每组里 Kimi K2 为蓝色柱,对比 GPT-5 与 Claude Sonnet 4.5 Thinking

9 GPT-OSS

在我写完这篇文章大约一周之后,OpenAI 发布了39 gpt-oss-120b 和 gpt-oss-20b,这是他们自 2019 年 GPT-2 以来的首批开源权重模型。既然 OpenAI 的开源权重模型被期待了这么久,我更新了这篇文章把它们纳入进来。本节我会写得简短,但我另外写了一篇专门讲 gpt-oss 模型的、详细得多的文章40

在总结那些有意思的点之前,我们先看看这两个模型 gpt-oss-20b 和 gpt-oss-120b 的总览,见下面图 26。

两个 gpt-oss 模型的架构总览。左侧 GPT-OSS 20B:词表 200k、24 层、64 head、Grouped Query Attention、embedding 维度 2,880、input expert size 2,880、intermediate projection size 2,880、支持上下文 131k token,MoE layer 里 1 到 32 个 expert,每 token 只激活 4 个 expert、每推理步只有 3.6B 参数激活。右侧 GPT-OSS 120B:词表 200k、36 层、64 head、embedding 维度同样是 2,880、input expert size 与 intermediate projection size 同样是 2,880、支持上下文 131k token,MoE layer 里 1 到 128 个 expert,每 token 同样只激活 4 个 expert、每推理步只有 5.1B 参数激活
两个 gpt-oss 模型的架构总览。左侧 GPT-OSS 20B:词表 200k、24 层、64 head、Grouped Query Attention、embedding 维度 2,880、input expert size 2,880、intermediate projection size 2,880、支持上下文 131k token,MoE layer 里 1 到 32 个 expert,每 token 只激活 4 个 expert、每推理步只有 3.6B 参数激活。右侧 GPT-OSS 120B:词表 200k、36 层、64 head、embedding 维度同样是 2,880、input expert size 与 intermediate projection size 同样是 2,880、支持上下文 131k token,MoE layer 里 1 到 128 个 expert,每 token 同样只激活 4 个 expert、每推理步只有 5.1B 参数激活

看图 26,这个架构包含了我们前面在其他架构里见过的所有熟悉组件。举例来说,图 27 把较小的那个 gpt-oss 架构放在 Qwen3 30B-A3B 旁边,后者也是一个激活参数量相近的 MoE 模型(gpt-oss 有 36 亿激活参数,Qwen3 30B-A3B 有 33 亿)。

gpt-oss 与 Qwen3 的架构对比。左侧 GPT-OSS 20B 标注「更宽、更少且更大的 expert」:词表 200k、24 层、64 head、embedding 维度 2,880、input expert size 2,880、intermediate projection size 2,880、支持上下文 131k token,32 个 expert 里激活 4 个、每步 3.6B 激活。右侧 Qwen3 30B-A3B 标注「更深、更多且更小的 expert」:词表 151k、48 层、32 head、embedding 维度 2048、input expert size 2,048、intermediate projection size 768、支持上下文 262k token,128 个 expert 里激活 8 个、每步 3.3B 激活;图中用红框标出了层数 48、head 数 32、expert 数 128 和 intermediate projection size 768 这几处差异
gpt-oss 与 Qwen3 的架构对比。左侧 GPT-OSS 20B 标注「更宽、更少且更大的 expert」:词表 200k、24 层、64 head、embedding 维度 2,880、input expert size 2,880、intermediate projection size 2,880、支持上下文 131k token,32 个 expert 里激活 4 个、每步 3.6B 激活。右侧 Qwen3 30B-A3B 标注「更深、更多且更小的 expert」:词表 151k、48 层、32 head、embedding 维度 2048、input expert size 2,048、intermediate projection size 768、支持上下文 262k token,128 个 expert 里激活 8 个、每步 3.3B 激活;图中用红框标出了层数 48、head 数 32、expert 数 128 和 intermediate projection size 768 这几处差异

图 27 里没展示出来的一点是,gpt-oss 用了 sliding window attention(和 Gemma 3 类似,但是每隔一层用一次,而不是 5:1 的比例)。

9.1 宽还是深

图 27 显示 gpt-oss 和 Qwen3 用的是相似的组件。但如果仔细看这两个模型,会发现 Qwen3 是一个深得多的架构,它有 48 个 transformer block 而不是 24 个。

另一方面,gpt-oss 是一个宽得多的架构:

  • embedding 维度是 2880 而不是 2048
  • expert(前馈)的中间投影维度同样是 2880 而不是 768

还值得注意的是,gpt-oss 用了两倍多的 attention head,但这并不直接增加模型的宽度。宽度是由 embedding 维度决定的。

在参数量固定的前提下,两种做法哪个更有优势?作为一条经验法则,更深的模型有更多灵活性,但由于梯度爆炸和梯度消失带来的不稳定问题,可能更难训练(RMSNorm 和 shortcut connection 就是为了缓解这些问题)。

更宽的架构的优势在于推理时更快(有更高的 token/秒 吞吐),因为并行化更好,代价是更高的内存开销。

至于建模表现,遗憾的是我不知道有什么好的同条件对比(参数量和数据集保持不变的那种),只有 Gemma 2 论文里的一项消融实验(Table 9)41,它发现对一个 9B 参数的架构,更宽的配置略好于更深的配置。在 4 项 benchmark 上,更宽的模型取得 52.0 的平均分,更深的模型取得 50.8。

9.2 少而大 vs 多而小的 expert

如上面图 27 所示,还值得注意的是 gpt-oss 的 expert 数量少得出人意料(32 个而不是 128 个),而且每个 token 只用 4 个而不是 8 个激活 expert。不过它每个 expert 都比 Qwen3 里的 expert 大得多。

这很有意思,因为近期的趋势和进展都指向更多、更小的 expert 更有益。在总参数量恒定的前提下,这一变化在下面来自 DeepSeekMoE 论文的图 28 里被很好地展示了出来。

来自「DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models」的配图,带作者标注。三联图从左到右:(a) 常规 Top-2 Routing——标注「早期 MoE:expert 更大更少,只激活少数几个(这里是 2 个)」;(b) 加上细粒度 expert 切分——标注「细粒度 MoE 用更多但更小的 expert,激活更多个(这里是 4 个)」;(c) 加上 shared expert 隔离(DeepSeekMoE)——标注「带 shared expert 的 MoE:同样用许多小 expert,但加了一个始终激活的 shared expert」
来自「DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models」的配图,带作者标注。三联图从左到右:(a) 常规 Top-2 Routing——标注「早期 MoE:expert 更大更少,只激活少数几个(这里是 2 个)」;(b) 加上细粒度 expert 切分——标注「细粒度 MoE 用更多但更小的 expert,激活更多个(这里是 4 个)」;(c) 加上 shared expert 隔离(DeepSeekMoE)——标注「带 shared expert 的 MoE:同样用许多小 expert,但加了一个始终激活的 shared expert」

不过值得注意的是,和 DeepSeek 的模型不同,gpt-oss 和 Qwen3 都没有用 shared expert。

9.3 Attention Bias 与 Attention Sink

gpt-oss 和 Qwen3 都用 grouped query attention。主要区别是,如前所述,gpt-oss 在每隔一层里通过 sliding window attention 限制了上下文尺寸。

不过有一个有意思的细节引起了我的注意。gpt-oss 似乎给 attention 权重用了 bias 项,如下面图 29 所示。

gpt-oss 模型在 attention 层里使用 bias 项。左侧是 <code>GptOssAttention</code> 类的代码截图,<code>q_proj</code>、<code>k_proj</code>、<code>v_proj</code>、<code>o_proj</code> 四个 <code>nn.Linear</code> 都传入了 <code>bias=config.attention_bias</code>(红圈标出),最后一行还有 <code>self.sinks = nn.Parameter(torch.empty(config.num_attention_heads))</code>。右侧是 gpt-oss-120b 的 <code>config.json</code> 截图,第 5 行 <code>&quot;attention_bias&quot;: true</code> 被红圈标出,下面还能看到 <code>experts_per_token: 4</code>、<code>head_dim: 64</code>、<code>hidden_act: &quot;silu&quot;</code>、<code>hidden_size: 2880</code>、<code>initial_context_length: 4096</code>、<code>intermediate_size: 2880</code>
gpt-oss 模型在 attention 层里使用 bias 项。左侧是 <code>GptOssAttention</code> 类的代码截图,<code>q_proj</code>、<code>k_proj</code>、<code>v_proj</code>、<code>o_proj</code> 四个 <code>nn.Linear</code> 都传入了 <code>bias=config.attention_bias</code>(红圈标出),最后一行还有 <code>self.sinks = nn.Parameter(torch.empty(config.num_attention_heads))</code>。右侧是 gpt-oss-120b 的 <code>config.json</code> 截图,第 5 行 <code>&quot;attention_bias&quot;: true</code> 被红圈标出,下面还能看到 <code>experts_per_token: 4</code>、<code>head_dim: 64</code>、<code>hidden_act: &quot;silu&quot;</code>、<code>hidden_size: 2880</code>、<code>initial_context_length: 4096</code>、<code>intermediate_size: 2880</code>

我自 GPT-2 时代以来就没见过这些 bias 项被用了,它们通常被认为是冗余的。事实上,我找到一篇近期的论文42,从数学上证明了至少对 key 变换(k_proj)来说这是成立的。此外,实证结果显示带不带 bias 项差别很小(见下面图 30)。

来自 arXiv 2302.08626 的表格,展示模型从零训练时带与不带 bias 项的平均测试 loss。表格两列是 GPT-2 和 RoBERTa-base,两行是 Original 和 No $b_k$:GPT-2 为 2.9251 对 2.9250,RoBERTa-base 为 5.8890 对 5.8909,下方注明「测试集 loss,越低越好」
来自 arXiv 2302.08626 的表格,展示模型从零训练时带与不带 bias 项的平均测试 loss。表格两列是 GPT-2 和 RoBERTa-base,两行是 Original 和 No $b_k$:GPT-2 为 2.9251 对 2.9250,RoBERTa-base 为 5.8890 对 5.8909,下方注明「测试集 loss,越低越好」

你可能注意到的另一个细节,是图 30 那张代码截图里 sinks 的定义。一般模型里,attention sink 是放在序列开头的特殊「始终被注意」token,用来稳定 attention,这在长上下文场景里特别有用。也就是说,如果上下文变得非常长,开头这个被特别注意的 token 仍然会被注意到,它可以学会存下一些关于整个序列的、普遍有用的信息。(我想它最初是在「Efficient Streaming Language Models with Attention Sinks」论文43里提出的。)

在 gpt-oss 的实现里,attention sink 不是输入序列里真实的 token。相反,它们是学出来的、per-head 的 bias logit,被追加到 attention 分数上(图 31)。目标和上面说的 attention sink 一样,但不用修改 tokenize 后的输入。

gpt-oss 里 attention sink 的用法,基于 Hugging Face 的代码。上半部分是 <code>GptOssAttention</code> 类的 <code>__init__</code>,红圈标出第 243 行 <code>self.sinks = nn.Parameter(torch.empty(config.num_attention_heads))</code>。下半部分是 attention 的前向计算:<code>attn_weights = torch.matmul(query, key_states.transpose(2, 3)) * scaling</code>,加上 causal mask 之后,红圈标出 <code>sinks = module.sinks.reshape(1, -1, 1, 1).expand(query.shape[0], -1, query.shape[-2], -1)</code> 和 <code>combined_logits = torch.cat([attn_weights, sinks], dim=-1)</code> 两行——sink 是直接拼接到 attention logit 上的
gpt-oss 里 attention sink 的用法,基于 Hugging Face 的代码。上半部分是 <code>GptOssAttention</code> 类的 <code>__init__</code>,红圈标出第 243 行 <code>self.sinks = nn.Parameter(torch.empty(config.num_attention_heads))</code>。下半部分是 attention 的前向计算:<code>attn_weights = torch.matmul(query, key_states.transpose(2, 3)) * scaling</code>,加上 causal mask 之后,红圈标出 <code>sinks = module.sinks.reshape(1, -1, 1, 1).expand(query.shape[0], -1, query.shape[-2], -1)</code> 和 <code>combined_logits = torch.cat([attn_weights, sinks], dim=-1)</code> 两行——sink 是直接拼接到 attention logit 上的

关于 gpt-oss 的更多信息,以及它和 GPT-2 的对比,请看我另一篇 gpt-oss 文章40

10 Grok 2.5

这篇文章首次上线几周后,xAI 放出了他们 2,700 亿参数的 Grok 2.5 模型的权重。

我觉得值得把它放在这里,因为 Grok 2.5 是 xAI 去年的旗舰生产模型。在此之前我们讨论的所有模型,都是从一开始就以开源权重形式发布的。举例来说,gpt-oss 大概不是 GPT-4 的开源权重克隆,而是专门为开源社区训练的定制模型。

有了 Grok 2.5,我们难得地看到了一个真实的生产系统,即便它是去年的。

架构上,Grok 2.5 整体看起来相当标准(图 32),但有几个值得注意的细节。

Grok 2.5 与一个尺寸相当的 Qwen3 模型并排。左侧 Grok 2.5(270B):词表 131k、64 层、embedding 维度 8,192、Grouped-query Attention,MoE 之外还并列一个 Dense feed forward(其 SwiGLU 模块 input size 8,192、intermediate projection size 32,768),MoE layer 里 8 个 expert(input expert size 8,192、intermediate projection size 16,384),每 token 只激活 2 个 expert;资源节省一栏写:模型总量 270B,MoE 层每推理步激活 64×0.8B 参数,MoE 加残差 SwiGLU 每步激活 64×1.6B,每个推理步总计估算 62B 参数激活。右侧 Qwen3 235B-A22B:词表 151k、94 层、embedding 维度 4,096,MoE layer 里 128 个 expert(input expert size 4,096、intermediate projection size 1,536),每 token 激活 8 个 expert、每步 22B 激活
Grok 2.5 与一个尺寸相当的 Qwen3 模型并排。左侧 Grok 2.5(270B):词表 131k、64 层、embedding 维度 8,192、Grouped-query Attention,MoE 之外还并列一个 Dense feed forward(其 SwiGLU 模块 input size 8,192、intermediate projection size 32,768),MoE layer 里 8 个 expert(input expert size 8,192、intermediate projection size 16,384),每 token 只激活 2 个 expert;资源节省一栏写:模型总量 270B,MoE 层每推理步激活 64×0.8B 参数,MoE 加残差 SwiGLU 每步激活 64×1.6B,每个推理步总计估算 62B 参数激活。右侧 Qwen3 235B-A22B:词表 151k、94 层、embedding 维度 4,096,MoE layer 里 128 个 expert(input expert size 4,096、intermediate projection size 1,536),每 token 激活 8 个 expert、每步 22B 激活

举例来说,Grok 2.5 用的是少量的大 expert(八个),这反映的是一个更早的趋势。如前面讨论过的,更近期的设计,比如 DeepSeekMoE 论文里的那些,偏好数量更多、尺寸更小的 expert(Qwen3 里也是这样)。

另一个有意思的选择,是使用了实质上相当于 shared expert 的东西。图 32 左侧展示的那个额外的 SwiGLU 模块,起的就是一个常开的 shared expert 的作用。它和经典的 shared expert 设计并不完全相同,因为它的中间维度翻了倍,但想法是一样的。(我还是觉得 Qwen3 省掉 shared expert 这件事很有意思,也很想看到 Qwen4 及以后的模型会不会改变这一点。)

11 GLM-4.5

GLM-4.544 是今年另一个重要发布。

它是一个类似 Qwen3 的 instruction/reasoning 混合模型,但对 function calling 和 agent 式上下文优化得更好。

来自官方 GitHub 仓库的 GLM-4.5 benchmark 图。上方是 12 项 benchmark(MMLU-Pro、AIME 24、MATH-500、SciCode、GPQA、HLE、LCB 2407–2501、SWE-Bench Verified、Terminal-Bench、TAU-Bench、BFCL V3、BrowseComp)的平均分排名:o3 为 65.0、Grok 4 为 63.6、GLM-4.5 为 63.2(蓝柱)、Claude 4 Opus 为 60.9、o4-mini(high)为 60.4、GLM-4.5-Air 为 59.8(绿柱)、Claude 4 Sonnet 为 59.2、Gemini 2.5 Pro 为 58.8、Qwen3-235B-Thinking-2507 为 56.5、DeepSeek-R1-0528 为 55.9、Kimi K2 为 53.1、GPT-4.1 为 48.7、DeepSeek-V3-0524 为 46.3。下方按 Agentic、Reasoning、Coding 三类分别排名,GLM-4.5 在三类里分别为 58.1、68.8、50.9
来自官方 GitHub 仓库的 GLM-4.5 benchmark 图。上方是 12 项 benchmark(MMLU-Pro、AIME 24、MATH-500、SciCode、GPQA、HLE、LCB 2407–2501、SWE-Bench Verified、Terminal-Bench、TAU-Bench、BFCL V3、BrowseComp)的平均分排名:o3 为 65.0、Grok 4 为 63.6、GLM-4.5 为 63.2(蓝柱)、Claude 4 Opus 为 60.9、o4-mini(high)为 60.4、GLM-4.5-Air 为 59.8(绿柱)、Claude 4 Sonnet 为 59.2、Gemini 2.5 Pro 为 58.8、Qwen3-235B-Thinking-2507 为 56.5、DeepSeek-R1-0528 为 55.9、Kimi K2 为 53.1、GPT-4.1 为 48.7、DeepSeek-V3-0524 为 46.3。下方按 Agentic、Reasoning、Coding 三类分别排名,GLM-4.5 在三类里分别为 58.1、68.8、50.9

如图 34 所示,GLM-4.5 有两个变体。旗舰的 3,550 亿参数模型在 12 项 benchmark 上的平均表现超过 Claude 4 Opus,只略微落后于 OpenAI 的 o3 和 xAI 的 Grok 4。还有一个 GLM-4.5-Air,是更紧凑的 1,060 亿参数版本,表现只比 3,550 亿那个略低一点。

图 35 把 3,550 亿那个架构和 Qwen3 做了对比。

译注:这两句里的图号在原文里错位了,上一句说的是刚才那张 benchmark 图(图 33),下一句说的是紧接着的架构图(图 34);图注本身的编号是对的。这篇文章连载增补了九个月,正文里的交叉引用有几处没跟上编号:9.3 节说「图 30 那张代码截图」实际指图 29,第 22 节说「第 19 和 20 节」实际指第 20 和 21 节。本译文照原文译,遇到对不上的按图注编号看即可。

GLM-4.5 与一个尺寸相近的 Qwen3 模型并排。左侧 GLM-4.5(355B):词表 151k、92 层、Grouped-query Attention 并外挂 QKNorm 和 RoPE、embedding 维度 5,120、input expert size 5,120、intermediate projection size 1,536,MoE layer 里 1 到 160 个 expert,每 token 激活 8 个 expert 加 1 个 shared expert、每步 32B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN 而不是 MoE。右侧 Qwen3 235B-A22B:词表 151k、94 层、embedding 维度 4,096、input expert size 4,096、intermediate projection size 1,536,MoE layer 里 128 个 expert、没有 shared expert,每 token 激活 8 个 expert、每步 22B 激活
GLM-4.5 与一个尺寸相近的 Qwen3 模型并排。左侧 GLM-4.5(355B):词表 151k、92 层、Grouped-query Attention 并外挂 QKNorm 和 RoPE、embedding 维度 5,120、input expert size 5,120、intermediate projection size 1,536,MoE layer 里 1 到 160 个 expert,每 token 激活 8 个 expert 加 1 个 shared expert、每步 32B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN 而不是 MoE。右侧 Qwen3 235B-A22B:词表 151k、94 层、embedding 维度 4,096、input expert size 4,096、intermediate projection size 1,536,MoE layer 里 128 个 expert、没有 shared expert,每 token 激活 8 个 expert、每步 22B 激活

两者的设计大体相似,但 GLM-4.5 采用了一个最早由 DeepSeek V3 引入的结构性选择:3 个稠密层排在 Mixture-of-Experts(MoE)block 之前。为什么?因为在大型 MoE 系统里,以若干稠密层开头能改善收敛稳定性和整体表现。如果立刻引入 MoE routing,稀疏 expert 选择的不稳定性会干扰早期的句法和语义特征抽取。所以可以说,保持最初几层是稠密的,确保了模型在 routing 决策开始塑造更高层处理之前,先形成稳定的低层表示。

另外,GLM-4.5 也和 DeepSeek V3 一样用了 shared expert(不像 Qwen3)。

(有意思的是,GLM-4.5 还保留了 GPT-2 和 gpt-oss 里用的 attention bias 机制。)

12 Qwen3-Next

2025 年 9 月 11 日,Qwen3 团队发布了 Qwen3 Next 80B-A3B(图 35),有 Instruct 和 Thinking 两个变体。虽然它的设计建立在前面讨论过的 Qwen3 架构之上,我还是把它作为独立的一节放在这里,一是为了保持图编号的连贯,二是想让大家注意它的一些设计变化。

12.1 expert 的大小与数量

新的 Qwen3 Next 架构之所以突出,是因为尽管它比之前的 235B-A22B 模型小了 3 倍(图 35),它引入了四倍多的 expert,甚至还加了一个 shared expert。这两个设计选择(高 expert 数量、以及纳入 shared expert)都是我在这次发布之前指出过的未来方向,特别是在本文顶部链接的那个视频版本里。

5 月发布的最初 Qwen3 模型(左)与 9 月发布的 Qwen3 Next 模型(右)。左侧 Qwen3 235B-A22B:词表 151k、94 层、Grouped-query Attention、embedding 维度 4,096、input expert size 4,096、intermediate projection size 1,536,MoE layer 里 128 个 expert,每 token 激活 8 个 expert、每步 22B 激活(也就是只有 9.36% 的参数激活)。右侧 Qwen3 Next 80B-A3B:词表 151k、48 层、注意力那格换成绿色的「Gated DeltaNet + Gated Attention Hybrid」、embedding 维度 2048、input expert size 2048、intermediate projection size 512,MoE layer 里 512 个 expert,每 token 激活 10 个 expert 加 1 个 shared expert、每步 3B 激活(也就是只有 3.75% 的参数激活)
5 月发布的最初 Qwen3 模型(左)与 9 月发布的 Qwen3 Next 模型(右)。左侧 Qwen3 235B-A22B:词表 151k、94 层、Grouped-query Attention、embedding 维度 4,096、input expert size 4,096、intermediate projection size 1,536,MoE layer 里 128 个 expert,每 token 激活 8 个 expert、每步 22B 激活(也就是只有 9.36% 的参数激活)。右侧 Qwen3 Next 80B-A3B:词表 151k、48 层、注意力那格换成绿色的「Gated DeltaNet + Gated Attention Hybrid」、embedding 维度 2048、input expert size 2048、intermediate projection size 512,MoE layer 里 512 个 expert,每 token 激活 10 个 expert 加 1 个 shared expert、每步 3B 激活(也就是只有 3.75% 的参数激活)

12.2 Gated DeltaNet + Gated Attention 混合

另一个亮点是,他们把常规注意力机制换成了 Gated DeltaNet 加 Gated Attention 的混合,这在内存占用方面支撑起了原生 262k token 的上下文长度(之前的 235B-A22B 模型原生支持 32k,用 YaRN 缩放支持 131k)。

那么这套新的注意力混合是怎么工作的?相比 grouped-query attention(GQA)——它仍然是标准的 scaled dot-product attention,如前面讨论的那样让 K/V 在 query head 组之间共享以削减 KV cache 尺寸和内存带宽,但它的 decode 成本和 cache 仍随序列长度增长——他们的混合机制把 Gated DeltaNet block 和 Gated Attention block 按 3:1 的比例混起来,如图 36 所示。

Gated DeltaNet 加 Gated Attention 的混合机制。注意它们按 3:1 排列,也就是 3 个用 Gated DeltaNet 的 transformer block 之后跟 1 个用 Gated Attention 的 transformer block。左侧是 Qwen3 Next 80B-A3B 的整体结构(48 层)。中间展开两种 block:$1\times$ 的那组是 Zero-Centered RMSNorm、Gated Attention、Zero-Centered RMSNorm、Mixture of Experts;$3\times$ 的那组是 Zero-Centered RMSNorm、Gated DeltaNet、Zero-Centered RMSNorm、Mixture of Experts。右侧进一步展开内部:上图 Gated Attention 里 q、k 各经 Zero-Centered RMSNorm 和 Partial Rope,与 v 一起进 Scaled Dot Product Attention,输出经一个 Sigmoid 控制的 Output Gate 再过 Linear;下图 Gated DeltaNet 里 q、k 经 Conv 和 L2、v 经 Conv、$\alpha$ 与 $\beta$ 各经 Linear,一起进 Gated Delta Rule,输出经 Zero-Centered RMSNorm 和一个 SiLU 控制的 Output Gate 再过 Linear。右子图来自 Qwen3 官方博客
Gated DeltaNet 加 Gated Attention 的混合机制。注意它们按 3:1 排列,也就是 3 个用 Gated DeltaNet 的 transformer block 之后跟 1 个用 Gated Attention 的 transformer block。左侧是 Qwen3 Next 80B-A3B 的整体结构(48 层)。中间展开两种 block:$1\times$ 的那组是 Zero-Centered RMSNorm、Gated Attention、Zero-Centered RMSNorm、Mixture of Experts;$3\times$ 的那组是 Zero-Centered RMSNorm、Gated DeltaNet、Zero-Centered RMSNorm、Mixture of Experts。右侧进一步展开内部:上图 Gated Attention 里 q、k 各经 Zero-Centered RMSNorm 和 Partial Rope,与 v 一起进 Scaled Dot Product Attention,输出经一个 Sigmoid 控制的 Output Gate 再过 Linear;下图 Gated DeltaNet 里 q、k 经 Conv 和 L2、v 经 Conv、$\alpha$ 与 $\beta$ 各经 Linear,一起进 Gated Delta Rule,输出经 Zero-Centered RMSNorm 和一个 SiLU 控制的 Output Gate 再过 Linear。右子图来自 Qwen3 官方博客

我们可以把 gated attention block 想成是能用在 GQA 里的标准 scaled-dot-product attention,只是在上面加了几处调整。gated attention 和普通 GQA block 的主要差别是:

  1. 一个 output gate(由 sigmoid 控制,通常是 per-channel 的),在 attention 结果被加回残差之前对它做缩放;
  2. QKNorm 用的是 zero-centered RMSNorm,而不是标准的 RMSNorm;
  3. partial RoPE(只作用在一部分维度上)。

注意这些本质上只是对 GQA 的稳定性改动。

Gated DeltaNet 才是更实质的变化(线性注意力:Delta-Net)。在 DeltaNet block 里,q、k、v 和两个 gate(α、β)由线性层和带归一化的轻量卷积层产生,这一层用一个 fast-weight 的 delta rule 更新取代了 attention。

不过代价是,DeltaNet 提供的基于内容的检索没有全注意力那么精确,这就是为什么还保留了一个 gated attention 层。

考虑到 attention 是二次增长的,加入 DeltaNet 组件是为了帮助内存效率。在「线性时间、无 cache」这一族里,DeltaNet block 本质上是 Mamba 的一个替代品。Mamba 用一个学出来的状态空间滤波器(本质上是时间维度上的动态卷积)来维护状态。DeltaNet 维护一小块 fast-weight 记忆,用 α 和 β 来更新它,再用 q 去读它,小卷积只用来帮助形成 q、k、v、α、β。

12.3 Multi-Token Prediction

上面两个小节描述的是两项面向效率的设计决策。既然好事成三,Qwen3 还在上面又加了一项效率技术:Multi-Token Prediction 多 token 预测(MTP,MTP)。

(注意 DeepSeek V3 与 V3.2、以及后来的 GLM-4.5 和 MiniMax-M2 都在训练时用了 MTP;但既然它是一项训练技术,我在架构对比里没有明确讨论它。)

Multi-token prediction 训练 LLM 在每一步预测若干个未来 token,而不是一个。这里,在每个位置 t 上,额外的小 head(线性层)为 t+1…t+k 输出 logit,我们把这些偏移上的交叉熵 loss 加起来(在 MTP 论文45里研究者推荐 k=4)。这个额外的信号加快了训练,而推理时可以仍然一次生成一个 token。不过这些额外的 head 可以被用在 speculative 多 token 解码里(Speculative Decoding:投机解码),Qwen3-Next 似乎就是这么做的,然而细节仍然有点稀少:

Qwen3-Next 引入了原生的 Multi-Token Prediction(MTP)机制,它不仅产出一个在 Speculative Decoding 上具有高接受率的 MTP 模块,还提升了整体表现。此外,Qwen3-Next 专门优化了 MTP 的多步推理表现,通过保持训练与推理一致的多步训练,进一步提高了真实场景下 Speculative Decoding 的接受率。来源:Qwen3-Next 博文46

12.4 Qwen3-Coder-Next

2026 年 2 月初,Qwen3 团队分享了 80B 的 Qwen3-Coder-Next 模型(30 亿激活参数),它因为在编码任务上超过了 DeepSeek V3.2(37B 激活)、Kimi K2.5 和 GLM-7.5(都是 32B 激活)这些大得多的模型而引发了大量关注。

此外,Qwen3-Coder-Next 的 SWE-Bench Pro 表现和 Claude-Sonnet-4.5 大致持平(只略低于 Claude-Opus-4.5),对一个开源权重模型来说这令人印象深刻。

注意 Qwen3-Coder-Next 背后的架构和我们上面讨论的 Qwen3-Next 80B 完全一样(事实上,他们用 Qwen3-Next 作为 base 模型来训练 Qwen3-Coder-Next)。既然本文是讲 LLM 架构的,训练细节超出了范围。不过感兴趣的读者可以在他们发在 GitHub 上的详细技术报告47里找到更多信息。

13 MiniMax-M2

最近,开源权重 LLM 的开发者们分享了他们核心架构的一些面向效率优化的版本。一个例子是 Qwen3-Next(见上一节),它把一部分全注意力 block 换成了快速的 gated DeltaNet 模块。另一个例子是 DeepSeek V3.2,它用了 sparse attention,一种拿一部分建模表现换取更好计算表现的线性注意力变体(我打算在后续文章里更详细地讲这个机制)。

现在,MiniMax-M148 和上面那些模型属于类似的范畴,因为它用了一种线性注意力变体(lightning attention),比常规(全)注意力效率更高。我原本没有涵盖 MiniMax M1,因为它没有这里讨论的其他一些模型那么受欢迎。不过他们新的 MiniMax-M249 发布目前被认为是最好的开源权重模型(按 benchmark 表现算),这让它大到无法忽视。

MiniMax-M2 与其他流行的开源权重和闭源 LLM 的 benchmark 表现对比,图来自官方 model hub 的 readme。八张柱状图分别是 SWE-bench Verified、Multi-SWE-Bench、Terminal-Bench、ArtifactsBench、$\tau^2$-Bench、GAIA(纯文本)、BrowseComp、FinSearchComp-global,每张图里 MiniMax-M2 是红柱,对比 DeepSeek-V3.2、GLM-4.6、Kimi K2 0905、Gemini 2.5 Pro、Claude Sonnet 4.5、GPT-5(thinking)。MiniMax-M2 的成绩依次为 69.4、36.2、46.3、66.8、77.2、75.7、44.0、65.5
MiniMax-M2 与其他流行的开源权重和闭源 LLM 的 benchmark 表现对比,图来自官方 model hub 的 readme。八张柱状图分别是 SWE-bench Verified、Multi-SWE-Bench、Terminal-Bench、ArtifactsBench、$\tau^2$-Bench、GAIA(纯文本)、BrowseComp、FinSearchComp-global,每张图里 MiniMax-M2 是红柱,对比 DeepSeek-V3.2、GLM-4.6、Kimi K2 0905、Gemini 2.5 Pro、Claude Sonnet 4.5、GPT-5(thinking)。MiniMax-M2 的成绩依次为 69.4、36.2、46.3、66.8、77.2、75.7、44.0、65.5

如下面的总览图所示,我把 MiniMax-M2 归到了其他 decoder 式 transformer LLM 一组,因为它没有用 MiniMax-M1 提出的那种高效的 lightning attention 变体。相反,开发者们回到了全注意力,大概是为了提升建模(和 benchmark)表现。

本文涵盖的主要 LLM 的时间线,旁边是一些构成更高效替代方案的注意力混合模型——它们拿一部分建模表现换取更好的效率。上方粉色区域是「Decoder 式 Transformer」一支,从 GPT(2018)虚线延伸到 2024、2025,依次标出 OLMo 2、DeepSeek V3/R1、Gemma 3、Mistral 3.1、Llama 4、Qwen3、SmolLM 3、Kimi K2、gpt-oss、GLM 4.5、DeepSeek V3.1、GLM 4.6,末端加粗的是 MiniMax-M2。下方紫色区域是从主线分叉出去的「注意力混合(2025)」一支,依次标出 MiniMax-M1、Qwen3-Next、DeepSeek V3.2-Exp
本文涵盖的主要 LLM 的时间线,旁边是一些构成更高效替代方案的注意力混合模型——它们拿一部分建模表现换取更好的效率。上方粉色区域是「Decoder 式 Transformer」一支,从 GPT(2018)虚线延伸到 2024、2025,依次标出 OLMo 2、DeepSeek V3/R1、Gemma 3、Mistral 3.1、Llama 4、Qwen3、SmolLM 3、Kimi K2、gpt-oss、GLM 4.5、DeepSeek V3.1、GLM 4.6,末端加粗的是 MiniMax-M2。下方紫色区域是从主线分叉出去的「注意力混合(2025)」一支,依次标出 MiniMax-M1、Qwen3-Next、DeepSeek V3.2-Exp

总体上,MiniMax-M2 和 Qwen3 相似得出人意料。除了改动层数、尺寸等等,它用的整体组件是一样的。

13.1 Per-Layer QK-Norm

这里或许唯一值得一提的亮点是,MiniMax-M2 用了所谓的「per_layer」QK-Norm,而不是常规的 QK-Norm。仔细看代码会发现,它在 attention 机制内部是这样实现的:

1
2
3
self.q_norm = MiniMaxText01RMSNormTP(self.head_dim * self.total_num_heads, eps=...)

self.k_norm = MiniMaxText01RMSNormTP(self.head_dim * self.total_num_kv_heads, eps=...)

这里 hidden_size 等于拼接起来的所有 head(num_heads * head_dim),所以这个 RMSNorm 的 scale 向量对每个 head(以及每个 head 维度)都有各自独立的参数。

所以「per_layer」的意思是,这个 RMSNorm(如前所述用作 QK-Norm)在每个 transformer block 里都有定义(这和常规 QK-Norm 一样),但除此之外,它不是在各个 attention head 之间复用,而是每个 attention head 都有自己独有的 QK-Norm。

模型配置文件里还包含一个滑动窗口注意力的设置(和第 3 节的 Gemma 3 类似),但和第 4 节讨论的 Mistral 3.1 一样,它默认是关掉的。

除了 per-layer QK-Norm,其他方面这个架构和 Qwen3 非常相似,如下图所示。

Qwen3 与 MiniMax-M2 的对比。左侧 Qwen3 235B-A22B:词表 151k、94 层、Grouped-query Attention 外挂 QK-Norm 和 RoPE、embedding 维度 4,096、input expert size 4,096、intermediate projection size 1,536,MoE layer 里 128 个 expert,每 token 激活 8 个 expert、每步 22B 激活(也就是只有 9.36% 的参数激活)。右侧 MiniMax-M2(230B):词表 151k、62 层、Grouped-query Attention 外挂 QK-Norm 和 Partial RoPE、embedding 维度 3072、input expert size 3072、intermediate projection size 1,536,MoE layer 里 256 个 expert,每 token 同样激活 8 个 expert、但每步只有 10B 激活(也就是只有 4.37% 的参数激活)
Qwen3 与 MiniMax-M2 的对比。左侧 Qwen3 235B-A22B:词表 151k、94 层、Grouped-query Attention 外挂 QK-Norm 和 RoPE、embedding 维度 4,096、input expert size 4,096、intermediate projection size 1,536,MoE layer 里 128 个 expert,每 token 激活 8 个 expert、每步 22B 激活(也就是只有 9.36% 的参数激活)。右侧 MiniMax-M2(230B):词表 151k、62 层、Grouped-query Attention 外挂 QK-Norm 和 Partial RoPE、embedding 维度 3072、input expert size 3072、intermediate projection size 1,536,MoE layer 里 256 个 expert,每 token 同样激活 8 个 expert、但每步只有 10B 激活(也就是只有 4.37% 的参数激活)

13.2 MoE 稀疏度

如下图所示的其他有意思的点,还包括他们不用 shared expert(和 Qwen3 一样,但不同于 Qwen3-Next)。如前所述,在我看来 shared expert 是有用的,因为它们减少了其他 expert 之间的冗余。

另外,从上图也能看出,MiniMax-M2 的「稀疏」程度是 Qwen3 的两倍。也就是说,在和 Qwen3 235B-A22B 大致相同的尺寸下,MiniMax-M2 每 token 只有 10B 而不是 22B 的激活 expert(也就是 MiniMax-M2 每个推理步用到 4.37% 的参数,而 Qwen3 用 9.36%)。

13.3 Partial RoPE

最后,和 MiniMax-M1 类似,MiniMax-M2 在 attention 模块内部用「partial」而不是常规 RoPE 来编码位置信息。和常规 RoPE 类似,旋转是在施加 QK-Norm 之后作用于 query 和 key 的。

这里的 partial RoPE 意思是,每个 head 只有前 rotary_dim 个通道拿到旋转位置编码,剩下的 head_dim - rotary_dim 个通道保持不变。

在官方的 M1 README 文件50里,开发者们提到

Rotary Position Embedding(RoPE)作用于 attention head 维度的一半,base 频率为 10,000,000

我们可以这样想象它:

1
2
Full RoPE:     [r r r r r r r r]
Partial RoPE:  [r r r r — — — —]

在上面这个概念性的图示里,「r」表示被旋转(编码了位置)的维度,破折号是未被触碰的维度。

这么做的意义何在?在 M1 论文51里,开发者们说

……在 softmax attention 维度的一半上实现 RoPE,能在不损失表现的前提下做长度外推。

我的推测是,这防止了长序列上「过度」的旋转,尤其是那些比训练数据集里最长文档还要长的序列。也就是说,这里的道理可能是:不旋转,好过一个模型在训练中从没见过的「糟糕」或「过于极端」的旋转。

14 Kimi Linear

最近线性注意力机制出现了一波复兴,用来提升 LLM 的效率(线性注意力 Attention)。

「Attention Is All You Need」论文(2017)里引入的注意力机制,也就是 scaled-dot-product attention,仍然是当今 LLM 里最流行的注意力变体。除了传统的 multi-head attention,它也被用在更高效的那些版本里,比如 grouped-query attention、sliding window attention 和 multi-head latent attention。

14.1 传统注意力与二次代价

最初的注意力机制随序列长度二次增长:

$$\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d}}\right)V$$

这是因为 query(Q)、key(K)和 value(V)都是 nd 的矩阵,其中 d 是 embedding 维度(一个超参数),n 是序列长度(也就是 token 数)。

关于注意力的更多细节可以看我另一篇文章52,也可以看 当计算撞上内存墙:Attention!注意力机制及其优化算法浅析

注意力中由序列长度 $n$ 带来的二次代价示意。底部是 embedding 后的输入 prompt $X$,尺寸 $n \times d$,$n$ 标注为序列长度(token 数),其中 $x^{(2)}$ 是某个 embedding 后的 token。$X$ 经 $W_q$、$W_k$ 分别得到 $Q$ 和 $K$,两者都是 $n \times d$。上方 $QK^\top$ 得到一个 $n \times n$ 的注意力矩阵——图中以「Your journey starts with one step」六个 token 为例,矩阵里是 0.14 到 0.20 之间的权重值——再与 $n \times d$ 的 $V$ 相乘,整体标注为 Scaled-dot-product attention
注意力中由序列长度 $n$ 带来的二次代价示意。底部是 embedding 后的输入 prompt $X$,尺寸 $n \times d$,$n$ 标注为序列长度(token 数),其中 $x^{(2)}$ 是某个 embedding 后的 token。$X$ 经 $W_q$、$W_k$ 分别得到 $Q$ 和 $K$,两者都是 $n \times d$。上方 $QK^\top$ 得到一个 $n \times n$ 的注意力矩阵——图中以「Your journey starts with one step」六个 token 为例,矩阵里是 0.14 到 0.20 之间的权重值——再与 $n \times d$ 的 $V$ 相乘,整体标注为 Scaled-dot-product attention

14.2 线性注意力

线性注意力变体已经存在很久了,我记得在 2020 年代看到过大量论文。举例来说,我记得最早的一篇是 2020 年的「Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention」53,研究者们在那里近似了注意力机制:

$$\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d}}\right)V \approx \phi(Q)\big(\phi(K)^\top V\big)$$

这里 φ(·) 是一个核特征函数,取为 φ(x) = elu(x) + 1。

这个近似之所以高效,是因为它避免了显式计算 $n \times n$ 的注意力矩阵 $QK^T$,也就是不去执行全部的成对 token 交互(那需要 $O(n^2d)$ 的时间和内存)。

我不想在这些更早的尝试上停留太久。但结论是它们把时间和内存复杂度都从 $O(n^2)$ 降到了 $O(n)$,让注意力在长序列上高效得多。

不过它们从来没有真正流行起来,因为它们会让模型精度退化,而且我从没真正见过其中任何一个变体被用在开源权重的 state-of-the-art LLM 上。

14.3 线性注意力的复兴

今年下半年,线性注意力变体出现了一波小小的复兴。第一个值得注意的模型是带 lightning attention 的 MiniMax-M1,一个 4,560 亿参数的 mixture-of-experts(MoE)模型、460 亿激活参数,它在 6 月就出来了。

然后在 8 月,Qwen3 团队跟上了 Qwen3-Next,我在上面更详细地讨论过。接着在 9 月,DeepSeek 团队宣布了 DeepSeek V3.2。这三个模型(MiniMax-M1、Qwen3-Next、DeepSeek V3.2)都在它们大部分或全部层里,把传统的二次注意力变体换成了高效的线性变体。

有意思的是,最近出现了一个转折:MiniMax 团队发布了他们新的 2,300 亿参数 M2 模型(在第 13 节讨论过),没有用线性注意力,回到了常规注意力。团队表示线性注意力在生产 LLM 里很难搞。它在常规 prompt 上看起来还行,但在推理和多轮任务上精度很差,而这些任务不仅对常规聊天会话重要,对 agentic 应用也重要。

这本来可能是一个转折点,说明线性注意力终究不值得追求。但事情变得更有意思了。10 月,Kimi 团队发布了他们新的带线性注意力的 Kimi Linear 模型54

线性注意力混合架构总览。上方粉色区域是「Decoder 式 Transformer」一支,从 GPT(2018)延伸到 2024、2025,依次是 OLMo 2、DeepSeek V3/R1、Gemma 3、Mistral 3.1、Llama 4、Qwen3、SmolLM 3、Kimi K2、gpt-oss、GLM 4.5、DeepSeek V3.1、GLM 4.6、MiniMax-M2。下方紫色区域是从主线分叉出去的「注意力混合(2025)」一支,用深红粗框标出并配「本节」箭头,里面依次是 MiniMax-M1、Qwen3-Next、DeepSeek V3.2-Exp、Kimi Linear
线性注意力混合架构总览。上方粉色区域是「Decoder 式 Transformer」一支,从 GPT(2018)延伸到 2024、2025,依次是 OLMo 2、DeepSeek V3/R1、Gemma 3、Mistral 3.1、Llama 4、Qwen3、SmolLM 3、Kimi K2、gpt-oss、GLM 4.5、DeepSeek V3.1、GLM 4.6、MiniMax-M2。下方紫色区域是从主线分叉出去的「注意力混合(2025)」一支,用深红粗框标出并配「本节」箭头,里面依次是 MiniMax-M1、Qwen3-Next、DeepSeek V3.2-Exp、Kimi Linear

顺带一提:我本可以把 Qwen3-Next 和 Kimi Linear 归到总览图里另一个 transformer–状态空间模型(SSM)混合的框里。就我个人的看法,那些 transformer-SSM 混合是「带 transformer 组件的 SSM」,而这里讨论的这些模型(Qwen3-Next 和 Kimi Linear)是「带 SSM 组件的 transformer」。不过既然我把 IBM Granite 4.0 和 NVIDIA Nemotron Nano 2 列在了 transformer-SSM 那个框里,把它们合成一类也是有理由的。

14.4 Kimi Linear vs. Qwen3-Next

Kimi Linear 和 Qwen3-Next 有若干结构上的相似之处。两个模型都依赖一种混合注意力策略。具体来说,它们把轻量的线性注意力和更重的全注意力层结合起来。具体而言,两者都用 3:1 的比例,意思是每三个采用线性 Gated DeltaNet 变体的 transformer block,就有一个用全注意力,如下图所示。

Qwen3-Next 与 Kimi Linear 并排。左侧 Qwen3 Next 80B-A3B:48 层,注意力那格是「Gated DeltaNet 或 Gated Attention」,Partial RoPE 只作用在 attention 层;右上展开 Gated attention——Q、K 各经 RMSNorm(QKNorm)后与 V 一起进 Scaled dot-product attention,输出经一个 $\sigma$ 门控;右中展开 Gated DeltaNet——Q、K 经 Conv 和 L2 Norm、V 经 Conv、$\alpha$ 与 $\beta$ 经 Linear,一起进 Gated Delta Rule,输出经 RMSNorm 和 $\psi$(SiLU)门控,图例注明 $\sigma$ 是 Sigmoid gate、$\psi$ 是 SiLU gate、$\phi$ 是 Softplus gate;右下列出 3:1 的层排布:Layer 1–3 是 Linear attention → MoE,Layer 4 是 Full attention → MoE,Layer 5–7 再是 Linear attention → MoE,Layer 8 又是 Full attention → MoE。右侧 Kimi Linear 48B-A3B:27 层,注意力那格是「Kimi Delta Attn 或 Multi-head Latent Attn」,且没有 RoPE 那一格;右上展开 Multi-head latent attention——K 经 RMSNorm、V 经一个 Latent 投影,输出带一个 Sigmoid Gate,并注明「Kimi Linear(还)没有用这个门」;右中展开 Kimi Delta Attention——结构与 Gated DeltaNet 类似但输出门是 Sigmoid Gate;右下同样列出 3:1 的层排布
Qwen3-Next 与 Kimi Linear 并排。左侧 Qwen3 Next 80B-A3B:48 层,注意力那格是「Gated DeltaNet 或 Gated Attention」,Partial RoPE 只作用在 attention 层;右上展开 Gated attention——Q、K 各经 RMSNorm(QKNorm)后与 V 一起进 Scaled dot-product attention,输出经一个 $\sigma$ 门控;右中展开 Gated DeltaNet——Q、K 经 Conv 和 L2 Norm、V 经 Conv、$\alpha$ 与 $\beta$ 经 Linear,一起进 Gated Delta Rule,输出经 RMSNorm 和 $\psi$(SiLU)门控,图例注明 $\sigma$ 是 Sigmoid gate、$\psi$ 是 SiLU gate、$\phi$ 是 Softplus gate;右下列出 3:1 的层排布:Layer 1–3 是 Linear attention → MoE,Layer 4 是 Full attention → MoE,Layer 5–7 再是 Linear attention → MoE,Layer 8 又是 Full attention → MoE。右侧 Kimi Linear 48B-A3B:27 层,注意力那格是「Kimi Delta Attn 或 Multi-head Latent Attn」,且没有 RoPE 那一格;右上展开 Multi-head latent attention——K 经 RMSNorm、V 经一个 Latent 投影,输出带一个 Sigmoid Gate,并注明「Kimi Linear(还)没有用这个门」;右中展开 Kimi Delta Attention——结构与 Gated DeltaNet 类似但输出门是 Sigmoid Gate;右下同样列出 3:1 的层排布

Gated DeltaNet 是一种线性注意力变体,灵感部分来自循环神经网络,包括来自「Gated Delta Networks: Improving Mamba2 with Delta Rule」论文55的一个门控机制。某种意义上,Gated DeltaNet 就是带 Mamba 式门控的 DeltaNet,而 DeltaNet 是一种线性注意力机制。由于本文的总览性质,DeltaNet 会是以后单独一篇文章的好题目。

注意上图 Kimi Linear 那一侧省掉 RoPE 那一格是刻意的。Kimi 在 multi-head latent attention(MLA)层(全局注意力)里施加了 NoPE(No Positional Embedding)。如作者们所说,这让 MLA 在推理时能当作纯 multi-query attention 来跑,也避免了为长上下文 scaling 而重新调 RoPE(位置偏置据称由 Kimi Delta Attention block 来处理)。关于 MLA 以及 multi-query attention(它是 grouped-query attention 的一个特例)的更多信息,请看我的 The Big LLM Architecture Comparison 一文1

另外,我在这里更详细地写过 Gated DeltaNet56

14.5 Kimi Delta Attention

Kimi Linear 用 Kimi Delta Attention(KDA)机制修改了 Qwen3-Next 的线性注意力机制,KDA 本质上是 Gated DeltaNet 的一次精化。Qwen3-Next 施加的是一个标量 gate(每个 attention head 一个值)来控制记忆衰减速率,而 Kimi Linear 把它换成了对每个特征维度做 channel-wise 的门控。按作者们的说法,这给了对记忆更多的控制,进而改善了长上下文推理。

此外,对于全注意力层,Kimi Linear 把 Qwen3-Next 的 gated attention 层(本质上是带输出门控的标准 multi-head attention 层)换成了 Multi-Head Latent Attention(MLA)。这就是我们前面在 DeepSeek V3/R1 那节讨论过的同一个 MLA 机制,只是多了一个门。(复述一下,MLA 压缩 key/value 空间来减小 KV cache 尺寸。)

没有和 Qwen3-Next 的直接对比,但相比 Gated DeltaNet 论文里的 Gated DeltaNet-H1 模型(它本质上是 Gated DeltaNet 加滑动窗口注意力),Kimi Linear 在保持相同 token 生成速度的同时取得了更高的建模精度。

来自 Kimi Linear 论文并经作者标注的配图,展示 Kimi Linear 和 GatedDeltaNet 一样快、比带 multi-head latent attention 的架构(比如 DeepSeek V3/R1)快得多,同时 benchmark 表现更高。横轴是解码加速比($1\times$ 到 $4\times$),纵轴是表现。上方圈出的一组是长上下文 benchmark(RULER 128k,蓝色圆点):MLA 为 81.3($1\times$ 附近)、GDN-H 为 80.5($4\times$ 附近)、Kimi Linear 为 84.3($4\times$ 附近且最高)。下方圈出的一组是传统多选题 benchmark(MMLU-Pro 4k,红色星形):MLA 为 47.2、GDN-H 为 47.9、Kimi Linear 为 51.0,三者都在 $1\times$ 附近
来自 Kimi Linear 论文并经作者标注的配图,展示 Kimi Linear 和 GatedDeltaNet 一样快、比带 multi-head latent attention 的架构(比如 DeepSeek V3/R1)快得多,同时 benchmark 表现更高。横轴是解码加速比($1\times$ 到 $4\times$),纵轴是表现。上方圈出的一组是长上下文 benchmark(RULER 128k,蓝色圆点):MLA 为 81.3($1\times$ 附近)、GDN-H 为 80.5($4\times$ 附近)、Kimi Linear 为 84.3($4\times$ 附近且最高)。下方圈出的一组是传统多选题 benchmark(MMLU-Pro 4k,红色星形):MLA 为 47.2、GDN-H 为 47.9、Kimi Linear 为 51.0,三者都在 $1\times$ 附近

此外,根据 DeepSeek-V2 论文里的消融实验,在超参数被仔细选择的情况下,MLA 和常规全注意力是相当的。

而 Kimi Linear 在长上下文和推理 benchmark 上对 MLA 的有利对比,让线性注意力变体对更大的 state-of-the-art 模型再次变得有希望。话虽如此,Kimi Linear 有 480 亿参数,但它比 Kimi K2 小 20 倍。看 Kimi 团队会不会在他们即将到来的 K3 模型上采用这个方案,会很有意思。

15 Olmo 3 Thinking

Allen AI 在 11 月 20 日发布了57他们新的 Olmo 3 7B 和 32B 模型。(官方拼写从 OLMo 改成了 Olmo,所以本节我也跟着改。)

如前所述,Olmo 模型总是很有意思,因为它们是完全开源的。在这里,这意味着团队还分享了详细的训练报告、多个 checkpoint、训练数据的信息等等。换句话说,Olmo 模型是完全透明的。

这一次,Olmo 套件还多了一个推理模型版本(在 base 和 instruct 模型之外),而且 Olmo 3 的技术报告58里有大量关于训练的有意思的细节。不过既然本文是讲架构对比的,本节只关注 Olmo 3 的架构。

最适合拿来和 Olmo 3 对比的模型是 Qwen3,因为 Qwen3 系列有两个尺寸相近的模型,而且 Qwen3 模型的表现也相近。

我们先看两个里较小的那个,Olmo 3 7B。

Olmo 3 7B 与 Qwen3 8B 并排。左侧 Olmo 3 7B:词表 100k、32 层、32 个 attention head 与 32 个 key &amp; value head(也就是常规 multi-head attention)、embedding 维度 4,096、input size 4096、中间投影尺寸 11,008,两个归一化层是 Post-RMSNorm 1 和 Post-RMSNorm 2(Post-Norm),外挂 QKNorm 与「RoPE + YaRN」,注意力那格写「3:1(局部:全局)滑动窗口 multi-head attention」、滑动窗口尺寸 4096,并标注「YaRN 只用于全局层」。右侧 Qwen3 8B:词表 151k、36 层、32 个 attention head 与 8 个 key &amp; value head、embedding 维度 4,096、input size 4,096、中间投影尺寸 $3\times4{,}096 = 12{,}288$,两个归一化层是 Pre-RMSNorm 1 和 Pre-RMSNorm 2(Pre-Norm),外挂 QKNorm 和 RoPE,注意力是 Grouped-query attention
Olmo 3 7B 与 Qwen3 8B 并排。左侧 Olmo 3 7B:词表 100k、32 层、32 个 attention head 与 32 个 key &amp; value head(也就是常规 multi-head attention)、embedding 维度 4,096、input size 4096、中间投影尺寸 11,008,两个归一化层是 Post-RMSNorm 1 和 Post-RMSNorm 2(Post-Norm),外挂 QKNorm 与「RoPE + YaRN」,注意力那格写「3:1(局部:全局)滑动窗口 multi-head attention」、滑动窗口尺寸 4096,并标注「YaRN 只用于全局层」。右侧 Qwen3 8B:词表 151k、36 层、32 个 attention head 与 8 个 key &amp; value head、embedding 维度 4,096、input size 4,096、中间投影尺寸 $3\times4{,}096 = 12{,}288$,两个归一化层是 Pre-RMSNorm 1 和 Pre-RMSNorm 2(Pre-Norm),外挂 QKNorm 和 RoPE,注意力是 Grouped-query attention

可以看到,Olmo 3 的架构和 Qwen3 相对相似。不过值得注意的是,这大概本质上是受它的前代 Olmo 2 启发,而不是受 Qwen3 启发。

和 Olmo 2 类似,Olmo 3 仍然用 post-norm 而不是 pre-norm,因为他们在 Olmo 2 论文里发现这样能稳定训练。

有意思的是,7B 模型仍然和 Olmo 2 一样用 multi-head attention。不过为了更高效、缩小 KV cache 尺寸,他们现在用了 sliding window attention(比如和 Gemma 3 类似)。

接下来我们看 32B 模型。

Olmo 3 32B 与 Qwen3 32B 并排。左侧 Olmo 3 32B:词表 100k、64 层、40 个 attention head 与 8 个 key &amp; value head、embedding 维度 5,120、input size 5,120、中间投影尺寸 27,648,Post-RMSNorm 1 与 Post-RMSNorm 2,外挂 QKNorm 与「RoPE + YaRN」,注意力那格写「3:1(局部:全局)滑动窗口 grouped-query attention」、滑动窗口尺寸 4096,并标注「YaRN 只用于全局层」。右侧 Qwen3 32B:词表 151k、64 层、64 个 attention head 与 8 个 key &amp; value head、embedding 维度 5,120、input size 5,120、中间投影尺寸 $5\times5120 = 25{,}600$,Pre-RMSNorm 1 与 Pre-RMSNorm 2,外挂 QKNorm 和 RoPE,注意力是 Grouped-query attention
Olmo 3 32B 与 Qwen3 32B 并排。左侧 Olmo 3 32B:词表 100k、64 层、40 个 attention head 与 8 个 key &amp; value head、embedding 维度 5,120、input size 5,120、中间投影尺寸 27,648,Post-RMSNorm 1 与 Post-RMSNorm 2,外挂 QKNorm 与「RoPE + YaRN」,注意力那格写「3:1(局部:全局)滑动窗口 grouped-query attention」、滑动窗口尺寸 4096,并标注「YaRN 只用于全局层」。右侧 Qwen3 32B:词表 151k、64 层、64 个 attention head 与 8 个 key &amp; value head、embedding 维度 5,120、input size 5,120、中间投影尺寸 $5\times5120 = 25{,}600$,Pre-RMSNorm 1 与 Pre-RMSNorm 2,外挂 QKNorm 和 RoPE,注意力是 Grouped-query attention

总体上,这是同一套架构,只是放大了。而且各种比例(比如从前馈层的输入尺寸到中间尺寸,等等)也和 Qwen3 里的大致吻合。

我猜这个架构最初因为词表更小而比 Qwen3 略小一些,然后他们把中间尺寸的扩张倍数从 Qwen 3 的 5 倍提到 Olmo 3 的 5.4 倍,以便有一个 32B 模型来做直接对比。

另外注意 32B 模型用的是 grouped query attention。

或许最后一个小细节是,Olmo 3 用 YaRN 做上下文扩展,以支持 64k 的上下文长度,但只在全局(非滑动窗口注意力)层上用。(YaRN 本质上是一种细致的 RoPE 重缩放技术,能在长上下文尺寸下更好地保住模型质量。)

在 Qwen3 里,YaRN 是可选的,用来把原生 32k token 的上下文扩到 131k token。

如果你对更多架构细节感兴趣,我在一个独立的 notebook 里从零实现了 Olmo 359

Olmo 3 从零实现的封面图,标题为「Olmo 3 7B &amp; 32B From Scratch」。上半部分是 Olmo 3 7B 与 Qwen3 8B 的架构并排图(内容同上一张图)。下半部分是「不同模型类型 / 预训练权重」的流程图:Pre-training → Mid-training → Long context(这一步产出 Olmo 3 Base),之后分三条支线——Instruct SFT → Instruct DPO → Instruct RLVR 产出 Olmo 3 Instruct,Thinking SFT → Thinking DPO → Thinking RLVR 产出 Olmo 3 Think,以及从 Long context 直接到 RL Zero RLVR 产出 Olmo 3 RL Zero;底部注明「只有架构是从零实现的,这个 notebook 里模型不是从零训练的,我们加载这些预训练权重」
Olmo 3 从零实现的封面图,标题为「Olmo 3 7B &amp; 32B From Scratch」。上半部分是 Olmo 3 7B 与 Qwen3 8B 的架构并排图(内容同上一张图)。下半部分是「不同模型类型 / 预训练权重」的流程图:Pre-training → Mid-training → Long context(这一步产出 Olmo 3 Base),之后分三条支线——Instruct SFT → Instruct DPO → Instruct RLVR 产出 Olmo 3 Instruct,Thinking SFT → Thinking DPO → Thinking RLVR 产出 Olmo 3 Think,以及从 Long context 直接到 RL Zero RLVR 产出 Olmo 3 RL Zero;底部注明「只有架构是从零实现的,这个 notebook 里模型不是从零训练的,我们加载这些预训练权重」

16 DeepSeek V3.2

这篇文章是以 DeepSeek V3 开头的,它在 2024 年 12 月发布。从那以后 DeepSeek 有过多次发布,但我大体上跳过了它们,因为它们不像 DeepSeek V3 和 DeepSeek R1 那样是重大的旗舰模型发布。

DeepSeek V3 之后的 DeepSeek 模型发布时间线,主要模型以红色标出。依次是:DeepSeek V3(2024 年 12 月 26 日)、DeepSeek R1(2025 年 1 月 20 日)、DeepSeek V3-0324(2025 年 3 月 24 日)、DeepSeek Prover-V1(2025 年 4 月 30 日,黑色)、DeepSeek R1-0528(2025 年 5 月 28 日)、DeepSeek V3.1(2025 年 8 月 21 日)、DeepSeek 3.2-Exp(2025 年 9 月 29 日)、DeepSeek OCR(2025 年 10 月 20 日,黑色)、DeepSeekMath V2(2025 年 11 月 27 日,黑色)、DeepSeek V3.2(2025 年 12 月 1 日)
DeepSeek V3 之后的 DeepSeek 模型发布时间线,主要模型以红色标出。依次是:DeepSeek V3(2024 年 12 月 26 日)、DeepSeek R1(2025 年 1 月 20 日)、DeepSeek V3-0324(2025 年 3 月 24 日)、DeepSeek Prover-V1(2025 年 4 月 30 日,黑色)、DeepSeek R1-0528(2025 年 5 月 28 日)、DeepSeek V3.1(2025 年 8 月 21 日)、DeepSeek 3.2-Exp(2025 年 9 月 29 日)、DeepSeek OCR(2025 年 10 月 20 日,黑色)、DeepSeekMath V2(2025 年 11 月 27 日,黑色)、DeepSeek V3.2(2025 年 12 月 1 日)

不过 DeepSeek V3.2 是一次真正重大的发布,因为它在某些 benchmark 上和当前的 GPT-5.1 及 Gemini 3.0 Pro 模型不分上下。

它的架构整体上和 DeepSeek V3 相似,但他们加了一个 sparse attention 机制来提升效率。

带 multi-head latent attention 和 sparse attention 的 DeepSeek 模型架构。中间是 DeepSeek V3.2 的主体:61 层 block,每层是 RMSNorm 1、「Multi-head Latent Attention(MLA)加 DeepSeek Sparse Attention(DSA)」、RMSNorm 2、MoE。左侧展开 DeepSeek Sparse Attention(DSA):以「The model attends to past tokens」六个 token 为例的掩码矩阵,红框标出「to」这一行——它只有部分之前的位置是 1,下方注明「有了 DSA,当前 token 只能注意到自己和被<em>选中</em>的之前 token」。右侧展开 Multi-Head Latent Attention(MLA):推理步 $t$ 上输入 $x_t$ 经 $W_q$ 得 Query、经 $W_{dkv}$ 得压缩后的 Key 和 Value,再分别经 $W_{uk}$ 和 $W_{uv}$ 还原成 Key 和 Value
带 multi-head latent attention 和 sparse attention 的 DeepSeek 模型架构。中间是 DeepSeek V3.2 的主体:61 层 block,每层是 RMSNorm 1、「Multi-head Latent Attention(MLA)加 DeepSeek Sparse Attention(DSA)」、RMSNorm 2、MoE。左侧展开 DeepSeek Sparse Attention(DSA):以「The model attends to past tokens」六个 token 为例的掩码矩阵,红框标出「to」这一行——它只有部分之前的位置是 1,下方注明「有了 DSA,当前 token 只能注意到自己和被<em>选中</em>的之前 token」。右侧展开 Multi-Head Latent Attention(MLA):推理步 $t$ 上输入 $x_t$ 经 $W_q$ 得 Query、经 $W_{dkv}$ 得压缩后的 Key 和 Value,再分别经 $W_{uk}$ 和 $W_{uv}$ 还原成 Key 和 Value

我原本打算为这篇文章写一个关于 DeepSeek V3.2 的短小章节,但它变成了一篇 5000 词以上的长文,所以我把它移到了一篇独立的文章里60

17 Mistral 3

2025 年 12 月 2 日,也就是 DeepSeek V3.2 发布之后一天,Mistral 团队发布了他们新的 Mistral 3 模型套件61。这包括三个较小的稠密模型(3B、8B 和 14B),以 Ministral 3 为名,以及他们新的旗舰模型 Mistral 3 Large,一个 6,750 亿参数的 MoE(410 亿参数激活)。更具体地说,Mistral 3 Large 模型由以下部分构成:

  • 一个 673B 参数、39B 激活的 MoE 语言模型
  • 一个 2.5B 的视觉 encoder

(既然本文聚焦 LLM 方面,本节我们忽略视觉 encoder。不过我或许该在什么时候更新一下我的多模态 LLM 那篇文章2。)

首先,有意思的是这是 Mistral 自 2023 年 Mixtral 以来的第一个 MoE(本文前面我写过 Mistral 放弃了 MoE,而去年 DeepSeek V3 开启了一波 MoE 复兴)。

发布博文说所有尺寸都有 base、instruct 和 reasoning 变体,这很好。不过他们 6,750 亿那个模型的 reasoning 版本还不可用。

另一个有意思的点是,据他们的公告,Mistral 在这里和 NVIDIA 合作,在 Blackwell 芯片上优化了 token/秒 吞吐。这很好,因为这意味着 Ministral 模型在我那台小 DGX Spark 上会比同类模型跑得快一点(我还得测一下)。

除了 Mistral 3 的 token/秒 速度优势,按质量 benchmark 看,他们较小的那些模型 Ministral 看起来和 Qwen3 相当。较大的旗舰模型和 DeepSeek V3.1 相当。

既然 Mistral 3 的发布就在 DeepSeek V3.2 发布之后一天,他们的文章里没有包含任何 V3.2 的对比(除了 LMArena Elo 分数,那里 DeepSeek V3.2 以 1423 对 1418 略微领先)。

遗憾的是现在没法做同条件对比,因为 Mistral 3 Large 目前没有 reasoning 模型,而 DeepSeek V3.2 又没有分享他们非思考模式的 benchmark 结果。但如果你好奇,我把 DeepSeek V3.2-Thinking 的数字(出自 DeepSeek V3.2 报告62)叠在了 Mistral 3 Large 的 benchmark 图上。

Mistral 3 Large 的 benchmark 图(出自 Mistral 3 公告),上面叠加了 DeepSeek V3.2 的结果(出自 DeepSeek V3.2 论文)。五组 benchmark 分别是 MMMLU(8 语言平均)、GPQA-Diamond(5-shot、no CoT)、SimpleQA(精确匹配)、AMC、LiveCodeBench(no CoT)。每组里橙柱是 Mistral Large 3(675B)、两根灰柱是 Deepseek-3.1(670B)和 Kimi-K2(1.2T):MMMLU 为 85.5 / 84.2 / 83.5,GPQA-Diamond 为 43.9 / 41.9 / 35.6,SimpleQA 为 23.8 / 19.7 / 26.0,AMC 为 52.0 / 46.4 / 54.4,LiveCodeBench 为 34.4 / 35.6 / 40.2。蓝柱是作者叠加的 DeepSeek V3.2-Thinking 1-shot 结果:MMMLU 为 82.4、LiveCodeBench 为 83.3,顶部标注说明「这个对比并不完全公平,因为 Mistral Large 3 报的是他们常规非推理模型的结果(他们的推理模型还不可用)」
Mistral 3 Large 的 benchmark 图(出自 Mistral 3 公告),上面叠加了 DeepSeek V3.2 的结果(出自 DeepSeek V3.2 论文)。五组 benchmark 分别是 MMMLU(8 语言平均)、GPQA-Diamond(5-shot、no CoT)、SimpleQA(精确匹配)、AMC、LiveCodeBench(no CoT)。每组里橙柱是 Mistral Large 3(675B)、两根灰柱是 Deepseek-3.1(670B)和 Kimi-K2(1.2T):MMMLU 为 85.5 / 84.2 / 83.5,GPQA-Diamond 为 43.9 / 41.9 / 35.6,SimpleQA 为 23.8 / 19.7 / 26.0,AMC 为 52.0 / 46.4 / 54.4,LiveCodeBench 为 34.4 / 35.6 / 40.2。蓝柱是作者叠加的 DeepSeek V3.2-Thinking 1-shot 结果:MMMLU 为 82.4、LiveCodeBench 为 83.3,顶部标注说明「这个对比并不完全公平,因为 Mistral Large 3 报的是他们常规非推理模型的结果(他们的推理模型还不可用)」

把 Mistral Large 3 Instruct 模型和 DeepSeek V3.2-Thinking 模型放在一起看(数字出自 DeepSeek V3.2 论文),V3.2-Thinking 模型显然好得多。所以我在等 Mistral 3 Large Thinking 发布,也期待看到更新后的图。

所以现在我会说,得益于那些优化,Mistral 3 Large 是成本效益高、低延迟部署的一个很好的候选。如果你想最大化答案质量,DeepSeek V3.2-Thinking 很好。Mistral 3 Large 的另一个卖点是它还提供多模态支持(DeepSeek V3.2 是纯文本的)。

顺带一提,我在本节里聚焦 DeepSeek V3.2,是因为这两个模型发布得如此接近,前后只差一天。加上它们的尺寸几乎相同,671B 和 673B,这构成了一个有意思的对比!

遗憾的是没有技术报告能提供更多关于这个模型开发过程的信息。不过既然它是开源权重模型,我们确实有 Hugging Face hub 上的模型权重可以分析63。那我们就更仔细地看看 Mistral 3 Large。

结果发现,Mistral 3 Large 和 DeepSeek V3 及 V3.1 是完全相同的架构!唯一的差别是他们把 expert 的尺寸放大了 2 倍,同时把 expert 的数量按同样的倍数减少了。

DeepSeek V3 与 Mistral 3 Large 并排。左侧 DeepSeek V3/R1(6,710 亿):词表 129k、61 层、128 head、MLA、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 256 routed,每 token 激活 1 shared + 8 expert、每步 37B 激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Mistral 3 Large(6,730 亿):词表 131k、61 层、128 head、同样是 MLA、embedding 维度同样是 7,168、expert 中间隐层 4,096(翻倍)、支持上下文 256k token,MoE layer 里 1 shared 加 128 routed(减半),每 token 激活 1 shared + 4 expert、每步 41B 激活,前 3 个 block 用隐层 16,384 的稠密 FFN。图中用灰色粗框标出了词表、上下文长度、expert 中间隐层、expert 数量、激活 expert 数、激活参数量、稠密 FFN 隐层这几处差异
DeepSeek V3 与 Mistral 3 Large 并排。左侧 DeepSeek V3/R1(6,710 亿):词表 129k、61 层、128 head、MLA、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 256 routed,每 token 激活 1 shared + 8 expert、每步 37B 激活,前 3 个 block 用隐层 18,432 的稠密 FFN。右侧 Mistral 3 Large(6,730 亿):词表 131k、61 层、128 head、同样是 MLA、embedding 维度同样是 7,168、expert 中间隐层 4,096(翻倍)、支持上下文 256k token,MoE layer 里 1 shared 加 128 routed(减半),每 token 激活 1 shared + 4 expert、每步 41B 激活,前 3 个 block 用隐层 16,384 的稠密 FFN。图中用灰色粗框标出了词表、上下文长度、expert 中间隐层、expert 数量、激活 expert 数、激活参数量、稠密 FFN 隐层这几处差异

不过,虽然它实际上是同一套架构,Mistral 团队很可能是从零训练 Mistral 3 的,而不是从 DeepSeek V3 初始化再继续训练,因为 Mistral 用的是他们自己的 tokenizer。

继 Kimi K2 之后,Mistral 3 现在是第二个使用 DeepSeek V3 架构的模型系列。不过 Kimi K2 团队是把模型尺寸从 671B 放大到 1 万亿,而 Mistral 3 团队只改了 expert 的尺寸比例,并加了一个视觉 encoder 来做多模态支持。但是,为什么不呢?我觉得 DeepSeek V3 是一个相当扎实的架构设计,加上它还有 MoE 和 MLA 这些不错的效率方面。所以,没坏的东西何必改?如今很多秘诀也在训练 pipeline 以及推理 scaling 策略里。

18 Nemotron 3 Nano 与 Super

本文不是一份现存所有 LLM 的详尽清单。为了保持可管理,我聚焦于主要亮点。这里「亮点」的意思是它们要么非常受欢迎、要么表现非常好、要么有一个有意思的架构组件。

话虽如此,是时候终于把 NVIDIA 的一个模型加进这份清单了。NVIDIA 刚刚在 2025 年 12 月 15 日发布了 Nemotron 系列的最新成员 Nemotron 3。Nemotron 好的地方在于,它不只带来开源权重和技术报告64,NVIDIA 还像 Olmo 3 那样分享了数据集65和训练代码66

据公告文章67,Nemotron 3 有三个尺寸:

  1. Nano(30B-A3B),
  2. Super(100B),(后来这个被更新成 120B,见 18.1 节)
  3. 以及 Ultra(500B)。

18.1 Nemotron 3 Nano

架构上,这些模型是 Mixture-of-Experts(MoE)的 Mamba-Transformer 混合架构。在写这段时(12 月 17 日),只有 Nano 模型作为开源权重模型发布了,所以下面的讨论会聚焦它,如下图所示。

Nemotron 3 Nano 模型的轮廓,它是一个 Transformer-Mamba 混合。左侧是整体结构:Token embedding、52 层、Final RMSNorm、Linear output layer。中间列出层的排布,自下而上是 $5\times$ 的宏块(Mamba-2 / MoE、Mamba-2 / MoE、Mamba-2、Attention、MoE,底部注明「5 个宏块,每个 7 层」)、$3\times$ 的(Mamba-2、MoE)、$1\times$ 的(Mamba-2、Attention、MoE)、$4\times$ 的(Mamba-2、MoE)。右侧展开三种组件:Mamba-2——Linear 之后分两路,一路经 Conv1D 和 SSM state update、另一路经 SiLU Gate,相乘后过 RMSNorm 和 Linear;Grouped-Query Attention(GQA)——2 个 KV head,4 个 q head 每两个共享一套 k、v;MoE layer——Router 从 1 个 shared 加 128 个 routed 中选择,底部注明「每 token(在每个 MoE 层里)只有 1 个 shared 加 6 个 expert 激活」
Nemotron 3 Nano 模型的轮廓,它是一个 Transformer-Mamba 混合。左侧是整体结构:Token embedding、52 层、Final RMSNorm、Linear output layer。中间列出层的排布,自下而上是 $5\times$ 的宏块(Mamba-2 / MoE、Mamba-2 / MoE、Mamba-2、Attention、MoE,底部注明「5 个宏块,每个 7 层」)、$3\times$ 的(Mamba-2、MoE)、$1\times$ 的(Mamba-2、Attention、MoE)、$4\times$ 的(Mamba-2、MoE)。右侧展开三种组件:Mamba-2——Linear 之后分两路,一路经 Conv1D 和 SSM state update、另一路经 SiLU Gate,相乘后过 RMSNorm 和 Linear;Grouped-Query Attention(GQA)——2 个 KV head,4 个 q head 每两个共享一套 k、v;MoE layer——Router 从 1 个 shared 加 128 个 routed 中选择,底部注明「每 token(在每个 MoE 层里)只有 1 个 shared 加 6 个 expert 激活」

如上图所示,Nemotron 3 Nano(30B-A3B)是一个 52 层的 Mamba-Transformer 混合模型,它把 Mamba-2 序列建模 block 和稀疏的 Mixture-of-Experts(MoE)前馈层交错排列,只在一小部分层里使用自注意力。

上图里的信息很多,但简单说,这个架构被组织成 13 个宏块,里面是重复的 Mamba-2 → MoE 子块,再加上少数几个 Grouped-Query Attention 层。总的来说,如果我们把宏块和子块乘起来,这个架构里有 52 层。

至于 MoE 模块,每个 MoE 层包含 128 个 expert,但每个 token 只激活 1 个 shared 和 6 个 routed expert。

Mamba-2 层68本身够写一整篇文章来讲(也许以后再说)。不过现在,从概念上你可以把它们想成类似我上面介绍过的、Qwen3-Next 和 Kimi-Linear 用的 Gated DeltaNet 方案。你也可以在我另一篇 Beyond Standard LLMs 文章69里读到更多。

Gated DeltaNet 和 Mamba-2 层的相似之处在于,两者都用一个门控的状态空间更新取代了标准注意力。这类状态空间式模块背后的想法是:维护一个运行中的隐状态,并通过学出来的门把新输入混进去。与注意力不同,它随输入序列长度线性而不是二次增长。

这个架构真正让人兴奋的地方,是它相比同尺寸的纯 transformer 架构有相当好的表现,同时取得高得多的 token/秒 吞吐。

总体上这是一个有意思的方向,在只用少数几个注意力层这一点上,它比 Qwen3-Next 和 Kimi-Linear 更极端。不过 transformer 架构的强项之一,是它在(真正)大规模下的表现。我很好奇 Nemotron 3 Super、尤其是 Ultra,和 DeepSeek V3.2 之类的模型比起来会怎样。

18.2 Nemotron 3 Super

2026 年 3 月 11 日,NVIDIA 现在也把 120B 的 Super 版本作为开源权重模型70发布到了 Hugging Face Hub 上,同时还有一份不错的、专门讲「Super」的新技术报告71Nemotron 3 Super:LatentMoE、NVFP4 预训练与 agentic 后训练)。

相比 Nano 模型,除了把架构放大,这个架构还有两处主要改动。

首先,Nemotron 3 Super 用了 Multi-Token Prediction(MTP),这是一种训练 LLM 在每一步预测多个未来 token 而不是单个的技术。

MTP 不是只用标准的 next-token 目标来训练模型,它还训练模型从同一个位置预测多个未来 token 偏移。这提供了更丰富的训练信号,而且据 Super 报告,它同时改善了建模质量和推理效率。

Multi-Token Prediction 与常规 next token 预测的对比(左子图受 MTP 论文启发)。最初 MTP 只在训练时使用、推理时不用;因此推理时间步(下方)展示的是单个 next-token 预测。左侧 Multi-Token Prediction(MTP):标注「4-token look-ahead,1 个 next token 加 3 个额外 token(MTP-3)」,Shared Model 之上有 Head 1 到 Head 4,输入 1、2、3、4 对应目标 2、3、4、5,而灰色淡出的额外目标标注为「推理时丢弃(只用于训练)」;下方推理时间步只有「Head 1(只出 next token)」。右侧常规 next-token 预测:标注「1 token look-ahead(next token 之外没有额外 token)」,Shared Model 之上只有 Head 1;下方推理时间步同样只有 Head 1
Multi-Token Prediction 与常规 next token 预测的对比(左子图受 MTP 论文启发)。最初 MTP 只在训练时使用、推理时不用;因此推理时间步(下方)展示的是单个 next-token 预测。左侧 Multi-Token Prediction(MTP):标注「4-token look-ahead,1 个 next token 加 3 个额外 token(MTP-3)」,Shared Model 之上有 Head 1 到 Head 4,输入 1、2、3、4 对应目标 2、3、4、5,而灰色淡出的额外目标标注为「推理时丢弃(只用于训练)」;下方推理时间步只有「Head 1(只出 next token)」。右侧常规 next-token 预测:标注「1 token look-ahead(next token 之外没有额外 token)」,Shared Model 之上只有 Head 1;下方推理时间步同样只有 Head 1

和 MTP 的标准用法(也就是我在上面图 51.2 里画的那种)的一个关键差别是,Nemotron 3 Super 不是只在训练时用它。

Nemotron 3 Super 明确在推理时也用 MTP,那个共享权重的 MTP head 充当内部的 draft 模型,用于原生的 speculative decoding。生成过程中,模型可以先提出候选续写,再用主模型去验证。这在不需要一个独立的外部 draft 模型的前提下降低了推理延迟。

既然这不太算标准的 MTP,把 Nemotron 3 Super 描述成「用共享权重 MTP 做 speculative decoding」,或许比像其他架构那样叫它「MTP-3」更准确(比如我在这里72写过的 Step 3.5 Flash,另见 Step 3.5 Flash 技术报告全文)。

相比 Nano 的第二处主要差别是,Super 架构用了 latent expert,意思是那些 expert 在潜空间里工作(MoE 层的输入先从 4096 维下投影到 1024 维,施加 expert,然后输出再从 1024 维上投影回 4096 维)。

Nemotron 3 Super 120B-A12B,带 latent MoE 层、multi-token prediction 和 Mamba-2 混合注意力方案。左侧整体结构标注「现在带 multi-token prediction(MTP)」、88 层,并注明这是一个 88 层的混合栈:40 个 Mamba-2、40 个 LatentMoE、8 个 Attention。中间列出层的排布,自下而上是 $3\times$(Mamba-2、Latent MoE)、$3\times$(Mamba-2、Attention、Latent MoE)、$4\times$(Mamba-2、Latent MoE)、$4\times$(Mamba-2、Attention、Latent MoE)、$3\times$(Mamba-2、Latent MoE)、$1\times$(Mamba-2、Attention、Latent MoE)、$4\times$(Mamba-2、Latent MoE),并注明「每 token 只有 top-22 个 routed expert 激活、总共 512 个 expert、latent 尺寸 1024」。右侧展开 Latent MoE layer 的五步:Step 1 Router 选出 top-22 个 expert,Step 2 输入从 4096 下投影到 1024,Step 3 把 latent 输入过那些 expert,Step 4 合并,Step 5 从 1024 上投影回 4096,再与 Shared expert 的输出合成 Combined output。另外还展开了 Mamba-2 和 Grouped-query Attention(GQA,16 个 q head 共享一套 k、v)两个模块
Nemotron 3 Super 120B-A12B,带 latent MoE 层、multi-token prediction 和 Mamba-2 混合注意力方案。左侧整体结构标注「现在带 multi-token prediction(MTP)」、88 层,并注明这是一个 88 层的混合栈:40 个 Mamba-2、40 个 LatentMoE、8 个 Attention。中间列出层的排布,自下而上是 $3\times$(Mamba-2、Latent MoE)、$3\times$(Mamba-2、Attention、Latent MoE)、$4\times$(Mamba-2、Latent MoE)、$4\times$(Mamba-2、Attention、Latent MoE)、$3\times$(Mamba-2、Latent MoE)、$1\times$(Mamba-2、Attention、Latent MoE)、$4\times$(Mamba-2、Latent MoE),并注明「每 token 只有 top-22 个 routed expert 激活、总共 512 个 expert、latent 尺寸 1024」。右侧展开 Latent MoE layer 的五步:Step 1 Router 选出 top-22 个 expert,Step 2 输入从 4096 下投影到 1024,Step 3 把 latent 输入过那些 expert,Step 4 合并,Step 5 从 1024 上投影回 4096,再与 Shared expert 的输出合成 Combined output。另外还展开了 Mamba-2 和 Grouped-query Attention(GQA,16 个 q head 共享一套 k、v)两个模块

benchmark 方面,Nemotron 3 Super 和 Qwen3.5 122B-A10B 及 GPT-OSS 120B 相当,但吞吐——得益于前面说的那些「技巧」(MTP、latent MoE 和混合注意力)——很棒:比 Qwen3.5 122B-A10B 快 2 倍,而(就 NVFP4 版本而言)比 GPT-OSS 120B 快 2.2 倍。

来自 Hugging Face Hub 页面的 Nemotron 3 Super benchmark 对比。左侧「Accuracy」区域按 IFBench(指令跟随)、HMMT Feb25(数学)、SWE-Bench(编码)、HLE(科学)、Term. Bench Hard(终端使用)、Tau Bench v2(工具使用)、RULER @ 1M(长上下文)七项对比四个模型:Nemotron-3-Super-120B-A12B-BF16、Nemotron-3-Super-120B-A12B-NVFP4、GPT-OSS-120B-A5B-MXFP4、Qwen3.5-122B-A10B-BF16。Nemotron 在 SWE-Bench 上为 60.5(GPT-OSS 为 41.9)、在 RULER @ 1M 上为 91.8(GPT-OSS 为 22.3、Qwen3.5 为 91.3)。右侧「Throughput」区域是 ISL/OSL 8k/64k 下的相对吞吐:Nemotron BF16 为 0.6、Nemotron NVFP4 为 2.2、GPT-OSS 为 1.0、Qwen3.5 为 0.3,两条标注分别写「Nemotron 3 在 NVFP4 精度下比 GPT-OSS 快 2.2 倍」和「Nemotron 3 在 bf16 精度下比 Qwen3.5 快 2 倍」
来自 Hugging Face Hub 页面的 Nemotron 3 Super benchmark 对比。左侧「Accuracy」区域按 IFBench(指令跟随)、HMMT Feb25(数学)、SWE-Bench(编码)、HLE(科学)、Term. Bench Hard(终端使用)、Tau Bench v2(工具使用)、RULER @ 1M(长上下文)七项对比四个模型:Nemotron-3-Super-120B-A12B-BF16、Nemotron-3-Super-120B-A12B-NVFP4、GPT-OSS-120B-A5B-MXFP4、Qwen3.5-122B-A10B-BF16。Nemotron 在 SWE-Bench 上为 60.5(GPT-OSS 为 41.9)、在 RULER @ 1M 上为 91.8(GPT-OSS 为 22.3、Qwen3.5 为 91.3)。右侧「Throughput」区域是 ISL/OSL 8k/64k 下的相对吞吐:Nemotron BF16 为 0.6、Nemotron NVFP4 为 2.2、GPT-OSS 为 1.0、Qwen3.5 为 0.3,两条标注分别写「Nemotron 3 在 NVFP4 精度下比 GPT-OSS 快 2.2 倍」和「Nemotron 3 在 bf16 精度下比 Qwen3.5 快 2 倍」

19 Xiaomi MiMo-V2-Flash

2025 年 12 月还有另一个令人印象深刻的成员。小米发布了他们最新的 Xiaomi MiMo-V2-Flash,benchmark 表现令人印象深刻地追平了 DeepSeek V3.2,而参数只有一半、推理还更快。它是一个 3,090 亿参数的 Mixture-of-Experts(MoE)模型,每 token 激活 150 亿参数(MiMo-V2-Flash 技术报告全文)。

有意思的是,它用 sliding window attention(SWA)与全局(常规)注意力按 5:1 的比例配合,和 Gemma 3 类似(见第 3 节)。不过它用了激进得多的滑动窗口尺寸(128),比 Gemma 3(1024)小 8 倍。

Xiaomi MiMo-V2-Flash 与 benchmark 表现相近的 DeepSeek V3.2 对比。左侧 Xiaomi MiMo-V2-Flash(309B):词表 152k、61 层、64 head、注意力那格是「Grouped Query Attention(GQA)加 5:1 比例的 Sliding window attention(SWA)」、embedding 维度 4,096、expert 中间隐层 2,048、支持上下文 256k token,MoE layer 里 1 shared 加 256 routed,每 token 激活 1 shared + 8 expert、每步 15B 激活,只有第 1 个 block 用隐层 16,384 的稠密 FFN。右侧 DeepSeek V3.2(671B):词表 129k、61 层、128 head、注意力那格是「Multi-head Latent Attention(MLA)加 DeepSeek Sparse Attention(DSA)」、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 256 routed,每 token 同样激活 1 shared + 8 expert、每步 37B 激活,前 3 个 block 用隐层 18,432 的稠密 FFN
Xiaomi MiMo-V2-Flash 与 benchmark 表现相近的 DeepSeek V3.2 对比。左侧 Xiaomi MiMo-V2-Flash(309B):词表 152k、61 层、64 head、注意力那格是「Grouped Query Attention(GQA)加 5:1 比例的 Sliding window attention(SWA)」、embedding 维度 4,096、expert 中间隐层 2,048、支持上下文 256k token,MoE layer 里 1 shared 加 256 routed,每 token 激活 1 shared + 8 expert、每步 15B 激活,只有第 1 个 block 用隐层 16,384 的稠密 FFN。右侧 DeepSeek V3.2(671B):词表 129k、61 层、128 head、注意力那格是「Multi-head Latent Attention(MLA)加 DeepSeek Sparse Attention(DSA)」、embedding 维度 7,168、expert 中间隐层 2,048、支持上下文 128k token,MoE layer 里 1 shared 加 256 routed,每 token 同样激活 1 shared + 8 expert、每步 37B 激活,前 3 个 block 用隐层 18,432 的稠密 FFN

据我所知,这是迄今为止最大的滑动窗口注意力模型。

此外,小米这个模型还用了 multi-token prediction(MTP),如前面 12.3 节所述。

20 Arcee AI Trinity Large

距离上一次加入新的 LLM 架构已经有一段时间了。1 月 27 日,Arcee AI(一家在那之前还没进我视野的公司)开始在 model hub 上陆续发布他们 4,000 亿参数的开源权重 Trinity Large LLM73,还有两个更小的变体。

他们的旗舰大模型是一个 4,000 亿参数的 MoE(130 亿激活参数)。两个更小的变体是 Trinity Mini(260 亿参数、30 亿激活)和 Trinity Nano(60 亿参数、10 亿激活)。

Trinity Large 架构总览(基于 model hub 的配置文件)。Arcee AI Trinity Large(400B):词表 200k、60 层、48 head、embedding 维度 3,072、expert 中间隐层 3,072、支持上下文 256k token。每个 block 里有四个归一化层——Pre-RMSNorm、注意力、Post-RMSNorm,然后 Pre-RMSNorm、MoE、Post-RMSNorm;注意力那格写「Grouped Query Attention(GQA)加 3:1 比例的 Sliding Window Attention(SWA)」,外挂三样东西:QKNorm、「RoPE + NoPE」、Gated attention。MoE layer 里 1 shared 加 256 routed;资源节省一栏写:模型总量 400B,每 token 只有 1 个 shared 加 4 个 expert 激活,每推理步只有 13B 参数激活。前 6 个 block 用隐层 12,288 的稠密 FFN 而不是 MoE
Trinity Large 架构总览(基于 model hub 的配置文件)。Arcee AI Trinity Large(400B):词表 200k、60 层、48 head、embedding 维度 3,072、expert 中间隐层 3,072、支持上下文 256k token。每个 block 里有四个归一化层——Pre-RMSNorm、注意力、Post-RMSNorm,然后 Pre-RMSNorm、MoE、Post-RMSNorm;注意力那格写「Grouped Query Attention(GQA)加 3:1 比例的 Sliding Window Attention(SWA)」,外挂三样东西:QKNorm、「RoPE + NoPE」、Gated attention。MoE layer 里 1 shared 加 256 routed;资源节省一栏写:模型总量 400B,每 token 只有 1 个 shared 加 4 个 expert 激活,每推理步只有 13B 参数激活。前 6 个 block 用隐层 12,288 的稠密 FFN 而不是 MoE

除了模型权重,Arcee AI 还发布了一份细节丰富的技术报告74

那我们就更仔细地看看这个 4,000 亿的旗舰模型。下图把它和前面讨论过的 GLM 4.5(第 11 节)做了对比,后者大概是最相似的、尺寸也相对接近。另外,Trinity 技术报告显示 Trinity Large 和 GLM-4.5 的 base 模型建模表现实际上一模一样(我猜他们没有和更近期的 base 模型对比,是因为如今很多公司只公开他们微调后的模型)。

Arcee AI Trinity Large 与尺寸相对接近的 GLM 4.5 并排(400B 对 355B)。左侧 Trinity Large:词表 200k、60 层、48 head、embedding 维度 3,072、expert 中间隐层 3,072、支持上下文 256k token,四个 RMSNorm 的 sandwich 排布,外挂 QKNorm、「RoPE + NoPE」和 Gated attention,注意力是 GQA 加 3:1 的 SWA,MoE layer 里 1 shared 加 256 routed、每 token 激活 1 shared + 4 expert、每步 13B 激活,前 6 个 block 用隐层 12,288 的稠密 FFN。右侧 GLM-4.5(355B):词表 151k、92 层、embedding 维度 5,120、input expert size 5,120、中间投影尺寸 1,536,只有 RMSNorm 1 和 RMSNorm 2 两个归一化层,外挂 QKNorm 和 RoPE,注意力是 Grouped-query Attention,MoE layer 里 1 shared 加 160 routed、每 token 激活 8 个 expert 加 1 个 shared expert、每步 32B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN
Arcee AI Trinity Large 与尺寸相对接近的 GLM 4.5 并排(400B 对 355B)。左侧 Trinity Large:词表 200k、60 层、48 head、embedding 维度 3,072、expert 中间隐层 3,072、支持上下文 256k token,四个 RMSNorm 的 sandwich 排布,外挂 QKNorm、「RoPE + NoPE」和 Gated attention,注意力是 GQA 加 3:1 的 SWA,MoE layer 里 1 shared 加 256 routed、每 token 激活 1 shared + 4 expert、每步 13B 激活,前 6 个 block 用隐层 12,288 的稠密 FFN。右侧 GLM-4.5(355B):词表 151k、92 层、embedding 维度 5,120、input expert size 5,120、中间投影尺寸 1,536,只有 RMSNorm 1 和 RMSNorm 2 两个归一化层,外挂 QKNorm 和 RoPE,注意力是 Grouped-query Attention,MoE layer 里 1 shared 加 160 routed、每 token 激活 8 个 expert 加 1 个 shared expert、每步 32B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN

但可以看到,Trinity 模型加了好几个有意思的架构组件。

首先,是像前面 Gemma 3、Olmo 3、Xiaomi MiMo 等等那样交替的局部:全局(滑动窗口)注意力层。但他们没有用 Gemma 3 和小米那种常见的 5:1 比例,而是选了和 Olmo 3 类似的 3:1,以及一个相对大的 4096 滑动窗口尺寸(同样和 Olmo 3 类似)。

在 QK-Norm(第 2 节 OLMo 2 里讲过)之外,他们还在全局层里用了 NoPE(NoPE 在第 7 节 SmolLM3 里讨论过)。

他们也有一种形式的 gated attention。他们没有完整的 GatedDeltaNet(第 12 节讨论过),但用了和 Qwen3-Next 注意力机制里类似的门控。

不过他们修改了标准注意力,在 scaled dot-product 之后、输出线性投影之前加了 elementwise 门控(如下图所示),这减少了 attention sink,也改善了长序列泛化。此外,它还有助于训练稳定性。

Trinity Large 在注意力机制里使用的门控机制示意,是一段名为 <code>attn_trinity</code> 的代码:先由 <code>Wq</code>、<code>Wk</code>、<code>Wv</code> 投影出 <code>q</code>、<code>k</code>、<code>v</code> 并按 head 重排,接着 <code>q = rmsnorm(q)</code>、<code>k = rmsnorm(k)</code>(注释标为 QK-Norm),然后 <code>o = sdpa(q, k, v)</code> 做标准的 scaled dot product attention。关键在标为「Gating」的那一段:<code>g = torch.sigmoid(x @ Wg.T).view(B, T, h, dh).transpose(1, 2)</code>,接着 <code>o = o * g</code>,注释写「elementwise 门控,在 attention <em>之后</em>、在 <code>Wo</code> 输出投影之前」,最后 <code>return (o.transpose(1, 2).reshape(B, T, D)) @ Wo.T</code>
Trinity Large 在注意力机制里使用的门控机制示意,是一段名为 <code>attn_trinity</code> 的代码:先由 <code>Wq</code>、<code>Wk</code>、<code>Wv</code> 投影出 <code>q</code>、<code>k</code>、<code>v</code> 并按 head 重排,接着 <code>q = rmsnorm(q)</code>、<code>k = rmsnorm(k)</code>(注释标为 QK-Norm),然后 <code>o = sdpa(q, k, v)</code> 做标准的 scaled dot product attention。关键在标为「Gating」的那一段:<code>g = torch.sigmoid(x @ Wg.T).view(B, T, h, dh).transpose(1, 2)</code>,接着 <code>o = o * g</code>,注释写「elementwise 门控,在 attention <em>之后</em>、在 <code>Wo</code> 输出投影之前」,最后 <code>return (o.transpose(1, 2).reshape(B, T, D)) @ Wo.T</code>

你可能注意到了前面那张 Trinity Large 架构图里用了四个(而不是两个)RMSNorm 层。这就是他们所谓的 depth-scaled sandwich norm,它基于此前的工作,但我在主流架构里还没见过。总体上它看起来像 Gemma 3 那种 RMSNorm 位置安排,但这里的花招在于,(每个 block 里)第二个 RMSNorm 的 gain 是按深度缩放的,也就是被初始化成大约 1 / sqrt(L)(L 是总层数)。所以训练早期,残差更新从很小开始,随着模型学到正确的尺度而增长。

MoE 是 DeepSeek 式的、带大量小 expert 的 MoE,但他们把它做得更粗了,因为那样有助于推理吞吐(我们在 Mistral 3 Large 采用 DeepSeek V3 架构时也见过这一点)。

最后,训练改进方面还有一些有意思的细节(一种新的 MoE 负载均衡策略,另一个是用 MuOpt 优化器),但既然这是一篇讲架构的文章,这些超出了范围。

21 GLM-5

中国春节已经变成了一个出人意料地可靠的强力开源权重发布窗口。举例来说,GLM-4 和 Qwen 1.5 是 2024 年 1 月和 2 月发布的,DeepSeek R1 和 Qwen 2.5 是 2025 年发布的。

今年,z.AI(智谱 AI)又一次(同样相对早地)以 2026 年 2 月 11 日的 GLM-5 打响了头炮,大约在 2 月 17 日农历新年前一周(GLM-5:从 vibe coding 到 agentic engineering)。

相比我在本文前面讲过的 GLM-4.5(见第 11 节,2025 年夏发布),它的后继者 GLM-5 尺寸翻了倍:从 3,550 亿参数涨到 7,440 亿,把它推进了 DeepSeek-V3.2 和 Kimi K2 之间的区间。

和 GLM-4.5 类似,GLM-5 是一个 Mixture-of-Experts(1.2 节)模型,而每 token 的激活参数只略有增加:GLM-5 是 400 亿,GLM-4.5 是 320 亿。

GLM-5 与 GLM-4.5 的架构并排。左侧 GLM-5(744B,2026 年 2 月):词表 155k、78 层、注意力那格是「Multi-head Latent Attention(MLA)加 DeepSeek Sparse Attention(DSA)」、只外挂 RoPE、embedding 维度 6,144、input expert size 6,144、中间投影尺寸 2,048,MoE layer 里 1 shared 加 256 routed,每 token 激活 8 个 expert 加 1 个 shared expert、每步 40B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN。右侧 GLM-4.5(355B,2025 年 7 月):词表 151k、92 层、注意力是 Grouped-query Attention 并外挂 QKNorm 和 RoPE、embedding 维度 5,120、input expert size 5,120、中间投影尺寸 1,536,MoE layer 里 1 shared 加 160 routed,每 token 同样激活 8 个 expert 加 1 个 shared expert、每步 32B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN
GLM-5 与 GLM-4.5 的架构并排。左侧 GLM-5(744B,2026 年 2 月):词表 155k、78 层、注意力那格是「Multi-head Latent Attention(MLA)加 DeepSeek Sparse Attention(DSA)」、只外挂 RoPE、embedding 维度 6,144、input expert size 6,144、中间投影尺寸 2,048,MoE layer 里 1 shared 加 256 routed,每 token 激活 8 个 expert 加 1 个 shared expert、每步 40B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN。右侧 GLM-4.5(355B,2025 年 7 月):词表 151k、92 层、注意力是 Grouped-query Attention 并外挂 QKNorm 和 RoPE、embedding 维度 5,120、input expert size 5,120、中间投影尺寸 1,536,MoE layer 里 1 shared 加 160 routed,每 token 同样激活 8 个 expert 加 1 个 shared expert、每步 32B 激活,前 3 个 block 用隐层 12,288 的稠密 FFN

有意思的是,如上面图 56 所示,GLM-5 采用了 DeepSeek 的 multi-head latent attention(MLA,见 1.1 节)以及 DeepSeek Sparse Attention(我在我那篇 DeepSeek V3.2 文章60里更详细地讲过)。这些改动的动机是降低处理长上下文时的推理成本。

除此之外,架构相对相似。尺寸增加主要来自更多的 expert(256 个而不是 160 个)和略微加大的层尺寸。举例来说,embedding 维度和 expert 尺寸现在是 6,144(从 5,120 涨上来),中间投影尺寸也从 1,536 略涨到 2,048。有意思的是,层数(transformer block 数)从 92 减到了 78。我猜这是为了降低推理成本、让模型更快(因为层深度没法并行化)。

我通常不在这里放 benchmark,因为本文聚焦架构。如果要把训练细节和评测都放进来,这篇文章的范围和长度会彻底失控。话虽如此,我看到自己在 2025 年 7 月放过 GLM-4.5 的 benchmark,那我在这里也再破例一次,因为这些 benchmark 看起来真的令人印象深刻,和所有主要旗舰 LLM 产品(GPT-5.2 extra-high、Gemini Pro 3、Claude 4.6 Opus)不分上下。但同样值得强调的是,benchmark 表现不一定等于真实世界表现。

GLM 架构与 benchmark 并排。上半部分是 GLM-4.7(355B,2025 年 12 月)与 GLM-5(744B,2026 年 2 月)的架构对比——GLM-4.7 的架构与 GLM-4.5 类似:92 层、Grouped-query Attention 加 QKNorm、embedding 维度 5,120、160 个 routed expert、每步 32B 激活;GLM-5 是 78 层、MLA 加 DeepSeek Sparse Attention(DSA)、embedding 维度 6,144、256 个 routed expert、每步 40B 激活。下半部分是八组 benchmark 柱状图,对比 GLM-4.7(绿)、GLM-5(蓝)、Claude Opus 4.5、Gemini 3 Pro、GPT-5.2(xhigh):Humanity&rsquo;s Last Exam 上 GLM-5 带工具为 50.4、不带为 30.5;SWE-bench Verified 为 77.8(GLM-4.7 为 73.8、Claude Opus 4.5 为 80.9);SWE-bench Multilingual 为 73.3;Terminal-Bench 2.0 为 56.2;BrowseComp 为 75.9;MCP-Atlas 为 67.8;$\tau^2$-Bench 为 89.7;Vending Bench 2 为 4,432 美元。benchmark 取自 GLM-5 的发布博文<sup id="fnref:75"><a href="#fn:75" class="footnote-ref" role="doc-noteref">75</a></sup>
GLM 架构与 benchmark 并排。上半部分是 GLM-4.7(355B,2025 年 12 月)与 GLM-5(744B,2026 年 2 月)的架构对比——GLM-4.7 的架构与 GLM-4.5 类似:92 层、Grouped-query Attention 加 QKNorm、embedding 维度 5,120、160 个 routed expert、每步 32B 激活;GLM-5 是 78 层、MLA 加 DeepSeek Sparse Attention(DSA)、embedding 维度 6,144、256 个 routed expert、每步 40B 激活。下半部分是八组 benchmark 柱状图,对比 GLM-4.7(绿)、GLM-5(蓝)、Claude Opus 4.5、Gemini 3 Pro、GPT-5.2(xhigh):Humanity&rsquo;s Last Exam 上 GLM-5 带工具为 50.4、不带为 30.5;SWE-bench Verified 为 77.8(GLM-4.7 为 73.8、Claude Opus 4.5 为 80.9);SWE-bench Multilingual 为 73.3;Terminal-Bench 2.0 为 56.2;BrowseComp 为 75.9;MCP-Atlas 为 67.8;$\tau^2$-Bench 为 89.7;Vending Bench 2 为 4,432 美元。benchmark 取自 GLM-5 的发布博文<sup id="fnref:75"><a href="#fn:75" class="footnote-ref" role="doc-noteref">75</a></sup>

22 2026 年 2 月的更多发布:从 Kimi K2.5 到 Tiny Aya

2026 年 1 月到 2 月之间,总共有 10 个有意思的开源权重 LLM 发布:

  1. Arcee AI 的 Trinity Large(2026 年 1 月 27 日)
  2. Moonshot AI 的 Kimi K2.5(2026 年 1 月 27 日)
  3. StepFun Step 3.5 Flash(2026 年 2 月 1 日)
  4. Qwen3-Coder-Next(2026 年 2 月 3 日)
  5. z.AI 的 GLM-5(2026 年 2 月 12 日)
  6. MiniMax M2.5(2026 年 2 月 12 日)
  7. Nanbeige 4.1 3B(2026 年 2 月 13 日)
  8. Qwen 3.5(2026 年 2 月 15 日)
  9. 蚂蚁集团的 Ling 2.5 1T 与 Ring 2.5 1T(2026 年 2 月 16 日)
  10. Cohere 的 Tiny Aya(2026 年 2 月 17 日)
  11. Sarvam 30B 与 105B(2026 年 3 月 6 日)

我在上面第 19 和 20 节涵盖了 Arcee AI 的 Trinity Large 和 z.AI 的 GLM-5。不过既然 1 月到 2 月这段时间要讲的内容很多,我为上面列出的这 10 个架构单独写了一篇文章,信息更全72

23 Gemma 4

3 月 Nemotron 3 Super 发布之后,这个月剩下的时间在旗舰开源权重模型发布上相对平静。虽然我还在等 DeepSeek-V4,4 月至少给我们带来了 Google 的 Gemma 4。

架构上,Gemma 4(31B)和 Gemma 3(27B)相比几乎没变,如下图所示。

Gemma 3(27B)与 Gemma 4(31B)并排。左侧 Gemma 3 27B:词表 262k、62 层、embedding 维度 5,376、FFN 输入维度 5,376、中间维度 21,504(GELU 激活)、支持上下文 128k token,四个归一化层 Pre-RMSNorm 1 / Post-RMSNorm 1 / Pre-RMSNorm 2 / Post-RMSNorm 2,外挂 QK-Norm 和 RoPE,注意力那格写「5:1(局部:全局)滑动窗口加 GQA」,32 个 attention head、16 个 key &amp; value head。右侧 Gemma 4 31B:词表同样 262k、60 层、embedding 维度同样 5,376、中间维度同样 21,504、但支持上下文 256k token,归一化层排布相同,注意力同样是 5:1 的局部:全局滑动窗口加 GQA;差别在于局部层是 32 个 attention head、16 个 key &amp; value head,而全局层是 32 个 attention head、只有 4 个 key &amp; value head
Gemma 3(27B)与 Gemma 4(31B)并排。左侧 Gemma 3 27B:词表 262k、62 层、embedding 维度 5,376、FFN 输入维度 5,376、中间维度 21,504(GELU 激活)、支持上下文 128k token,四个归一化层 Pre-RMSNorm 1 / Post-RMSNorm 1 / Pre-RMSNorm 2 / Post-RMSNorm 2,外挂 QK-Norm 和 RoPE,注意力那格写「5:1(局部:全局)滑动窗口加 GQA」,32 个 attention head、16 个 key &amp; value head。右侧 Gemma 4 31B:词表同样 262k、60 层、embedding 维度同样 5,376、中间维度同样 21,504、但支持上下文 256k token,归一化层排布相同,注意力同样是 5:1 的局部:全局滑动窗口加 GQA;差别在于局部层是 32 个 attention head、16 个 key &amp; value head,而全局层是 32 个 attention head、只有 4 个 key &amp; value head

(注意 Gemma 4 现在也有多模态模型支持,但图像 encoder 那部分我留到以后单独一篇文章;这里我们只关注文本部分。)

如上图所示,Gemma 4 保持了那套相对独特的 Pre-norm 加 Post-norm 配置,并保持相对经典:5:1 的混合注意力机制,把一个滑动窗口(局部)层和一个全注意力(全局)层结合起来。注意力机制本身也是经典的 Grouped Query Attention(GQA)。

不过相比 Gemma 3 有一个容易被忽略的小改动:对全局(全)注意力层,他们在注意力机制里复用 key。也就是说,他们把 values 设成等于 keys,这应该会进一步减小 KV cache 尺寸。

此外,Gemma 4 还用了 p-RoPE,只有 25% 的频率对拿到位置信息。这有助于减少长上下文场景下的位置噪声。

但别被架构上缺少(较)大改动骗了。看 benchmark,Gemma 4 相比 Gemma 3 是一次巨大的飞跃!举例来说,在 AI Arena 排行榜76上,Gemma 4(31B)的排名和大得多的 Qwen3.5-397B-A17B 模型相当。但正如我在模型评测那篇文章77(链接在下面)里讨论过的,arena 分数有点问题,因为它们可以被刷,而且偏向人类(风格)偏好。

不过如果我们看其他一些常见 benchmark,也就是我在下面画的这些,可以看到它确实是相对 Gemma 3 的一次非常明显的飞跃,排名和 Qwen3.5 27B 相当。

Gemma 3 对 Gemma 4 对 Qwen3.5 的对比(数字取自 Gemma 4<sup id="fnref:78"><a href="#fn:78" class="footnote-ref" role="doc-noteref">78</a></sup> 和 Qwen3.5<sup id="fnref:79"><a href="#fn:79" class="footnote-ref" role="doc-noteref">79</a></sup> 的 model hub 页面)。七项 benchmark 上 Gemma 4 31B / Gemma 3 27B / Qwen3.5-27B 的成绩依次是:MMLU Pro 为 85.2 / 67.6 / 86.1,AIME 2026 无工具为 89.2 / 20.8 / 90.8,LiveCodeBench v6 为 80.0 / 29.1 / 80.7,GPQA Diamond 为 84.3 / 42.4 / 85.5,Tau2(三项平均)为 76.9 / 16.2 / 79.0,BigBench Extra Hard 为 74.4 / 19.3(Qwen3.5-27B 这一项标注为「无法从可信官方来源获得」),MMMLU 为 88.4 / 70.7 / 85.9
Gemma 3 对 Gemma 4 对 Qwen3.5 的对比(数字取自 Gemma 4<sup id="fnref:78"><a href="#fn:78" class="footnote-ref" role="doc-noteref">78</a></sup> 和 Qwen3.5<sup id="fnref:79"><a href="#fn:79" class="footnote-ref" role="doc-noteref">79</a></sup> 的 model hub 页面)。七项 benchmark 上 Gemma 4 31B / Gemma 3 27B / Qwen3.5-27B 的成绩依次是:MMLU Pro 为 85.2 / 67.6 / 86.1,AIME 2026 无工具为 89.2 / 20.8 / 90.8,LiveCodeBench v6 为 80.0 / 29.1 / 80.7,GPQA Diamond 为 84.3 / 42.4 / 85.5,Tau2(三项平均)为 76.9 / 16.2 / 79.0,BigBench Extra Hard 为 74.4 / 19.3(Qwen3.5-27B 这一项标注为「无法从可信官方来源获得」),MMMLU 为 88.4 / 70.7 / 85.9

注意还有一个 Mixture-of-Experts(MoE)版的 Gemma 4,下面把它和一个尺寸相近的 Qwen3 模型放在一起。

Qwen3 Coder Flash 与 Gemma 4 MoE 的对比。左侧 Qwen3 Coder Flash(30B-A3B):词表 151k、48 层、embedding 维度 2048、expert 中间隐层 768、支持上下文 256k token,RMSNorm 1 与 RMSNorm 2 两个归一化层,只外挂 RoPE,注意力是 Grouped-query Attention,FFN 用 SwiGLU;MoE layer 里 1 到 128 个 expert、没有 shared expert,每 token 激活 8 个 expert、每步 3.3B 激活。右侧 Gemma 4(26B-A4B):词表 262k、30 层、embedding 维度 2816、expert 中间隐层 704、支持上下文 256k token,四个归一化层的 Pre-/Post-RMSNorm 排布,外挂 QK-Norm 和 RoPE,注意力那格写「5:1(局部:全局)滑动窗口加 GQA」,FFN 用 GEGLU(GELU 激活);MoE layer 里 1 shared 加 128 routed,每 token 激活 8 个 expert 加 1 个 shared expert、每步 3.8B 激活,模型总量 25.2B
Qwen3 Coder Flash 与 Gemma 4 MoE 的对比。左侧 Qwen3 Coder Flash(30B-A3B):词表 151k、48 层、embedding 维度 2048、expert 中间隐层 768、支持上下文 256k token,RMSNorm 1 与 RMSNorm 2 两个归一化层,只外挂 RoPE,注意力是 Grouped-query Attention,FFN 用 SwiGLU;MoE layer 里 1 到 128 个 expert、没有 shared expert,每 token 激活 8 个 expert、每步 3.3B 激活。右侧 Gemma 4(26B-A4B):词表 262k、30 层、embedding 维度 2816、expert 中间隐层 704、支持上下文 256k token,四个归一化层的 Pre-/Post-RMSNorm 排布,外挂 QK-Norm 和 RoPE,注意力那格写「5:1(局部:全局)滑动窗口加 GQA」,FFN 用 GEGLU(GELU 激活);MoE layer 里 1 shared 加 128 routed,每 token 激活 8 个 expert 加 1 个 shared expert、每步 3.8B 激活,模型总量 25.2B

如上图所示,两者的方案相对相似,只是 Gemma 4 用了前面讨论过的那套独特的 Pre-norm 加 Post-norm 位置安排。

benchmark 方面,Gemma 4 的 MoE 变体总参数比 Gemma 4(31B)稠密变体少 40 亿,而表现相对接近。

Gemma 4 MoE(26B-A4B)只比 Gemma 4(31B)稠密版略差。九项 benchmark 上 Gemma 4 31B / Gemma 4 26B A4B 的成绩依次是:MMLU Pro 为 85.2 / 82.6,AIME 2026 无工具为 89.2 / 88.3,LiveCodeBench v6 为 80.0 / 77.1,GPQA Diamond 为 84.3 / 82.3,Tau2(三项平均)为 76.9 / 68.2,HLE 无工具为 19.5 / 8.7,HLE 带搜索为 26.5 / 17.2,BigBench Extra Hard 为 74.4 / 64.8,MMMLU 为 88.4 / 86.3
Gemma 4 MoE(26B-A4B)只比 Gemma 4(31B)稠密版略差。九项 benchmark 上 Gemma 4 31B / Gemma 4 26B A4B 的成绩依次是:MMLU Pro 为 85.2 / 82.6,AIME 2026 无工具为 89.2 / 88.3,LiveCodeBench v6 为 80.0 / 77.1,GPQA Diamond 为 84.3 / 82.3,Tau2(三项平均)为 76.9 / 68.2,HLE 无工具为 19.5 / 8.7,HLE 带搜索为 26.5 / 17.2,BigBench Extra Hard 为 74.4 / 64.8,MMMLU 为 88.4 / 86.3

如果你对这里涵盖的所有架构想要一个可视化总览,我在这里整理了一个 LLM 架构画廊80

sebastianraschka.com/llm-architecture-gallery/ 上的 LLM 架构画廊:42 张架构图铺成的一整面墙,每张都按同一套画法给出词表、层数、head 数、embedding 维度、隐层尺寸、上下文长度和 MoE 配置。第一排是 GPT-2 XL 1.5B、Llama 3 8B、OLMo 2 7B、Llama 3.2 1B、Qwen3 4B、Qwen3 8B、Qwen3 32B;后面依次铺开 DeepSeek V3/R1(671 billion)、Kimi K2(1 trillion)、Gemma 3 4B、Gemma 3 27B、Mistral 3.1 Small 24B、Llama 4 Maverick(400B)、Qwen3 235B-A22B、SmolLM3 3B、Qwen3 Coder Flash、Gemma 3 270M、GPT-OSS 20B、GPT-OSS 120B、Grok 2.5(270B)、GLM-4.5(355B)、MiniMax-M2(230B)、Qwen3 Next 80B-A3B、Kimi Linear 48B-A3B、Olmo 3 7B、Olmo 3 32B、Mistral 3 Large(673 billion)、Nemotron 3 Nano(30B-A3B)、Nemotron 3 Super(120B-A12B)、Xiaomi MiMo-V2-Flash(309B)、DeepSeek V3.2(671B)、Arcee AI Trinity Large(400B)、GLM-5(744B)、GLM-4.7(355B)、Tiny Aya 3.35B、Step 3.5 Flash(196B)、MiniMax-M2.5(230B)、Nanbeige 4.1 3B、Qwen3.5(397B)、Ling 2.5(1T)、Sarvam 30B、Sarvam 105B
sebastianraschka.com/llm-architecture-gallery/ 上的 LLM 架构画廊:42 张架构图铺成的一整面墙,每张都按同一套画法给出词表、层数、head 数、embedding 维度、隐层尺寸、上下文长度和 MoE 配置。第一排是 GPT-2 XL 1.5B、Llama 3 8B、OLMo 2 7B、Llama 3.2 1B、Qwen3 4B、Qwen3 8B、Qwen3 32B;后面依次铺开 DeepSeek V3/R1(671 billion)、Kimi K2(1 trillion)、Gemma 3 4B、Gemma 3 27B、Mistral 3.1 Small 24B、Llama 4 Maverick(400B)、Qwen3 235B-A22B、SmolLM3 3B、Qwen3 Coder Flash、Gemma 3 270M、GPT-OSS 20B、GPT-OSS 120B、Grok 2.5(270B)、GLM-4.5(355B)、MiniMax-M2(230B)、Qwen3 Next 80B-A3B、Kimi Linear 48B-A3B、Olmo 3 7B、Olmo 3 32B、Mistral 3 Large(673 billion)、Nemotron 3 Nano(30B-A3B)、Nemotron 3 Super(120B-A12B)、Xiaomi MiMo-V2-Flash(309B)、DeepSeek V3.2(671B)、Arcee AI Trinity Large(400B)、GLM-5(744B)、GLM-4.7(355B)、Tiny Aya 3.35B、Step 3.5 Flash(196B)、MiniMax-M2.5(230B)、Nanbeige 4.1 3B、Qwen3.5(397B)、Ling 2.5(1T)、Sarvam 30B、Sarvam 105B

这么多年过去,LLM 的发布仍然让人兴奋,我很好奇接下来会是什么!


  1. The Big LLM Architecture Comparison, https://magazine.sebastianraschka.com/p/the-big-llm-architecture-comparison ↩︎ ↩︎

  2. Understanding Multimodal LLMs, https://magazine.sebastianraschka.com/p/understanding-multimodal-llms ↩︎ ↩︎

  3. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, https://arxiv.org/abs/2501.12948 ↩︎

  4. DeepSeek-V3 Technical Report, https://arxiv.org/abs/2412.19437 ↩︎

  5. Understanding Reasoning LLMs, https://magazine.sebastianraschka.com/p/understanding-reasoning-llms ↩︎

  6. GPT-2 到 Llama 3 转换指南, https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/07_gpt_to_llama/converting-llama2-to-llama3.ipynb ↩︎

  7. 带 KV cache 的 Llama 3 实现, https://github.com/rasbt/LLMs-from-scratch/blob/main/pkg/llms_from_scratch/llama3.py ↩︎

  8. GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints, https://arxiv.org/abs/2305.13245 ↩︎

  9. Llama 2: Open Foundation and Fine-Tuned Chat Models, https://arxiv.org/abs/2307.09288 ↩︎

  10. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model, https://arxiv.org/abs/2405.04434 ↩︎

  11. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models, https://arxiv.org/abs/2401.06066 ↩︎

  12. DeepSpeed-MoE: Advancing Mixture-of-Experts Inference and Training to Power Next-Generation AI Scale, https://arxiv.org/abs/2201.05596 ↩︎

  13. OLMo 2 Furious, https://arxiv.org/abs/2501.00656 ↩︎ ↩︎

  14. GPT-2 到 Llama 2 转换指南, https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/07_gpt_to_llama/converting-gpt-to-llama2.ipynb ↩︎

  15. Attention Is All You Need, https://arxiv.org/abs/1706.03762 ↩︎

  16. On Layer Normalization in the Transformer Architecture, https://arxiv.org/abs/2002.04745 ↩︎

  17. Qwen3 从零实现, https://github.com/rasbt/LLMs-from-scratch/tree/main/ch05/11_qwen3 ↩︎

  18. Scaling Vision Transformers to 22 Billion Parameters, https://arxiv.org/abs/2302.05442 ↩︎

  19. OLMo-2-0325-32B-Instruct, https://huggingface.co/allenai/OLMo-2-0325-32B-Instruct ↩︎

  20. Longformer: The Long-Document Transformer, https://arxiv.org/abs/2004.05150 ↩︎

  21. Gemma 2: Improving Open Language Models at a Practical Size, http://arxiv.org/abs/2408.00118 ↩︎

  22. Introducing Gemma 3n, https://developers.googleblog.com/en/introducing-gemma-3n/ ↩︎

  23. MatFormer: Nested Transformer for Elastic Inference, https://arxiv.org/abs/2310.07707 ↩︎

  24. Mistral Small 3.1, https://mistral.ai/news/mistral-small-3-1 ↩︎

  25. Mistral-Small-3.1-24B-Instruct-2503 的 config.json, https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Instruct-2503/blob/main/config.json ↩︎

  26. Mistral-Small-3.1-24B-Instruct-2503 model card, https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Instruct-2503 ↩︎

  27. The Llama 4 herd, https://ai.meta.com/blog/llama-4-multimodal-intelligence/ ↩︎

  28. Qwen3 纯 PyTorch 从零实现, https://github.com/rasbt/LLMs-from-scratch/tree/main/ch05/11_qwen3 ↩︎

  29. Qwen2.5-Max, https://qwenlm.github.io/blog/qwen2.5-max/ ↩︎

  30. Junyang Lin 的回应, https://x.com/JustinLin610/status/1947364862184853626 ↩︎

  31. SmolLM3: smol, multilingual, long-context reasoner, https://huggingface.co/blog/smollm3 ↩︎

  32. The Impact of Positional Encoding on Length Generalization in Transformers, https://arxiv.org/abs/2305.19466 ↩︎

  33. Kimi K2: Open Agentic Intelligence, https://moonshotai.github.io/Kimi-K2/ ↩︎

  34. Muon 优化器, https://github.com/KellerJordan/Muon ↩︎

  35. Muon is Scalable for LLM Training, https://arxiv.org/abs/2502.16982 ↩︎

  36. Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity, https://arxiv.org/abs/2101.03961 ↩︎

  37. Kimi k1.5: Scaling Reinforcement Learning with LLMs, https://arxiv.org/abs/2501.12599 ↩︎

  38. Kimi K2 Thinking, https://moonshotai.github.io/Kimi-K2/thinking.html ↩︎

  39. Introducing gpt-oss, https://openai.com/index/introducing-gpt-oss/ ↩︎

  40. From GPT-2 to gpt-oss: Analyzing the Architectural Advances, https://magazine.sebastianraschka.com/p/from-gpt-2-to-gpt-oss-analyzing-the ↩︎ ↩︎

  41. Gemma 2 论文 Table 9, https://arxiv.org/abs/2408.00118 ↩︎

  42. Simplicity Bias in Transformers and their Ability to Learn Sparse Boolean Functions, https://arxiv.org/pdf/2302.08626 ↩︎

  43. Efficient Streaming Language Models with Attention Sinks, https://arxiv.org/abs/2309.17453 ↩︎

  44. GLM-4.5: Agentic, Reasoning, and Coding (ARC) Foundation Models, https://arxiv.org/abs/2508.06471 ↩︎

  45. Better & Faster Large Language Models via Multi-token Prediction, https://arxiv.org/abs/2404.19737 ↩︎

  46. Qwen3-Next 博文, https://qwen.ai/blog?id=4074cca80393150c248e508aa62983f9cb7d27cd&from=research.latest-advancements-list ↩︎

  47. Qwen3-Coder-Next 技术报告, https://github.com/QwenLM/Qwen3-Coder/blob/main/qwen3_coder_next_tech_report.pdf ↩︎

  48. MiniMax-M1: Scaling Test-Time Compute Efficiently with Lightning Attention, https://arxiv.org/abs/2506.13585 ↩︎

  49. MiniMax-M2, https://huggingface.co/MiniMaxAI/MiniMax-M2 ↩︎

  50. MiniMax-01 README, https://github.com/MiniMax-AI/MiniMax-01 ↩︎

  51. MiniMax-01: Scaling Foundation Models with Lightning Attention, https://arxiv.org/abs/2501.08313 ↩︎

  52. Understanding and Coding Self-Attention, Multi-Head Attention, Causal-Attention, and Cross-Attention in LLMs, https://magazine.sebastianraschka.com/p/understanding-and-coding-self-attention ↩︎

  53. Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention, https://arxiv.org/abs/2006.16236 ↩︎

  54. Kimi Linear: An Expressive, Efficient Attention Architecture, https://arxiv.org/abs/2510.26692 ↩︎

  55. Gated Delta Networks: Improving Mamba2 with Delta Rule, https://arxiv.org/abs/2412.06464 ↩︎

  56. DeltaNet 章节, https://sebastianraschka.com/llms-from-scratch/ch04/08_deltanet/ ↩︎

  57. Olmo 3 发布博文, https://allenai.org/blog/olmo3 ↩︎

  58. Olmo 3 技术报告, https://www.datocms-assets.com/64837/1763662397-1763646865-olmo_3_technical_report-1.pdf ↩︎

  59. Olmo 3 从零实现 notebook, https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/13_olmo3/standalone-olmo3.ipynb ↩︎

  60. A Technical Tour of the DeepSeek Models from V3 to V3.2, https://magazine.sebastianraschka.com/p/technical-deepseek ↩︎ ↩︎

  61. Mistral 3, https://mistral.ai/news/mistral-3 ↩︎

  62. DeepSeek-V3.2 报告, https://arxiv.org/abs/2512.02556 ↩︎

  63. Mistral-Large-3-675B-Instruct-2512-NVFP4 的 params.json, https://huggingface.co/mistralai/Mistral-Large-3-675B-Instruct-2512-NVFP4/blob/main/params.json ↩︎

  64. NVIDIA Nemotron 3 Nano 技术报告, https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf ↩︎

  65. NVIDIA Nemotron 数据集, https://huggingface.co/nvidia/datasets?search=nemotron&p=0 ↩︎

  66. Nemotron-Pretraining-Code-v2, https://huggingface.co/datasets/nvidia/Nemotron-Pretraining-Code-v2 ↩︎

  67. NVIDIA debuts Nemotron 3 family of open models, https://nvidianews.nvidia.com/news/nvidia-debuts-nemotron-3-family-of-open-models ↩︎

  68. Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality, https://arxiv.org/abs/2405.21060 ↩︎

  69. Beyond Standard LLMs, https://magazine.sebastianraschka.com/p/beyond-standard-llms ↩︎

  70. NVIDIA-Nemotron-3-Super-120B-A12B-BF16, https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 ↩︎

  71. NVIDIA Nemotron 3 Super 技术报告, https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf ↩︎

  72. A Dream of Spring for Open-Weight LLMs: 10 Architectures from Jan-Feb 2026, https://magazine.sebastianraschka.com/p/a-dream-of-spring-for-open-weight ↩︎ ↩︎

  73. Trinity Large collection, https://huggingface.co/collections/arcee-ai/trinity-large ↩︎

  74. Trinity Large 技术报告, https://github.com/arcee-ai/trinity-large-tech-report ↩︎

  75. GLM-5 发布博文, https://z.ai/blog/glm-5 ↩︎

  76. AI Arena 排行榜, https://arena.ai/leaderboard/text ↩︎

  77. Understanding the 4 Main Approaches to LLM Evaluation (From Scratch), https://magazine.sebastianraschka.com/p/llm-evaluation-4-approaches ↩︎

  78. google/gemma-4-31B, https://huggingface.co/google/gemma-4-31B ↩︎

  79. Qwen/Qwen3.5-27B, https://huggingface.co/Qwen/Qwen3.5-27B ↩︎

  80. LLM Architecture Gallery, https://sebastianraschka.com/llm-architecture-gallery/ ↩︎