最近在训练Transformer模型时踩了不少坑,今天来分享一些实用的训练技巧。
1. 学习率调度优化 刚开始我用了固定学习率,结果模型收敛很慢。后来改用余弦退火调度器,效果明显提升。代码如下:
from torch.optim.lr_scheduler import CosineAnnealingLR
scheduler = CosineAnnealingLR(optimizer, T_max=epochs)
2. 梯度裁剪防止梯度爆炸 训练过程中出现NaN值,排查后发现是梯度爆炸导致。添加梯度裁剪:
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
3. 批次大小优化 小批次训练容易不稳定,大批次训练资源消耗高。建议从bs=16开始,根据显存调整。
4. 混合精度训练 使用torch.cuda.amp进行混合精度训练,可节省约50%显存且不损失精度:
scaler = torch.cuda.amp.GradScaler()
scaler.scale(loss).backward()
这些技巧在实际项目中确实有效,建议大家多尝试不同组合。

讨论