Skip to content

LLM 技术速查表

本章目标:公式、面试常问、快速对比表


1. 核心公式速查

1.1 位置编码

名称公式特点
Sinusoidal$PE_{(pos,2i)} = \sin(pos/10000^{2i/d}), PE_{(pos,2i+1)} = \cos(...)$绝对位置,可外推
RoPE$R_{m,d} = \begin{bmatrix} \cos(m\theta) & -\sin(m\theta) \ \sin(m\theta) & \cos(m\theta) \end{bmatrix}$相对位置,外推好
ALiBi$score_i \leftarrow score_i - m \cdoti-j
RoPE 远程衰减$\frac{1}{c \cdot (i-j) + b}$位置越远,attention 越低

1.2 注意力机制

名称KV Cache 大小参数量变化
MHA$2 \times num_heads \times head_dim$标准
MQA$2 \times head_dim$K/V 参数量 $\frac{1}{h}$
GQA$2 \times num_kv_heads \times head_dim$K/V 参数量 $\frac{g}{h}$

1.3 显存估算

模型参数 (FP16/BF16):
  参数显存 = 参数量 × 2 bytes

模型参数 (INT4):
  参数显存 = 参数量 × 0.5 bytes

Optimizer State (AdamW):
  optimizer 显存 = 参数量 × 12 bytes (FP32 states)

梯度:
  梯度显存 = 参数量 × 2 bytes (BF16)

KV Cache:
  KV_Cache = 2 × batch × seq_len × num_kv_heads × head_dim × bytes

激活值 (估算):
  激活显存 ≈ 2 × batch × seq_len × hidden_dim × layers × bytes

1.4 LoRA 参数

可训练参数量 ≈ 2 × r × (d_in + d_out)
              = 2 × r × hidden_dim × (rank + rank)
              
实际显存节省 ≈ 参数量 / (2 × r × hidden_dim) 倍

2. 模型架构对比

2.1 位置编码对比

特性RoPEALiBiSinusoidalLearnable
相对位置
外推能力✅ 好✅ 好❌ 差❌ 差
计算效率
外推到超长✅ NTK
LLM 使用LLaMA, GLMBLOOM原始早期 BERT

2.2 Attention 机制对比

特性MHAMQAGQA
K/V 头数= num_heads= 1= num_kv_heads
KV Cache最小中等
生成速度
质量最高略低接近 MHA
适用小模型推理优化大模型 (LLaMA 2 34B+)

2.3 归一化对比

特性LayerNormRMSNormDeepNorm
计算 mean
公式$\frac{x - \mu}{\sigma} \cdot \gamma + \beta$$\frac{x}{RMS(x)} \cdot \gamma$$\alpha \cdot LayerNorm(x + f(x))$
速度基准快 10-30%
稳定性✅ 好 (深层)

3. 量化技术对比

3.1 量化格式

格式精度显存节省速度质量损失
FP3232bit1x1x
FP1616bit2x~1x
BF1616bit2x~1x更小
INT88bit4x~1.5x
INT44bit8x~2x较大
FP88bit4x~2x小 (H100)

3.2 量化方法对比

方法原理校准数据适用场景质量
GPTQOBQ 逐层贪心✅ 需要推理
AWQ保留显著权重✅ 需要推理更好
SmoothQuant平滑权重分布✅ 需要推理
bitsandbytes动态量化训练+推理
GGUFQ4_K_M 等多种CPU/边缘取决于实现

3.3 量化公式

对称量化:
  scale = max(|x|) / (2^(n-1) - 1)
  x_q = round(x / scale)
  x_deq = x_q × scale

非对称量化:
  scale = (max - min) / (2^n - 1)
  zero_point = round(-min / scale)
  x_q = round(x / scale + zero_point)
  x_deq = (x_q - zero_point) × scale

NF4 (NormalFloat):
  量化中心 = N(0,1) 的分位数
  适合正态分布的权重

4. 对齐方法对比

方法数据需求稳定性实现效果
SFT高质量对话简单基础
RLHF成对偏好复杂最好
DPO成对偏好简单接近 RLHF
IPO成对偏好更好简单更稳定
KTO单样本偏好简单灵活

RLHF 关键公式

Reward Model (Bradley-Terry):
  L = -log(σ(r_chosen - r_rejected))

PPO 损失:
  L = -min(r(θ)A, clip(r(θ), 1-ε, 1+ε)A)

KL 约束:
  L_total = L_RLHF + β × KL(π_θ || π_ref)

DPO 损失:
  L = -log(σ(β × (log π_θ(y_c) - log π_θ(y_r) - log π_ref(y_c) + log π_ref(y_r))))

5. 长上下文技术

5.1 注意力近似方法

方法复杂度显存精度需重训练
Flash AttentionO(N)✅ 省✅ 几乎无损
Ring AttentionO(N)✅ 省✅ 无损
Sparse AttentionO(N·k)
LongLoRAO(N/k)
H2OO(N)
SnapKVO(N)

5.2 位置外推方法

方法原理外推能力质量实现
PI (线性插值)线性缩放位置2x简单
NTK-aware非线性缩放
YaRN温度缩放
Dynamic Scaling动态缩放简单

6. 面试高频问题

6.1 架构相关

Q: RoPE 为什么能外推?

A: 
1. RoPE 编码的是相对位置,不是绝对位置
2. 通过旋转矩阵实现:旋转角度只依赖 (m-n)
3. 外推时用 NTK-aware scaling 或 Position Interpolation
4. 核心公式:<R_m(q), R_n(k)> = f(q,k,m-n)

Q: GQA 省多少显存?

