神经网络分布式训练

  • Post author:
  • Post category:其他

研究了半天分布式,简要总结出来分享一下,具体细节请看下面的参考资料。主要的参考资料是:

杨旭东:一文说清楚Tensorflow分布式训练必备知识​zhuanlan.zhihu.com

1. 分布式训练策略

  1. 模型并行:用于模型过大的情况,需要把模型的不同层放在不同节点orGPU上,计算效率不高,不常用。
  2. 数据并行:把数据分成多份,每份数据单独进行前向计算和梯度更新,效率高,较常用。

2. 分布式并行模式

  1. 同步训练:所有进程前向完成后统一计算梯度,统一反向更新。
  2. 异步训练:每个进程计算自己的梯度,并拷贝主节点的参数进行更新,容易造成错乱,陷入次优解。

3. 分布式训练架构

  1. Parameter Server:集群中有一个parameter server和多个worker,server需要等待所有节点计算完毕统一计算梯度,在server上更新参数,之后把新的参数广播给worker。
  2. Ring AllReduce:只有worker,所有worker形成一个闭环,接受上家的梯度,再把累加好的梯度传给下家,最终计算完成后更新整个环上worker的梯度(这样所有worker上的梯度就相等了),然后求梯度反向传播。比PS架构要高效。

4. Tensorflow分布式框架

  1. Horovod
  2. TF>=1.11中官方提供了AllReduce策略,支持Estimator API

5. Pytorch分布式框架

  1. NVIDIA/apex
  2. Pytorch中官方提供了DistributedDataParallel

转载于:https://juejin.im/post/5cfe6bcaf265da1b827a9191