2021-07-07
地址:SC‘20
概念图 模型压缩
Abstract:网络剪枝可以减少DNN的代价(哪个方面的代价,计算,网络,存储?)。稀疏模型中国常有随机分布的weights,会导致计算的不规律性。GPU是为密集矩阵运算加速的通用工具,对于稀疏模型,这里存在gap。之前的工作,致力于找一个完全新的稀疏优化的架构(怎么理解这个架构)。我们提出了算法-软件协同的剪枝方案,可以在现有的dense架构上加速latency。本文工作的insight是矩阵乘法通常是将大矩阵分解为小矩阵来并行计算,在这个拆分小矩阵的方法上做文章,让不规律的稀疏矩阵,在分解成小矩阵时保持一定的规律性。
加速效果:1.95x
intro,泛-精-专
泛:背景和意义
DNN现在很厉害,有的效果比人都好,但是就是有点贵,所以优化很有必要,尤其是模型推理的延迟
精:他人的解决方案
一种解决方案是,将dense 矩阵通过抛弃不重要的weights变成稀疏矩阵,并且重新训练模型保持精度。理论上,稀疏模型可以有更小的计算代价。tradeoff在模型准确率和训练效率之间。问题的关键在于密集矩阵稀疏化的sparsity pattern。
剪枝的粒度,有元素级别(EW),一个weights一个weights的剪枝and训练,对模型精度影响最小,但是会导致稀疏矩阵访存的不规律性,结果导致,剪枝的模型还不如不剪枝的跑得快
另一种解决方案:研究人员加入了硬件设备的支持,提出一些特定硬件结构。比如从向量的维度切分weight到一列一列的组,并且prune掉同一组的相同数字。(这里减少访存的原理没想明白)
专:本文的解决方案
insight:现在cv也好,nlp也好,大家其实都是在用GEMM(dense generalmatrix multiplication),所以我们的剪枝方案要是能让稀疏后的结果能够直接利用现有的GEMM。
怎么做到的呢?请看下文分解,[doge]
作者分析了GEMM的流程,发现GEMM是利用了tiling approach(作者给起的名字,意思是,大矩阵拆分成小矩阵,就像一块块瓷砖一样),所以我们也依据这个特性设计了适合稀疏性的瓷砖块算法(tile sparsity,or TW)。
瓷砖块可大可小,小到极致就是元素级别(EW),大到极致就是global structural pruning,删除整行整列。瓷砖算是两种方法的中间,and可以调整大小。
TW算法的base上,还可以加一个混合剪枝,再已经sparsity的模型上再加一层EW,可以得到更高的精度。
TW方法的两个问题:
1.TW天然呆进入了非连续性的内存访问
2.不同的TW的计算强度不同,看你造成imbalance
解决方案:intelligent data layout and concurrency/batching optimizations
三个贡献点
- tile wise的sparsity pattern,平衡精度和代价
2.一个多阶段的剪枝算法,在不同的层动态分配负载 - 在通用的GPU上实现出来,并且取得了效果
只能说,很复杂的工作,背后有着非常大的工作量。得对细节有着深入的理解,对cuda环境足够熟悉。
TW模式稀疏得更规整实验非常多,分析的角度也很多。
-
TW和EW以及BW的Accuracy and latency 对比
2.TEW模式中添加E的部分,对Accuracy and latency 的影响
3.不同TW稀疏比例加速的
不同TW稀疏比例加速的 - 几种方法在不同的模型上的效果
- 延迟和精度之间的tradeoff
6.TW在端到端的结果
七,相关工作及讨论
1, 硬件方面工作
2,软件方面优化
3,TW在其他平台的应用可行性
4,稀疏模式这个课题未来的发展方向:energy-oriented pruning
结论:一个非常delicate的工作,很细节,甚至有点繁琐。
可能是我这方面优化的文章看少了,还不能完全理解这个工作的层次,在这个领域是繁是简。
阅读参考:Computer architecture for Matrix computation
这个ppt介绍了GPU的工作流程,可以更细致的理解
网友评论