文章目录
- 题目:OPU: An FPGA-Based Overlay Processor for Convolutional Neural Networks
- 时间:2019
- 期刊:TVLSI
- 研究机构:UCLA/Lei He
1 缩写 & 引用
- RME: runtime multiplication and accumulation unit efficiency
- OPU: overlay domain-specific processor unit
- TCI: trigger condition index
DLA: Compiler and FPGA overlay for neural network inference acceleration 2018 FPL
Automated systolic array architecture synthesis for high throughput CNN inference on FPGAs 2017 DAC
2 abstract & introduction
这篇论文提出里一个手写RTL的OPU,CNN网络可以编译成指令,跑在这个OPU上,而硬件不需要更改
编译器可以进行指令集的优化,包括operation fusion和定点化
3 指令集架构
所有的指令分成有条件指令和无条件指令,每个指令块包括一个有条件指令和0或0以上的无条件指令,指令都是按照指令块的单位fetch并分配到PE模块中执行
每个PE计算两个长度为N的一维向量的内积,本次设计中N=16
3.1 有条件指令
- memory读:从片外存储读到片上
- memory写:把结果写到片外
- data fetch:把数据从片上buffer喂到计算单元里
- compute:控制所有的PE
- post process:包括池化、激活、数据量化、中间结果累加、residual操作
- 指令读:读一个新的指令块
采用动态的流水
4 微架构
和六种有条件指令对应,硬件架构分成六部分
如果某一层尺寸较大,编译器会自动把它切成小份
4.1 计算模块
传统的方式是用二维卷积,缺点有:
- 复杂的feature map数据存储的管理,比如说line buffer
- 对不同kernel size扩展性不好
kernel size如果固定3x3,那么当网络结构不同的时候性能就会受损,那么就设定每次计算只算1x1的结果,并行体现在input channel和output channel
一个乘法单元MU一次可以计算两个8bit和8bit的乘法,且二者有一个输入相同,也就是l乘m和l乘n,一个PE有16个MU,也就是说一个PE可以进行32次MAC。一个计算单元中有32个PE,后面有一个加法树可以计算不同group size的PE。也就是说,[input channel, output channel]可以是[512,2]、[256,4]、[128,8]、[64,16]、[32,32]、[16,64]
4.2 数据fetch
- FM ADDR GEN:接受指令,产生FM buffer读地址
- FM REARR:读出来的FM数据拷贝到这里,准备喂给计算单元
- PRE-LOAD ADDR GEN:产生权重的地址
- W SHIFT REG SET:利用移位寄存器,存储权重,因为权重需要32个时钟周期才能全部load完
4.3 后处理
后处理包括数据量化、部分和累加、池化、激活、residual addition。后处理直接跟memory写连在一起,减少数据的移动
4.4 存储管理
乒乓的结构,隐藏数据传输的时间
数据存储格式是按照channel存的,而不是一行一行存的
4.5 不规则的操作
inception 模块: channelwise(depthwist)表示每个input channel都用不同的卷积核,再把输出结果按channel方向串联起来。传统的卷积,有k个卷积核,则output channel就等于k;而depthwise卷积中,每个input channel都对应k个卷积核,那么output channel=input channel*k 。在这个硬件结构中只要通过output memory address就够了
residual 模块: 残差结构最后有一个maztrix elementwise addition的操作,说这不是计算密集型的运算,而会导致很多数据传输,所以这部分的数据需要提前搬运,比如说在前面卷积还在运算的时候就开始搬运数据了,就是流水线的思路
5 编译器
编译主要分成两部分:
- 转换:网络信息到IR,中间有operation fusion、数据量化、数据arrangement
- 优化:
- 题目:Light-OPU: An FPGA-based Overlay Processor for Lightweight Convolutional Neural Networks
- 时间:2020
- 会议:FPGA
- 研究机构:UCLA
1 缩写 & 引用
- LW: Lightweight
- DW-CONV: depthwise convolution
- TCI: trigger condition index
2 abstract & introduction
这篇论文是针对基于FPGA的单引擎结构,更加偏重于编译优化,硬件结构不变
Light-OPU accelerates conventional convolution, DW-CONV and other lightweight operations with one single uniform computa
tion engine
motivation:
- 对于这些轻量级神经网路,乘法数量的降低和速度的提升不成比例,这是因为一些非传统的算子是存储受限的,计算单元没有充分利用,这里有GPU上的测试数据
- 过去很多加速器对这些新型算子支持的不够好,也不是统一的结构
本篇论文的主要贡献:
- 基于FPGA对轻量化神经网路算子的广泛支持,包括DW-CONV和组卷积
- 灵活的指令集以及编译优化方法,模型输入支持Tensorflow、Keras和ONNX
- 对多种轻量化神经网路LW-CNN的支持,包括MobileNet、Xception、DenseNet、ShuffleNet、SqueezeNet
3 指令集
每个指令都是32比特长,一共分成两种,而且每次都是一个C-type指令跟着0~n个U-type指令
- 条件指令(C-type)
- 非条件指令(U-type)
条件指令一共分成六种
- memory读
- memory写
- data fetch:有两种模式,一种是FM resue,其实就是CPF和KPF;另一种kerenl reuse,针对depthwise conv
- 计算:一个PE完成两个向量的点乘,在本篇论文中向量长度为9
- 后处理:包括各种操作,如Squeeze and Excitation模块
- 指令读取
4 微架构
计算单元有两种复用方式
- 一种就是CPF和KPF,并行度是输入通道x输出通道
- 另一种针对depthwise卷积,如果是3x3的卷积,并行度就是9x输入通道
这篇论文厉害的地方是对多种网络结构的支持,比如说DenseNet、Channel Shuffle等等
5 编译
编译的两个主要目标是网络重构和硬件映射
5.1 网络重构
- layer grouping:link相邻的层到同一个计算块
- operation fusion:如BN层的融合,将padding融合到之后的Data Fetch模块
- operation reordering:针对Channel Shuffle和Squeeze and Excitation进行调整,使得更加硬件友好
5.2 硬件映射
网络切片