Pytorch训练技巧

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().

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容