近日,索尼公司的研究人员宣布,他们在 ImageNet 上只花了 224 秒就训练出了一个 ResNet 50 架构。
得到的网络在 ImageNet 的验证集上具有 75%的 top-1 准确率。他们通过使用 NVIDIA 的 2.100 Tesla V100 Tensor Core GPU 实现了这一记录。除了这个记录,他们还使用 1.088 Tesla V100 Tensor Core GPU 获得了 90%的 GPU 伸缩效率。
将神经网络训练成多台机器有两个主要的挑战:要训练的批大小和梯度的同步。
为了减少训练神经网络的时间,可以使用一个小规模批处理来快速地将网络权重“推到正确的方向”。为了更新权重,错误会给出一个梯度,指示需要更新权重的“方向”。当使用小规模批处理时,您可以非常快速频繁地确定这个方向。
然而,小规模微批处理使得神经网络倾向于找到局部性能的最小值。索尼使用批处理大小控制解决了这个问题,这是一种最近被越来越多地使用的技术。通过对批处理尺寸的控制,逐渐增大小规模批处理的尺寸,避免局部最小的损失情况。通过观察更多的图像,神经网络对需要改进的平均误差方向有了更好的认识,而不是仅仅根据几个小样本确定误差方向。索尼将前 5 个轮次视为热身轮次,批大小较低,而之后的轮使用了较大规模的批处理。索尼还使用了混合精度训练,在 FP16 中进行向前/向后计算。
第二个问题是,在机器之间梯度的同步可能很慢。对于不同 GPU 之间的通信,需要大量的带宽。索尼的研究人员采用了 2D-Torus all reduce 算法来减少通信开销。在这种通信算法中,GPU 被放置在一个虚拟网格中。首先,梯度水平传递,然后垂直地传递到所有列,然后在最后一次传递中再次水平传递。这意味着,如果 X 是水平方向上的 GPU 数量,则需要 2(X-1) GPU 到 GPU 的操作。
索尼的研究人员使用工具神经网络库(NLL)及其 CUDA 扩展作为 DNN 培训框架。对于 GPU 之间的通信,他们使用了 NVIDIA Collective Communications Library (NCCL) version 2。
去年,多个团队试图在尽可能短的时间内训练 ResNet 50 架构。在 2017 年 9 月,InfoQ报道IBM在50分钟内培训了相同的神经网络架构。当时,IBM 实现了更高的可伸缩性效率,但只使用了 256 个 GPU。在问答中,Hillery Hunter 说批处理的大小是最具挑战性的事情之一,但是他们希望他们的方法可以扩展到更多的 GPU。在本文中,他们研究了多个 GPU 的 GPU 伸缩效率,在使用 3264 GPU 进行训练时,效率为 52.47%。
索尼公司的研究人员将他们的研究结果发表在《ImageNet/ResNet-50 Training in 224 Seconds》上,您可以在 arXiv 上找到这篇论文。
评论 1 条评论