Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

7.8 当前模型及若干数字

当前的 Transformer 语言模型采用了许多先进设置。其中一些前文已经提到,例如旋转位置嵌入(RoPE)、RMSNorm,以及使用 SwiGLU 激活函数的门控前馈层(Shazeer, 2020)。这些方法主要用于让模型变得更好、更准确。

还有一些我们完全没有讨论过的进展,重点在于效率,即如何让模型运行得更快或占用更少内存。为了让读者对这类技术有所了解,这里简要介绍其中一种:KV 缓存。

回顾图 7.11 和式 7.34(在下面重复给出),在训练中,注意力向量可以通过两次矩阵乘法非常高效地并行计算:

head=softmax(QKdk)V(7.59)\operatorname { head } = \operatorname { softmax } \left(\frac {\mathbf { Q } \mathbf { K } ^ { \top }}{\sqrt {d _ { k }}}\right) \mathbf { V }\tag{7.59}

遗憾的是,推理时无法像训练时一样进行如此高效的注意力计算。这是因为在推理阶段,我们以迭代方式逐个生成下一词元。对于一个刚刚生成的新词元(记为 xi\mathbf { x } _ { i }),需要分别乘以 WQ\mathbf { W } ^ { Q }WK\mathbf { W } ^ { K }WV\mathbf { W } ^ { V },以计算它的查询向量、键向量和值向量。然而,重新计算所有先前词元 x<i\mathbf { x } _ { < i } 的键向量和值向量会浪费计算时间,因为我们在先前步骤中已经算过它们了!

KV 缓存(KV cache)是一种避免这类时间浪费的技术。每当计算出键向量和值向量时,我们不再任其丢失,而是把它们存入内存中的缓存;以后需要时,直接从缓存中取出即可。图 7.23 在图 7.11 的基础上作了修改,展示单个新词元所需的计算,并标出哪些值可以从 KV 缓存中取得,而不必重新计算。

图 7.23 注意力计算的一部分(提取自图 7.11)。黑色表示在计算第 4 个词元的注意力分数时,可以存入缓存而不必重新计算的向量。

还有许多其他同样以效率为重点的创新,包括混合专家模型、分组查询注意力(GQA)以及量化。我们希望在第二卷的未来版本中介绍这些内容。

为了让读者对架构参数的大致范围有一个基本概念,图 7.24 列出了少量当前及早期 LLM 的若干架构参数。由于 GPT-5、Claude 和 Gemini 等前沿专有模型的开发者并未披露这些信息,因此这里只列出开放模型。请注意,其中一些模型采用了 GQA 和 SwiGLU 等现代架构(它们的 A 不同,而且不会严格将 dffd _ { f f } 设为 dd 的 4 倍),所以这些参数值只能视为粗略近似,用于了解大致规模。

模型

年份

L

d

A

dffd_{ff}

|V|

上下文

参数量

GPT-2 XL

2019

48

1600

25

6400

50K

1K

1.5B

GPT-3

2020

96

12288

96

49152

50K

2K

175B

Qwen3-0.6B

2025

28

1024

16

3072

152K

32K

0.6B

Qwen3-32B

2025

64

5120

64

25600

152K

128K

32B

Llama 3.1 8B

2024

32

4096

32

14336

128K

128K

8B

Llama 3.1 405B

2024

126

16384

128

53248

128K

128K

405B

图 7.24 一些 Transformer 语言模型的配置。L 表示层数,d 表示模型维度,A 表示注意力头数,dffd _ { f f } 表示前馈维度,V| V | 表示词表大小。