论文部分内容阅读
近几年,深度神经网络在图像和语音等研究领域中展现出了惊人的建模能力,因此在学术界和工业界大受欢迎。但是随着研究的深入,深度神经网络的模型结构变得越来越复杂,参数数量越来越多,另一方面,可用于训练的标注数据规模也变得越来越大,尽管当前的硬件算力也一直在不断地提升,但是依然无法满足人们日益增长的快速迭代算法模型的需求。对于学术界,需要拥有快速训练算法模型的能力,以便于能够快速分析实验结果做出算法调整;对于工业界,更是需要能够快速迭代模型,以便于在新场景上快速更新,以维持产品的技术优势。尽管诸如Google、Facebook和百度等巨头已经有了一些在大规模GPU集群上的训练加速研究工作,但是这些相应的分布式训练系统也少有开源,无法直接借鉴应用。因此本文首先是定义出了多服务器多GPU场景下,深度神经网络数据并行的训练策略与流程。然后本工作基于钩子机制,实现了 PyTorch框架下简单易用的数据并行分布式训练扩展接口,并且通过分析发现数据并行训练中,梯度数据碎片化的问题不利于全归约通信的带宽利用率,因此提出了惰性通信策略,将碎片化的梯度数据汇总之后进行全归约同步,有效提高了通信中的带宽利用率。另一方面,本工作的PyTorch扩展还实现了混合精度训练的支持,在具备有Tensor Core的GPU上可以获得最高1.71倍的训练加速效果,同时为了解决混合精度训练中梯度数值溢出的问题,本文提出了一种自适应的溢出可感知的损失放大策略,有效缓解了梯度溢出在混合精度训练由梯度溢出导致的训练不收敛问题。此外,本文还证明了在多机多卡下的数据并行训练应该采用局部批归一化,这对于含有较多批归一化层的神经网络的加速效果尤为明显。最终本文在4机32卡这样的中小规模集群上实现了最高99.4%的机间扩展效率,并且在1小时37分钟就内就可以完成MobileNet-vl在上的训练。此外通过本文所提的分布式训练扩展策略,在采用了较大训练数据批量的场景下,所训练模型不仅准确率没有下降,甚至还高于官方基线。比如本文训练的ResNet-50达到了 78.06%高于官方的76.86%,而MobileNet-vl则达到了 73.48%,高于官方的70.9%。