GPUサイクル共有システムにおける分散深層学習の高速化
AI总结
研究背景与目的
深度学习需要大量的计算资源和时间。虽然分布式深度学习和GPU加速已广泛应用,但现有分布式深度学习系统多假设所有节点都能专用GPU资源。
现实中,许多实验室或办公室电脑的GPU存在大量空闲时间。
论文提出利用GPU周期共享系统(即“志愿型计算系统”,像Folding\@home那样)来把这些零散的空闲GPU资源整合进分布式深度学习中,从而加速学习过程。
主要问题与创新点
提出一种中断同步法:当某节点学习进度落后、其它节点等待同步时,落后节点提前中断,把已经完成的数据同步出去,避免其它节点长时间等待。
同步时用加权平均(根据各节点完成数据量加权),降低同步数据量不同可能带来的精度下降风险。
设计了一种自动估算主机空闲GPU时间的机制,动态决定分布式任务粒度,保证不影响主机任务帧率。
方法与实现
采用空kernel测量法,通过频繁执行“空kernel”测算主机GPU的繁忙与空闲区间,从而估算每一帧能“借用”多少时间给深度学习任务。
通过调整子任务粒度,使每次深度学习子任务正好卡在主机任务的空闲窗口内,保证主机帧率不下降。
当需要同步时,落后节点只同步自己已完成的数据,由系统自动按加权平均合并参数,最大限度减少精度损失。
实验与结果
局限与今后课题
关键词
分布式深度学习、GPU、周期共享、志愿型计算、加权平均、粒度控制
对创新点的理解
论文的创新点在于:同步时,不等所有节点都计算完再同步,而是那些没计算完的节点,只把已经完成的部分拿去同步,剩下没做完的就直接“放弃”这一次了。这样可以避免整个系统被最慢节点拖住,提高整体效率。
没有计算完的部分,在本轮同步时就不参与同步,这部分数据“被跳过”,并且论文中的实现是这些数据暂时就不再计算,也不会马上补上(当然,未来改进方向是考虑再学习这些被丢弃的数据)。
为什么要同步?
在分布式深度学习中,通常会有很多个节点(机器),每个节点都用自己的数据在本地训练神经网络。这些节点如果各自训练自己的模型,最后得到的模型参数会不一样,也就无法得到全局最优的模型。
同步的目的是:让所有节点周期性地交换和整合彼此训练得到的模型参数,这样所有节点可以保持模型的一致性,并一起向着更好的方向优化。
每个机器都有完整的模型参数?
每个机器都拥有一份完整的模型参数(比如完整的神经网络结构和所有的权重),这样大家才能分别处理自己的那部分数据,独立做前向、反向传播和参数更新。
但每台机器本地只处理全部数据集的一部分(比如4台机器,每台只负责1/4的数据)。这样做的好处是把整个数据集的训练压力分摊到所有机器上,整体训练更快。
同步的作用就是让所有机器用各自的“部分数据”训练之后,把成果合起来,确保最终大家手里的模型参数保持一致,不会各自跑偏。