跳到主要内容主流大模型架构全景 | GPT/LLaMA/DeepSeek/Qwen 深度对比 | 极客日志PythonAI算法
主流大模型架构全景 | GPT/LLaMA/DeepSeek/Qwen 深度对比
主流大模型架构涵盖 GPT、LLaMA、DeepSeek 及 Qwen 系列。GPT 系列演进体现自回归预训练与 Prompt 工程,引入 Pre-Norm 与 MoE 架构。LLaMA 确立开源标杆,采用 RMSNorm、SwiGLU、RoPE 及 GQA 优化效率。DeepSeek 创新 MLA 压缩 KV Cache 与细粒度 MoE 路由机制,降低训练成本。Qwen 凭借大词表与 YARN 位置编码扩展长上下文能力。MoE 架构通过稀疏激活平衡参数规模与推理速度,Scaling Laws 指导数据与模型比例,Tokenizer 设计影响多语言编码效率。文章提供架构对比、原理推导、代码实现及面试考点解析,辅助技术选型与深度理解。
云朵棉花糖0 浏览 主流大模型架构全景 | GPT/LLaMA/DeepSeek/Qwen 深度对比
模块一:GPT 系列架构演进 | 从 GPT-1 到 GPT-4
1.1 核心概念
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 |
1.2 原理推导
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 论文的解释:大模型在预训练时隐式学会了从上下文示例中学习
- 贝叶斯推理解释(Xie et al., 2022):ICL 是在做隐式贝叶斯推理
- 梯度下降视角(Akyürek et al., 2023):Transformer 的前向传播等价于在隐式执行梯度下降
- 直觉理解:预训练数据中天然包含示例→回答模式
Pre-Norm vs Post-Norm:为什么 GPT-2 切换到 Pre-Norm?
Post-Norm: x → Attn → Add → LN → FFN → Add → LN
Pre-Norm: x → LN → Attn → Add → LN → FFN → Add
- Post-Norm:$x_{l+1} = \text{LN}(x_l + F(x_l))$,梯度经过 LN 后被归一化,深层梯度消失
- Pre-Norm:$x_{l+1} = x_l + F(\text{LN}(x_l))$,残差直连保证梯度直通,训练更稳定
- 代价:Pre-Norm 的最终表示可能塌缩到残差通道,需要在最后加一层 LN
1.3 代码实现
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
1.4 工程实践
- GPT-1 到 GPT-2:从 Post-Norm 换到 Pre-Norm
- GPT-3 训练:Model Parallelism+Data Parallelism,约 1200 万美元
- GPT-4 训练:传闻约 25000 个 A100 训练约 90 天
1.5 面试考点精讲
秒答:GPT-1 证明预训练有效,GPT-2 证明 zero-shot 可行,GPT-3 证明 ICL 有效,GPT-4 加入多模态和 MoE。
展开:最重要的范式转变是 GPT-2 到 GPT-3:从预训练 + 微调变成预训练+prompt。一个大模型通过不同 prompt 就能做所有任务,催生了整个 prompt engineering 领域。
Q2:GPT-3 的 175B 参数是怎么分布的?
秒答:96 层,每层约 1.8B 参数。MHA(4d^2) + FFN(8d^2) + Embedding。
秒答: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 后的预测数学形式一致。
秒答:(1) 用高质量参考语料训练二分类器,对 Common Crawl 做质量过滤;(2) 基于文档间 n-gram 重叠做模糊去重;(3) 用 LSH 做近似去重;(4) 对高质量来源(Wikipedia、书籍)过采样 2-3 倍。最终从 45TB 过滤到 570GB。
模块二:LLaMA 系列 | 开源 LLM 的标杆
2.1 核心概念
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 |
2.2 原理推导
LayerNorm:$\text{LN}(x) = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \beta$(需要计算均值和方差)
RMSNorm:$\text{RMS}(x) = \frac{x}{\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^2 + \epsilon}} \cdot \gamma$(只计算 RMS,省去均值和偏移)
优势:计算量减少约 10-15%,效果几乎无差别。去掉了 re-centering(减均值),只保留 re-scaling。
$\text{SwiGLU}(x) = \text{Swish}(xW_1) \otimes (xW_2)$
其中 $\text{Swish}(x) = x \cdot \sigma(\beta x)$,$\otimes$ 是逐元素乘法。
对比普通 FFN(2 个矩阵)SwiGLU 用 3 个矩阵(W1,W2,W3),但实验表明在同等参数量下效果更好。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。
MHA: Q1→KV1 Q2→KV2 Q3→KV3 Q4→KV4 (每个 Q 有自己的 KV)
MQA: Q1→KV1 Q2→KV1 Q3→KV1 Q4→KV1 (所有 Q 共享 1 个 KV)
GQA: Q1→KV1 Q2→KV1 Q3→KV2 Q4→KV2 (分组共享 KV)
将位置信息编码为旋转矩阵,使得 $q_m^T k_n$ 只依赖于相对位置 $m-n$:
$f(q, m) = q \cdot e^{im\theta}$
$R_\theta(m) = \begin{pmatrix} \cos m\theta & -\sin m\theta \ \sin m\theta & \cos m\theta \end{pmatrix}$
对每一对相邻维度应用不同频率的旋转:$\theta_i = 10000^{-2i/d}$
优势:天然编码相对位置、可以通过 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
2.3 代码实现
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
2.4 工程实践
LLaMA 的核心贡献:证明数据质量和训练充分度比模型大小更重要。7B 用 1.4T tokens 训练,效果优于 175B 的 GPT-3。
2.5 面试考点精讲
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。
秒答:RoPE 对 query 和 key 向量按维度对施加不同频率的旋转矩阵。两个位置的内积 $q_m^T k_n$ 只依赖于 $(m-n)$,天然编码相对位置。频率从低到高覆盖不同尺度的位置信息。
展开:数学上,$\langle f(q,m), f(k,n) \rangle = \text{Re}[\sum_i q_i k_i^* e^{i(m-n)\theta_i}]$。低频维度编码远距离关系,高频维度编码近距离关系。NTK-aware 扩展通过调整 base 频率实现长度外推。
秒答:(1) 数据量从 2T 暴增到 15T+ tokens;(2) 大幅增加代码和数学数据占比;(3) 使用质量分类器和去重 pipeline 更激进过滤;(4) 增加多语言数据覆盖。关键洞察:在 8B 规模上用 15T 数据 over-training,效果接近 70B 模型用 2T 数据。
秒答:实验发现去掉 bias 对模型质量影响极小,但能减少参数量和计算量。QKV 投影去掉 bias 后矩阵乘法可以更高效地做张量并行(不需要额外 broadcast bias)。PaLM 也做了同样选择。
2.6 【大厂真题 - 字节/DeepSeek 高频】
真题 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 与创新架构
3.1 核心概念
**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 模型)
3.2 原理推导
标准 MHA 每个 token 缓存:$2 \times n_h \times d_k = 2 \times 128 \times 128 = 32768$ 个数值
- 压缩:$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}$
标准 MHA 缓存:[K_1, K_2, ..., K_128, V_1, V_2, ..., V_128] → 32768 维
MLA 缓存:[c_KV] → 512 维
比 GQA 更灵活软压缩 vs 硬共享。GQA 是固定分组共享 KV,MLA 是学习一个低维投影,信息保留更充分。
辅助损失无关的负载均衡机制(DeepSeek-V3)
传统方法:$\mathcal{L}{total} = \mathcal{L}{LM} + \alpha \cdot \mathcal{L}_{balance}$,$\alpha$ 太大伤害路由质量,太小负载不均。
V3 方法:为每个专家维护一个动态 bias $b_i$
- 每步统计各专家负载 $l_i$
- 负载低于平均 → $b_i$ 增大(吸引更多 token)
- 负载高于平均 → $b_i$ 减小
- 路由打分:$s_i' = s_i + b_i$,但 $b_i$ 不参与梯度计算
优势:完全不影响主 loss 的梯度,路由质量不受损。
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——在推理过程中自我纠错。
$y = \sum_{i=1}^{N_s} \text{FFN}i^{(s)}(x) + \sum{j=1}^{K} g_j \cdot \text{FFN}_{r_j}^{(r)}(x)$
3.3 代码实现
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)
3.4 工程实践
V3 的训练效率优化:FP8 训练节省约 50% 显存、DualPipe 流水线将 bubble 率从 33% 降到 10%。
3.5 面试考点精讲
秒答:可学习的压缩比硬共享更灵活,压缩率更高(5.4%),精度损失更小。
Q2:DeepSeek-V3 为什么不用辅助损失?
秒答:辅助损失会伤害路由质量。V3 用动态 bias——负载低的专家自动加正 bias 吸引更多 token,不影响主 loss 梯度。
秒答:纯 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 系列 | 阿里的全能选手
4.1 核心概念
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 接近
4.2 原理推导
- 编码效率高:同样文本用更少 token→推理更快
- Embedding 层参数增大:但对 7B+ 模型影响<5%
Qwen 使用 YARN(Yet Another RoPE Extension)扩展上下文长度:
- 将 RoPE 频率分成三组:高频保持不变、中频做 NTK 插值、低频做线性插值
- 加上 attention scaling factor 补偿长序列的注意力稀释
- 效果:4K 训练上下文可以扩展到 32K-128K
4.3 工程实践
Qwen 的特色能力矩阵:Qwen-Math(数学)、Qwen-Coder(代码)、Qwen-VL(视觉)、Qwen-Audio(音频)
| 能力 | Qwen-72B | LLaMA-70B | DeepSeek-V2 |
|---|
| 中文 | 最强 | 一般 | 强 |
| 英文 | 强 | 最强 | 强 |
| 代码 | 强 | 强 | 强 |
| 数学 | 最强 | 一般 | 强 |
| 多模态 | 原生支持 | 需 LLaVA | 不支持 |
| 词表大小 | 151K | 128K | 100K |
4.4 面试考点精讲
秒答:提高中文编码效率。32K 词表中文每字 2-3 个 token,151K 可能 1 个 token。推理快 40%+。
秒答:基础架构几乎相同,主要差异在词表大小、QKV 是否有 bias、训练数据的语言分布。
Q3:Qwen 的 YARN 位置编码扩展是什么?
秒答:YARN 将 RoPE 频率分为高、中、低三组分别处理——高频不动、中频 NTK 插值、低频线性插值,加上 attention scaling 因子。相比简单线性插值或 NTK-aware,YARN 在长距离上保持更好的注意力分辨率。
秒答:图像经 ViT 编码后通过 Resampler 压缩成固定数量的视觉 token(256 个),与文本 token 在同一序列中拼接送入 LLM。支持任意分辨率——大图先切成多个 patch 分别编码再拼接,保留空间信息。多图多轮对话也支持。
模块五:MoE 架构 | 用更少算力训练更大模型
5.1 核心概念
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 | 无辅助损失负载均衡 |
5.2 原理推导
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 被丢弃或溢出到其他专家。
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 大小线性相关。
5.3 代码实现
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)
5.4 面试考点精讲
秒答:MoE 同算力参数更多(知识更多),但显存占用大(总参数要全加载)、通信开销高、训练不稳定。
秒答:所有 token 路由到少数专家。解决:辅助损失、容量因子限制、Noise Top-K。
秒答:粗粒度(如 Mixtral 8 个大专家)实现简单,但每个专家参数多、冗余大。细粒度(如 DeepSeek 256 个小专家)路由更精准、专业化更强,但通信开销更大、路由不稳定风险更高。DeepSeek 的实验表明,同等激活参数下细粒度专家效果更好。
秒答:共享专家(DeepSeek 首创)始终被激活,负责处理所有 token 共有的通用知识(如语法、常识)。路由专家只需学习专业化知识。这解决了信息冗余问题——没有共享专家时,每个路由专家都要学习通用知识,浪费容量。
模块六:Scaling Laws | 模型规模的科学
6.1 核心概念
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 |
某些能力在小模型上完全不存在,模型规模超过某个阈值后突然出现:
- CoT 推理:~100B 参数后出现
- 多步数学推理:~50B 参数后出现
- 自我纠错:~100B 参数后出现
争议(Schaeffer et al., 2023):涌现可能是评估指标的幻觉——用连续指标替代离散指标后,性能增长是平滑的。
6.2 面试考点精讲
Q1:Kaplan 和 Chinchilla 的核心区别?
秒答:Kaplan 建议模型优先,Chinchilla 建议等比增长。Chinchilla 更正确。
秒答:推理成本>>训练成本。小模型推理便宜,多花训练计算让小模型极致,总 ROI 更高。
Q3:Scaling Laws 对模型训练的具体指导意义?
秒答:(1) 预算分配——给定计算预算,确定最优模型大小和数据量;(2) 性能预测——用小规模实验预测大模型的最终 loss;(3) 超参迁移——μP 可以从小模型直接迁移学习率等超参;(4) ROI 估算——评估增大模型/数据的边际收益。
秒答:Schaeffer et al.(2023)认为涌现是评估指标的幻觉——当用精确匹配等离散指标衡量时,小模型部分正确的回答被计为 0 分,造成突变假象。改用连续指标(如 BLEU、token-level accuracy)后,性能增长是平滑的。但反对观点认为:对于需要完整推理链的任务(如多步数学),离散指标才能反映真实能力。
模块七:Tokenizer | 大模型的语言入口
7.1 核心概念
| 算法 | 核心思想 | 方向 | 代表 |
|---|
| 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 从大词表开始,反复删除对整体似然影响最小的 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 | 中高 |
7.2 面试考点精讲
秒答:BPE 按频率选择合并,WordPiece 按似然增益。BPE 更简单。
秒答:以字节为基础天然支持任何语言,无 OOV 问题。
秒答:(1) 收集领域文本训练新词表;(2) 将新词表与原词表合并(取并集或增量训练);(3) 扩大 Embedding 层(新 token 随机初始化或用子词平均值初始化);(4) 需要 continue pre-training 让模型学会新 token 的语义。注意不要改变原有 token 的编码。
秒答:词表中覆盖的语言越多,各语言的编码效率都会降低(fertility 增大)。解决方案:(1) 用超大词表(Qwen 的 151K);(2) 增加目标语言训练数据在 BPE 训练中的比例;(3) 确保字节级覆盖作为 fallback。一个中文效率差的 Tokenizer 会让模型推理速度慢 2-3 倍。
模块八:模型选型指南 | 面试中如何回答选什么模型
8.1 选型决策树
需要最强性能?→ 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 |
8.2 面试考点精讲
秒答:Qwen-2.5 或 DeepSeek,中文强且开源可微调。7B-14B 通常够用。
秒答:显存充足选 MoE(性能好),显存有限选 Dense(部署简单)。
秒答:四步评估法:(1) 在公开 benchmark 上初筛(MMLU、HumanEval 等);(2) 构建业务评测集(50-200 条典型 query),人工评分;(3) 测试推理延迟和吞吐量,确认满足 SLA 要求;(4) 评估微调潜力——用少量业务数据做 LoRA 微调看提升幅度。不要只看公开榜单,业务评测集的排名经常和公开排名不同。
秒答:选闭源(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 题 |
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online