从英伟达A100 GPU说起,浅谈细粒度结构化稀疏

稀疏化是神经网络轻量化的重要手段,其中细粒度剪枝和结构化稀疏各有利弊。如何取二者之所长,实现更强大的模型压缩能力和端侧加速能力呢?本文将为大家介绍「细粒度结构化稀疏」。


前不久,英伟达黄老板从自家烤箱里端出了最新款基于 Ampere 架构的 A100 GPU。跟以往的新产品一样,Ampere 相比上一代产品性能有很大提升,并具备多个重要的新特性,其中之一就是细粒度结构化稀疏。这一特性能够为神经网络提供最多两倍的加速,本文我们就来一探究竟。

近年来,深度神经网络在很多领域得到成功应用,但这些网络往往体量巨大,需要很高的计算力和存储空间支持。这使得它们在手机等嵌入式设备中的应用比较困难。神经网络量化就是针对这一问题的研究领域。

量化的常用手段有:网络低精度化、低秩化近似、网络蒸馏、轻量化结构的设计与搜索,以及本文要讲的稀疏化等做法 [1]。

网络稀疏化

网络参数稀疏化,简单来讲就是通过适当的方法减少较大网络中的冗余成分,以降低网络对计算量和存储空间的需求。稀疏化可以通过稀疏化约束或权重剪枝等多种方法实现。其中逐元素 (element-wise,亦称细粒度) 稀疏化操作得到的是一个非结构化的网络结构(如下图左),这一做法通常能够达到较高的参数效率,从而有效地减少模型对存储空间的要求。

剪枝单元示意,依次为:单个权重权重向量,单个卷积核通道,整个卷积核。图像来源[2]

但是使用这一做法获得的网络中所保留的非零权重是随机出现的。这一特点与现代计算硬件加速器中的访存机制不相适应,因此这类稀疏化无法对网络进行有效的硬件加速。

为了更好地加速稀疏化的网络,结构化剪枝应运而生。

细粒度剪枝 vs 结构化剪枝

在细粒度剪枝中,剪枝的操作单元是单个权重本身。在结构化剪枝中,被剪除的单元是更大的、有规则的权重组。很显然这一剪枝单元中的成份之间需要保持一定的空间相邻性,以提升稀疏化后网络的推理效率。

如上图所示,剪枝的单元可以是权重中的向量,卷积核单个输入通道,或者整个卷积核。剪枝的单元还可以是权重张量中的一个连续的区块。这些做法都是通过使得非零权重在空间上更紧凑,降低权重索引的复杂性,获得对硬件友好的稀疏结构。但是在同等性能下,结构化剪枝方法的参数效率与细粒度剪枝相比通常有较大差距[2]。

结构化稀疏提升了网络推理速度,但是牺牲了模型的性能,而原始的细粒度剪枝在推理速度上提升效果不佳。

细粒度结构化稀疏

细粒度结构化稀疏架构能有效的缓解这一矛盾,在尽量保持原始细粒度稀疏结构高参数效率优点的同时获得对加速硬件友好的网络结构 [3,4,5]。

因此细粒度结构化稀疏在模型权重中引入了特殊的约束,这里我们以全连接网络层为例对这一约束进行解释。

全连接层网络的权重可以用类似如下左图的矩阵来表示,对网络的稀疏化过程首先将权重分组,这里所举的示例以 4 个相邻的权重为一组。而后在每个权重组内限定固定个数的非零权重数目对权重进行稀疏化。如下右图所示,在稀疏化处理后,每个权重组(同一颜色块)中都正好留下 2 个非零权重,也就是 50% 的稀疏度。

 左:剪枝前的权重;右:按细粒度结构化稀疏剪枝后的权重(组大小为 4)。

通过对模型施加这一结构约束,我们获得了规整的结构,权重的随机性被限制在了每个组内。这部分随机性带来的问题可以通过将同一组权重对应的数据完全装载到计算核心的寄存器上来解决,从而避开随机访问外存带来的延迟问题。这一结构同时也允许我们对网络推理计算在组边界上进行分割, 从而更好的将计算分块化以最大程度利用的加速器的多核并行计算能力。

细粒度结构化稀疏在英伟达 A100 中的应用

