Quantcast
Channel: InfoQ - 促进软件开发领域知识与创新的传播
Viewing all articles
Browse latest Browse all 1638

谷歌大脑提出“数据回送”算法,神经网络训练速度提升4倍

$
0
0

在摩尔定律的暮色中,GPU和其他硬件加速器极大地加速了神经网络的训练。但是,训练过程的前期阶段(如磁盘读写和数据预处理)并不在加速器上运行。随着加速器的不断改进,这些前期阶段所花费的时间将逐渐成为训练速度的瓶颈。谷歌大脑团队提出了“数据回送(data echoing)”算法,它减少了训练前期阶段的总计算量,并在加速器上游的计算占用训练时间时加快训练速度。“数据回送”复用训练前期阶段的中间输出,以利用闲置的计算空间。作者研究了在不同任务、不同数量的回送以及不同批尺寸时数据回送算法的表现。在所有的情况下,至少有一种数据回送算法可以用更少的上游计算达到模型的基线性能。在部分情况下,数据回送甚至可以将训练速度提升4倍。本文是AI前线第85篇论文导读。

论文原文:Faster Neural Network Training with Data Echoing

1引言

在过去的十年中,神经网络的训练速度得到了极大的提升。研究人员能够使用更大的数据集训练更大的模型,并更快地探索新的想法,显著提高了模型的表现性能。随着摩尔定律的失效,通用处理器的速度已经不能满足要求,但特定的加速器通过优化特定操作得到显著的加速。例如,GPU和TPU优化了高度并行的矩阵运算,而矩阵运算正是神经网络训练算法的核心组成部分。
 
然而,训练一个神经网络需要的不仅仅是在加速器上运行的操作。训练程序需要读取和解压缩训练数据,对其进行打乱(shuffle)、批处理,甚至转换或增强操作。这些步骤需要用到多个系统组件,包括CPU、磁盘、网络带宽和内存带宽。这些通用操作涉及的组件太多,为它们设计专用的加速硬件是不切实际的。同时,加速器的改进远远超过了通用计算的改进,并且在加速器上运行的代码只占用整个训练时间的一小部分。因此,如果想使神经网络训练地更快,有以下两个方法:(1)使非加速器工作地更快,或(2)减少非加速器所需的工作量。选项(1)可能需要大量的工程工作或技术探索,给系统增加太多的复杂性。因此,作者将重点放在选项(2)上,探索减少训练前期阶段的工作量的方法。
 
神经网络的训练过程可以看作是一个数据流程,需要对计算进行缓冲和重叠。例如,图1显示了小批次随机梯度下降(SGD)及其变体的典型训练流程,这是训练神经网络的标准算法。训练程序首先读取和解码输入数据,然后对数据进行shuffle,应用一组转换操作来增加数据,并将数据分成不同批次。最后,通过迭代更新网络参数降低损失函数值;此阶段称为“SGD更新”。由于任何流程阶段的输出都可以缓冲,因此不同阶段的计算互相重叠,最慢的阶段将占用主要的训练时间。
 
image

图1 经典神经网络训练流程图
  !image
图2 数据回送插入点的上游和下游的覆盖计算时间。
  在这篇论文中,作者研究如何通过减少训练前期部分的时间来加速神经网络训练(图2a)。作者将训练过程中第一部分的输出重复用于多个SGD更新,以利用空闲计算能力。这类算法称为**“数据回送”(data echoing)**,每个中间输出被使用的次数称为**回送因子(echoing factor)**。   数据回送算法在训练流程中的某个位置(SGD更新之前)插入重复阶段。如果上游任务(重复阶段之前)花费的时间超过下游任务(重复阶段之后)花费的时间,算法将回收下游闲置的计算能力,并提高模型的SGD更新率(图2b)。通过改变插入点、回送因子和shuffle程度,可以得到不同的数据回送算法。

要点

1.在不同的数据集和模型结构上,数据回送在取得竞争性表现的同时减少了上游计算量;

2.支持大范围的回送因子;

3.有效性取决于训练流程中的插入点;

4.数据回送可以从回送后的shuffle中获益;

5.数据回送与调优的基线模型取得相同的错误率。

2 数据回送

数据回送指在训练流程中插入一个重复阶段,回送前一阶段的输出。如果重复数据的计算可以忽略不计,并且回送两侧的阶段是并行执行的,则数据回送完成一个上游步骤和e个下游步骤的平均时间为:


Viewing all articles
Browse latest Browse all 1638

Trending Articles