【2026大模型面试圣经】(2)主流大模型架构全景 | GPT/LLaMA/DeepSeek/Qwen深度对比

2026大模型面试圣经(2):主流大模型架构全景 | GPT/LLaMA/DeepSeek/Qwen深度对比

定位:了解每个主流模型"怎么设计的、为什么这样设计",面试中不只说出名字,还能对比分析。

目标:看完本章,你能画出GPT/LLaMA/DeepSeek的架构图,说清每个设计选择背后的权衡。


模块一:GPT系列架构演进 | 从GPT-1到GPT-4

1.1 核心概念

什么是GPT?

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)

L=−∑t=1Tlog⁡P(xt∣x<t;θ)\mathcal{L} = -\sum_{t=1}^{T} \log P(x_t | x_{<t}; \theta)L=−t=1∑TlogP(xt∣x<t;θ)

每个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:xl+1=LN(xl+F(xl))x_{l+1} = \text{LN}(x_l + F(x_l))xl+1=LN(xl+F(xl)),梯度经过LN后被归一化,深层梯度消失
  • Pre-Norm:xl+1=xl+F(LN(xl))x_{l+1} = x_l + F(\text{LN}(x_l))xl+1=xl+F(LN(xl)),残差直连保证梯度直通,训练更稳定
  • 代价:Pre-Norm的最终表示可能"塌缩"到残差通道,需要在最后加一层LN

1.3 代码实现

python 复制代码
# GPT-2风格的Transformer Block
class GPT2Block(nn.Module):
    def __init__(self, d_model, n_heads, d_ff, dropout=0.1):
        super().__init__()
        self.ln1 = nn.LayerNorm(d_model)  # Pre-Norm
        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-1到GPT-2:从Post-Norm换到Pre-Norm
  2. GPT-3训练:Model Parallelism+Data Parallelism,约1200万美元
  3. GPT-4训练:传闻约25000个A100训练约90天

1.5 面试考点精讲

Q1:GPT-1/2/3/4的核心区别?

秒答: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(4d24d^24d2) + FFN(8d28d^28d2) + Embedding。

Q3:GPT-4为什么可能用MoE?

秒答:MoE让总参数量大(知识容量大)但推理时只激活一部分(保持速度)。多个信源证实8专家Top-2架构。

Q4:ICL的理论解释有哪些?Transformer如何隐式实现梯度下降?

秒答:三种主流解释:(1)贝叶斯推理------模型在隐式推断任务分布;(2)梯度下降------Akyürek等人证明线性Attention层的前向传播数学上等价于一步梯度下降,示例相当于"训练数据";(3)任务识别------模型在预训练时见过类似任务模式,ICL本质是模式匹配。

展开 :梯度下降视角最有启发性。对于线性回归任务,单层线性Attention的前向传播可以写成 y^=WOV∑isoftmax(q⋅ki)vi\hat{y} = W_{OV} \sum_i \text{softmax}(q \cdot k_i) v_iy^=WOV∑isoftmax(q⋅ki)vi,这与在示例上做一步GD后的预测数学形式一致。

Q5:GPT-3的训练数据质量控制做了什么?

秒答:(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

LLaMA架构总览

复制代码
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 原理推导

RMSNorm vs LayerNorm

LayerNorm:LN(x)=x−μσ2+ϵ⋅γ+β\text{LN}(x) = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \betaLN(x)=σ2+ϵ x−μ⋅γ+β(需要计算均值和方差)

RMSNorm:RMS(x)=x1d∑i=1dxi2+ϵ⋅γ\text{RMS}(x) = \frac{x}{\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^2 + \epsilon}} \cdot \gammaRMS(x)=d1∑i=1dxi2+ϵ x⋅γ(只计算RMS,省去均值和偏移)

优势:计算量减少约10-15%,效果几乎无差别。去掉了re-centering(减均值),只保留re-scaling。

SwiGLU激活函数

SwiGLU(x)=Swish(xW1)⊗(xW2)\text{SwiGLU}(x) = \text{Swish}(xW_1) \otimes (xW_2)SwiGLU(x)=Swish(xW1)⊗(xW2)

其中 Swish(x)=x⋅σ(βx)\text{Swish}(x) = x \cdot \sigma(\beta x)Swish(x)=x⋅σ(βx),⊗\otimes⊗ 是逐元素乘法。

对比普通FFN(2个矩阵)SwiGLU用3个矩阵(W1,W2,W3W_1, W_2, W_3W1,W2,W3),但实验表明在同等参数量下效果更好。PaLM、LLaMA、Qwen都采用。

MHA / MQA / GQA 对比

