在摩尔定律的暮年,GPU等硬件加速器大大加速了神经网络的训练。然而,训练过程的早期阶段,如磁盘读写和数据预处理,并不在加速器上运行。随着加速器不断改进,在这些早期阶段花费的时间将逐渐成为训练速度的瓶颈。谷歌大脑团队提出了一种“数据回显”算法,可以减少预训练阶段的总计算量,并在加速器上游计算占用训练时间时加快训练速度。“DataEcho”重用预训练阶段的中间输出以利用空闲计算空间。作者针对不同的任务、不同的回声数量和不同的批量大小研究了数据回声算法的性能。在所有情况下,至少有一种数据回显算法可以通过较少的上游计算实现模型的基线性能。在某些情况下,数据回显甚至可以将训练速度提高4倍。1.简介在过去的十年中,神经网络的训练速度有了很大的提高。研究人员能够使用更大的数据集训练更大的模型并更快地探索新想法,从而显着提高模型性能。随着摩尔定律的失效,通用处理器的速度已经不能满足要求,但是特定的加速器可以通过优化特定的操作来显着加速。例如,GPU和TPU针对高度并行的矩阵运算进行了优化,这是神经网络训练算法的核心组成部分。然而,训练神经网络需要的不仅仅是在加速器上运行的操作。训练程序需要读取和解压缩训练数据、对其进行洗牌、批处理,甚至对其进行转换或扩充。这些步骤需要使用多个系统组件,包括CPU、磁盘、网络带宽和内存带宽。这些通用操作涉及的组件太多,因此为它们设计专用的加速硬件是不切实际的。与此同时,加速器的改进速度远远超过通用计算的改进速度,在加速器上运行的代码只需要整体训练时间的一小部分。因此,如果想让神经网络训练更快,有两种方法:(1)让非加速器工作得更快,或者(2)减少非加速器所需的工作量。选项(1)可能需要大量的工程工作或技术探索,从而给系统增加太多的复杂性。因此,作者将重点放在选项(2)上,探索减少预训练阶段工作量的方法。神经网络的训练过程可以看作是一个数据流,需要缓冲和重叠计算。例如,图1显示了小批量随机梯度下降(SGD)及其变体的典型训练流水线,这是训练神经网络的标准算法。训练过程首先读取和解码输入数据,然后打乱数据,应用一组转换操作来扩充数据,并将数据分成批次。最后通过迭代更新网络参数来降低损失函数值;这个阶段称为“SGD更新”。由于任何流水线阶段的输出都可以被缓冲,不同阶段的计算相互重叠,最慢的阶段将占用大部分训练时间。图1.经典神经网络训练流程图。图2.数据环回插入点上游和下游的覆盖计算时间。在本文中,作者研究了如何通过减少预训练部分的时间来加速神经网络训练(图2a)。作者将训练过程第一部分的输出重新用于多个SGD更新,以利用闲置的计算能力。这种算法称为“数据回显”,每个中间输出被使用的次数称为回显因子。数据回显算法在训练过程中的某处插入一个重复阶段(在SGD更新之前)。如果上游任务(重复阶段之前)比下游任务(重复阶段之后)花费更多时间,算法会回收下游空闲计算能力并提高模型的SGD更新率(图2b)。通过改变插入点、环回因子和shuffle度,可以得到不同的数据环回算法。亮点在不同的数据集和模型结构上,数据回显减少上游计算量,同时获得有竞争力的性能;支持范围广泛的回声因子;有效性取决于训练过程中的插入点;可以从随机播放中检索数据回显;dataecho达到了与调整后的基线模型相同的错误率。2.数据回显其中,tupstream是所有上游阶段使用的时间,tdownstream是所有下游阶段使用的时间,e是回显因子。假设tupstream≥tdownstream,这是使用数据回显的主要动机。如果R=tupstream/tdownstream是上下游处理时间的比值,那么从e到R的所有环回因子,完成一个上游步骤和e个下游步骤的时间是相同的。换句话说,额外的下游步骤是“免费的”“因为他们使用闲置的下游计算能力。使用数据回显时,减少的训练时间取决于上游和下游步骤之间的比率。一方面,由于重复数据可能不如新数据有价值,数据回推可能需要更多的下游SGD更新才能实现所需的性能。另一方面,每个下游步骤仅花费上游步骤时间的1/e(而不是1)。如果下游步骤增加小于e,则上游步骤总数(因此总训练时间)将减少。R表示数据回送的最大可能加速比,如果e=R,重复数据和新数据的值相同,则可以达到最大加速比。考虑到训练过程中的每个操作都需要一些时间来执行,如果在SGD更新之前应用数据回显可以使R最大化,但这会导致每个epoch多次使用同一批数据。然而,如果想在上游和下游步骤之间找到更有利的权衡,最好更早地插入回波数据。不同插入点的数据回显:批前或批后回显:批前回显意味着数据在样本级别而不是在批级别重复。这增加了相邻批次不同的可能性,但代价是无法在批次内复制样本。批处理前回显的算法称为示例回显,批处理后回显的算法称为批回显。Pre-augmentationorpost-enhancementloopback:Pre-augmentationloopback允许对重复数据进行不同的转换,使重复数据更接近新数据。数据回声性能也受回声阶段后混洗程度的影响。在适用的情况下,作者使用shuffle作为缓冲区。缓冲区越大,训练算法能够近似地将整个训练集加载到内存中的洗牌次数就越多。3、实验作者验证了dataecho对2个语言建模任务、2个图像分类任务和1个目标检测任务的效果。对于语言建模任务,作者在LM1B和CommonCrawl数据集上训练了Transformer模型。对于图像分类任务,作者在CIFAR-10数据集上训练了ResNet-32模型,在ImageNet数据集上训练了ResNet-50模型。对于目标检测任务,作者在COCO数据集上训练了SSD模型。论文研究的主要问题是数据回显是否可以加速训练。作者根据达到训练目标所需的“新鲜”样本数量来衡量训练时间。因为新样本的数量与训练过程中上游步骤的数量成正比,所以当环回因子小于或等于r时,新样本的数量也与实际时间成正比。表1.任务摘要对于该任务,作者在没有数据回显的情况下运行了一组初始实验,并调整了参数以在现实的计算预算内实现最佳性能。作者选择了比初始实验中观察到的最佳值稍差的目标值。目标的微小变化不会影响结论。表1总结了实验中使用的模型和目标值。对于每个实验,作者独立调整学习率、动量和其他控制学习率的参数。作者使用准随机搜索来调整元参数。然后选择使用最少新样本达到目标值的试验。作者在每个搜索空间中重复此元参数搜索5次。实验结果中的所有图都显示了这5个实验所需的新样本的平均数量,误差条表示最小值和最大值。实验评估了将数据环回添加到标准神经网络训练管道的效果。作者试验了三种不同的数据回波:数据增强前的样本回波、数据增强后的样本回波和批处理回波。3.1数据回显可以减少训练所需的新样本数量图3显示了数据回显对表1中所有任务的影响,回显因子为2。在除一种情况外的所有情况下,数据回显所需的新样本较少,以实现目标性能。唯一的例外(ResNet-50上的批处理)需要与基线相同数量的新样本——这表明数据向后虽然没有任何好处,但也不会损害训练。训练中插入的回声越早,需要的新样本越少:样本回声比批量回声需要的新样本少,数据增强前的回声比增强后的回声需要的新样本少。对于ResNet-50或SSD,没有观察到数据回显和批量归一化之间的负相互作用。图3回波因子为2时,数据回波减少或不改变实现目标性能所需的新样本数量。虚线显示重复样本与新样本的值相同时的预期值。3.2数据回显可以缩短训练时间图4给出了不同回波因子e对应的不同R值(上下游处理时间之比)训练时间的变化情况。如果R=1,则数据回显增加,或者不会像预期的那样显着减少训练时间。如果R>1,e≤r的任何设置都会减少训练时间,并且设置e=R会最大限度地减少训练时间。设置e>R不会减少Transformer在LM1B数据集上的训练时间,但它确实为ImageNet上的ResNet-50提供了加速。这些结果表明,数据回显可以减少围绕e=R最佳值回显因子的训练时间,尤其是对于e≤R的设置。图4不同R值对训练时间变化的影响3.3数据回声在回声因子的合理上限内是有效的图5显示了在LM1B上训练Transformer时回声因子达到16时的效果。批量大小为1024时,最大有效回声因子在4到8之间;超出此值,所需的新样本数大于较小回波因子所需的新样本数。随着环回因子的增加,所需的新样本数量最终会超过基线,但即使环回因子大于16,仍然需要比基线少得多的新样本。批量大小为4096时,最大有效回声因子甚至大于16,这表明更大的批量大小支持更大的回声因子。图5.当回波因子上限为16时,样本回波减少了所需的新样本数量。虚线显示重复样本与新样本的值相同时的预期值。3.4batchsize增加对dataecho的影响对于较大的batchsizes,batchecho性能更好,但sampleecho有时需要更多的shuffle操作。图6显示了环回因子为2时不同批量大小的影响。随着批量大小的增加,批量回显的性能保持不变或相对于基线有所提高。这种效果是有道理的,因为随着批次大小接近训练集的大小,重复的批次接近新的批次,因此,在边界内,批次回显必须减少回显因子所需的新样本数。另一方面,图6显示,随着批量大小的增加,样本环回的性能相对于基线要么保持不变,要么变差。这是因为随着批大小的增加,每批中复制样本的比例也会增加,因此在实践中,具有较大批大小的样本环回可能表现得更像较小的批大小。较小的批次大小可能会增加所需的SGD更新步骤数,这可以解释图6中的样本环回结果。增加重复样本的混洗次数(以增加内存为代价)可以提高较大批次样本回显的性能大小,因为每批重复样本的概率降低了。图6随着批次大小的增加,批次返回的性能相对于基线保持不变或有所提高,而样本返回的性能相对于基线保持不变或降低。虚线显示重复样本与新样本的值相同时的预期值。3.5shuffle越多,数据回显越好图7显示了增加数据回显的shuffle缓冲区大小的效果(以增加内存为代价)。尽管在之前的所有batch-echo实验中都没有进行shuffle,但是如果对重复的batches进行shuffle,batch-echo的性能会提高,并且shuffling量越大,性能越好。此外,样本回显的性能随着洗牌缓冲区的大小而增加,即使它对基线没有帮助。这是因为,如第3.4节所述,更多的洗牌次数会降低每批中重复样本的可能性。图7.shuffling的程度越高,dataechoing的效果越好3.6Dataechoing不影响性能虽然有人担心重用数据会影响最终的性能表现,但在实验中并没有观察到类似的情况。为了进一步证明数据回显不会降低解决方案的质量,作者在LM1B上使用Transformer并在ImageNet上使用Resnet-50进行实验,以找到在固定数量的新样本下可实现的最佳性能。图8显示数据回显在每个实验的训练过程中的任何时候都达到了最佳性能。所有数据回显变体在两个任务上至少达到与基线相同的性能。Figure8Independenttrialsintrainingachievethebestresults4.结论数据回显是一种提高硬件利用率的简单策略。尽管之前的研究人员担心重复数据的SGD更新是无用的,甚至是有害的。但是对于实验中的每项任务,至少有一种数据回显方法可以减少需要从磁盘读取的样本数量。数据回显是优化训练过程或额外上游数据处理的有效替代方案。虽然训练加速比取决于模型结构、数据集、批量大小和重复数据的打乱程度,但将环回因子设置为上下游处理时间的比率可以最大限度地提高潜在加速比,并在实验中取得了良好的效果。影响。随着GPU和TPU等专用加速器继续比通用计算更快地改进,数据回显和类似策略将成为神经网络训练工具包中越来越重要的部分。
