记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

基于关键路径的细粒度多流调度策略

2021-09-02 13:33
随着深度学习在各个领域的广泛应用,模型训练成为制约模型探索的主要障碍。深度学习训练是极其消耗内存和计算资源,因而各种高通量加速器(如GPU)成为深度学习训练的标配。一方面,从硬件角度,新的硬件技术如Hyper-Q、多流调度为GPU硬件并行提供了更多的可能,另一方面,现有的深度学习模型呈现出多路径、密集非线性连接的特点(如ResNet、DenseNet),同时,反向梯度计算过程使得不同的路径表现出不同的依赖特性。基于以上观察,我们提出一种基于关键路径的细粒度的多流调度策略。这种策略充分地利用了层内的细粒度任务并行、层间的异步流水执行、以及迭代间基于关键路径的优先级调度。我们基于以上方法实现了原型系统TurboDL,实验结果表明我们的方法相比于最新的工作在常用的深度学习模型训练上达到了平均1.3X的性能加速,同时该方法对于更深的模型提供了更好的性能。
该成果“TurboDL: Improving the CNN Training on GPU with Fine-grained Multi-streaming Scheduling”录用在IEEE Transaction on Computer 上(Volume 70,Issue 4,April 2021,Pages:552-565),IEEE Transaction on Computer 是计算系统领域的顶级期刊之一,属于CCF的A类期刊。
论文原文:
https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9086163

背景与动机
随着训练数据样本和网络模型规模的不断增加,深度学习训练需要消耗大量的计算和存储资源。由于GPU所具有的高度并行计算能力,以及深度学习中存在大量规则矩阵运算,通用的深度学习系统如TensorFlow、MXNet、Caffe、Pytorch都支持GPU来加速训练过程。现有的深度学习训练优化工作主要采用了粗粒度的并行策略(比如样本,通道间并行)和针对单层算子的特定优化(比如cuDNN), 缺乏层内部细粒度的任务并行,以及整个网络跨迭代计算特性的全局依赖感知,从而带来GPU资源利用率低、跨层之间负载不均衡、以及大量的层之间同步开销。我们发现GPU新的硬件特性,如Hyper-Q、多流技术,为软件并行提供了更多硬件支撑。从模型角度,深度学习模型呈现出多路径密集连接的特性,且不同路径之间存在跨迭代之间的巨大依赖差异。基于以上特性,我们提出了全局网络特性感知、硬件高效的基于关键路径的优先级调度和细粒度多流调度策略,提升了GPU整体资源利用率,同时加速了整个训练迭代过程。

设计与实现
首先,我们提出了层内的细粒度并行,通过对层进行细粒度任务分解,递归地找到独立的计算子任务集,这些子任务彼此之间不存在数据依赖,从而我们可以将其实现为单独的kernel,放到不同的流里面并行执行。通过细粒度的任务分解,我们将原来的粗粒度DAG图重构为更加细粒度的子任务DAG图。图里面边所表示的数据依赖关系由原来的粗粒度的层间关系转化为更加细粒度的子任务间关系。如图1所示。

图1  细粒度任务图

其次,我们发现在反向梯度计算过程中,经过细粒度分解之后的层内子任务往往依赖于后面层的部分子任务,而不是整个层,这使得我们可以采用跨层之间异步流水线机制,消除层之间的同步开销,进一步提升跨层之间的计算并行。我们以耗时最多的反向卷积算子为例,前面层的权重、偏置和激活值的梯度计算子任务仅仅依赖于下一层的激活值梯度子任务,而与下一层的权重、偏置的梯度子任务无关。我们可以在下一层的激活值梯度计算完成后,立即调度前一层的多个子任务并行执行。这种方法可以消除层之间的同步开销,实现跨层之间的负载均衡,如图2所示。
 
图2  层间的异步调度

最后,我们提出了跨迭代之间基于关键路径的优先级调度策略。这种策略利用了不同子任务跨迭代之间依赖距离的差异,从而分配不同的优先级,即优先调度处于关键路径上的子任务,同时让非关键路径中的子任务充分利用GPU资源的波谷,从而加速一次迭代的完成。具体而言,参数和偏置梯度子任务需要在下一次迭代的相同层才用到,而激活值梯度子任务则需要立即被本次迭代的上一层的所有子任务用到,因而在DAG中, 所有激活值梯度子任务构成的路径属于关键路径,我们自动识别该路径,并将其所在的流赋予更高的优先级。同时,我们将上述方法拓展到整个网络上,利用网络的结构特征,采用了层次化、分段的全局网络关键路径分析,从而适用于各种复杂的模型,如图3 所示。为了维护细粒度子任务之间必要的跨流和跨路径依赖,我们采用CUDA 轻量级的同步和异步事件机制,同时在路径调度时将有直接依赖的子任务送到一个流中,从而最小化同步开销。论文中我们还讨论了如何将我们方法拓展到多GPU场景、多种应用场景(如循环神经网络)以及多种深度学习框架。

图3  层次化的全局关键路径分析

实验结果
我们在6个常用的卷积神经网络(CaffeNet、 VGG-16、 LeNet、 ResNet-50、 GoogLeNet、 AlexNet),3个数据(MNIST、CIFAR-10、ILSVRC-12),2种不同类型的GPU ( NVIDIA Pascal P100、Kepler K20 )上做了实验评估。对比于原始的Caffe,我们取得平均5.3X的性能加速比,相对于Caffe+cuDNN组合,取得了平均1.3X的加速比(结果如图4所示)。我们同时测试了不同的batchszie、layersize与性能的关系。以ResNet为例,提出的方法能够随着层数的增加提供更多的性能加速。在不同的GPU上,由于并行能力的提升,我们的方法在P100能够提供比K20更好的性能加速。我们也分析了不同策略组合对于性能提升的分解贡献,以及训练过程中损失和精度的对比。提出的方法在保证算法正确性的同时,提升了并行性和整体性能。最后,实验部分通过nvprof工具给出了GPU资源利用图,结果表明,我们的方法能够明显提升kernel之间的并行和GPU的资源利用率( 如图5所示 )。

图4  不同网络端到端迭代时间对比

图5  nvprof资源使用图

参考文献:

H. Jin, W. Wu, X. Shi, L. He and B. B. Zhou, "TurboDL: Improving the CNN Training on GPU With Fine-Grained Multi-Streaming Scheduling,"  in IEEE Transactions on Computers,  vol. 70, no. 4, pp. 552-565, April 2021, doi: 10.1109/TC.2020.2990321.


知识来源: id=1ea5d64569867915485a18655f791ece&source_url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2F_a0sXgv2ld6Vfv6WH101NQ

阅读:134087 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“基于关键路径的细粒度多流调度策略”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

黑帝公告 📢

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

标签云 ☁