方案 Q头数 KV头数 KV-Cache大小 精度
MHA hhh hhh 2×h×dk×L2 \times h \times d_k \times L2×h×dk×L 最高
MQA hhh 1 2×dk×L2 \times d_k \times L2×dk×L 有损失
GQA-g hhh ggg 2×g×dk×L2 \times g \times d_k \times L2×g×dk×L 接近MHA

GQA是MHA和MQA的折中:将hhh个Query头分成ggg组,每组共享一对KV头。LLaMA-70B用h=64,g=8h=64, g=8h=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)

RoPE(旋转位置编码)核心思想

将位置信息编码为旋转矩阵,使得 qmTknq_m^T k_nqmTkn 只依赖于相对位置 m−nm-nm−n:

f(q,m)=q⋅eimθf(q, m) = q \cdot e^{im\theta}f(q,m)=q⋅eimθ

在实数域展开为2D旋转:

Rθ(m)=(cos⁡mθ−sin⁡mθsin⁡mθcos⁡mθ)R_\theta(m) = \begin{pmatrix} \cos m\theta & -\sin m\theta \\ \sin m\theta & \cos m\theta \end{pmatrix}Rθ(m)=(cosmθsinmθ−sinmθcosmθ)

对每一对相邻维度应用不同频率的旋转:θi=10000−2i/d\theta_i = 10000^{-2i/d}θi=10000−2i/d

优势:天然编码相对位置、可以通过NTK扩展到更长序列、对长距离衰减有良好特性。

参数量计算(7B为例)

  • 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 代码实现

python 复制代码
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。

Q4:RoPE是如何编码相对位置信息的?

秒答 :RoPE对query和key向量按维度对施加不同频率的旋转矩阵。两个位置的内积 qmTknq_m^T k_nqmTkn 只依赖于 (m−n)(m-n)(m−n),天然编码相对位置。频率从低到高覆盖不同尺度的位置信息。

展开 :数学上,⟨f(q,m),f(k,n)⟩=Re[∑iqiki∗ei(m−n)θi]\langle f(q,m), f(k,n) \rangle = \text{Re}[\sum_i q_i k_i^* e^{i(m-n)\theta_i}]⟨f(q,m),f(k,n)⟩=Re[∑iqiki∗ei(m−n)θi]。低频维度编码远距离关系,高频维度编码近距离关系。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也做了同样选择。

2.6 【大厂真题 - 字节/DeepSeek高频】

真题 1:字节跳动 架构岗------"从MHA到GQA减少了KV头数,那它到底是在解决训练瓶颈还是推理瓶颈?如果把GQA用到训练中,会有性能提升吗?"

痛点剖析:考察对计算体系结构(Compute-bound vs Memory-bound)的透彻理解。很多人以为改变网络结构就能全方位加速。

极客解法

  1. 核心定性 :GQA纯粹是为了解决推理阶段的显存墙(Memory-bound)问题,对训练阶段(Prefill/训练前向)的速度提升微乎其微
  2. 原理解释 :在训练阶段,所有的Token是并行计算的(一个大矩阵乘法 Q×KTQ \times K^TQ×KT),此时是计算密集型(Compute-bound)。显存主要被模型权重和中间激活(Activation)占据,KV Cache根本没存下来,所以GQA省KV显存的优势在训练时发挥不出来。
  3. 推理阶段的蜕变:但在推理的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演进前沿的追踪,以及"专家协同"与"知识分配"的底层逻辑。

极客解法

  1. 细粒度专家(Fine-grained Experts):传统MoE(如Mixtral 8x7B)是8个大专家,选2个激活。这导致一个专家被激活时,带入了大量冗余参数。DeepSeekMoE的理念是**"专家拆碎"**,比如把大专家拆成了256个小专家(也就是单个专家参数量极小),然后每次路由激活Top-8个小专家。相同的激活参数量下,这种细粒度允许模型进行更精细的知识组合(组合爆炸优势)。
  2. 共享专家路由(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)**两大创新:

  1. MLA(Multi-Latent Attention):把KV压缩成低维latent向量,KV-Cache仅为MHA的5.4%
  2. DeepSeekMoE:160个细粒度专家+2个共享专家,选6个

DeepSeek-V3(2024.12)

  • 671B总参数,37B激活参数
  • 256个路由专家+1个共享专家,每个token路由到Top-8个路由专家(加上始终激活的1个共享专家,共9个参与计算)
  • 辅助损失无关的负载均衡:用动态bias替代辅助loss
  • FP8混合精度训练
  • 训练成本仅557万美元

DeepSeek-R1(2025.01)

  • 纯RL训练让模型自发学会推理
  • GRPO(不需要Critic模型)

3.2 原理推导

MLA核心思想与维度分析

标准MHA每个token缓存:2×nh×dk=2×128×128=327682 \times n_h \times d_k = 2 \times 128 \times 128 = 327682×nh×dk=2×128×128=32768 个数值

