跳到主要内容主流大模型架构全景:GPT、LLaMA、DeepSeek 与 Qwen 深度对比 | 极客日志PythonAI算法
主流大模型架构全景:GPT、LLaMA、DeepSeek 与 Qwen 深度对比
主流大模型架构涵盖 GPT、LLaMA、DeepSeek 及 Qwen 系列。GPT 确立自回归预训练范式,引入 ICL 与 Pre-Norm;LLaMA 通过 RMSNorm、SwiGLU 和 RoPE 提升效率;DeepSeek 创新 MLA 压缩 KV Cache 及细粒度 MoE 架构;Qwen 凭借大词表与 YARN 扩展上下文。MoE 技术平衡参数规模与推理成本,Scaling Laws 指导数据与模型配比。Tokenizer 设计影响编码效率,选型需结合场景与资源。各架构原理、代码实现及面试高频考点,助读者掌握核心权衡与设计逻辑。
林间仙子3 浏览 主流大模型架构全景:GPT、LLaMA、DeepSeek 与 Qwen 深度对比
学习目标:理解主流模型的设计逻辑与权衡,不仅知道名字,更能画出架构图并解释背后的原因。
GPT 系列架构演进 | 从 GPT-1 到 GPT-4
核心概念
GPT(Generative Pre-trained Transformer)是 OpenAI 推出的系列模型,核心思想是在大量文本上做自回归预训练,然后通过 prompt 引导完成各种任务。
- GPT-1 (2018):首次证明'预训练 + 微调'在 NLP 上的威力。12 层 Transformer Decoder,117M 参数。使用 BookCorpus 做 CLM 预训练。
- GPT-2 (2019):证明'大模型 + 大数据 + zero-shot'可行。1.5B 参数。关键洞察是不需要微调,prompt 就能做任务。
- GPT-3 (2020):175B 参数,ICL 的标志性模型。96 层、12288 维度、96 头。训练数据 300B tokens。核心发现是 few-shot 就能做几乎任何任务。
- GPT-4 (2023):多模态,传闻采用 MoE 架构(8 个专家,每次激活 2 个,总参数约 1.8T)。
| 代际 | 参数量 | 层数 | 隐藏维度 | 头数 | 上下文 | 核心创新 |
|---|
| GPT-1 | 117M | 12 | 768 | 12 | 512 | 预训练 + 微调 |
| GPT-2 | 1.5B | 48 | 1600 | 25 | 1024 | Zero-Shot, Pre-Norm |
| GPT-3 | 175B | 96 | 12288 | 96 | 2048 | ICL, Few-Shot |
| GPT-4 | ~1.8T? | ? | ? | ? | 128K | 多模态,MoE |
原理推导
GPT 的预训练目标:Causal Language Modeling (CLM)
$$\mathcal{L} = -\sum_{t=1}^{T} \log P(x_t | x_{<t}; \theta)$$
每个 token 基于前面所有 token 预测下一个,所有位置都参与 loss 计算。
ICL(In-Context Learning)为什么有效?
- GPT-3 论文解释:大模型在预训练时隐式学会了'从上下文示例中学习'。
- 贝叶斯推理解释:ICL 是在做隐式贝叶斯推理。
- 梯度下降视角:Transformer 的前向传播等价于在隐式执行梯度下降。
- 直觉理解:预训练数据中天然包含'示例→回答'模式。
Pre-Norm vs Post-Norm:为什么 GPT-2 切换到 Pre-Norm?
Post-Norm: x → Attn → Add → LN → FFN → → LN
PreNorm: x → LN → Attn → → LN → FFN →
Add
-
Add
Add
数学分析显示,Post-Norm 深层梯度容易消失,而 Pre-Norm 残差直连保证梯度直通,训练更稳定。代价是 Pre-Norm 的最终表示可能'塌缩'到残差通道,需要在最后加一层 LN。
代码实现
class GPT2Block(nn.Module):
def __init__(self, d_model, n_heads, d_ff, dropout=0.1):
super().__init__()
self.ln1 = nn.LayerNorm(d_model)
self.attn = MultiHeadAttention(d_model, n_heads, dropout)
self.ln2 = nn.LayerNorm(d_model)
self.ffn = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.GELU(),
nn.Linear(d_ff, d_model),
nn.Dropout(dropout)
)
def forward(self, x, mask=None):
x = x + self.attn(self.ln1(x), mask=mask)
x = x + self.ffn(self.ln2(x))
return x
工程实践
GPT 系列的关键工程决策包括:GPT-1 到 GPT-2 从 Post-Norm 换到 Pre-Norm;GPT-3 训练采用 Model Parallelism+Data Parallelism,成本约 1200 万美元;GPT-4 传闻成本更高,使用约 25000 个 A100 训练约 90 天。
面试考点精讲
Q1:GPT-1/2/3/4 的核心区别?
快速回答:GPT-1 证明预训练有效,GPT-2 证明 zero-shot 可行,GPT-3 证明 ICL 有效,GPT-4 加入多模态和 MoE。最重要的范式转变是 GPT-2 到 GPT-3:从'预训练 + 微调'变成'预训练+prompt',催生了整个 prompt engineering 领域。
Q2:GPT-3 的 175B 参数是怎么分布的?
96 层,每层约 1.8B 参数。MHA(4d^2) + FFN(8d^2) + Embedding。
Q3:GPT-4 为什么可能用 MoE?
MoE 让总参数量大(知识容量大)但推理时只激活一部分(保持速度)。多个信源证实 8 专家 Top-2 架构。
Q4:ICL 的理论解释有哪些?Transformer 如何隐式实现梯度下降?
三种主流解释:(1) 贝叶斯推理——模型在隐式推断任务分布;(2) 梯度下降——Akyürek 等人证明线性 Attention 层的前向传播数学上等价于一步梯度下降,示例相当于'训练数据';(3) 任务识别——模型在预训练时见过类似任务模式,ICL 本质是模式匹配。梯度下降视角最有启发性,对于线性回归任务,单层线性 Attention 的前向传播可以写成 $\hat{y} = W_{OV} \sum_i \text{softmax}(q \cdot k_i) v_i$,这与在示例上做一步 GD 后的预测数学形式一致。
Q5:GPT-3 的训练数据质量控制做了什么?
(1) 用高质量参考语料训练二分类器,对 Common Crawl 做质量过滤;(2) 基于文档间 n-gram 重叠做模糊去重;(3) 用 LSH 做近似去重;(4) 对高质量来源(Wikipedia、书籍)过采样 2-3 倍。最终从 45TB 过滤到 570GB。
LLaMA 系列 | 开源 LLM 的标杆
核心概念
LLaMA-1 (2023.02):Meta 的开源 LLM,证明'高质量数据 + 充分训练'比盲目增大模型更有效。
关键设计选择:RMSNorm + Pre-Norm、SwiGLU 激活、RoPE 位置编码、无 Bias。
Input tokens ↓ [Embedding (无位置编码)] ↓
┌──────────────────────────────┐ ×N 层
│ RMSNorm → GQA + RoPE → Add │
│ RMSNorm → SwiGLU FFN → Add │
└──────────────────────────────┘
↓ [RMSNorm → Linear → Softmax]
↓ Output logits
LLaMA-2 (2023.07):2T tokens 训练、上下文 2K→4K、70B 用 GQA、推出 Chat 版。
LLaMA-3 (2024.04):15T+ tokens、词表 128K、上下文 128K、405B 版本。
| 参数 | LLaMA-7B | LLaMA-13B | LLaMA-70B | LLaMA-405B |
|---|
| 层数 | 32 | 40 | 80 | 126 |
| 维度 | 4096 | 5120 | 8192 | 16384 |
| 头数 | 32 | 40 | 64 | 128 |
| KV 头数 | 32 | 40 | 8 | 8 |
| FFN 维度 | 11008 | 13824 | 28672 | 53248 |
原理推导
RMSNorm vs LayerNorm
LayerNorm 需要计算均值和方差,RMSNorm 只计算 RMS,省去均值和偏移。优势是计算量减少约 10-15%,效果几乎无差别。去掉了 re-centering(减均值),只保留 re-scaling。
SwiGLU 激活函数
SwiGLU(x) = Swish(xW_1) ⊗ (xW_2)。其中 Swish(x) = x · σ(βx),⊗ 是逐元素乘法。对比普通 FFN(2 个矩阵),SwiGLU 用 3 个矩阵,但实验表明在同等参数量下效果更好。PaLM、LLaMA、Qwen 都采用。
| 方案 | Q 头数 | KV 头数 | KV-Cache 大小 | 精度 |
|---|
| MHA | h | h | 2×h×dk×L | 最高 |
| MQA | h | 1 | 2×dk×L | 有损失 |
| GQA-g | h | g | 2×g×dk×L | 接近 MHA |
GQA 是 MHA 和 MQA 的折中:将 h 个 Query 头分成 g 组,每组共享一对 KV 头。LLaMA-70B 用 h=64, g=8。
RoPE(旋转位置编码)核心思想
将位置信息编码为旋转矩阵,使得 $q_m^T k_n$ 只依赖于相对位置 $m-n$。优势是天然编码相对位置、可以通过 NTK 扩展到更长序列、对长距离衰减有良好特性。
- Embedding: 32000 x 4096 = 131M
- 每层 MHA: 4 x 4096^2 = 67M
- 每层 FFN(SwiGLU): 3 x 4096 x 11008 = 135M
- 32 层:(67M+135M) x 32 = 6464M
- 总计:~6.7B
代码实现
class LLaMABlock(nn.Module):
def __init__(self, d_model, n_heads, n_kv_heads, d_ff):
super().__init__()
self.norm1 = RMSNorm(d_model)
self.attn = GroupedQueryAttention(d_model, n_heads, n_kv_heads)
self.norm2 = RMSNorm(d_model)
self.ffn = SwiGLU_FFN(d_model, d_ff)
def forward(self, x, freqs_cis, mask=None):
h = x + self.attn(self.norm1(x), freqs_cis, mask)
out = h + self.ffn(self.norm2(h))
return out
工程实践
LLaMA 的核心贡献:证明数据质量和训练充分度比模型大小更重要。7B 用 1.4T tokens 训练,效果优于 175B 的 GPT-3。
面试考点精讲
Q1:LLaMA 相比 GPT-3 做了哪些架构改进?
RMSNorm 替代 LayerNorm、SwiGLU 替代 GeLU、RoPE 替代 Learned PE、去掉所有 bias。组合效果显著。
Q2:LLaMA-2 的 Chat 版本怎么训练的?
先 SFT(27K 高质量数据),再 RLHF(PPO),迭代 5 轮。迭代是关键——每轮用更好模型收集更好数据。
Q3:LLaMA-3 相比 LLaMA-2 的重大变化?
数据从 2T 增到 15T+,词表 32K 增到 128K,上下文 4K 增到 128K。8B 效果接近 LLaMA-2-70B。
Q4:RoPE 是如何编码相对位置信息的?
RoPE 对 query 和 key 向量按维度对施加不同频率的旋转矩阵。两个位置的内积只依赖于 $(m-n)$,天然编码相对位置。低频维度编码远距离关系,高频维度编码近距离关系。NTK-aware 扩展通过调整 base 频率实现长度外推。
Q5:LLaMA-3 的训练数据策略有什么变化?
(1) 数据量从 2T 暴增到 15T+ tokens;(2) 大幅增加代码和数学数据占比;(3) 使用质量分类器和去重 pipeline 更激进过滤;(4) 增加多语言数据覆盖。关键洞察:在 8B 规模上用 15T 数据 over-training,效果接近 70B 模型用 2T 数据。
Q6:为什么 LLaMA 去掉了所有 bias?
实验发现去掉 bias 对模型质量影响极小,但能减少参数量和计算量。QKV 投影去掉 bias 后矩阵乘法可以更高效地做张量并行(不需要额外 broadcast bias)。PaLM 也做了同样选择。
【大厂真题】
真题 1:字节跳动 架构岗——'从 MHA 到 GQA 减少了 KV 头数,那它到底是在解决训练瓶颈还是推理瓶颈?如果把 GQA 用到训练中,会有性能提升吗?'
痛点剖析:考察对计算体系结构(Compute-bound vs Memory-bound)的透彻理解。很多人以为改变网络结构就能全方位加速。
极客解法:核心定性:GQA 纯粹是为了解决推理阶段的显存墙(Memory-bound)问题,对训练阶段(Prefill/训练前向)的速度提升微乎其微。原理解释:在训练阶段,所有的 Token 是并行计算的(一个大矩阵乘法 $Q \times K^T$),此时是计算密集型(Compute-bound)。显存主要被模型权重和中间激活(Activation)占据,KV Cache 根本没存下来,所以 GQA 省 KV 显存的优势在训练时发挥不出来。推理阶段的蜕变:但在推理的 Decoding 阶段(逐字生成),每次只生成一个 Token,但要读取前面所有 Token 的 KV Cache。这时的瓶颈变成了算力都在等显存喂数据(Memory Bandwidth Bound)。GQA 通过几组 Query 共享一个 KV,把需要读取的 KV 总量砍掉了几倍甚至几十倍(比如 LLaMA3 的 8 倍),极大地缓解了带宽压力,让生成阶段的速度直接起飞,并且允许单卡塞进大几倍的 Batch Size。
真题 2:DeepSeek 算法研发——'DeepSeek V3 和 R1 采用了 DeepSeekMoE 架构,它与传统的 Mixtral MoE(Top-2)相比,在路由机制和专家颗粒度上做了什么颠覆性设计?为什么这么做能解决常识知识遗忘问题?'
痛点剖析:考察对 MoE 演进前沿的追踪,以及'专家协同'与'知识分配'的底层逻辑。
极客解法:细粒度专家(Fine-grained Experts):传统 MoE(如 Mixtral 8x7B)是 8 个大专家,选 2 个激活。这导致一个专家被激活时,带入了大量冗余参数。DeepSeekMoE 的理念是'专家拆碎',比如把大专家拆成了 256 个小专家(也就是单个专家参数量极小),然后每次路由激活 Top-8 个小专家。相同的激活参数量下,这种细粒度允许模型进行更精细的知识组合(组合爆炸优势)。共享专家路由(Shared Expert Isolation)——解决遗忘的核心:痛点:传统 MoE 中,所有的标点符号、语法连接词('的'、'is')等通用长尾知识,会被迫通过路由分配到某个专家中,这导致该专家被通用知识塞满,无法精专某项技能(Knowledge Collapse)。极客破局:DeepSeekMoE 硬性划出了一块非路由的共享专家(Shared Experts)(比如 1 个或几个),这部分专家对于每个 Token 是**必将激活(Always-on)**的。化学反应:模型很快学会把所有通用知识、上下文基础逻辑全都塞给共享专家,而让剩下的 256 个路由专家彻底'放飞自我',专精于数学、物理、代码等垂直领域。这从根本上隔离了通用知识与领域知识,彻底解决了微调或长文本推理时的常识遗忘(Catastrophic Forgetting)打架问题。
DeepSeek 系列 | MoE 与创新架构
核心概念
DeepSeek-V2 (2024.05) 两大创新:
- MLA(Multi-Latent Attention):把 KV 压缩成低维 latent 向量,KV-Cache 仅为 MHA 的 5.4%
- DeepSeekMoE:160 个细粒度专家 +2 个共享专家,选 6 个
- 671B 总参数,37B 激活参数
- 256 个路由专家 +1 个共享专家,每个 token 路由到 Top-8 个路由专家(加上始终激活的 1 个共享专家,共 9 个参与计算)
- 辅助损失无关的负载均衡:用动态 bias 替代辅助 loss
- FP8 混合精度训练
- 训练成本仅 557 万美元
- 纯 RL 训练让模型自发学会推理
- GRPO(不需要 Critic 模型)
原理推导
MLA 核心思想与维度分析
标准 MHA 每个 token 缓存:$2 \times n_h \times d_k = 2 \times 128 \times 128 = 32768$ 个数值。
MLA 压缩流程:
- 压缩:$c_{KV} = W_{DKV} \cdot x$,$c_{KV} \in \mathbb{R}^{d_c}$($d_c = 512 \ll n_h d_k = 16384$)
- 推理时只缓存 $c_{KV}$(512 个数值 vs 32768 个,压缩比 5.4%)
- 计算时恢复:$K = W_{UK} \cdot c_{KV}$,$V = W_{UV} \cdot c_{KV}$
比 GQA 更灵活——'软压缩'vs'硬共享'。GQA 是固定分组共享 KV,MLA 是学习一个低维投影,信息保留更充分。
辅助损失无关的负载均衡机制(DeepSeek-V3)
传统方法:$\mathcal{L}{total} = \mathcal{L}{LM} + \alpha \cdot \mathcal{L}_{balance}$,α太大伤害路由质量,太小负载不均。
V3 方法:为每个专家维护一个动态 bias $b_i$。
- 每步统计各专家负载 $l_i$
- 负载低于平均 → $b_i$ 增大(吸引更多 token)
- 负载高于平均 → $b_i$ 减小
- 路由打分:$s_i' = s_i + b_i$,但 $b_i$ 不参与梯度计算
优势:完全不影响主 loss 的梯度,路由质量不受损。
DeepSeek-R1 训练 Pipeline
Stage 1: 冷启动 SFT → 基础指令跟随能力
Stage 2: 大规模 RL(GRPO)→ 模型自发学会推理(涌现 CoT)
Stage 3: Rejection Sampling → 收集高质量推理数据
Stage 4: SFT + RL → 最终对齐(格式、安全、有用性)
Stage 5: 蒸馏 → R1-Distill 系列(1.5B~70B)
关键发现:Stage 2 中模型自发学会了"aha moment"——在推理过程中自我纠错。
DeepSeekMoE
$y = \sum_{i=1}^{N_s} \text{FFN}i^{(s)}(x) + \sum{j=1}^{K} g_j \cdot \text{FFN}_{r_j}^{(r)}(x)$
共享专家提供通用能力,路由专家提供专业能力。
代码实现
class MultiLatentAttention(nn.Module):
def __init__(self, d_model, n_heads, d_compress):
super().__init__()
self.d_k = d_model // n_heads
self.w_dkv = nn.Linear(d_model, d_compress, bias=False)
self.w_uk = nn.Linear(d_compress, n_heads * self.d_k, bias=False)
self.w_uv = nn.Linear(d_compress, n_heads * self.d_k, bias=False)
self.w_q = nn.Linear(d_model, n_heads * self.d_k, bias=False)
self.w_o = nn.Linear(n_heads * self.d_k, d_model, bias=False)
工程实践
V3 的训练效率优化:FP8 训练节省约 50% 显存、DualPipe 流水线将 bubble 率从 33% 降到 10%。
面试考点精讲
Q1:MLA 相比 GQA 的优势?
可学习的压缩比硬共享更灵活,压缩率更高(5.4%),精度损失更小。
Q2:DeepSeek-V3 为什么不用辅助损失?
辅助损失会伤害路由质量。V3 用动态 bias——负载低的专家自动加正 bias 吸引更多 token,不影响主 loss 梯度。
Q3:DeepSeek-R1 的核心创新?
纯 RL 训练(不做 SFT)也能让模型自发学会推理。用 GRPO 替代 PPO,不需要 Critic 模型。
Q4:MLA 与 Linear Attention 有什么关系?
两者都试图降低 KV-Cache 的开销。Linear Attention 用核函数近似 softmax 消除序列维度的二次复杂度;MLA 保留标准 softmax Attention,但把 KV 投影到低维空间。MLA 在实践中精度保持更好,因为没有牺牲 Attention 的表达能力。
Q5:DeepSeek-V3 的训练成本为什么只有 557 万美元?
三个关键因素:(1) FP8 混合精度训练节省约 50% 显存和计算;(2) DualPipe 流水线将 bubble 率从 33% 降到 10%,GPU 利用率极高;(3) MoE 架构使得 671B 总参数只需 37B 激活参数,等效 Dense 模型的训练 FLOPs 远低于同参数量 Dense 模型。对比 GPT-4 传闻 1 亿美元以上的训练成本,V3 效率提升了约 20 倍。
Q6:DeepSeek-V3 的 FP8 训练具体怎么做?
采用 Per-Tensor 量化(而非 Per-Channel),对 GEMM 的输入做 FP8 量化,用 E4M3 格式存前向激活,E5M2 格式存反向梯度。关键 trick 是保留 FP32 的 master weight 做累加,只在矩阵乘法中用 FP8。Loss 几乎无损失,但训练吞吐提升约 40%。
Qwen 系列 | 阿里的全能选手
核心概念
Qwen-2.5 (2024.09):0.5B 到 72B 全系列,18T tokens 训练,151K 超大词表。
| 特性 | Qwen-2.5 |
|---|
| 注意力 | GQA |
| FFN | SwiGLU |
| 位置编码 | RoPE |
| 词表 | 151,643 |
| Bias | QKV 有 bias |
| 规格 | 0.5B | 1.5B | 7B | 14B | 32B | 72B |
|---|
| 层数 | 24 | 28 | 28 | 40 | 64 | 80 |
| 维度 | 896 | 1536 | 3584 | 5120 | 5120 | 8192 |
| Q 头数 | 14 | 12 | 28 | 40 | 40 | 64 |
| KV 头数 | 2 | 2 | 4 | 8 | 8 | 8 |
| FFN 维度 | 4864 | 8960 | 18944 | 13824 | 27648 | 29568 |
- 视觉编码器:ViT-G/14(约 2B 参数)
- 连接方式:Cross-Attention Resampler,将视觉 token 压缩到固定数量(256 个)
- 支持任意分辨率输入,动态切片后分别编码再拼接
- 基于 Qwen-2.5 基座,增加代码数据比例(约 40% 代码数据)
- 支持 128K 长上下文,适合大型代码仓库分析
- 在 HumanEval/MBPP 上与 GPT-4 接近
原理推导
- 编码效率高:同样文本用更少 token→推理更快
- Embedding 层参数增大:但对 7B+ 模型影响<5%
YARN 位置编码扩展
Qwen 使用 YARN(Yet Another RoPE Extension)扩展上下文长度:
- 将 RoPE 频率分成三组:高频保持不变、中频做 NTK 插值、低频做线性插值
- 加上 attention scaling factor 补偿长序列的注意力稀释
- 效果:4K 训练上下文可以扩展到 32K-128K
工程实践
Qwen 的特色能力矩阵:Qwen-Math(数学)、Qwen-Coder(代码)、Qwen-VL(视觉)、Qwen-Audio(音频)。
| 能力 | Qwen-72B | LLaMA-70B | DeepSeek-V2 |
|---|
| 中文 | 最强 | 一般 | 强 |
| 英文 | 强 | 最强 | 强 |
| 代码 | 强 | 强 | 强 |
| 数学 | 最强 | 一般 | 强 |
| 多模态 | 原生支持 | 需 LLaVA | 不支持 |
| 词表大小 | 151K | 128K | 100K |
面试考点精讲
Q1:Qwen 为什么选 151K 词表?
提高中文编码效率。32K 词表中文每字 2-3 个 token,151K 可能 1 个 token。推理快 40%+。
Q2:Qwen 和 LLaMA 架构区别?
基础架构几乎相同,主要差异在词表大小、QKV 是否有 bias、训练数据的语言分布。
Q3:Qwen 的 YARN 位置编码扩展是什么?
YARN 将 RoPE 频率分为高、中、低三组分别处理——高频不动、中频 NTK 插值、低频线性插值,加上 attention scaling 因子。相比简单线性插值或 NTK-aware,YARN 在长距离上保持更好的注意力分辨率。
Q4:Qwen-VL 如何处理图文混合输入?
图像经 ViT 编码后通过 Resampler 压缩成固定数量的视觉 token(256 个),与文本 token 在同一序列中拼接送入 LLM。支持任意分辨率——大图先切成多个 patch 分别编码再拼接,保留空间信息。多图多轮对话也支持。
MoE 架构 | 用更少算力训练更大模型
核心概念
MoE 核心:把 FFN 替换成多个'专家',每次只激活几个。总参数大(知识多),激活参数少(推理快)。
| 模型 | 总参数 | 激活参数 | 专家数 | Top-K | 共享专家 |
|---|
| Switch Transformer | 各种 | 各种 | 各种 | 1 | 无 |
| GShard | 各种 | 各种 | 各种 | 2 | 无 |
| Mixtral 8x7B | 46.7B | 12.9B | 8 | 2 | 无 |
| DeepSeek-V2 | 236B | 21B | 162 | 8 | 2 |
| DeepSeek-V3 | 671B | 37B | 257 | 8+1 共享 | 1 |
| 阶段 | 模型 | 核心创新 |
|---|
| 2022 | Switch Transformer | Top-1 路由,简化通信 |
| 2022 | GShard | Top-2 路由,容量因子 |
| 2024 | Mixtral | 第一个开源高质量 MoE |
| 2024 | DeepSeekMoE | 细粒度专家 + 共享专家 |
| 2024 | DeepSeek-V3 | 无辅助损失负载均衡 |
原理推导
Router:$g(x) = \text{TopK}(\text{softmax}(W_g \cdot x))$
负载均衡损失:$\mathcal{L}{\text{balance}} = N \cdot \sum{i=1}^{N} f_i \cdot P_i$
其中 $f_i$ 是专家 $i$ 实际接收的 token 比例,$P_i$ 是所有 token 对专家 $i$ 的路由概率均值。
Capacity Factor:每个专家能处理的最大 token 数 = $CF \times \frac{T}{N}$($T$=总 token 数,$N$=专家数)。CF=1.25 意味着允许 25% 的不均衡。超出容量的 token 被丢弃或溢出到其他专家。
Expert Parallelism 通信
MoE 的 All-to-All 通信模式:
Step 1: 每个 GPU 计算所有 token 的路由决策
Step 2: All-to-All → 把 token 发送到对应专家所在的 GPU
Step 3: 每个 GPU 上的专家处理分配到的 token
Step 4: All-to-All → 把结果发回原始 GPU
通信量 = $O(\text{batch_size} \times d_{model})$,与专家数无关但与 batch 大小线性相关。
代码实现
class MoELayer(nn.Module):
def __init__(self, d_model, d_ff, n_experts, top_k):
super().__init__()
self.gate = nn.Linear(d_model, n_experts, bias=False)
self.experts = nn.ModuleList([
SwiGLU_FFN(d_model, d_ff) for _ in range(n_experts)
])
self.top_k = top_k
def forward(self, x):
bsz, seq_len, d = x.shape
x_flat = x.view(-1, d)
logits = self.gate(x_flat)
weights, indices = torch.topk(
torch.softmax(logits, dim=-1), self.top_k
)
weights = weights / weights.sum(dim=-1, keepdim=True)
output = torch.zeros_like(x_flat)
for i, expert in enumerate(self.experts):
mask = (indices == i).any(dim=-1)
if mask.any():
expert_input = x_flat[mask]
expert_output = expert(expert_input)
w = weights[mask][indices[mask] == i]
output[mask] += w.unsqueeze(-1) * expert_output
return output.view(bsz, seq_len, d)
面试考点精讲
Q1:MoE vs Dense 模型的优缺点?
MoE 同算力参数更多(知识更多),但显存占用大(总参数要全加载)、通信开销高、训练不稳定。
Q2:路由崩溃是什么?怎么解决?
所有 token 路由到少数专家。解决:辅助损失、容量因子限制、Noise Top-K。
Q3:细粒度专家 vs 粗粒度专家的权衡?
粗粒度(如 Mixtral 8 个大专家)实现简单,但每个专家参数多、冗余大。细粒度(如 DeepSeek 256 个小专家)路由更精准、专业化更强,但通信开销更大、路由不稳定风险更高。DeepSeek 的实验表明,同等激活参数下细粒度专家效果更好。
Q4:Shared Expert 的作用是什么?
共享专家(DeepSeek 首创)始终被激活,负责处理所有 token 共有的通用知识(如语法、常识)。路由专家只需学习专业化知识。这解决了'信息冗余'问题——没有共享专家时,每个路由专家都要学习通用知识,浪费容量。
Scaling Laws | 模型规模的科学
核心概念
Kaplan (2020):增大模型比增加数据更高效。训练'大而短'的模型。
$L(N) = (N_c / N)^{\alpha_N}, \quad \alpha_N \approx 0.076$
Chinchilla (2022):模型和数据应等比例增长。$N$和$D$的最优比例约 1:20。
$L(N, D) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta}, \quad \alpha \approx 0.34, \beta \approx 0.28$
最优分配:$N_{opt} \propto C^{0.5}$,$D_{opt} \propto C^{0.5}$($C$=总计算预算)。
Over-Training 趋势(2024-2026):故意用远超最优比例的数据训练小模型。
| 模型 | 参数量 | Tokens | 比例 | 策略 |
|---|
| GPT-3 | 175B | 300B | 1:1.7 | Kaplan 时代 |
| Chinchilla | 70B | 1.4T | 1:20 | Chinchilla 最优 |
| LLaMA-1 | 7B | 1.4T | 1:200 | Over-Training |
| LLaMA-3 | 8B | 15T | 1:1875 | 极致 Over-Training |
Emergent Abilities(涌现能力)
某些能力在小模型上完全不存在,模型规模超过某个阈值后突然出现:
- CoT 推理:~100B 参数后出现
- 多步数学推理:~50B 参数后出现
- 自我纠错:~100B 参数后出现
争议(Schaeffer et al., 2023):涌现可能是评估指标的'幻觉'——用连续指标替代离散指标后,性能增长是平滑的。
面试考点精讲
Q1:Kaplan 和 Chinchilla 的核心区别?
Kaplan 建议'模型优先',Chinchilla 建议'等比增长'。Chinchilla 更正确。
Q2:为什么流行 Over-Training?
推理成本>>训练成本。小模型推理便宜,多花训练计算让小模型极致,总 ROI 更高。
Q3:Scaling Laws 对模型训练的具体指导意义?
(1) 预算分配——给定计算预算,确定最优模型大小和数据量;(2) 性能预测——用小规模实验预测大模型的最终 loss;(3) 超参迁移——μP 可以从小模型直接迁移学习率等超参;(4) ROI 估算——评估增大模型/数据的边际收益。
Q4:涌现能力真的存在吗?批评观点是什么?
Schaeffer et al.(2023)认为涌现是评估指标的'幻觉'——当用精确匹配等离散指标衡量时,小模型部分正确的回答被计为 0 分,造成'突变'假象。改用连续指标(如 BLEU、token-level accuracy)后,性能增长是平滑的。但反对观点认为:对于需要完整推理链的任务(如多步数学),离散指标才能反映真实能力。
Tokenizer | 大模型的'语言入口'
核心概念
| 算法 | 核心思想 | 方向 | 代表 |
|---|
| BPE | 反复合并最高频相邻对 | 自底向上 | GPT |
| WordPiece | 按似然选择合并 | 自底向上 | BERT |
| Unigram | 从大词表反复删除低分词 | 自顶向下 | SentencePiece |
| Byte-level BPE | 字节为基础单元做 BPE | 自底向上 | GPT-2+, LLaMA |
Input: 训练语料,目标词表大小 V
1. 初始化词表 = 所有字节 (256 个) + 特殊 token
2. while |词表| < V:
3. 统计语料中所有相邻 token 对的频率
4. 找到频率最高的 pair (a, b)
5. 将所有 "a b" 替换为 "ab"
6. 将 "ab" 加入词表
7. return 词表 + 合并规则
Unigram 模型(与 BPE 对比)
Unigram 从大词表开始,反复删除对整体似然影响最小的 token:
- 初始化:收集所有高频子串构成超大候选词表
- 打分:每个候选词的 unigram 概率 $P(x_i) = \frac{count(x_i)}{\sum_j count(x_j)}$
- 分词:对输入文本用 Viterbi 算法找最大概率分词
- 裁剪:删除贡献最小的 10-20% 候选词,重新估计概率
- 重复直到达到目标词表大小
| 模型 | 词表大小 | 算法 | 中文效率 |
|---|
| GPT-2 | 50,257 | Byte-level BPE | 低(每字 2-3 token) |
| LLaMA-1 | 32,000 | SentencePiece BPE | 低 |
| LLaMA-3 | 128,256 | tiktoken BPE | 中高 |
| Qwen-2.5 | 151,643 | tiktoken BPE | 高(常用字 1 token) |
| DeepSeek-V3 | 100,015 | BPE | 中高 |
面试考点精讲
Q1:BPE 和 WordPiece 区别?
BPE 按频率选择合并,WordPiece 按似然增益。BPE 更简单。
Q2:为什么用 Byte-level BPE?
以字节为基础天然支持任何语言,无 OOV 问题。
Q3:如何为特定领域扩展 Tokenizer?
(1) 收集领域文本训练新词表;(2) 将新词表与原词表合并(取并集或增量训练);(3) 扩大 Embedding 层(新 token 随机初始化或用子词平均值初始化);(4) 需要 continue pre-training 让模型学会新 token 的语义。注意不要改变原有 token 的编码。
Q4:Tokenizer 对多语言支持的影响?
词表中覆盖的语言越多,各语言的编码效率都会降低("fertility"增大)。解决方案:(1) 用超大词表(Qwen 的 151K);(2) 增加目标语言训练数据在 BPE 训练中的比例;(3) 确保字节级覆盖作为 fallback。一个中文效率差的 Tokenizer 会让模型推理速度慢 2-3 倍。
模型选型指南 | 面试中如何回答'选什么模型'
选型决策树
需要最强性能?→ GPT-4o / Claude / Gemini
需要本地部署? ├── 多卡 (80GB+) → DeepSeek-V3 / LLaMA-405B
├── 单卡 80GB → LLaMA-70B-Q4 / Qwen-72B-Q4
├── 单卡 40-48GB → LLaMA-70B-Q2 / Qwen-14B
├── 单卡 24GB → LLaMA-8B / Qwen-7B
└── 单卡 16GB → Qwen-7B-Q4 / Phi-3-mini
| 场景 | 推荐模型 | 理由 |
|---|
| 代码生成 | DeepSeek-Coder / Qwen-Coder | 代码专项训练,HumanEval 高 |
| 数学推理 | DeepSeek-R1 / Qwen-Math | 推理链能力强 |
| 中文对话 | Qwen-2.5 / DeepSeek-V3 | 中文训练数据占比高 |
| 英文通用 | LLaMA-3 / Mistral | 英文 benchmark 最强 |
| RAG 系统 | Qwen-7B~14B | 性价比高,上下文够长 |
| 多模态 | Qwen-VL / LLaVA | 原生图文理解 |
| 端侧部署 | Phi-3 / Qwen-0.5B | 参数量极小 |
| 模型 | FP16 显存 | INT8 显存 | INT4 显存 |
|---|
| 7B | 14GB | 7GB | 4GB |
| 14B | 28GB | 14GB | 8GB |
| 70B | 140GB | 70GB | 35GB |
| 405B | 810GB | 405GB | 203GB |
面试考点精讲
Q1:为中文客服系统选基座模型?
Qwen-2.5 或 DeepSeek,中文强且开源可微调。7B-14B 通常够用。
Q2:Dense 和 MoE 怎么选?
显存充足选 MoE(性能好),显存有限选 Dense(部署简单)。
Q3:如何评估一个模型是否适合你的业务?
四步评估法:(1) 在公开 benchmark 上初筛(MMLU、HumanEval 等);(2) 构建业务评测集(50-200 条典型 query),人工评分;(3) 测试推理延迟和吞吐量,确认满足 SLA 要求;(4) 评估微调潜力——用少量业务数据做 LoRA 微调看提升幅度。不要只看公开榜单,业务评测集的排名经常和公开排名不同。
Q4:开源 vs 闭源模型的选择考量?
选闭源(GPT-4/Claude)的理由——性能最强、无需运维、按量付费起步低。选开源的理由——数据隐私可控、可微调定制、长期成本低(日调用量>10 万时)、不依赖外部服务。折中方案:用闭源模型建立 baseline 和标注数据,训练开源模型替代。
全章总结
| 模块 | 核心知识点 | 面试题数 |
|---|
| GPT 系列 | 演进脉络、ICL、Pre-Norm | 5 题 |
| LLaMA 系列 | RMSNorm、SwiGLU、GQA、RoPE | 6 题 |
| DeepSeek 系列 | MLA、MoE、R1、FP8 | 6 题 |
| Qwen 系列 | 大词表、YARN、VL | 4 题 |
| MoE 架构 | Router、负载均衡、共享专家 | 4 题 |
| Scaling Laws | Chinchilla、涌现能力 | 4 题 |
| Tokenizer | BPE、Unigram、多语言 | 4 题 |
| 模型选型 | 场景选型、评估方法 | 4 题 |
下一章预告:第 3 章《预训练全流程深度解析》深入预训练的每个环节。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online