PyTorch分布式训练
PyTorch分布式训练
数据并行训练
PyTorch 为数据并行训练提供了多种选项。一般来说,应用会从简单到复杂,从原型到量产。这些应用共同的发展轨迹是:
- 如果数据和模型可以放在一个 GPU 中,并且不关心训练速度,就使用单设备(single-device)训练。
- 如果服务器上有多个 GPU,并且您希望以最少的代码更改来加速训练,那么可以使用单机多 GPU DataParallel。
- 如果您想进一步加快训练速度并愿意编写更多代码来设置它,可以使用单机多 GPU DistributedDataParallel。
- 如果应用程序需要跨机器边界进行扩展,请使用多机 DistributedDataParallel 和 启动脚本。
- 如果预期会出现错误(例如,OOM)或者资源可以在训练期间动态加入和离开,则使用torchelastic启动分布式训练。
Torch如何使用GPU
- _apply 方法
- 遍历 _parameters:
- 对参数调用fn进行处理,得到param_applied。
- 用 param_applied 重新设置参数。
- 如果参数有梯度,则:
- 对参数的grad调用fn进行处理,得到grad_applied。
- 用 grad_applied 重新设置参数的梯度。
- 对参数调用fn进行处理,得到param_applied。
- 遍历 _buffers:
- 对buf调用fn进行处理。
- 遍历 _parameters:
调用 cuda 或者 to 方法来移动模型到GPU,其实就是把模型的self._parameters
和 self._buffers
移动到 GPU,并没有对 self._modules
进行移动。这个移动过程是递归调用的,是把模型每个叶子都移动到了 GPU 之上。
1 | + |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Thyssen Wen's Blog!