MLA压缩流程:

  1. 压缩:cKV=WDKV⋅xc_{KV} = W_{DKV} \cdot xcKV=WDKV⋅x,cKV∈Rdcc_{KV} \in \mathbb{R}^{d_c}cKV∈Rdc(dc=512≪nhdk=16384d_c = 512 \ll n_h d_k = 16384dc=512≪nhdk=16384)

  2. 推理时只缓存 cKVc_{KV}cKV(512个数值 vs 32768个,压缩比5.4%)

  3. 计算时恢复:K=WUK⋅cKVK = W_{UK} \cdot c_{KV}K=WUK⋅cKV,V=WUV⋅cKVV = W_{UV} \cdot c_{KV}V=WUV⋅cKV

    标准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)

传统方法:Ltotal=LLM+α⋅Lbalance\mathcal{L}{total} = \mathcal{L}{LM} + \alpha \cdot \mathcal{L}_{balance}Ltotal=LLM+α⋅Lbalance,α\alphaα太大伤害路由质量,太小负载不均。

V3方法:为每个专家维护一个动态bias bib_ibi

  • 每步统计各专家负载 lil_ili
  • 负载低于平均 → bib_ibi 增大(吸引更多token)
  • 负载高于平均 → bib_ibi 减小
  • 路由打分:si′=si+bis_i' = s_i + b_isi′=si+bi,但 bib_ibi 不参与梯度计算

优势:完全不影响主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=∑i=1NsFFNi(s)(x)+∑j=1Kgj⋅FFNrj(r)(x)y = \sum_{i=1}^{N_s} \text{FFN}i^{(s)}(x) + \sum{j=1}^{K} g_j \cdot \text{FFN}_{r_j}^{(r)}(x)y=i=1∑NsFFNi(s)(x)+j=1∑Kgj⋅FFNrj(r)(x)

共享专家提供通用能力,路由专家提供专业能力。

3.3 代码实现

python 复制代码
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 面试考点精讲

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系列 | 阿里的全能选手

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

Qwen-2.5完整参数表

规格 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

Qwen-VL视觉语言模型

  • 视觉编码器:ViT-G/14(约2B参数)
  • 连接方式:Cross-Attention Resampler,将视觉token压缩到固定数量(256个)
  • 支持任意分辨率输入,动态切片后分别编码再拼接

Qwen-Coder代码模型

  • 基于Qwen-2.5基座,增加代码数据比例(约40%代码数据)
  • 支持128K长上下文,适合大型代码仓库分析
  • 在HumanEval/MBPP上与GPT-4接近

4.2 原理推导

大词表的权衡

  • 编码效率高:同样文本用更少token→推理更快
  • Embedding层参数增大:但对7B+模型影响<5%

YARN位置编码扩展

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 vs 同级别竞品

能力 Qwen-72B LLaMA-70B DeepSeek-V2
中文 最强 一般
英文 最强
代码
数学 最强 一般
多模态 原生支持 需LLaVA 不支持
词表大小 151K 128K 100K

4.4 面试考点精讲

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架构 | 用更少算力训练更大模型

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

MoE发展脉络

阶段 模型 核心创新
2022 Switch Transformer Top-1路由,简化通信
2022 GShard Top-2路由,容量因子
2024 Mixtral 第一个开源高质量MoE
2024 DeepSeekMoE 细粒度专家+共享专家
2024 DeepSeek-V3 无辅助损失负载均衡

5.2 原理推导

Router :g(x)=TopK(softmax(Wg⋅x))g(x) = \text{TopK}(\text{softmax}(W_g \cdot x))g(x)=TopK(softmax(Wg⋅x))

负载均衡损失 :Lbalance=N⋅∑i=1Nfi⋅Pi\mathcal{L}{\text{balance}} = N \cdot \sum{i=1}^{N} f_i \cdot P_iLbalance=N⋅∑i=1Nfi⋅Pi

其中 fif_ifi 是专家 iii 实际接收的token比例,PiP_iPi 是所有token对专家 iii 的路由概率均值。

Capacity Factor :每个专家能处理的最大token数 = CF×TNCF \times \frac{T}{N}CF×NT(TTT=总token数,NNN=专家数)。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(batch_size×dmodel)O(\text{batch\size} \times d{model})O(batch_size×dmodel),与专家数无关但与batch大小线性相关。

5.3 代码实现

python 复制代码
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):
        # x: [batch, seq, d_model]
        bsz, seq_len, d = x.shape
        x_flat = x.view(-1, d)  # [B*S, d]

        # 路由计算
        logits = self.gate(x_flat)  # [B*S, n_experts]
        weights, indices = torch.topk(
            torch.softmax(logits, dim=-1), self.top_k
        )
        weights = weights / weights.sum(dim=-1, keepdim=True)

        # 稀疏计算(简化版,实际用scatter/gather优化)
        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 面试考点精讲

