【论文笔记】用Huffman编码压缩神经网络及硬件加速算法
论文名称:
High PE Utilization CNN Accelerator with Channel Fusion Supporting Pattern-Compressed Sparse Neural Networks
会议&年份:
2020 57th ACM/IEEE Design Automation Conference (DAC)
背景:
之前的论文没有对模式修剪方法进行充分的研究,现有的稀疏CNN的索引存储方案效率不高,现有加速器的性能受到稀疏网络上空载PEs的影响
主要内容分为三部分:
(1)基于3种不同计算的压缩网络的方法
首先通过统计分析发现,每一层里面很多核其实模式是一样的,因此可以用同种模式来代表。
(图中每一列代表一层,57,321,511代表该层有多少种模式,同颜色代表同种模式)
提出的方法:
输入一个原始的模型
选出数量最多的几种模式(根据出现的概率选,选几个根据他们设定的公式,可调参)
将不是这几种模式的kernel都投影到这几种模式中(分别计算要投影的kernel和几种特定模式的距离,选最近的模式投影上去,计算方法有三种——直接计算L1范数,考虑位置上权值大小,计算cos值)
处理后的模型再重新训练几轮以恢复精度,再进行不规则裁剪(随机裁剪)以保持稀疏性。“投影-训练-不规则裁剪”重复多次直到精度达到要求。
(2)基于haffman编码的,降低索引存储开销的方法——HEPC
原来的方法压缩完网络后有很多0,存非0位的位置用的索引方式(直接存非0位的坐标)开销较大。
提出的方法:
假设用上面(1)的方法选出了5种模式,现在进来了3个核。
- 首先对五种模式进行huffman编码(出现概率大的编码短)
- 再分别记录这五种模式非零值的坐标
最终的新存储方式,由两部分组成:
- PI存输入的核分别是什么模式。比如10-110-10三个块就存下了是p2-p3-p2,而传统方法机械的存非零坐标就要很大的空间。
- CK存权值具体是多少。根据PI给的信息分别访问出来权值。这个权值是必须存的,本文是提出的是新的存非零位置的方法
(3)支持通道融合的硬件结构FESA
发现如果核的大小不同的话,那一起进去计算的时候,计算单元很多时候都是空的,因此提出通过融合通道来降低PE的空载率。
提出的方法:
比如上图,Channel2就是把两个kernel融合
每个channel的值和feature map 计算的暂时结果,输出到MEM中,再求和输出到输出缓冲中。
每行有个转换器来控制一行中要输出到不同MEM,MEM行越多,能融合更多的核,但是性能会下降
效果:
- 在CIFAR-10上测试,对VGG-16进行压缩,索引存储减少5.63倍,top-1精度仅减少0.87%。
- FESA实现了1.54~1.79倍性能并减少25 ~34%的空载率