文献阅读(43)OPU

  • 题目: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 计算模块

传统的方式是用二维卷积,缺点有:

  1. 复杂的feature map数据存储的管理,比如说line buffer
  2. 对不同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 编译器

编译主要分成两部分:

  1. 转换:网络信息到IR,中间有operation fusion、数据量化、数据arrangement
  2. 优化:

  • 题目: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上的测试数据

在这里插入图片描述

  • 过去很多加速器对这些新型算子支持的不够好,也不是统一的结构

本篇论文的主要贡献:

  1. 基于FPGA对轻量化神经网路算子的广泛支持,包括DW-CONV和组卷积
  2. 灵活的指令集以及编译优化方法,模型输入支持Tensorflow、Keras和ONNX
  3. 对多种轻量化神经网路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 微架构

计算单元有两种复用方式

  1. 一种就是CPF和KPF,并行度是输入通道x输出通道
  2. 另一种针对depthwise卷积,如果是3x3的卷积,并行度就是9x输入通道

这篇论文厉害的地方是对多种网络结构的支持,比如说DenseNet、Channel Shuffle等等

5 编译

编译的两个主要目标是网络重构和硬件映射
在这里插入图片描述

5.1 网络重构

  1. layer grouping:link相邻的层到同一个计算块
  2. operation fusion:如BN层的融合,将padding融合到之后的Data Fetch模块
  3. operation reordering:针对Channel Shuffle和Squeeze and Excitation进行调整,使得更加硬件友好

5.2 硬件映射

网络切片

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值