本文主要是介绍单机多卡训练-DDP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
DDP原理:
为什么快?
DDP通过Ring-Reduce(梯度合并)的数据交换方法提高了通讯效率,并通过启动多个进程的方式减轻Python GIL的限制,从而提高训练速度。
神经网络中的并行有以下三种形式:
- Data Parallelism
- 这是最常见的形式,通俗来讲,就是增大batch size提高并行度。
- 平时我们看到的多卡并行就属于这种。比如DP、DDP都是。这能让我们方便地利用多卡计算资源。
- 能加速。
- 这是最常见的形式,通俗来讲,就是增大batch size提高并行度。
- Model Parallelism
- 把模型放在不同GPU上,计算是并行的。
- 有可能是加速的,看通讯效率。
- Workload Partitioning
- 把模型放在不同GPU上,但计算是串行的。
- 不能加速。
参考:[原创][深度][PyTorch] DDP系列第一篇:入门教程 - 知乎 (zhihu.com)
[原创][深度][PyTorch] DDP系列第一篇:入门教程 - 知乎 (zhihu.com)
注意点:
1. 保存模型:
考虑到以后可能需要单卡加载你多卡训练的模型,建议在保存模型时,去除模型参数字典里面的module,如何去除呢,使用model.module.state_dict()代替model.state_dict()
2. 每一个epoch里面真正的打乱数据
for epoch in range(args.num_epochs):train_sampler.set_epoch(epoch) # shuffle数据
这篇关于单机多卡训练-DDP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!