Q1:MoE vs Dense模型的优缺点?

秒答:MoE同算力参数更多(知识更多),但显存占用大(总参数要全加载)、通信开销高、训练不稳定。

Q2:路由崩溃是什么?怎么解决?

秒答:所有token路由到少数专家。解决:辅助损失、容量因子限制、Noise Top-K。

Q3:细粒度专家vs粗粒度专家的权衡?

秒答:粗粒度(如Mixtral 8个大专家)实现简单,但每个专家参数多、冗余大。细粒度(如DeepSeek 256个小专家)路由更精准、专业化更强,但通信开销更大、路由不稳定风险更高。DeepSeek的实验表明,同等激活参数下细粒度专家效果更好。

Q4:Shared Expert的作用是什么?

秒答:共享专家(DeepSeek首创)始终被激活,负责处理所有token共有的通用知识(如语法、常识)。路由专家只需学习专业化知识。这解决了"信息冗余"问题------没有共享专家时,每个路由专家都要学习通用知识,浪费容量。


模块六:Scaling Laws | 模型规模的科学

6.1 核心概念

Kaplan(2020):增大模型比增加数据更高效。训练"大而短"的模型。

L(N)=(Nc/N)αN,αN≈0.076L(N) = (N_c / N)^{\alpha_N}, \quad \alpha_N \approx 0.076L(N)=(Nc/N)αN,αN≈0.076

Chinchilla(2022) :模型和数据应等比例增长。NNN和DDD的最优比例约1:20。

L(N,D)=E+ANα+BDβ,α≈0.34,β≈0.28L(N, D) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta}, \quad \alpha \approx 0.34, \beta \approx 0.28L(N,D)=E+NαA+DβB,α≈0.34,β≈0.28

最优分配:Nopt∝C0.5N_{opt} \propto C^{0.5}Nopt∝C0.5,Dopt∝C0.5D_{opt} \propto C^{0.5}Dopt∝C0.5(CCC=总计算预算)。

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):涌现可能是评估指标的"幻觉"------用连续指标替代离散指标后,性能增长是平滑的。

6.2 面试考点精讲

Q1:Kaplan和Chinchilla的核心区别?

秒答:Kaplan建议"模型优先",Chinchilla建议"等比增长"。Chinchilla更正确。

Q2:为什么流行Over-Training?

秒答:推理成本>>训练成本。小模型推理便宜,多花训练计算让小模型极致,总ROI更高。

Q3:Scaling Laws对模型训练的具体指导意义?

秒答 :(1)预算分配------给定计算预算,确定最优模型大小和数据量;(2)性能预测------用小规模实验预测大模型的最终loss;(3)超参迁移------μ\muμP可以从小模型直接迁移学习率等超参;(4)ROI估算------评估增大模型/数据的边际收益。

Q4:涌现能力真的存在吗?批评观点是什么?

秒答: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

BPE训练伪代码

复制代码
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(xi)=count(xi)∑jcount(xj)P(x_i) = \frac{count(x_i)}{\sum_j count(x_j)}P(xi)=∑jcount(xj)count(xi)
  • 分词:对输入文本用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 面试考点精讲

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倍。


模块八:模型选型指南 | 面试中如何回答"选什么模型"

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 面试考点精讲

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章《预训练全流程深度解析》深入预训练的每个环节。

相关推荐
cxr8282 小时前
全栈规模化虚拟企业:下一代商业物种的系统演进与架构重构
人工智能·重构·架构·智能体·ai智能体·openclaw
indexsunny2 小时前
互联网大厂Java面试实战:Spring Boot与微服务在电商场景的应用
java·spring boot·微服务·面试·kafka·prometheus·电商
UrbanJazzerati3 小时前
Python Logging库完全指南:从小白到熟练
后端·面试
人机与认知实验室3 小时前
新一代人-机器人-环境智能体系的架构-机制-方法-验证
架构·机器人
SuperEugene3 小时前
字符串处理实战:模板字符串、split/join、正则的 80% 用法
前端·javascript·面试
一水鉴天3 小时前
关于“整体设计定稿” 的高阶表述 20260222
人工智能·架构
巴巴博一3 小时前
【前端架构实战】拒绝切 Tab 白屏!纯手写 Vue/uni-app 多标签页“零延迟缓存”列表架构
前端·vue.js·架构
AC赳赳老秦3 小时前
DeepSeek多模态Prompt优化:贴合2026技术趋势的精准指令设计方法
大数据·人工智能·自然语言处理·架构·prompt·prometheus·deepseek
Coder_Boy_3 小时前
技术交流总结:分布式、数据库、Spring及SpringBoot核心知识点梳理(实现参考)
数据库·spring boot·分布式·spring·架构