当前位置: 首页 > 科技观察

谷歌提出AI训练提速新方法,榨干GPU空闲时间,最高提速3倍多

时间:2023-03-20 15:43:39 科技观察

谷歌提出一种加速AI训练的新方法,挤出GPU空闲时间,速度提升3倍以上。由于通用计算芯片无法满足神经网络的计算需求,越来越多的人转向GPU、TPU等专用硬件加速器来加速神经网络训练。然而,使用更快的GPU和TPU是否一定能加快训练速度?并非训练管道的所有操作都在加速器上运行。磁盘I/O和数据预处理等上游数据处理无法在加速器上运行。随着GPU等加速器的速度越来越快,超过了CPU和磁盘处理数据的能力,上游逐渐成为训练瓶颈。在某些情况下,来自GPU的上游代码花费的时间是在GPU本身上运行所需时间的数倍。如果上游没有完成,下游就只能白等,浪费很多时间。为此,GoogleAI团队提出了一种简单的数据回显(DataEchoing)方法可以解决这个问题。这种方法最多可以加快训练速度3倍以上,并且对模型的准确率没有明显影响。杰夫·迪恩也在推特上转发了点赞。重复数据使GPU不至于清空等。在许多情况下,上游比加速器花费的时间更长,使用更快的GPU或TPU根本不会提高训练速度。如果您投入大量工程工作以及额外的计算资源,您确实可以加快管道的速度。对于非常小的数据集,可以离线预计算增强数据集,并将整个预处理数据集加载到内存中。但这种方法并不适合大多数机器学习训练场景,它既耗时又偏离了提高推理性能的主要目标。加速器不会等待更多数据,而是忙于处理已有的数据。在加速器50%为空的情况下,在预处理批次的第一个优化步骤之后,我们可以将该批次重新用于另一次训练运行。如果重复数据和新数据一样有用,训练效率可以翻倍。在实践中,由于重复数据不如新数据有用,因此与加速器空闲时相比,数据回显提供了更小但仍然显着的加速。通常有几种方法可以在给定的神经网络训练管道中实现数据回显。Google提出的技术是在训练管道的某个位置将数据复制到随机缓冲区中,无论瓶颈发生在哪个阶段之后,缓存的数据都可以插入到任何位置。Dataecho在样本级别打乱数据,而batchecho打乱重复批次的序列。也可以在dataaugmentation之前插入buffer,让重复数据的每个副本都略有不同,这样不是简单的机械重复,而是更接近新的样本。加速3倍以上,精度不输。那么数据回显有多大用处呢?谷歌在五个神经网络训练管道上尝试了DataEcho,涵盖三个不同的任务:图像分类、语言建模和对象检测,并测量了实现特定性能目标所需的新样本数量。谷歌发现回显数据可以用更少的新样本实现目标性能,这表明重用数据对于减少磁盘I/O很有用。在某些情况下,重复数据几乎与新数据一样有用。在ImageNet的ResNet-50训练任务中,数据回显可以显着提升训练速度,提速3倍以上。从云存储中读取一批训练数据比对每批执行训练步骤花费的时间长6倍。所以数据最多可以重复5次。我们将回声因子定义为重复每个数据项的次数,对于上述任务,回声因子最多为5。如果重采样与新样本一样有用,这应该会带来6倍的加速,但这只是一个3.25倍加速,这仍然很可观。人们可能担心重用数据会损害模型的最终性能,但实验发现,对于测试的任何工作负载,数据回显都不会降低最终模型的质量。随着GPU和TPU的性能不断提高,它们与通用处理器之间的差距将越来越大,谷歌预计数据回显和类似策略将成为神经网络训练工具包中越来越重要的一部分。GoogleAI的这项最新研究怎么样,是不是也给你训练神经网络一些新的启发呢?