Data Parallerl 原理与应用
Data Parrallel 原理
什么是数据并行
- 每个GPU里都存一份完整的模型,训练时每个GPU里的模型训练不同的数据
- 适用于单卡能够运行完整训练流程的情况,如果单卡无法运行完整流程,则无法使用
Data Parrallel
- 这里特指Pytorch框架中的nn.DataParallel所实现的数据并行方法
Data Parrallel 原理
训练流程:
- Step1 GPU0 加载model和batch数据
- Step2 将batch数据从GPU0均分至各卡
- Step3 将model从GPU0复制到各卡
- Step4 各卡同时进行前向传播
- Step5 GPU0收集各卡上的输出,并计算Loss
- Step6 将Loss分发至各卡,进行反向传播,计算梯度
- Step7 GPU0收集各卡的梯度,进行汇总
- Step8 GPU0更新模型
前向代码:
实际效果:
- 调用了多GPU进行训练,但是训练速度没有多大,甚至有可能下降(可能大家会观测到不同的现象)。
Data Parrallel 的问题
- 单进程,多线程,由于GIL锁的问题,不能充分发挥多卡的优势。
- 由于Data Parrallel的训练策略问题,会存在一个主节点占用比其他节点高很多。
- 效率较低,每次训练开始都要重新同步模型,大模型的同步时间会较难接受。
- 只适用于单机训练,无法支持真正的分布式多节点训练。
所以nn.DataParrallel是目前不推荐的一种数据并行训练策略
nn.DataParrallel可以在并行推理中使用