机器之心|从英伟达A100 GPU说起,浅谈细粒度结构化稀疏

【机器之心|从英伟达A100 GPU说起,浅谈细粒度结构化稀疏】
机器之心发布
机器之心编辑部
稀疏化是神经网络轻量化的重要手段 , 其中细粒度剪枝和结构化稀疏各有利弊 。 如何取二者之所长 , 实现更强大的模型压缩能力和端侧加速能力呢?本文将为大家介绍「细粒度结构化稀疏」 。
前不久 , 英伟达黄老板从自家烤箱里端出了最新款基于 Ampere 架构的 A100 GPU 。 跟以往的新产品一样 , Ampere 相比上一代产品性能有很大提升 , 并具备多个重要的新特性 , 其中之一就是细粒度结构化稀疏 。 这一特性能够为神经网络提供最多两倍的加速 , 本文我们就来一探究竟 。
近年来 , 深度神经网络在很多领域得到成功应用 , 但这些网络往往体量巨大 , 需要很高的计算力和存储空间支持 。 这使得它们在手机等嵌入式设备中的应用比较困难 。 神经网络轻量化就是针对这一问题的研究领域 。
轻量化的常用手段有:网络低精度化、低秩化近似、网络蒸馏、轻量化结构的设计与搜索 , 以及本文要讲的稀疏化等做法 [1] 。
网络稀疏化
网络参数稀疏化 , 简单来讲就是通过适当的方法减少较大网络中的冗余成分 , 以降低网络对计算量和存储空间的需求 。 稀疏化可以通过稀疏化约束或权重剪枝等多种方法实现 。 其中逐元素 (element-wise , 亦称细粒度) 稀疏化操作得到的是一个非结构化的网络结构(如下图左) , 这一做法通常能够达到较高的参数效率 , 从而有效地减少模型对存储空间的要求 。
机器之心|从英伟达A100 GPU说起,浅谈细粒度结构化稀疏
本文插图

剪枝单元示意 , 依次为:单个权重 , 权重向量 , 单个卷积核通道 , 整个卷积核 。 图像来源[2]
但是使用这一做法获得的网络中所保留的非零权重是随机出现的 。 这一特点与现代计算硬件加速器中的访存机制不相适应 , 因此这类稀疏化无法对网络进行有效的硬件加速 。
为了更好地加速稀疏化的网络 , 结构化剪枝应运而生 。
细粒度剪枝 vs 结构化剪枝
在细粒度剪枝中 , 剪枝的操作单元是单个权重本身 。 在结构化剪枝中 , 被剪除的单元是更大的、有规则的权重组 。 很显然这一剪枝单元中的成份之间需要保持一定的空间相邻性 , 以提升稀疏化后网络的推理效率 。
如上图所示 , 剪枝的单元可以是权重中的向量 , 卷积核单个输入通道 , 或者整个卷积核 。 剪枝的单元还可以是权重张量中的一个连续的区块 。 这些做法都是通过使得非零权重在空间上更紧凑 , 降低权重索引的复杂性 , 获得对硬件友好的稀疏结构 。 但是在同等性能下 , 结构化剪枝方法的参数效率与细粒度剪枝相比通常有较大差距[2] 。
结构化稀疏提升了网络推理速度 , 但是牺牲了模型的性能 , 而原始的细粒度剪枝在推理速度上提升效果不佳 。
细粒度结构化稀疏
细粒度结构化稀疏架构能有效的缓解这一矛盾 , 在尽量保持原始细粒度稀疏结构高参数效率优点的同时获得对加速硬件友好的网络结构 [3,4,5] 。
因此细粒度结构化稀疏在模型权重中引入了特殊的约束 , 这里我们以全连接网络层为例对这一约束进行解释 。
全连接层网络的权重可以用类似如下左图的矩阵来表示 , 对网络的稀疏化过程首先将权重分组 , 这里所举的示例以 4 个相邻的权重为一组 。 而后在每个权重组内限定固定个数的非零权重数目对权重进行稀疏化 。 如下右图所示 , 在稀疏化处理后 , 每个权重组(同一颜色块)中都正好留下 2 个非零权重 , 也就是 50% 的稀疏度 。
机器之心|从英伟达A100 GPU说起,浅谈细粒度结构化稀疏
本文插图
左:剪枝前的权重;右:按细粒度结构化稀疏剪枝后的权重(组大小为 4) 。


推荐阅读