
八大LLM架构大比较总结:从DeepSeek-V3->qwen3->Kimi K2看LLM架构设计 精华
自最初的 GPT 架构开发以来,已经过去了七年。乍一看,回顾 GPT-2(2019 年),展望 DeepSeek-V3 和 Llama 4(2024-2025 年),人们可能会惊讶于这些模型在结构上仍然如此相似。
当然,位置嵌入已经从绝对嵌入演进到旋转嵌入(RoPE),多头注意力机制已基本被分组查询注意力机制所取代,而更高效的 SwiGLU 也取代了 GELU 等激活函数。但在这些细微的改进背后,我们是否真正看到了突破性的变化,还是仅仅在打磨相同的架构基础?
比较 LLM 以确定有助于其良好(或不太好)性能的关键因素是出了名的困难:数据集、训练技术和超参数差异很大,而且通常没有很好的记录。
然而,我认为研究架构本身的结构变化以了解 LLM 开发人员在 2025 年会做什么仍然很有价值。(其中的一部分如下图 1 所示。)
图 1:本文涵盖的架构子集。
1. DeepSeek V3/R1
您可能已经听说过不止一次,DeepSeek R1在 2025 年 1 月发布时引起了巨大反响。DeepSeek R1 是基于2024 年 12 月推出的DeepSeek V3 架构构建的推理模型。
虽然我在这里关注的是 2025 年发布的架构,但我认为包含 DeepSeek V3 是合理的,因为它是在 2025 年推出 DeepSeek R1 后才获得广泛关注和采用的。
如果您对 DeepSeek R1 的训练特别感兴趣,您可能也会发现我今年早些时候的文章很有用。
在本节中,我将重点介绍 DeepSeek V3 中引入的两种关键架构技术,这些技术提高了其计算效率,并使其有别于许多其他 LLM:
- 多头潜在注意力(MLA)
- 混合专家(MoE)
1.1 多头潜在注意力(MLA)
在讨论多头潜在注意力 (MLA) 之前,我们先简单回顾一下背景知识,解释一下它的应用。首先,我们来谈谈分组查询注意力 (GQA)。近年来,GQA 已成为多头注意力 (MHA) 的新标准替代者,它在计算和参数方面都更具效率。
以下是 GQA 的简要总结。与 MHA 不同,MHA 中的每个 head 都有自己的一组键和值,为了减少内存占用,GQA 将多个 head 分组以共享相同的键和值投影。
例如,如下图 2 所示,如果有 2 个键值组和 4 个注意力头,那么注意力头 1 和 2 可能共享一组键值对,而注意力头 3 和 4 则共享另一组键值对。这减少了键值对的计算总量,从而降低了内存占用并提高了效率(根据消融研究,这不会显著影响建模性能)。
图 2:MHA 与 GQA 的比较。此处,组大小为 2,其中两个查询共享一个键值对。
因此,GQA 的核心思想是通过在多个查询头之间共享键值头来减少键值头的数量。这 (1) 可以降低模型的参数数量,(2) 还可以减少推理过程中键值张量的内存带宽占用,因为需要存储和从键值缓存中检索的键值更少。
(如果您好奇 GQA 在代码中的样子,请参阅我的GPT-2 到 Llama 3 转换指南,其中有一个没有 KV 缓存的版本,以及我的 KV 缓存变体。)
虽然 GQA 主要是 MHA 的一种计算效率解决方法,但消融研究(例如原始 GQA 论文和Llama 2 论文中的研究)表明,就 LLM 建模性能而言,它的表现与标准 MHA 相当。
现在,多头潜在注意力 (MLA) 提供了一种不同的内存节省策略,并且与键值缓存 (KV) 配合得非常好。MLA 不像 GQA 那样共享键值头,而是将键值张量压缩到低维空间,然后再将它们存储在键值缓存中。
在推理时,这些压缩的张量会被投影回其原始大小,然后再使用,如下图 3 所示。这增加了额外的矩阵乘法,但减少了内存使用量。
图 3:MLA(用于 DeepSeek V3 和 R1)与常规 MHA 的比较。
(顺便说一句,查询也被压缩,但仅在训练期间,而不是推理期间。)
顺便说一句,MLA 并非 DeepSeek V3 中的新特性,其前身 DeepSeek-V2也曾使用(甚至引入)过它。此外,V2 论文中包含一些有趣的消融研究,或许可以解释 DeepSeek 团队为何选择 MLA 而非 GQA(见下图 4)。
图 4:DeepSeek-V2 论文中的注释表,https://arxiv.org/abs/2405.04434
如上图 4 所示,GQA 的性能似乎不如 MHA,而 MLA 的建模性能优于 MHA,这可能就是 DeepSeek 团队选择 MLA 而非 GQA 的原因。(如果能比较一下 MLA 和 GQA 之间“每个令牌的键值缓存”节省情况,也一定很有趣!)
在我们进入下一个架构组件之前,总结一下本节,MLA 是一个巧妙的技巧,可以减少 KV 缓存内存的使用,同时在建模性能方面甚至略胜于 MHA。
1.2 混合专家(MoE)
DeepSeek 中另一个值得强调的主要架构组件是它对混合专家 (MoE) 层的使用。虽然 DeepSeek 并非 MoE 的发明者,但它在今年再次兴起,我们稍后将介绍的许多架构也都采用了它。
您可能已经熟悉 MoE,但快速回顾一下可能会有所帮助。
MoE 的核心思想是用多个专家层替换 Transformer 模块中的每个前馈模块,其中每个专家层本身也是一个前馈模块。这意味着我们将单个前馈模块替换为多个前馈模块,如下图 5 所示。
图 5:DeepSeek V3/R1 中的混合专家 (MoE) 模块(右)与具有标准前馈块的 LLM(左)的比较图。
Transformer 模块内的 FeedForward 模块(如上图中深灰色模块所示)通常包含大量模型总参数。(请注意,Transformer 模块以及 FeedForward 模块在 LLM 中重复多次;在 DeepSeek-V3 中,重复了 61 次。)
因此,用多个前馈模块替换单个前馈模块(就像在 MoE 设置中所做的那样)会显著增加模型的总参数数量。然而,关键在于我们不会为每个 token 使用(“激活”)所有专家。相反,路由器只会为每个 token 选择一小部分专家。(出于时间或文章篇幅的考虑,我将在下次更详细地介绍路由器。)
由于每次只有少数专家处于活跃状态,因此 MoE 模块通常被称为稀疏模块,这与始终使用完整参数集的密集模块形成对比。然而,通过 MoE 获得的大量参数增加了 LLM 的容量,这意味着它可以在训练期间吸收更多知识。然而,稀疏性保持了推理的高效性,因为我们不会同时使用所有参数。
例如,DeepSeek-V3 每个 MoE 模块有 256 位专家,总共 6710 亿个参数。然而,在推理过程中,每次只有 9 位专家处于活动状态(1 位共享专家加上 8 位由路由器选择的专家)。这意味着每个推理步骤仅使用 370 亿个参数,而不是全部 6710 亿个参数。
DeepSeek-V3 的 MoE 设计的一个显著特点是使用了一个共享专家。这是一个始终对每个 token 保持活跃的专家。这个想法并不新鲜,早在DeepSeek 2024 MoE和2022 DeepSpeedMoE 论文中就已提出。
图 6:来自“DeepSeekMoE:迈向混合专家语言模型中的终极专家专业化”的注释图,https://arxiv.org/abs/2401.06066
DeepSpeedMoE 论文首次提出了共享专家的优势,他们发现与没有共享专家相比,共享专家可以提升整体建模性能。这可能是因为多个专家无需学习常见或重复的模式,从而为它们提供了更多学习更专业模式的空间。
1.3 DeepSeek总结
总而言之,DeepSeek-V3 是一个拥有 6710 亿个参数的庞大模型,在发布时,其性能优于其他开放权重模型,包括 405B 的 Llama 3。尽管规模更大,但由于其混合专家 (MoE) 架构,它在推理时间上效率更高,该架构每个标记仅激活一小部分(仅 370 亿个)参数。
DeepSeek-V3 的另一个关键区别在于它使用了多头潜在注意力 (MLA) 算法,而非分组查询注意力 (GQA)。MLA 和 GQA 都是标准多头注意力 (MHA) 的高效推理替代方案,尤其是在使用键值缓存时。虽然 MLA 的实现更为复杂,但 DeepSeek-V2 论文中的一项研究表明,MLA 的建模性能优于 GQA。
2.OLMo 2
非营利机构艾伦人工智能研究所的OLMo系列模型值得关注,因为它在训练数据和代码方面非常透明,并且技术报告也相对详细。
虽然您可能不会在任何基准或排行榜的顶部找到 OLMo 模型,但它们非常干净,更重要的是,由于它们的透明度,它们是开发 LLM 的绝佳蓝图。
虽然 OLMo 模型因其透明度而广受欢迎,但它们的表现也并不差。事实上,在 1 月份发布时(Llama 4、Gemma 3 和 Qwen 3 之前),OLMo 2模型处于计算性能比的帕累托前沿,如下图 7 所示。
图 7:不同 LLM 的建模基准性能(越高越好)与预训练成本(FLOP;越低越好)的关系。此图来自 OLMo 2 论文(https://arxiv.org/abs/2501.00656),带注释。
正如本文前面提到的,我旨在仅关注 LLM 架构细节(而非训练或数据),以使其保持在可控的篇幅内。那么,OLMo2 中有哪些有趣的架构设计选择呢?主要归结为规范化:RMSNorm 层的放置以及 QK 范数的添加,我将在下文讨论。
另外值得一提的是,OLMo 2 仍然采用传统的多头注意力(MHA),而不是 MLA 或 GQA。
2.1 Normalization Layer布局
总体而言,OLMo 2 在很大程度上遵循了原始 GPT 模型的架构,与其他当代 LLM 类似。然而,也存在一些值得注意的差异。让我们从规范化层开始。
与 Llama、Gemma 和大多数其他 LLM 类似,OLMo 2 从 LayerNorm 转换为 RMSNorm。
但由于 RMSNorm 已经过时(它本质上是 LayerNorm 的简化版本,可训练参数更少),我将跳过 RMSNorm 与 LayerNorm 的讨论。(感兴趣的读者可以在我的GPT-2 到 Llama 转换指南中找到 RMSNorm 的代码实现。)
然而,RMNSorm 层的放置位置值得讨论。原始 Transformer(来自“ Attention is all you need ”论文)将两个归一化层分别放置在 Transformer 模块中的注意力模块和前馈模块之后。
这也称为 Post-LN 或 Post-Norm。
GPT 和之后出现的大多数 LLM 将归一化层置于注意力模块和前馈模块之前,这被称为 Pre-LN 或 Pre-Norm。下图展示了 Post-Norm 和 Pre-Norm 之间的对比。
图 8:后规范、前规范和 OLMo 2 后规范风格的比较。
2020年,Xiong 等人证明了 Pre-LN 在初始化时能够产生更良好的梯度。此外,研究人员还提到,Pre-LN 甚至无需仔细预热学习率就能很好地工作,而预热学习率是 Post-LN 的关键工具。
现在,我提到这一点的原因是 OLMo 2 采用了 Post-LN 的一种形式(但使用 RMSNorm 而不是 LayerNorm,所以我称之为Post-Norm)。
在 OLMo 2 中,规范化层不再位于注意力层和前馈层之前,而是位于其后,如上图所示。然而,请注意,与原始 Transformer 架构不同,规范化层仍然位于残差层内部(跳过连接)。
那么,他们为什么要移动规范化层的位置呢?原因是它有助于训练稳定性,如下图所示。
图 9:该图显示了 Pre-Norm(如 GPT-2、Llama 3 和许多其他版本)与 OLMo 2 的 Post-Norm 风格的训练稳定性。
遗憾的是,这张图将重排序的结果与 QK-Norm 的结果放在一起展示,而 QK-Norm 是一个独立的概念。因此,很难判断归一化层重排序本身的贡献有多大。
2.2 QK-Norm
由于上一节已经提到了 QK-norm,并且我们稍后讨论的其他 LLM,例如 Gemma 2 和 Gemma 3,也使用了 QK-norm,我们来简单讨论一下这是什么。
QK-Norm 本质上是另一个 RMSNorm 层。它位于多头注意力 (MHA) 模块内部,并在应用 RoPE 之前应用于查询 (q) 和键 (k)。为了说明这一点,下面是我为 Qwen3 从头实现编写的分组查询注意力 (GQA) 层的摘录(GQA 中的 QK-norm 应用类似于 OLMo 中的 MHA):
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 论文。
2.3 OLMo 2 总结
简而言之,值得注意的 OLMo 2 架构设计决策主要是 RMSNorm 的放置:将 RMSNorm 放在注意力和前馈模块之后而不是之前(后范式的一种),以及在注意力机制内为查询和键添加 RMSNorm(QK-Norm),这两者共同有助于稳定训练损失。
下图进一步并排比较了 OLMo 2 和 Llama 3;可以看出,除了 OLMo 2 仍然使用传统的 MHA 而非 GQA 之外,它们的架构在其他方面相对相似。(不过,OLMo 2 团队在 3 个月后发布了使用 GQA 的 32B 版本。)
图 10:Llama 3 和 OLMo 2 的架构比较。
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)使用混合专家 (MoE) 架构,在模型大小固定的情况下减少推理时的内存需求。(我们稍后将讨论的其他几个模型也采用了 MoE 方法。)
Gemma 3 使用不同的“技巧”来降低计算成本,即滑动窗口注意力。
3.1 滑动窗口注意力机制
借助滑动窗口注意力机制(最初于 2020 年在 LongFormer 论文中提出,并且已被Gemma 2使用),Gemma 3 团队能够大幅减少 KV 缓存中的内存需求,如下图所示。
图 11:Gemma 3 论文(https://arxiv.org/abs/2503.19786)中的带注释的图表,展示了通过滑动窗口注意力机制实现的 KV 缓存内存节省。
那么,什么是滑动窗口注意力机制?如果我们将常规的自注意力机制视为一种全局注意力机制,因为每个序列元素都可以访问其他所有序列元素;那么,我们可以将滑动窗口注意力机制视为局部注意力机制,因为在这里,我们将上下文大小限制在当前查询位置附近。如下图所示。
图 12:常规注意力(左)和滑动窗口注意力(右)的比较。
请注意,滑动窗口注意力可以与多头注意力和分组查询注意力一起使用;Gemma 3 使用分组查询注意力。
如上所述,滑动窗口注意力机制也称为局部注意力机制,因为局部窗口会围绕当前查询位置并随之移动。相比之下,常规注意力机制则是全局的,因为每个标记都可以访问所有其他标记。
正如上文简要提到的,Gemma 2 的前身架构也曾使用过滑动窗口注意力机制。Gemma 3 的不同之处在于,他们调整了全局(常规)注意力机制和局部(滑动)注意力机制之间的比例。
例如,Gemma 2 采用了一种混合注意力机制,将滑动窗口(局部)注意力和全局注意力以 1:1 的比例组合在一起。每个 token 可以关注附近上下文的 4k 个 token 窗口。
Gemma 2 每隔一层都使用滑动窗口注意力机制,而 Gemma 3 则采用了 5:1 的比例,这意味着每 5 个滑动窗口(局部)注意力层中只有一个完整的注意力层;此外,滑动窗口大小从 4096(Gemma 2)减小到 1024(Gemma 3)。这使得模型的重点转向更高效的局部计算。
根据他们的消融研究,使用滑动窗口注意力对建模性能的影响最小,如下图所示。
图 13:Gemma 3 论文(https://arxiv.org/abs/2503.19786)中的注释图,显示滑动窗口注意力对 LLM 生成的输出困惑度几乎没有影响。
虽然滑动窗口注意力是 Gemma 3 中最值得注意的架构方面,但作为上一节 OLMo 2 的后续,我还想简要介绍一下规范化层的放置。
3.2 Gemma 3 中的规范化层放置
值得强调的一个小而有趣的花絮是,Gemma 3 在其分组查询注意模块的 Pre-Norm 和 Post-Norm 设置中使用 RMSNorm。
这与 Gemma 2 类似,但仍然值得强调,因为它不同于(1)原始 Transformer 中使用的 Post-Norm(“你只需要注意力”),(2)由 GPT-2 推广并在之后的许多其他架构中使用的 Pre-Norm,以及(3)我们之前看到的 OLMo 2 中的 Post-Norm 风格。
图 14:OLMo2 和 Gemma 3 之间的架构比较;请注意 Gemma 3 中的附加规范化层。
我认为这种归一化层放置方法相对直观,因为它兼顾了两种方法的优点:预归一化和后归一化。在我看来,增加一些额外的归一化操作总是好的。在最坏的情况下,如果额外的归一化操作是多余的,则会因冗余而导致效率低下。不过,在实践中,由于 RMSNorm 总体上相对便宜,因此这应该不会造成任何明显的影响。
3.3 Gemma 3 总结
Gemma 3 是一款性能良好的开放权重法学硕士 (LLM),但在我看来,它在开源圈中有点被低估了。它最有趣的部分是使用滑动窗口注意力机制来提高效率(未来将其与 MoE 结合起来会很有趣)。
此外,Gemma 3 具有独特的规范化层放置,将 RMSNorm 层放置在注意力和前馈模块之前和之后。
3.4 奖励:Gemma 3n
在 Gemma 3 发布几个月后,谷歌分享了Gemma 3n,这是一款针对小型设备效率进行了优化的 Gemma 3 型号,目标是在手机上运行。
Gemma 3n 中为了提高效率而做出的改进之一是所谓的“逐层嵌入 (PLE)”参数层。其核心思想是仅将模型参数的子集保存在 GPU 内存中。然后,特定于 token 层的嵌入(例如用于文本、音频和视觉模态的嵌入)将按需从 CPU 或 SSD 流式传输。
下图展示了 PLE 内存节省情况,列出了标准 Gemma 3 模型的 54.4 亿个参数。这可能指的是 Gemma 3 的 40 亿个变体。
图 15:来自 Google 的 Gemma 3n 博客(https://developers.googleblog.com/en/introducing-gemma-3n/)的带注释的图表,说明了 PLE 内存节省。
54.4 亿和 40 亿参数数量的差异,是因为谷歌在 LLM 中报告参数数量的方式很有意思。他们通常会排除嵌入参数,以使模型看起来更小,但在这种情况下,为了方便起见,可以添加嵌入参数来使模型看起来更大。这并非谷歌独有,因为这种方法已成为整个领域的普遍做法。
另一个有趣的技巧是MatFormer概念(Matryoshka Transformer 的缩写)。例如,Gemma 3n 使用单个共享的 LLM(Transformer)架构,该架构可以拆分成更小、可独立使用的模型。每个模型都经过训练,可以独立运行,因此在推理时,我们可以只运行所需的部分(而不是整个大型模型)。
4. Mistral Small 3.1
Mistral Small 3.1 24B于 3 月在 Gemma 3 发布后不久发布,值得注意的是,它在多个基准测试(数学除外)上的表现均优于 Gemma 3 27B,而且速度更快。
Mistral Small 3.1 推理延迟低于 Gemma 3 的原因很可能在于其自定义的分词器,以及缩减了键值缓存和层数。除此之外,它仍然是一个标准架构,如下图所示。
图 16:Gemma 3 27B 和 Mistral 3.1 Small 24B 的架构比较。
有趣的是,早期的 Mistral 模型曾使用过滑动窗口注意力机制,但在 Mistral Small 3.1 中似乎放弃了它。因此,由于 Mistral 使用的是常规的分组查询注意力机制,而不是像 Gemma 3 中那样使用带滑动窗口的分组查询注意力机制,或许由于能够使用更优化的代码(例如 FlashAttention),可以节省额外的推理计算成本。例如,我推测,虽然滑动窗口注意力机制可以减少内存使用量,但它并不一定能降低推理延迟,而这正是 Mistral Small 3.1 的重点所在。
5. Llama 4
本文前面对混合专家模型 (MoE) 的深入介绍再次得到了回报。Llama 4也采用了 MoE 方法,并且遵循与 DeepSeek-V3 非常相似的相对标准的架构,如下图所示。(Llama 4 包含原生的多模态支持,类似于 Gemma 和 Mistral 等模型。但是,由于本文重点关注语言建模,因此我们仅关注文本模型。)
图 17:DeepSeek V3(6710 亿个参数)和 Llama 4 Maverick(4000 亿个参数)的架构比较。
虽然 Llama 4 Maverick 架构总体上与 DeepSeek-V3 非常相似,但仍有一些有趣的差异值得强调。
首先,Llama 4 使用了与其前代产品类似的分组查询注意力机制 (Grouped-Query Attention),而 DeepSeek-V3 则使用了我们在本文开头讨论过的多头潜在注意力机制 (Multi-Head Latent Attention)。DeepSeek-V3 和 Llama 4 Maverick 都是非常庞大的架构,其中 DeepSeek-V3 的总参数数量大约比 Llama 4 Maverick 多 68%。然而,DeepSeek-V3 拥有 370 亿个活跃参数,是 Llama 4 Maverick(170 亿)的两倍多。
Llama 4 Maverick 采用了更经典的 MoE 设置,其专家数量更少但规模更大(2 名活跃专家,每名专家的隐藏层大小为 8,192),而 DeepSeek-V3 则使用了 9 名活跃专家,每名专家的隐藏层大小为 2,048。此外,DeepSeek 在每个转换器模块(前 3 个除外)中都使用了 MoE 层,而 Llama 4 则在每个转换器模块中交替使用 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。
(顺便说一句,请注意“Qwen3”中缺少的空格并不是拼写错误;我只是尝试保留 Qwen 开发人员选择的原始拼写。)
6.1 Qwen3(Dense)
我们先来讨论一下密集模型架构。截至撰写本文时,0.6B 模型很可能是目前市面上最小的开放权重模型。根据我的个人经验,考虑到其小巧的体积,它的性能确实非常出色。如果您打算在本地运行它,它拥有很高的令牌/秒吞吐量和较低的内存占用。更重要的是,由于其体积小巧,它也很容易在本地进行训练(用于教育目的)。
因此,对我来说,Qwen3 0.6B 在大多数情况下已经取代了 Llama 3 1B。这两种架构的比较如下所示。
图 18:Qwen3 0.6B 和 Llama 3 1B 之间的架构比较;请注意,Qwen3 是一种更深的架构,具有更多的层,而 Llama 3 是一种更宽的架构,具有更多的注意力头。
如果您对无需外部第三方 LLM 库依赖的人类可读的 Qwen3 实现感兴趣,我最近从头开始(纯 PyTorch)实现了 Qwen3。
上图中的计算性能数据基于我在 A100 GPU 上运行的 PyTorch 实现。可以看出,Qwen3 的内存占用较小,因为它的整体架构较小,但使用的隐藏层和注意力头也更少。然而,它使用的 Transformer 模块比 Llama 3 更多,这导致运行速度较慢(每秒生成 token 的速度较低)。
6.2 Qwen3(MoE)
如前所述,Qwen3 也有两种 MoE 版本:30B-A3B 和 235B-A22B。为什么有些架构(例如 Qwen3)会同时提供常规(密集)和 MoE(稀疏)版本?
正如本文开头所述,MoE 变体有助于降低大型基础模型的推理成本。同时提供密集模型和 MoE 版本,让用户能够根据自己的目标和约束条件灵活地进行推理。
密集模型通常更容易在各种硬件上进行微调、部署和优化。
另一方面,MoE 模型针对扩展推理进行了优化。例如,在固定的推理预算下,它们可以实现更高的整体模型容量(即,由于规模较大,训练期间的知识吸收量更高),而无需相应增加推理成本。
通过发布这两种类型,Qwen3 系列可以支持更广泛的用例:用于稳健性、简单性和微调的密集模型,以及用于大规模高效服务的 MoE 模型。
为了总结本节,让我们看看 Qwen3 235B-A22B(注意,A22B 代表“22B 活动参数”)和 DeepSeek-V3,后者的活动参数几乎是 Qwen3 235B-A22B 的两倍(37B)。
图 19:DeepSeek-V3 和 Qwen3 235B-A22B 的架构比较。
如上图所示,DeepSeek-V3 和 Qwen3 235B-A22B 架构非常相似。值得注意的是,Qwen3 模型不再使用共享专家(早期的 Qwen 模型,例如Qwen2.5-MoE,确实使用了共享专家)。
遗憾的是,Qwen3 团队并未透露放弃共享专家的任何原因。如果非要我猜的话,他们之所以将专家数量从 2 个(Qwen2.5-MoE 中)增加到 8 个(Qwen3 中),或许只是为了提高训练稳定性而没有必要。而且,他们能够通过只使用 8 个专家而不是 8+1 个专家来节省额外的计算/内存成本。(然而,这并不能解释为什么 DeepSeek-V3 仍然保留着他们的共享专家。)
7. SmolLM3
SmolLM3可能不如本文介绍的其他 LLM 那么受欢迎,但我认为它仍然是一个有趣的模型,因为它在相对较小且方便的 30 亿参数模型大小下提供了非常好的建模性能,该模型大小介于 1.7B 和 4B Qwen3 模型之间,如下图所示。
而且,它还分享了很多训练细节,类似于OLMo,这是很少见的,而且总是令人赞赏!
图 20:来自 SmolLM3 公告帖 https://huggingface.co/blog/smollm3 的注释图,将 SmolLM3 的胜率与 Qwen3 1.7B 和 4B 以及 Llama 3 3B 和 Gemma 3 4B 进行了比较。
如下面的架构对比图所示,SmolLM3 架构看起来相当标准。不过,最有趣的一点或许是它使用了 NoPE(无位置嵌入)。
图 21:Qwen3 4B 和 SmolLM3 3B 的并排架构比较。
7.1 无位置嵌入(NoPE)
在 LLM 环境中,NoPE 是一个较旧的想法,可以追溯到 2023 年的一篇论文(位置编码对 Transformer 长度泛化的影响),旨在消除显式的位置信息注入(例如通过早期 GPT 架构中的经典绝对位置嵌入层或现在的 RoPE)。
在基于 Transformer 的 LLM 中,位置编码通常是必需的,因为自注意力机制会独立于顺序来处理 token。绝对位置嵌入通过添加一个额外的嵌入层来解决这个问题,该嵌入层会将信息添加到 token 嵌入中。
图 22:来自我的《从头开始构建大型语言模型》一书(https://www.amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167)的修改图,展示了绝对位置嵌入。
另一方面,RoPE 通过相对于其标记位置旋转查询和键向量来解决这个问题。
然而,在 NoPE 层中,根本没有添加任何位置信号:不是固定的,不是学习到的,也不是相对的。什么都没有。
即使没有位置嵌入,由于因果注意力掩码的存在,模型仍然知道哪些标记在前面。此掩码阻止每个标记关注后面的标记。因此,位置t处的标记只能看到位置≤ t处的标记,从而保持了自回归排序。
因此,虽然没有明确添加位置信息,但模型结构中仍然隐含着方向感,而 LLM 在常规的梯度下降训练中,如果发现方向感对优化目标有利,就可以学习利用它。(更多信息,请参阅 NoPE 论文的定理。)
所以,总体来说,NoPE 论文不仅发现不需要位置信息注入,而且还发现 NoPE 具有更好的长度泛化能力,这意味着随着序列长度的增加,LLM 应答性能下降得更少,如下图所示。
图 23:NoPE 论文(https://arxiv.org/abs/2305.19466)中的注释图,显示 NoPE 具有更好的长度泛化能力。
请注意,上述实验是使用一个相对较小的 GPT 类模型进行的,该模型包含约 1 亿个参数,上下文规模也相对较小。目前尚不清楚这些发现能否推广到更大规模的当代 LLM。
因此,SmolLM3 团队可能仅在每 4 层“应用”NoPE(或者更确切地说省略了 RoPE)。
8. KIMI2
Kimi 2最近在 AI 社区引起了轰动,因为它是一个性能卓越的开放权重模型。基准测试显示,它的性能堪比谷歌 Gemini、Anthropic 的 Claude 以及 OpenAI 的 ChatGPT 等顶级专有模型。
值得一提的是,它使用了相对较新的Muon优化器的一个变体来替代 AdamW。据我所知,这是 Muon 首次用于这种规模的生产模型,而非 AdamW(此前,它仅被证明可以扩展到 16B)。这带来了非常漂亮的训练损失曲线,这可能有助于该模型跃居上述基准测试的榜首。
虽然有人评论说损失函数异常平滑(因为没有尖峰),但我认为它并非异常平滑(例如,参见下图中的 OLMo 2 损失曲线;此外,梯度的 L2 范数可能是追踪训练稳定性的更好指标)。然而,值得注意的是损失曲线衰减得如此之好。
然而,正如本文介绍中所提到的,培训方法是另一个话题。
该模型本身有 1 万亿个参数,这确实令人印象深刻。
截至撰写本文时,它可能是这一代最大的 LLM(考虑到 Llama 4 Behemoth 尚未发布、专有 LLM 不算数以及谷歌的 1.6 万亿Switch Transformer是来自不同世代的编码器-解码器架构等限制)。
它也完成了一个循环,因为 Kimi 2 使用了我们在本文开头介绍过的 DeepSeek-V3 架构,只不过他们把它做得更大了,如下图所示。
图 25:DeepSeek V3 和 Kimi K2 的架构比较。
如上图所示,Kimi 2.5 与 DeepSeek V3 基本相同,只是它在 MoE 模块中使用了更多的专家,而在多头潜在注意力 (MLA) 模块中使用了更少的头。
Kimi 2 并非凭空而来。早期在《Kimi k1.5:使用 LLM 扩展强化学习》论文中讨论的 Kimi 1.5 模型也令人印象深刻。然而,不幸的是,DeepSeek R1 模型论文恰好在 1 月 22 日同一天发布。此外,据我所知,Kimi 1.5 的权重从未公开分享过。
所以,Kimi K2 团队很可能牢记了这些教训,并在 DeepSeek R2 发布之前就将 Kimi K2 作为开放重量模型进行了分享。截至本文撰写时,Kimi K2 是最令人印象深刻的开放重量模型。
译自:https://sebastianraschka.com/blog/2025/the-big-llm-architecture-comparison.html
本文转载自大模型自然语言处理 作者:Raschka
