阿里巴巴 AI Infra 实习 (1)
Q: MHA、GQA与MLA的区别和各自特点?
三种注意力机制的核心差异在于KV head的共享程度,直接影响KV Cache大小和推理效率:
MHA(Multi-Head Attention)— 原始Transformer:
- 每个head拥有独立的Q、K、V投影
- KV Cache大小 =
2 * num_heads * head_dim * seq_len * num_layers * dtype_size - 例如GPT-3 175B(96层,96头,head_dim=128,FP16):
- 单条2048序列:2 * 96 * 96 * 128 * 2048 * 2B ≈ 9.2GB
- 优点:每个head有完全独立的KV表示,模型表达力最强
- 缺点:KV Cache巨大,decode阶段带宽瓶颈严重
GQA(Grouped Query Attention)— LLaMA-2/3, Qwen:
- 将query head分组,每组共享一套KV head
- 如LLaMA-2 70B:32个query head分为8组,只有8个KV head
- KV Cache缩小为MHA的
num_kv_heads / num_heads(如1/4) - 关键洞察:研究表明KV的冗余度远高于Q——不同query head经常关注相似的key-value模式
| 配置 | num_q_heads | num_kv_heads | KV Cache缩减 | 模型 |
|---|---|---|---|---|
| MHA | 32 | 32 | 1x (基线) | GPT-3 |
| GQA-8 | 32 | 8 | 4x | LLaMA-2 70B |
| GQA-2 | 32 | 2 | 16x | - |
| MQA | 32 | 1 | 32x | PaLM, StarCoder |
MLA(Multi-head Latent Attention)— DeepSeek-V2/V3:
- 核心思想:将KV投影到低维latent空间再存储,推理时从latent解压出KV
- 训练时:
K = Up_K @ (Down_K @ X),存储中间的latentc = Down_K @ X(维度远小于K) - KV Cache大小 =
latent_dim * seq_len(如512维 vs GQA的 8*128=1024维) - 进一步优化:latent与RoPE解耦——将position-dependent的部分单独存储,允许更激进的latent压缩
三者对比:
| 维度 | MHA | GQA | MLA |
|---|---|---|---|
| KV Cache(相对) | 100% | 12.5-50% | 5-15% |
| 模型质量 | 最高 | 接近MHA | 接近MHA |
| 计算效率 | 基线 | decode加速显著 | decode加速最显著 |
| 实现复杂度 | 简单 | 简单 | 较复杂(需要latent编解码) |
| 代表模型 | GPT-3/4 | LLaMA-2/3, Qwen | DeepSeek-V2/V3 |
选择建议:目前GQA是最主流的选择(简单有效),MLA在极端KV Cache压缩需求下更有优势(如超长序列或大批量推理)。
Q: MoE模型和多模态模型训练还有哪些优化点?
MoE训练优化:
1. AllToAll通信优化
- 通信-计算Overlap:将AllToAll分解为多步P2P通信,与专家计算流水线化
- 分层AllToAll:先节点内NVLink通信,再节点间InfiniBand通信(减少跨节点数据量)
- 压缩通信:对dispatch的token activation做FP8量化传输(DeepSeek-V3的做法)
- 典型开销:MoE层中AllToAll可占30-50%时间,overlap后可隐藏大部分
2. 专家负载均衡
- Auxiliary loss惩罚路由偏斜(α=0.01-0.1的auxiliary loss系数需仔细调节)
- Expert Choice反向路由 / Auxiliary-loss-free bias方法
- 动态容量因子:根据训练进度调整专家容量上限
3. Group Gemm优化
- 多个专家的输入batch大小不同→ 不能直接做batched GEMM
- 使用Grouped GEMM(CUTLASS支持):一次kernel call处理多个不同大小的矩阵乘
- 或者padding到相同大小(浪费计算但实现简单)
4. 专家并行策略
- Expert Parallelism(EP):不同专家分布在不同GPU
- EP + TP 混合:每个专家内部再做tensor parallelism(超大专家时需要)
- EP + DP:同一专家在多GPU上有replica(增加吞吐)
5. 专家容量动态调整
- 训练初期路由不稳定→用较大capacity factor(1.5-2.0)
- 训练后期路由稳定→减小capacity factor(1.0-1.25)节省计算
多模态模型训练优化:
1. 视觉编码器与LLM异构并行
- 视觉编码器(如ViT-L)远小于LLM→二者对GPU资源的需求不对称
- 方案:将视觉编码器单独部署在少量GPU上,LLM做3D并行
- 异步流水线:视觉编码与LLM前向计算overlap
2. 动态分辨率处理
- 不同图片分辨率不同→固定分辨率会浪费计算或丢失信息
- 动态分辨率:按照图片原始比例选择最接近的分辨率切分方案
- NaViT/Qwen-VL的做法:将不同大小的图片token packing到同一序列,减少padding浪费
3. 视觉token压缩/下采样
- 问题:一张高分辨率图片可能产生1000+个vision token,占大量context window
- 解决:Perceiver Resampler(固定数量的可学习query)、Q-Former、C-Abstractor等压缩模块
- 或简单的2x2 pooling将token数减为1/4
4. 多模态数据混合比例调优
- 文本:图文:视频数据的比例需要仔细调节
- 通常先text-only预训练→再逐步引入多模态数据
- 不同阶段的最优比例不同(早期更多文本打基础,后期增加多模态)
5. 视觉特征缓存
- 同一张图片在不同对话轮次中重复出现→无需每次重新编码
- 缓存视觉编码器的输出特征,按图片hash查找复用
Q: 大模型预训练和强化学习训练在工程上有哪些可优化的点?
预训练工程优化:
1. 3D并行策略调优
- DP(数据并行)× TP(张量并行)× PP(流水线并行)的最优组合与模型大小、集群拓扑强相关
- 经验法则:TP在NVLink节点内(如TP=8),PP跨节点,DP覆盖剩余GPU
- 对于MoE还需要EP(专家并行),四维组合更复杂
2. 通信与计算Overlap
- PP:1F1B调度使micro-batch的前向和反向交替执行,隐藏bubble
- DP:gradient AllReduce与反向计算overlap(PyTorch DDP默认行为)
- TP(Sequence Parallelism):将AllReduce分解为RS+AG,分别与不同计算overlap
- Zero Bubble Pipeline:进一步优化PP调度减少idle时间
3. 数据加载Pipeline优化
- 多进程预取 + GPU异步预处理
- Tokenized数据预处理离线完成(不在训练时做tokenization)
- 大规模分布式文件系统优化(数据locality、prefetch)
- 数据Packing:多个短序列拼接到max_seq_len,减少padding浪费(提升30%+效率)
4. 混合精度/FP8训练
- FP16/BF16混合精度是标配
- FP8训练(DeepSeek-V3):前向FP8/反向FP8,进一步降低通信量和显存
- 需要per-tensor/per-channel动态scaling + delayed scaling策略保证精度
5. 长序列训练(Context Parallelism)
- Ring Attention:将长序列分到多GPU,每GPU处理一段,通过环形通信传递KV
- DeepSpeed Ulysses:AllToAll重新分布attention的head维度
- 与TP的区别:CP切分序列维度,TP切分head维度
6. 故障恢复和弹性训练
- 大规模训练中GPU故障率
0.1%/天/GPU → 1000GPU集群每天1次故障 - 频繁Checkpoint(每1-2小时)+ 异步checkpoint不阻塞训练
- 弹性训练:故障GPU自动剔除,剩余GPU重新组网继续训练
- Redundant Computation:对关键梯度做冗余计算(少量性能换可靠性)
RL训练工程优化:
1. 采样与训练解耦
- PPO/GRPO需要大量在线采样(推理模式)
- 分离推理集群(生成回答)和训练集群(更新参数)
- 异步Pipeline:生成集群持续产生数据,训练集群消费数据更新→参数同步回生成集群
- vLLM/SGLang作为高效采样引擎
2. 经验回放缓冲管理
- 大batch采样(如一次生成数千条回答)的高效存储和索引
- 支持按reward/advantage值排序采样(优先经验回放)
- GPU-CPU间数据传输优化(pinned memory + async transfer)
3. PPO/GRPO的多阶段Pipeline
- PPO一个iteration涉及:采样→奖励打分→GAE计算→多epoch策略更新
- 各阶段可以pipeline化执行(上一batch的训练与下一batch的采样overlap)
- GRPO简化了pipeline(无Value model),但组内采样量大
4. 奖励模型推理加速
- 奖励模型推理是RL训练的瓶颈之一(每条生成都需要打分)
- 优化:奖励模型量化(INT8)、batch推理、TP并行
- 某些场景可用规则奖励替代模型奖励(如数学题的答案验证)
5. Reference模型共享/Offload
- PPO需要frozen的reference model计算KL惩罚
- 占用额外一份模型显存→ offload到CPU / 与training model共享权重(定期snapshot)
- GRPO可以用当前batch的旧策略概率近似,减少reference model的需求
Q: 手撕:二叉树的层序遍历?
(编程题)
Q: 手撕:实现Multi-Head Attention?
(编程题)