Extremely Large Minibatch SGD:Training ResNet-50 on ImageNet in 15 Minutes
摘要
本文通过将minibatch size提高到32k实现了在ImageNET上用15分钟训练完ResNet50。为了保证精读使用了RMSprop warm-up,batch normalization,以及slow-start learning rate schedule.
引言
训练深度神经网络在计算上是昂贵的。更高的可扩展性(更大的数据集和更复杂的模型)和更高的生产率(更短的培训时间以及更快的试验和错误)要求通过分布式计算来加速。
本文证明,在不影响准确性经过精心设计的软件和硬件系统的情况下,使用large batch可以进行高度并行的训练。
方法
主要使用了《Accurate, large minibatch SGD: training ImageNet in 1 hour》文章的方法。
RMSprop Warm-up
本文发现主要的挑战是训练开始时的优化难度。为了解决这个问题,本文从RMSprop [7]开始训练,然后逐步过渡到SGD。
momentum SGD 和RMSprop 的结合
从RMSprop 开始,然后切换到SGD(需要平滑切换,突然切换有副作用)
对$\alpha_{SGD}$的调度,类似与ELU激活函数:
$\alpha_{SGD}$先指数增长,之后到达$\beta_{center}$epoch后达到1/2,之后线性增长到$\beta_{center} + \frac{1}{2}\beta_{period}$ epoch, 超参数$\beta_{center}=10,\beta_{period}=5$
Slow-Start Learning Rate Schedule
为了进一步克服最初的优化困难,本文使用略微修改的学习率时间表,以延长初始阶段并降低初始学习率
初始学习率
$b_{local}$ 是一个worker的batch size。
SGD前40个epoch用$0.5\cdot\eta_{base}$,随后的30个epoch为$0.075\cdot\eta_{base}$,接下来的15个epoch $0.01\cdot\eta_{base}$,最后5个为$0.001\cdot\eta_{base}$
Batch Normalization without Moving Averages
随着batch size的增加,均值和方差的batch normalization会移动平均值导致实际均值和方差的不准确估计。为了解决这个问题,本文只考虑了最后的minibatch,而不是移动平均数,并且对这些统计数据使用全归约通信来获得验证之前所有Workers的平均数。
结果
软件:使用Chainer和ChanierMN Chainer是一个开源的深度学习框架,具有“按运行定义”方法。 ChainerMN是Chainer的附加软件包,可实现具有同步数据并行性的多节点分布式深度学习。作为底层的通信库,本文使用了NCCL 2.0.5版和Open MPI 1.10.2版。
使用半精度浮点数来减少通信开销,对模型准确的影响较小。
硬件: 使用MN-1内部集群。包含128个节点。
训练时间
通信和迭代时间
讨论
思考
- 使用的软件不常用可以替换为Pytorch?
- 比较的软件框架,硬件都不一致,是否有说服力?有没有统一平台的benchmark?