真实面经题目 · 原创解析
怎么加速模型训练?
加速模型训练要从数据、模型、计算、分布式和实验流程五层回答。核心不是简单说“加 GPU”,而是减少无效计算、提高硬件利用率、降低通信成本,并保证加速后模型效果和可复现性不被破坏。
我会先定位瓶颈:是数据读取慢、GPU 利用率低、模型计算重、显存不足、通信开销大,还是实验流程低效。然后按层优化:数据侧做缓存、预处理和并行加载;模型侧用混合精度、梯度累积、checkpoint、蒸馏或更小结构;系统侧用分布式训练、ZeRO、流水并行、FlashAttention 和高效 kernel;实验侧用早停、超参搜索策略和样本筛选。
训练加速首先要用 profiler 看清时间花在哪里。常见瓶颈包括数据加载跟不上、CPU 预处理过慢、GPU 利用率低、显存限制 batch size、前后向计算太重、分布式通信等待时间长。不同瓶颈对应完全不同的优化手段。
数据侧可以做离线预处理、样本缓存、压缩格式优化、并行 DataLoader、prefetch、减少小文件读取和更合理的 shuffle。很多训练慢不是模型慢,而是 GPU 在等数据,因此数据吞吐和训练吞吐要一起观察。
模型侧常用混合精度训练、梯度累积、梯度检查点、算子融合、FlashAttention、减少序列长度或裁剪无效 token。显存省下来可以提升 batch size 或启用更大的模型,但要注意数值稳定和收敛变化。
当单卡不够时,可以使用数据并行、张量并行、流水并行或 ZeRO 类优化。分布式不一定线性加速,因为通信、同步和负载不均会带来开销。需要关注吞吐、扩展效率、网络带宽和 checkpoint 成本。
工程上还可以通过更好的实验策略减少无效训练,例如早停、学习率搜索策略、小样本预筛、warm start、增量训练和自动化实验管理。最终要用相同验证集确认加速没有牺牲效果或引入不可复现问题。
低精度计算能利用硬件张量核心,提高吞吐并减少显存占用。但需要 loss scaling 和数值稳定检查,避免梯度下溢或训练发散。
它通过不保存部分中间激活来省显存,但反向传播时需要重新计算这些激活,因此会增加计算时间,适合显存是主要瓶颈的场景。
通信同步、参数广播、梯度聚合、数据倾斜和 I/O 瓶颈都可能抵消多卡收益,需要看扩展效率而不是只看 GPU 数量。