没有最快,只有更快!富士通74.7秒在ImageNet上训练完ResNet - 5( 三 )

具体方法

根据论文介绍 , 具体的研究方法分为3个部分 , 准确率提升、框架优化以及通信优化(CommunicationOptimizations)

关于准确率提升 , 其使用了通常用于深度学习优化的随机梯度下降(SGD) 。 当使用largemini-batch训练时 , SGD更新数量会随着小批量的增加而减少 。 所以 , 提高largemini-batch上最终验证准确率是一个很大的挑战 , 他们采用了学习速率控制:由于更新次数少 , 需要使用较高的学习速度来加速训练 。 然而 , 高的学习率使模型的训练在早期阶段变得不稳定 。 因此 , 我们通过使用热身(warmup)来稳定SGD , 从而逐渐提高学习率 。 此外 , 对于某些层次来说 , 所有层的学习速度都太高 , 使用分层自适应率来稳定训练 。

ImageNet上ResNet-50的训练时间和top-1验证准确率 。

关于框架 。 其使用了MXNet , 这是一个用C++和CUDAC语言编写的开源深度学习框架 。 MXNet具有灵活性和可扩展性 , 可以在集群上高效地训练模型 。 然而 , 在中小型集群环境中只占总时间的一小部分的处理可能成为大规模集群环境中的瓶颈 。 他们分析了CPU和GPU的性能 , 并找出了瓶颈 。 优化了瓶颈 , 提高训练吞吐量如下 。 采用的方法包括:并行DNN模型初始化(ParallelDNNmodelinitialization)、在GPU上的批量规范计算(BatchednormcomputationsontheGPU)

分布式并行深度学习需要所有减少通信以在所有进程之间交换每层的梯度 , 由于每个GPU的batch规模小 , 因此通信时间变长 , 而计算时间变短 , 所以减少通信开销在大型集群环境中是不可忽略的 。 为了克服这些问题 , 他们采用的方法包括:调节通信的数据大小(Adjustingdatasizeofcommunication) , 即研究人员收集了各层的梯度 , 然后将allreduce的数据大小调整为几兆字节;最佳的通信调度(Optimalschedulingofcommunications)即预先以统计的方式将所有层分为好几组 。 一旦每个进程完成一组中所有层的反向处理 , 就计划开始allreduce操作 。


推荐阅读