这一例子中的结构正好和英伟达在 A100 中使用的一样,在这一稀疏度下网络中一半的计算因为权重为 0 被跳过。英伟达选择了 4 个权重为一组,延续了他们之前在 Volta 架构中引入的张量核 (Tensor Core) 结构中所使用的 4x4 数据结构。

在 A100 中所采用的设计只支持 50% 的原生稀疏度,这和我们在近期网络剪枝论文中读到的经常剪枝到很高稀疏度的网络还是很不一样的。50% 的稀疏度对于网络构成的约束不是那么强,多数情况下能够比较容易地做到无损剪枝

细粒度结构化稀疏剪枝

A100 的硬件设计决定了只能支持 50% 这一种稀疏度,要想支持其他的稀疏度就得改变权重组的大小和组内非零权重的数量。

那么如果使用更大一些的权重组及保留更少的非零权重比例,会出现什么样的情况呢?对细粒度结构化稀疏网络的剪枝与常规的稀疏网络剪枝情况不大一样。常规的稀疏网络剪枝操作过程中,如下图左所示被剪对象是在一个较大的候选池中选出,所以重要特征被剪掉的概率相对较小。而在细粒度结构化稀疏网络的剪枝中(下图右),每次剪枝的候选池大小就是权重组的大小(本示例中组大小为 2),所以有用权重被剪掉的概率要比普通剪枝大很多。
 

剪枝示例。左:全局剪枝能稳定的剪除小权重;右:分组剪枝过程可能导致重要权重被剪掉。

从理论计算来看,使用较大的权重组会对模型构成相对较弱的约束;与同等稀疏度的非结构化稀疏相比较,结构化细粒度稀疏带来的额外约束会随着稀疏度的增加而上升[5]。换句话说,细粒度结构化稀疏会在权重组较大、稀疏度不是太高的情况下,效果相对较好。所以可能将细粒度结构化稀疏与通道级的结构化剪枝结合会获得更优的模型。

在英伟达给出的技术方案中,他们建议首先训练非稀疏网络,而后对网络进行细粒度结构化剪枝,再使用学习率重卷 (learning rate rewinding) 的方式对网络进行重训练。这里的 learning rate rewinding 就是对剪枝后的网络使用原始网络的学习率安排表进行重训练 [6]。

A100 中的网络稀疏度不高,那么如果要将模型结构扩展到更加稀疏的情况,学习率重卷是否仍能达到较好的结果呢?这一点还有待研究。研究 [5] 使用了一种叫做 targeted dropout[7]的训练方法,在该方法中被剪除的权重有机会得到恢复,因而能更好的应对细粒度结构化稀疏中小权重组造成的压力。实验显示这一做法的效果优于常用的 iterative pruning[1]。

细粒度结构化稀疏的研究应用目前还处在较初期的阶段,由于其独特的硬件友好特性相信这一设计未来会被更多的加速器采用。

参考文献:

1. Deng B, Li G, Han S, Shi L and Xie Y. Model Compression and Hardware Acceleration for Neural Networks: A Comprehensive Survey. Proceedings of the IEEE, vol. 108, no. 4, pp. 485-532, April 2020, doi: 10.1109/JPROC.2020.2976475.

2. Mao H, Han S, Pool J, Li W, Liu X, Wang Y and Dally W. Exploring the Regularity of Sparse Structure in Convolutional Neural Networks. arXiv preprint arxiv:1705.08922.

3. Wu X, Liu X, Li W, and Wu Q. Improved expressivity through dendritic neural networks. Advances in neural information processing systems. 2018.

4. Yao Z, Cao S, Xiao W, Zhang C, and Nie L. Balanced sparsity for efficient dnn inference on gpu. Proceedings of the AAAI Conference on Artificial Intelligence. 2019.

5. Yu Z, Wang C, Wang X, Wu Q, Zhao Y, and Wu X. Cross-Channel Intragroup Sparsity Neural Network arXiv preprint arXiv:1910.11971.

6. Renda A, Frankle J, and Carbin M. Comparing rewinding and fine-tuning in neural network pruning. International Conference on Learning Representations. 2020.

7. Gomez A, Aidan N, Zhang I, Swersky K, Gal Y, and Hinton G. Targeted dropout. Openreview.net. 2018.

工程剪枝GPU英伟达
相关数据
权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

分块技术

将标注好词性的句子按句法结构把某些词聚合在一起形成比如主语、谓语、宾语等等。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

推荐文章
暂无评论
暂无评论~