清华大学, 涂锋斌
https://www.leiphone.com/news/201705/8sB0WHz6D70J7NAy.html?type=preview
1. 现有平台能效低问题
![](https://img.haomeiwen.com/i9671629/fe24a4ae4f465828.png)
所谓考虑了片外存储的系统级能效就是既要考虑FLOPs还要考虑Memory Access Cost
2. 神经网络的三大特点给硬件加速的Challenge
2.1. 不同网络的层数不同
不同网络层数不同
2.2. 不同层的类型不同
不同层的类型不同
不同层的参数多样/数据量/计算量大(卷积层计算量大, FC参数量大)
![](https://img.haomeiwen.com/i9671629/f7444c33991544ab.png)
![](https://img.haomeiwen.com/i9671629/5d8ac0797841c041.png)
3. 设计目标和实现
![](https://img.haomeiwen.com/i9671629/eef7fb5e73fd8cef.png)
![](https://img.haomeiwen.com/i9671629/fd294355b6542abd.png)
4. 为什么以Conv layer作为主要研究对象
![](https://img.haomeiwen.com/i9671629/7509500a55ca4e19.png)
所谓其他层的计算模式与Conv Layer类似, 其实是说其他的结构都可以看作是Conv Layer的一种特例
5. 神经网络Accelerator硬件架构的模型
![](https://img.haomeiwen.com/i9671629/52ba61ad829541c1.png)
主要是片内和片外两个部分, 要设计的是左边的这一大块, 就是片内的部分
Controller -> 核心控制器
Input/Output/Weight -> 输入/输出/权重缓存
REGs -> 输入/输出寄存器
CE -> 卷积引擎, 就是负责卷积计算最核心的部分
PE -> 处理单元, 就是CE内部的最小单位
6. 优化目标
![](https://img.haomeiwen.com/i9671629/8ef7e50a972424dd.png)
能耗主要由两部分构成, 一部分是访存能耗Energy_MA, 一部分是计算能耗Energy_Computer
我们看MIT Sze实验室的那篇Survey其实就是讲两个问题:
![](https://img.haomeiwen.com/i9671629/015097e6f8c881e8.png)
![](https://img.haomeiwen.com/i9671629/b26ae23d32c8b58e.png)
![](https://img.haomeiwen.com/i9671629/55982d3b97824e8d.png)
所以最终要优化的目标就是访存次数(MA)和计算单元利用率(PE Utilization)
7. 卷积层的循环表示
![](https://img.haomeiwen.com/i9671629/2813720ac803b67a.png)
8. 什么叫计算模式??
![](https://img.haomeiwen.com/i9671629/06d060cedc495e8d.png)
计算模式 = 数据复用模式 + 卷积映射方法
9. 数据复用模式
![](https://img.haomeiwen.com/i9671629/0302a0f4d877f3d6.jpg)
![](https://img.haomeiwen.com/i9671629/690a8025f4184737.png)
Input Reuse就是尽量减少REGs与Input Buffer通讯的次数, 读一次Input数据, 把跟这个Input数据相关的操作都做完, 通过Output Partial Sum这个寄存器把得到的结果送到Output Buffer里去, 换句话说, 就是每次计算, 固定Input, 从Weight buffer里频繁读取Weights
![](https://img.haomeiwen.com/i9671629/800935b1fae40e22.png)
IR模式下, 输入的复用因子就是1, 就是说一个数据只需要被从Buffer->REGs提取一次
![](https://img.haomeiwen.com/i9671629/5b89eda18f05e45a.png)
![](https://img.haomeiwen.com/i9671629/601b2a9a03b6ed46.png)
10. 卷积映射方法
![](https://img.haomeiwen.com/i9671629/0e9f3b5048415ceb.png)
H和L是输入图像的长宽, R和C是输出图像的长宽, K是卷积核大小, S是stride
![](https://img.haomeiwen.com/i9671629/64aa5c315cf91f1f.png)
CE的尺寸指的就是一个CE里面的由多少个PE单位构成,
![](https://img.haomeiwen.com/i9671629/c8c5be10d38ca517.png)
参数多样导致计算资源利用率不足, 主要是两方面的问题产生, stride>1或者图尺寸与计算资源不匹配
![](https://img.haomeiwen.com/i9671629/7626d0a90c35583f.png)
作者提出这个方法的motivation就是尽量提高PE利用率, 让所有PE都尽量不要停下来, 一直在计算
![](https://img.haomeiwen.com/i9671629/860086df780b5a86.png)
这个还是作者提出的并行卷积映射方法, 换成了在时间轴上的表达形式, 可以看出并行卷积映射的实际效果. 仍然是在8x8的阵列上计算6x6的输出图.
对每个Map做一个更深层次的tiling(分块), 将6x6的块分割成一个个2x2的小块, 同时把16个不同map的小块并行地映射到阵列上去, 也就是同时在阵列上计算16个并行的map, 但是每个map的尺寸更小
所以Tr和Tc就是原先分块的大小, Trr和Tcc就是映射之后分块的大小, 那经典的方法映射前后就是一样的, 就是Outmap长什么样, PE的排列就长什么样, P就是一次迭代算多少个map
![](https://img.haomeiwen.com/i9671629/60e982b12e8c5b4d.png)
这张slide就是从PE Utilization计算的角度去看为什么并行卷积映射方法比传统方法要更好, 核心的思想就是并行地计算更多的输出图来获得更高的计算资源利用率
在循环中红色的部分就是在原先core内部计算的循环中额外加上两层Tiling分组来实现并行操作(对照Input Reuse那张slide)
11. DNA
![](https://img.haomeiwen.com/i9671629/f769cd696e82f41d.png)
硬件架构设计主要是考虑如何配合前面讲的好的计算模式
A. 两个CE共享同一块Input REG, 然后各自有各自的输出寄存器
B. 在片上会存储针对网络各层的配置信息, 这个配置信息存储在configuration context
C. 可重构的数据通路, 体现在多个方面, 红色的从output buff反馈回core的通路, 还有整体数据输入也是重构的形态, 还有CE内部也有一些可重构的数据通路
D. Ping-Pong buffer, 就是每个buffer都是双胞胎, 当前这个buffer在工作的时候, 他的兄弟buffer在从外面导入数据
12. 4级CE结构
![](https://img.haomeiwen.com/i9671629/dc9191ff03833b9e.png)
13. 数据传输网络
![](https://img.haomeiwen.com/i9671629/ceb61addc8d43a9c.png)
通过这个网络, 相邻的数据块可以进行数据传递, 不需要再从buffer导入, 减少访存的次数
14. 工作流程和调度框架
![](https://img.haomeiwen.com/i9671629/055f69404677471c.png)
需要有一套工作流程指导我们如何使用刚才讲到的这个架构
编译阶段需要输入的是神经网络的拓扑参数和硬件约束, 硬件约束主要指的就是片上buff容量/计算单元个数等描述硬件架构的参数
调度框架的实际上是在CNN的每一层做一个优化问题, 每一层调度的结果就是把数据复用模式(Data reuse)和卷积映射方式(Convolution mapping)用参数化的形式表达出来, 对神经网络的每一层这样调度就得到一个调度表, 就生成了一个对于目标神经网络的配置信息, 就是那个Configuration for each layer
![](https://img.haomeiwen.com/i9671629/a4101bbd213a9bb3.png)
15. DNA实现的结果
![](https://img.haomeiwen.com/i9671629/96040b09996d8755.png)
SRAM指片上buffer的容量, 我们可以比较Performance来看一下完成一次CNN的Inference需要多久
![](https://img.haomeiwen.com/i9671629/057daef6bcafc96d.png)
![](https://img.haomeiwen.com/i9671629/346407bcc269c800.png)
比较Efficiency不只是要比较core的能效, 还要考虑片外通讯的cost
![](https://img.haomeiwen.com/i9671629/95a8a407188acfc0.png)
![](https://img.haomeiwen.com/i9671629/50c93f5e027d2c2a.png)
16. 总结思考
![](https://img.haomeiwen.com/i9671629/b320b7703a811041.png)
![](https://img.haomeiwen.com/i9671629/29553595085b535e.png)
他这里说的模型压缩应该专指low-bit representation, low-bit可以让一次加乘运算的cost降低.
后面的稀疏化就是剪枝,剪枝可以减少操作总数, 同时还可以减少参数, 实际上就是减少访存次数, 这两点实际上就是从优化神经网络拓扑结构的角度降低计算cost的代表.
所以实际上, Network Compression算法也是对应着硬件的设计优化的两个方向, low-bit对应着减少单位计算能耗, pruning对应着降低访存次数和操作次数.
在硬创公开课, 还有一些有价值看一下的Presentation
https://www.leiphone.com/news/201703/TamDONTdXy2tyd4w.html
网友评论