性能工程:瓶颈可能不在 GPU 算力
约 14 分钟
训练慢不一定模型计算慢。数据读取、解码、CPU增强、主机到设备传输、同步和小算子启动都可能让GPU等待。优化前先测量端到端时间并分解瓶颈。
正确计时
GPU操作常异步,普通墙钟会漏未完成工作。预热后同步计时,分别报告数据、前向、反向、优化与评估;吞吐与单样本延迟是不同指标。
数据管线
增加worker、预取、缓存和固定页内存可改善供给,但过多worker会争用IO或内存。先测GPU利用率与队列等待,不盲目把参数调大。
批量大小
大批提高并行效率和显存利用,可能改变优化与泛化;梯度累积模拟大批更新,却不完全复制BatchNorm统计和通信行为。
显存
激活、梯度、优化器状态和临时工作区共同占用。检查点重计算用算力换显存,混合精度和分片也有通信代价。
分布式
多GPU只有计算足够大且通信可重叠才加速。报告扩展效率,确认全局批量、学习率与随机采样没有悄悄改变实验。
性能优化必须在数值一致或指标等价前提下验收。算子融合、近似注意力和低精度可能改变结果;同时保存速度、成本与准确性回归,而不是只展示每秒样本数。
任务:对一个D2L训练脚本做性能剖析,只优化最大瓶颈,并报告修改前后吞吐、显存与模型指标。
小纸条
GPU训练计时时为什么常需要显式同步?