one cycle学习率策略
有规律的改变学习率有助于更快的越过鞍点。
https://blog.csdn.net/weixin_44751294/article/details/125170729
batchsize设置
使用gpu能允许的最大batchsize可加速训练,但效果可能比小的batchsize差。在修改batchsize时需要修改学习率,经验是batchsize加倍时,学习率也加倍。
Openai:An Empirical Model of Large-Batch Training
Dataloder的num_worker 和pin_memory设置
Number_work表示使用多少个子进程进行数据加载,number_worker设置过大,内存消耗过大,加大cpu负担,经验:设置为可用gpu数量的4倍。
当内存充足时,Pin_memory设置为True,数据加载到gpu的速度更快。
Automatic Mixed Precision
使用自动混合精度进行训练。Pytorch1.6已实现。AMP会自动决定在某些操作时使用Float16, 某些操作使用Float32。在不损失精度的前提下,达到更快的速度和占用更小的内存(显存)
image.png
设置cudnn
如果模型输入固定,结构不变。可将torch.backends.cudnn.benchmark=True。
分布式训练
使用DistributedDataParallel
https://blog.csdn.net/ytusdc/article/details/122091284
梯度累加
使用梯度累加,可以规避gpu显存的限制
image.png
梯度裁减
最初是为了避免RNN的梯度爆炸
image.png
cpu和gpu数据拷贝
避免数据在cpu和gpu之间频繁的转换,尽量使用torch.as_tensor()和torch.from_numpy().而不是torch.cpu()、torch.cuda()、torch.tensor().