荣耀 AI Infra 一面
Q: 模型训练优化有哪些方法?(算法层面和硬件层面)
训练优化的目标是在保证收敛质量的前提下,最大化训练吞吐(tokens/s)和资源利用率。
算法层面优化:
| 方法 | 原理 | 典型收益 | 适用场景 |
|---|---|---|---|
| 混合精度训练 | 计算用 BF16/FP16,主权重保持 FP32 | 训练速度 1.5-2x | 所有模型 |
| 梯度累积 | 小 batch 多步累积后才更新 | 模拟大 batch,不增显存 | 单卡显存不够 |
| 学习率调度 | Warmup + Cosine Decay | 训练稳定 + 收敛更好 | 所有大模型训练 |
| 梯度 Checkpoint | 只保存部分层的激活,反向时重算 | 激活显存减 60-80% | 大模型/长序列 |
| FlashAttention | Tiling + Online Softmax | 速度 2-4x + 显存 O(N²)→O(N) | Attention 密集模型 |
| 知识蒸馏 | 大模型指导小模型训练 | 小模型质量提升 | 部署受限场景 |
| 课程学习 | 从简单样本逐步到困难样本 | 收敛更快更稳定 | 数据难度差异大 |
混合精度训练的具体流程:
1 | 每个训练步: |
系统/硬件层面优化:
| 方法 | 原理 | 典型配置 | 适用规模 |
|---|---|---|---|
| 数据并行 (DP) | 模型副本 + 数据切分 + AllReduce 梯度 | N 卡 = N 倍数据 | 模型放得下单卡 |
| 张量并行 (TP) | 切分权重矩阵到多卡 | 通常 TP=2-8 (节点内) | 单层太大 |
| 流水线并行 (PP) | 切分层到多卡 + 微批次流水 | PP=2-8 (跨节点) | 总层数多 |
| ZeRO | 分片优化器/梯度/参数 | Stage 1/2/3 | 显存不足 |
| Sequence Parallel | 沿序列维度分片激活 | 通常与 TP 配合 | 长序列 |
| 计算通信重叠 | AllReduce 与反向计算并行 | bucket gradient | 多卡训练 |
| 高速互联 | NVLink (900 GB/s) / IB (400 Gbps) | 节点内 NVLink + 节点间 IB | 大规模集群 |
| Offload | 优化器状态/激活卸载到 CPU/NVMe | ZeRO-Offload | 显存极紧张 |
3D 并行组合(大模型训练标配):
1 | 典型配置 (70B 模型, 128 GPU): |
前沿优化方向:
- FP8 训练(H100):计算吞吐再提 2x,需要处理精度问题
- Zero-Bubble PP:通过拆分 B/W 消除流水线空泡
- 异步 TP:通信与计算重叠,减少 TP 同步等待
- Selective Activation Recomputation:只重算占显存大的层(如 Attention),保留小的层
Q: 模型压缩的方法有哪些?
模型压缩旨在减小模型大小和计算量,同时尽可能保持精度。各方法可独立或组合使用:
1. 量化(Quantization)——降低数值精度:
| 方法 | 精度格式 | 压缩比 | 精度损失 | 硬件要求 |
|---|---|---|---|---|
| FP8 (E4M3) | 8-bit 浮点 | 2x | 极小 | H100+ |
| W8A8 (SmoothQuant) | INT8 | 2x | 小 | A100+ |
| W4A16 (AWQ/GPTQ) | INT4 权重 | 4x | 中 | 通用 |
| W4A8 | INT4 权重 + INT8 激活 | 4x+ | 中高 | 专用 kernel |
| NF4 (QLoRA) | 4-bit NormalFloat | 4x | 小(微调) | 通用 |
2. 剪枝(Pruning)——移除不重要的参数:
1 | 结构化剪枝(推理友好,可直接加速): |
3. 知识蒸馏(Knowledge Distillation)——大模型教小模型:
1 | Teacher (大模型, 如 70B) → Student (小模型, 如 7B) |
4. 低秩分解(Low-Rank Decomposition):
1 | 原始权重: W [d × d] = d² 参数 |
5. 架构搜索 / 高效架构设计:
- MoE:稀疏激活,同等计算量下更大参数量
- MobileLLM:针对端侧设计的高效 Transformer 变体
- Mamba/RWKV:线性复杂度替代 attention(推理无需 KV Cache)
各方法适用场景总结:
1 | 推理部署(精度优先)→ W8A8 量化 |
Q: 训练框架有哪些?各自特点?
主流 LLM 训练框架对比:
| 框架 | 开发方 | 核心特色 | 适用场景 |
|---|---|---|---|
| PyTorch (FSDP/DDP) | Meta | 灵活易用、动态图、生态最大 | 研究/中等规模训练 |
| DeepSpeed | 微软 | ZeRO 系列显存优化、易集成 | 大模型训练(学术友好) |
| Megatron-LM | NVIDIA | 极致 TP+PP+SP、最高吞吐 | 超大规模预训练 |
| ColossalAI | HPC-AI Tech | 多种并行策略整合、低门槛 | 快速搭建训练系统 |
| veRL | 字节/火山 | RLHF 训练 + Hybrid Engine | LLM 对齐训练 |
| OpenRLHF | 开源社区 | Ray 编排 + 多模块解耦 | RLHF/GRPO 训练 |
| JAX/XLA | 函数式 + 编译器优化 | TPU 训练 | |
| Llama-Factory | 开源 | 一站式微调(100+ 模型) | 微调/实验 |
详细特点分析:
DeepSpeed:
1 | 核心: ZeRO 分片(最知名的显存优化) |
Megatron-LM:
1 | 核心: 极致的 3D 并行 + 通信优化 |
选择建议:
1 | 研究实验 + 7B 模型 → PyTorch DDP + DeepSpeed ZeRO-2 |
Q: 模型调优的经验和方法?
模型调优(训练调优)是一个系统化的实验和分析过程,需要对训练动态有深入理解。
超参数搜索(最核心):
| 超参数 | 推荐范围 | 影响 | 搜索策略 |
|---|---|---|---|
| 学习率 (lr) | 1e-5 ~ 5e-4 | 最关键,决定收敛速度和最终质量 | 先粗搜(10x 间隔)再细调 |
| Batch size | 256K~4M tokens | 影响收敛速度和泛化 | 通常固定(受硬件限制) |
| Warmup steps | 总步数的 1-5% | 训练初期稳定性 | 固定为 2000-5000 步 |
| Weight decay | 0.01-0.1 | 正则化强度 | 通常 0.1 for LLM |
| lr schedule | Cosine / WSD | 后期学习率衰减方式 | Cosine 最常用 |
| Adam β₁/β₂ | 0.9 / 0.95 | 动量和二阶矩的平滑度 | 通常不需要调 |
| Gradient clip | 1.0 | 防止梯度爆炸 | 固定为 1.0 |
学习率的关键地位:
1 | lr 太大: loss spike → NaN → 训练崩溃 |
数据质量与配比:
| 维度 | 影响 | 实践建议 |
|---|---|---|
| 去重 | 重复数据降低训练效率 | MinHash / exact dedup |
| 质量过滤 | 低质量数据(乱码、广告)污染模型 | 用分类器过滤 + 规则过滤 |
| 领域配比 | 不同领域数据比例影响模型能力分布 | 代码:网页:书籍 ≈ 1:4:1 |
| 多语言配比 | 影响多语言能力 | 英:中:其他 ≈ 6:2:2 |
| 数据课程 | 训练顺序影响收敛 | 先通用后专业,先简单后困难 |
训练监控和 Debug:
1 | 必监控指标: |
评估策略:
1 | 训练中评估: |