大模型从0到1|第三讲:详解现代LLM基础架构¶
课程信息:CS336 | 讲师:Tatsu H | 幻灯片总数:68
Part 1: 课程概览 (Introduction)¶
Page 1: 标题页
* 内容: 课程名称 "Lecture 3: Everything you didn't want to know about LM architecture and training"。
* 解析: 这一讲主要关注那些我们在调用 API 时看不到,但自己训练模型时必须决定的“肮脏细节”。
Page 2: 课程目标 (Outline & Goals)
* 内容:
1. 回顾标准 Transformer。
2. 分析主流大模型(Big LMs)的架构共性。
3. 探讨常见的架构变体(Variations)及其取舍。
* 核心: "Today's theme: the best way to learn is hands-on experience... try to learn from others."(从前人的实验中总结最佳实践)。
Page 3: 后勤通知 (Logistics)
* 内容: 加入 Slack,检查作业版本等行政事项。
Page 4: 技术大纲
* 内容:
* 架构变体: 激活函数、FFN 设计、Attention 变体、位置编码。
* 超参数: 哪些参数重要(Scale)?哪些不重要?
* 稳定性: 如何防止训练崩溃(Stability tricks)。
Part 2: 架构演进与共性 (The Landscape)¶
Page 5: 原始 Transformer (The Original)
* 内容: 经典的 Attention is All You Need 架构图。
* 关键特征:
* Post-Norm: Add & Norm 在子层之后。
* Sinusoidal: 正弦位置编码。
* ReLU: 激活函数。
* Bias: 全连接层带有偏置项。
Page 6: 现代架构的“标准答案” (Modern Variant)
* 内容: 这就是你们在作业中要实现的架构(类似 Llama)。
* 改进点:
* Pre-Norm: Norm 放在子层之前。
* RMSNorm: 替代 LayerNorm。
* RoPE: 旋转位置编码。
* SwiGLU: 替代 ReLU。
* No Bias: 去掉 Bias。
Page 7: 模型大爆发
* 内容: 列举了近年来发布的各种模型(Llama 3, Nemotron, Qwen 1.5, Gemma 等)。
* 解析: 虽然名字不同,但它们在架构上惊人地相似,大多是对 Page 6 所述架构的微调。
Page 8: 架构统计大表 (The Data)
* 内容: 一个详细的表格,横轴是模型(GPT-3, PaLM, Llama, Chinchilla 等),纵轴是配置(Norm 类型, Pos Emb, Activation)。
* 趋势: 可以明显看到从早期的混乱(各种尝试)到后期的统一(Pre-norm, RoPE, SwiGLU 占主导)。
Page 9: 架构共性总结
* 内容: High level view。
* Pre-norm: 现在的绝对主流。
* RMSNorm: Llama 系列, PaLM, Gopher 使用。
* SwiGLU: Llama 系列, PaLM, Mistral 使用。
* RoPE: 几乎所有现代模型(除了 ALiBi 的少数拥护者)都使用。
Part 3: 归一化层详解 (Normalization)¶
Page 10: Pre-Norm vs Post-Norm 结构图
* 左图 (Post-LN): \(x = Norm(x + f(x))\)。BERT 时代的主流。
* 右图 (Pre-LN): \(x = x + f(Norm(x))\)。GPT-2 之后的主流。
* 区别: Pre-LN 保证了残差主干(Identity path)的纯净,梯度可以直接流到底。
Page 11: 为什么选 Pre-Norm? (原理)
* 内容: 引用 Xiong 2020。
* 核心: Pre-LN 使得深层网络的梯度范数(Gradient Norm)更稳定。它消除了梯度爆炸/消失的风险,使得我们可以使用更大的学习率,并且不需要很长时间的 Warmup。
Page 12: Pre/Post Norm 的实验对比
* 内容: 训练曲线图 (IWSLT)。
* 结论: Post-LN(蓝线)如果没有精心设计的 Warmup 很容易炸或者是收敛慢;Pre-LN(红/绿线)则非常稳健,收敛更快。
Page 13: 梯度范数可视化
* 内容: 图表展示了不同层级的梯度大小。
* 解析: Post-LN 的梯度在反向传播时,到底层会变得非常小(梯度消失);Pre-LN 的梯度在所有层级保持一致。
Page 14: 新趋势 - Double Norm?
* 内容: 提到了一些最新的模型(如 Grok, Gemma 2)。
* 做法: 它们在 Pre-Norm 的基础上,又在残差块的输出位置加了一个 Norm。这是一种“双保险”,为了在大规模训练时获得极致的稳定性。
Page 15: LayerNorm 回顾
* 内容: 标准 LayerNorm 的公式。
* 需要计算 Mean \(\mu\) 和 Variance \(\sigma^2\)。
* 操作:Centering (减均值) + Scaling (除标准差)。
Page 16: RMSNorm (Root Mean Square Norm)
* 内容: 公式:\(y = \frac{x}{\text{RMS}(x)} * \gamma\)。
* 核心: 去掉了减均值的操作。只做缩放(Rescaling),不做中心化(Re-centering)。
* 使用者: LLaMA, PaLM, T5。
Page 17: 为什么 RMSNorm 有效?
* 内容: 引用 Bjorck et al 2018。
* 解释: 实验发现 LayerNorm 的成功主要归功于 Scaling(缩放不变性),Mean(平移不变性)其实没啥用。既然没用,为了速度就干掉它。
Page 18: RMSNorm 的速度优势
* 内容: 性能对比表。
* 结论: 少了均值计算,RMSNorm 在 GPU 上通常能带来 10% - 40% 的速度提升(取决于实现细节)。这是大家在这个时代选择它的主要原因——快。
Page 19: 移除偏置项 (No Bias)
* 内容: 许多现代模型(PaLM, Llama)移除了所有 Linear 层和 Norm 层的 Bias 参数。
* 原因:
1. 对性能(PPL)几乎无影响。
2. 提升训练稳定性(Stability)。
3. 稍微减少一点显存和通信量。
Part 4: 激活函数 (Activations)¶
Page 20: 激活函数概览
* 内容: 标题页。我们将看到从 ReLU 到 SwiGLU 的演进。
Page 21: 经典激活函数
* ReLU: \(max(0, x)\)。简单,稀疏。
* GeLU: \(x \Phi(x)\)。BERT/GPT 使用。平滑,非线性更强。
Page 22: GLU (Gated Linear Units) 家族
* 内容: 介绍“门控”机制。
* 普通 FFN: \(Act(xW_1)W_2\)
* GLU FFN: \((Act(xW_1) \odot xV_1) W_2\)
* 解析: 引入了额外的投影层 \(V_1\) 作为“门”,通过逐元素乘法控制信息流。
Page 23: GeGLU
* 内容: 激活函数用 GeLU 的 GLU。
* 公式: \(\text{GeLU}(xW) \odot (xV) W_2\)
* 代表: PaLM, T5。
Page 24: SwiGLU (The Winner)
* 内容: 激活函数用 Swish 的 GLU。
* 公式: \(\text{Swish}(xW) \odot (xV) W_2\)
* 代表: LLaMA, Mistral。
* 注意: 因为多了 \(V\) 矩阵,为了参数量公平对比,通常会把 FFN 的中间维度从 \(4d\) 降到 \(\frac{8}{3}d\) (约 2.67d)。
Page 25: GLU 真的更好吗?
* 内容: 引用 Shazeer 2020 论文图表。
* 结论: 在相同 FLOPs 下,GLU 变体(ReGLU, SwiGLU)始终优于非门控版本(ReLU, GeLU)。
Page 26: 更多实验证据
* 内容: 另一组 PPL 对比。SwiGLU 表现最佳。
Page 27: 激活函数总结
* 结论: SwiGLU 提供了最佳的性能/计算比。虽然计算稍微繁琐(多一次矩阵乘),但效果值得。目前是 Llama-like 架构的标配。
Part 5: 并行层与位置编码 (Parallel Layers & Pos Embs)¶
Page 28: 串行 (Serial) vs 并行 (Parallel) 块
* Serial (标准): 先算 Attention,加残差,Norm,再算 MLP,加残差。
* Parallel: Attention 和 MLP 同时计算(共享同一个 Norm 后的输入),然后把它们的结果一起加到残差上。
* \(x_{out} = x + Attn(LN(x)) + MLP(LN(x))\)
Page 29: 并行层的权衡
* 优点: 训练速度快约 15%。因为矩阵乘法可以融合,通信可以合并。PaLM 和 GPT-J 采用了这种设计。
* 缺点: 性能略微下降(Worse Quality)。
* 现状: 大多数追求极致性能的模型(Llama)依然使用串行架构。
Page 30: 架构小结 (Summary so far)
* 必选: Pre-norm (RMSNorm)。
* 首选: SwiGLU。
* 可选: Parallel Layers(为了速度),No Bias(为了稳定)。
Page 31: 位置编码的演变
* 绝对位置: Sine/Cosine (Transformer), Learned (GPT-3)。
* 相对位置: T5, ALiBi。
* 旋转位置 (RoPE): LLaMA, PaLM。现在是 RoPE 的天下。
Page 32: RoPE 的核心理念
* 目标: 我们希望 Attention 机制能自然地捕捉 Token 之间的相对距离 \((m-n)\),而不是关心它们的绝对位置 \(m, n\)。
* 方法: 寻找一种变换,使得 \(\langle f(q, m), f(k, n) \rangle = g(q, k, m-n)\)。RoPE 通过复数旋转完美解决了这个问题。
Page 33: RoPE 的直观图示
* 视觉: 二维平面上的向量旋转。
* 原理解析: 将 Embedding 向量两两分组,视为复数。根据该 Token 的位置 \(m\),将复数向量旋转 \(m\theta\) 角度。两个向量点积时,角度相减,自然得到相对位置信息 \((m-n)\theta\)。
Page 34: RoPE 数学形式
* 内容: 旋转矩阵 \(R_{\Theta}\) 是块对角的。
* 特点: 这种稀疏结构意味着我们可以快速计算旋转,不需要进行庞大的矩阵乘法。
Page 35: RoPE 代码与外推
* 实现: 在每一层计算 Attention Score 之前,即时对 Q 和 K 进行旋转。
* 外推性 (Extrapolation): RoPE 在处理比训练长度更长的序列时,表现优于绝对位置编码,但仍有衰减。
Part 6: 超参数调优 (Hyperparameters)¶
Page 36: 哪些参数重要?
* FFN 维度?Head 数量?Head 大小?词表大小?
Page 37: FFN 膨胀系数
* 标准: \(d_{ff} = 4 d_{model}\)。
* SwiGLU: 由于参数变多了,通常设为 \(\frac{8}{3} d_{model} \approx 2.66 d_{model}\),以保持总参数量与标准版一致。
Page 38: Head Dimension (头维度)
* 黄金标准: 128。
* 观察: 无论是 7B 的 Llama 还是 175B 的 GPT-3,大家都在用 head_dim=128。
* 原因: 硬件亲和性。128 完美契合 GPU Tensor Core 的计算分块大小,效率最高。
Page 39: 为什么是 1-1 Ratio?
* 内容: 引用 Bhojanapalli et al 2020。
* 结论: 保持 n_heads * head_dim = d_model 是最佳实践。虽然理论上可以解耦,但没什么好处。
Page 40: 深宽比 (Aspect Ratio)
* 内容: 模型该深(Deep)还是该宽(Wide)?
* 结论: 在很大范围内,性能对形状不敏感。只要参数量够了就行。
* Sweet Spot: 通常 \(d_{model} \approx 128 \times n_{layers}\)。
Page 41: 深度限制
* 提示: 不要让模型太深(例如超过 100 层)。太深会导致推理延迟高,且流水线并行(Pipeline Parallelism)更难切分。稍微宽一点对系统更友好。
Page 42: 词表大小 (Vocab Size)
* 趋势: 变大。
* GPT-2: 50k
* Llama 2: 32k
* Llama 3: 128k
* Qwen: 150k
* 原因: 大词表 = 压缩率高 = 同样 2048 长度包含更多信息 = 推理更快。虽然 Embedding 层参数多了,但值得。
Page 43: 正则化 (Regularization)
* 问题: 这么多数据,还需要防过拟合吗?
Page 44: Dropout 的消失
* 内容: 预训练期间 Dropout = 0。
* 原因: 我们的数据量太大了(Trillions tokens),模型根本记不住,不存在过拟合。Dropout 只会浪费计算资源并减慢收敛。Llama, PaLM 全都把 Dropout 关了。
Page 45: Weight Decay 依然存在
* 内容: Weight Decay = 0.1。
* 原因: 它不仅是正则化,更重要的是它影响优化动态 (Optimization Dynamics)。有 Weight Decay,SGD/Adam 才能收敛到更平滑的极小值点。这个不能关。
Page 46: 超参数总结
* FFN Mult: 2.67 (SwiGLU)
* Head Dim: 128
* Dropout: 0
* Weight Decay: 0.1
Part 7: 训练稳定性与推理优化 (Stability & Inference)¶
Page 47: 稳定性技巧 (Stability Tricks)
* 背景: 训练大模型最怕遇到 Loss Spike(Loss 突然暴涨),这通常意味着你要回滚几十个小时的 Checkpoint,甚至从头再来。
Page 48: 元凶 - Softmax 溢出
* 内容: Softmax 里的 exp(x) 对大数值非常敏感。如果 Logits 稍微大一点,exp 就会溢出 FP16 的范围(NaN),导致训练崩溃。
Page 49: Trick 1 - z-loss
* 来源: PaLM 论文。
* 方法: 加一个辅助 Loss:\(L_{aux} = 10^{-4} \log^2 Z\) (\(Z\)是Softmax分母)。
* 作用: 惩罚过大的 Logits 总和,强制 Softmax 的 Logits 保持在 0 附近,防止爆炸。
Page 50: Trick 2 - QK Norm
* 来源: ViT-22B, Gilmer et al.
* 方法: 在计算 \(Q \cdot K^T\) 之前,先对 Query 和 Key 向量做 LayerNorm。
* 作用: 无论 Embedding 维度多大,强制 Q 和 K 的尺度保持不变,从而稳定 Attention Score。DCLM 和 Gemma 2 都在用。
Page 51: Trick 3 - Logit Soft-capping
* 来源: Gemma 2。
* 方法: \(logits = C \cdot \tanh(logits / C)\)。
* 作用: 用 tanh 物理截断 Logits,使其永远不会超过 \(C\)(例如 50)。这是一种硬约束,彻底消除了溢出可能。
Page 52: 推理优化 - Attention 瓶颈
* 问题: 推理时,KV Cache 占用大量显存,且搬运 KV Cache 是 IO 瓶颈。MHA (Multi-Head Attention) 每一层都要加载巨大的 KV 矩阵。
Page 53: MQA (Multi-Query Attention)
* 机制: 整个模型的所有 Query Heads 共享同一对 K 和 V Head。
* 优势: KV Cache 大小减少了 \(N_{head}\) 倍。推理飞快。
* 劣势: 模型表达能力受损,质量下降。
Page 54: GQA (Grouped-Query Attention)
* 机制: 折中方案。将 Query Heads 分组(例如 8 组),每组共享一对 K/V Head。
* 优势: 速度接近 MQA,质量接近 MHA。
* 地位: Llama 2/3, Mistral 的标配。现在基本上没人用标准 MHA 了。
Page 55: MQA vs GQA 性能图
* 内容: 图表显示 GQA 在保持高吞吐量的同时,PPL 损失极小。
Page 56: SWA (Sliding Window Attention)
* 机制: 强行限制 Attention 只看最近的 \(W\) 个 Token(如 4096)。
* 代表: Mistral 7B。
* 作用: 节省计算量,变成 \(O(N)\) 复杂度。
Page 57: 混合 Attention (Interleaving)
* 机制: Gemma 2 的做法。例如:层 1 用 SWA(局部),层 2 用 Full Attention(全局),交替进行。
* 作用: 既节省了计算,又保留了长距离建模能力。
Part 8: 总结 (Conclusion)¶
Page 58: 架构收敛 (Convergence)
* 核心结论: 2024-2025 年的 LLM 架构已经高度趋同,被称为 "Llama-like" 架构:
* Pre-RMSNorm
* SwiGLU
* RoPE
* GQA
* No Bias
Page 59: 为什么收敛到这套配置?
* Pre-norm: 为了梯度流(训练深层模型)。
* RMSNorm/SwiGLU: 为了计算效率和微小的性能增益。
* RoPE: 为了位置外推性。
* GQA: 为了推理成本。
Page 60: 警惕盲从 (Cargo Culting)
* 警告: 虽然我们要学习最佳实践,但不要盲目复制。很多配置(如 128 head dim)可能是因为硬件原因,也可能只是习惯,未必是科学上的最优解。
Page 61: 没讲到的内容
* Encoder-Decoder (T5): 现在的 LLM 几乎全是 Decoder-only。
* MoE: 下节课重点讲。
* SSM/Linear Attn: 很有趣,但还未动摇 Transformer 的统治地位。
Page 62: 总结
* 架构设计是系统工程(考虑硬件效率)、优化理论(考虑梯度流)和经验主义(看谁跑分高)的结合。
Page 63: 推荐阅读
* Llama 1/2/3 论文、PaLM 论文、Gopher 论文。重点读 Appendix 中的实验细节。
Page 64: 作业预告
* 实现一个带有 RoPE 和 RMSNorm 的现代 Transformer。
Page 65: 下节课预告
* Lecture 4: Mixture of Experts (MoE)。
Page 66: Q&A
* 问答环节。
Page 67: 参考文献 1
* 论文列表。
Page 68: 参考文献 2 / 结束
* 论文列表。课程结束。