学习记录:分布式训练02

112 阅读1分钟

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更新模型

image.png

前向代码:

image.png

实际效果:

  • 调用了多GPU进行训练,但是训练速度没有多大,甚至有可能下降(可能大家会观测到不同的现象)。

Data Parrallel 的问题

  • 单进程,多线程,由于GIL锁的问题,不能充分发挥多卡的优势。
  • 由于Data Parrallel的训练策略问题,会存在一个主节点占用比其他节点高很多。
  • 效率较低,每次训练开始都要重新同步模型,大模型的同步时间会较难接受。
  • 只适用于单机训练,无法支持真正的分布式多节点训练。

所以nn.DataParrallel是目前不推荐的一种数据并行训练策略

nn.DataParrallel可以在并行推理中使用