Page 325 - 《软件学报》2020年第9期
P. 325
2946 Journal of Software 软件学报 Vol.31, No.9, September 2020
参数的位置信息已经被隐式地编码在代码序列中,不再需要额外的索引结构,从而降低了运行中的访存需求,提
升了稀疏算子的计算密度.我们将上述技术整合为一个框架,并使用公开的神经网络模型和数据集进行了实验.
通过实验,我们证明:相对于 GPU 上已有的稠密执行方法和稀疏执行方法,本文所提出的方法能够有效提升稀
疏卷积神经网络的性能.
真实稀疏
模板参数
参数
CUDA nvcc PTX 中间 稀疏代码 PTX GPU GPU
模板代码 编译器 表示模板 生成器 稀疏代码 汇编器 二进制程序
Fig.1 Overflow of the redundancy-aware code generating method
图 1 稀疏感知的算子代码生成流程
总结来看,我们在本文中做出了以下贡献.
(1) 我们提出了一种稀疏感知的卷积算子代码生成方法.以我们设计的算子模板为起点,我们建立了一种
算子中间表示模板,基于中间表示模板的算法,能够生成高效的稀疏卷积代码;
(2) 我们对稀疏卷积的内存访问设计了相应的优化方法.一方面,我们基于不同类型数据的访问特征,将
不同类型的数据映射到 GPU 上不同的存储空间,充分利用了 GPU 的多种数据访问路径,提升了运行
时的访存吞吐量;另一方面,我们将非 0 参数的位置信息编码在生成的代码中,消除了稀疏数据索引部
分的开销,降低了运行时的访存需求;
(3) 我们通过实验说明了所提出方法的有效性.在来自 5 个卷积神经网络的 10 个卷积算子上,当稀疏程度
达到 0.9 时,我们的方法可以在批大小为 64 时获得相对 cuBLAS 2.8 倍~41.4 倍、相对 cuDNN 3.1 倍
~9.6 倍、相对 cuSPARSE 5.5 倍~43.2 倍以及相对 Escoin 4.4 倍~39.5 倍的加速效果;在批大小为 1 时,
相对以上方法可以分别获得 1.2 倍~3.2 倍、1.2 倍~4.9 倍、2.4 倍~15.6 倍以及 1.6 倍~11.2 倍的加速
效果.与结构化剪枝方法相比,我们也在类似的稀疏程度下展现了更好的性能收益.
本文第 1 节介绍相关背景知识,包括神经网络的剪枝方法以及 GPU 体系结构.第 2 节介绍本文的主要工作,
包括算子和中间表示模板、稀疏感知的代码生成算法以及优化访存瓶颈的技术.第 3 节通过实验说明本文提出
方法的有效性,展示与已有工作的性能对比与分析结果以及对本方法相关开销的分析.第 4 节概括相关工作.第
5 节总结本文并概括未来工作的方向.
1 背景知识
本节中,我们介绍与本文内容相关的背景知识.我们首先介绍神经网络模型剪枝的相关概念;之后,我们介
绍 GPU 体系结构的相关知识,重点关注 GPU 的存储层次.
1.1 神经网络与模型剪枝
神经网络(neural network)是机器学习算法的一种,它使用相互连接的算子,构建将输入数据映射到目标输
出的数学模型.神经网络中的算子也常被称为层,每个算子可能包含一些内部参数,并以之前的某些算子的输出
为输入(第 1 个算子使用整个网络的输入),进行某种计算,产生输出结果.在模型的训练过程中,通过调整各个算
子中的参数的取值,可以使整个神经网络模型逼近我们期望建立的目标函数.在训练完成后,神经网络中的所有
的参数取值都固定下来,并被部署到相应的应用中.使用训练完成的神经网络处理输入数据的过程叫做前向推
理(inference).
根据使用算子类型的不同,神经网络可被进一步分为主要使用卷积层的卷积神经网络(convolutional neural
network)、主要使用全连接层的前馈神经网络(feedforward neural network)以及使用长短期记忆模块的长短期