在分布式大模型训练中,学习率调度策略对训练速度的影响往往被低估。本文分享几个实用的调优经验。
实验环境:8卡V100,PyTorch 2.0,ResNet50模型
基础设置:初始学习率0.1,batch size=256,总epoch=90
调优步骤:
- 固定warmup阶段(前5个epoch)为线性增长至0.1
- 采用cosine衰减策略:
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=85) - 验证不同调度策略的收敛速度
关键发现:
- 线性衰减vs余弦衰减,余弦策略在第20个epoch时训练速度提升约12%
- 建议使用
torch.optim.lr_scheduler.LinearLR进行warmup后,再切换到CosineAnnealingLR
可复现代码片段:
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
# warmup 5 epochs
warmup_scheduler = torch.optim.lr_scheduler.LinearLR(optimizer, start_factor=0.2, total_iters=5)
# cosine decay
cosine_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=85)
for epoch in range(90):
train_one_epoch()
if epoch < 5:
warmup_scheduler.step()
else:
cosine_scheduler.step()
实际生产中,建议根据收敛曲线微调warmup长度和衰减策略选择。

讨论