A:
LLaMA-2 34B: num_heads=48, num_kv_heads=8
- MHA KV Cache: 2 × 48 × 128 × 2 = 24KB/token
- GQA KV Cache: 2 × 8 × 128 × 2 = 4KB/token
- 节省 6 倍

LLaMA-2 7B: num_heads=32, num_kv_heads=32 (MHA)
- 不节省(但 7B 用 MHA 也可以接受)

Q: SwiGLU 为什么比 ReLU 好?

A:
1. SwiGLU = Swish(xW₁) ⊗ (xW₃)
2. Swish = x · sigmoid(x),是平滑的
3. ReLU 在 0 处梯度突变,可能导致神经元死亡
4. SwiGLU 有非零梯度,避免死亡
5. 门控机制让信息流动更好

6.2 训练相关

Q: BF16 vs FP16 区别?

A:
FP16:  1+5+10 = 16 bits, 指数范围小
BF16:  1+8+7 = 16 bits, 指数范围接近 FP32

BF16 优势:
- 更大动态范围,不容易 overflow
- 混合精度训练更稳定
- LLM 训练推荐 BF16

Q: Warmup 为什么需要?

A:
1. 随机初始化时参数方差大,梯度可能爆炸
2. Warmup 让学习率从 0 慢慢增加
3. 让模型参数先稳定,再大学习率
4. 通常 warmup_steps = 2000~10000

6.3 推理相关

Q: KV Cache 显存怎么算?

A:
以 LLaMA-2 7B, batch=1, seq=4096 为例:
- num_layers = 32
- num_kv_heads = 32 (MHA)
- head_dim = 128
- BF16 = 2 bytes

KV Cache = 2 × 32 × 4096 × 32 × 128 × 2
         = 128 MB

如果是 34B (GQA, num_kv_heads=8):
KV Cache = 2 × 48 × 4096 × 8 × 128 × 2
         = 48 MB (减少 2.7 倍)

Q: 投机解码加速原理?

A:
1. 小模型(如 7B)一次生成 k 个 token
2. 大模型(70B)并行验证这 k 个 token
3. 如果小模型猜对了 → 一次输出 k 个
4. 如果错了 → 只输出前几个对的

加速比 ≈ 小模型速度 / 大模型速度 × k / (1 + rejection_rate)
通常 2-4x 加速

Q: Paged Attention 是什么?

A:
传统 KV Cache:每个请求连续存储,碎片化严重
Paged Attention:分块管理 KV Cache,像操作系统的分页

优势:
- 减少显存碎片(从 60% → 90%+ 利用率)
- 提高并发(bs=1 → bs=32+)
- 支持 prefix caching

6.4 量化相关

Q: GPTQ vs AWQ 区别?

A:
GPTQ:
- 逐层 OBQ 量化
- 需要校准数据
- 对所有权重一视同仁

AWQ:
- 保留 1% 显著权重为高精度
- 只量化 99% 的权重
- 质量更好,尤其对 LLM

Q: INT4 量化后模型能用吗?

A:
能用,但有前提:
1. 用 GPTQ/AWQ 等方法,而非 naive INT4
2. 保留重要权重为更高精度(如 INT8)
3. 评估指标(困惑度、accuracy)下降 < 5%

LLaMA-2 70B INT4 (AWQ):
- 显存从 140GB → 35GB
- 质量损失 < 2%
- 单卡 A100 (80GB) 可运行

7. 框架选择决策树

需要部署 LLM?

    ├─── 是
    │    │
    │    ├─── 需要最高吞吐?
    │    │    │
    │    │    ├─── 是 → TensorRT-LLM
    │    │    └─── 否 → vLLM
    │    │
    │    ├─── 需要复杂推理(约束解码)?
    │    │    │
    │    │    └─── 是 → SGLang
    │    │
    │    └─── CPU/边缘部署?
    │         │
    │         └─── 是 → llama.cpp / GGUF

    └─── 只是实验/微调?

         └─── 是

              ├─── LoRA 微调 → QLoRA (bitsandbytes)

              └─── 只是推理 → HuggingFace Transformers

8. 常用配置参考

8.1 LLaMA 模型规格

模型参数量num_headshead_dimGQA最大上下文
LLaMA 2 7B7B321284096
LLaMA 2 13B13B401284096
LLaMA 2 34B34B48128✅ (8)4096
LLaMA 2 70B70B64128✅ (8)4096
LLaMA 3 8B8B32128✅ (8)8192
LLaMA 3 70B70B64128✅ (8)8192

8.2 显存占用参考

模型FP16INT8INT4 (GPTQ)INT4 + GQA
7B14GB7GB3.5GB-
13B26GB13GB6.5GB-
34B68GB34GB17GB~10GB
70B140GB70GB35GB~20GB

8.3 常用超参数

python
# LoRA 常用配置
lora_config = {
    'r': 16,              # rank,通常 8-16
    'lora_alpha': 32,     # 通常 2*r
    'lora_dropout': 0.05,
    'target_modules': ['q_proj', 'v_proj'],  # 通常 Q+V
    'bias': 'none',       # 或 'lora_only'
    'task_type': 'CAUSAL_LM'
}

# QLoRA 配置
q_lora_config = {
    'bnb_4bit_compute_dtype': torch.bfloat16,
    'bnb_4bit_use_double_quant': True,
    'bnb_4bit_quant_type': 'nf4'  # NormalFloat4
}

# 训练配置
training_config = {
    'per_device_train_batch_size': 4,
    'gradient_accumulation_steps': 4,  # 总 batch = 4*4 = 16
    'learning_rate': 1e-4,
    'warmup_steps': 100,
    'num_train_epochs': 3,
    'bf16': True,
    'gradient_checkpointing': True,
    'max_grad_norm': 1.0
}

基于 MIT 许可发布