DNNBuilder: an Automated Tool for Building High-Performance DNN Hardware Accelerators for FPGAs

image-20221111161827175

题目:DNNBuilder: an Automated Tool for Building High-Performance DNN Hardware Accelerators for FPGAs

时间&会议: 2018 IEEE/ACM International Conference on Computer-Aided Design (ICCAD)

开源代码IBM/AccDNN: A compiler from AI model to RTL (Verilog) accelerator in FPGA hardware with auto design space exploration. (github.com)

This work was published in ICCAD’18, and won the Best Paper Award for Front-end

加速器的设计策略分两种:基于循环的架构(统一的计算单元在不同的时间被不同的层利用);基于流水线的架构(网络中的每个层是一个单独的流水线阶段)

选择流水线架构的原因:

  1. 边缘设备没有足够的内存和带宽缓存基于循环架构中的中间数据
  2. 循环架构中的统一架构不够灵活,需要对不同层进行转换降低了性能
  3. 流水线架构可以更好的分配资源实现高吞吐量以便支持流输入

比较独特的贡献

  • 细粒度基于层的流水线架构减少流水线架构启动延迟;(有多细?怎么减少延迟?)

  • 基于列的缓存方案减少阶段间的缓存空间开销;(基于列是什么?有什么好处?)

为高清图像/视频输入提供毫秒级的响应,可在延迟敏感的系统上部署DNNBuilder生成的DNN加速器成为可能(之前的加速器不行吗?)

Automation Design flow

image-20221111170136939

  • Design step: 使用深度学习框架设计网络并训练得到网络的定义文件(“DNN def.”)和训练得到的权重;
    • 设计阶段里的一个重要的特征是接受了来自Generation阶段对性能进行评估的feedback结果(“P. estm.”),当运行速度或资源花销达不到我们预期,我们就要通过调整量化方案或者网络模型等方法达到我们的性能要求。
  • Generation step: 脚本文件进行network parsing, map to pre-built RTL components ⟹ \Longrightarrow automatic resource allocation scheme to balance pipeline(kernel/channel parallel factors and buffer sizes) ⟹ \Longrightarrow network construction:根据RTL网络组件、数据流控制器和内存实例构建DNN实现 ⟹ \Longrightarrow Code generation:生成FPGA上的加速器实例(bit流文件)
  • Execution step: 实例化的加速器有FIFO类似的输入输出的数据接口和权重接口连接片外存储控制器,通过这些接口执行模型加速器得到结果

Accelerator Architecture Design

两层conv的例子:

image-20221111190442085

一些概念:

  • Channel Parallelism Factor (CPF) :特征图的通道并行因子(通道数量)

  • Kernel Parallelism Factor (KPF):卷积核并行因子(卷积核的数量)

  • D W i DW_i DWi : input data bit-width

  • W W i WW_i WWi: weight bit-width

Computation Engine Design

image-20221111192507048

不同的卷积核进行并行计算,每个卷积核安排一个MUL&ADD, 同时输出通道方向上的output

之前的工作:

  • 同一个卷积核在特征图水平方向上的不同特征点卷积,同时输出水平方向上的output
    • 所以存在PE之间水平方向的data forward
    • 以及PE内部列方向上的data fifo缓存数据

ON-Chip/Off-Chip Memory Management

image-20221111200806591

基于列的缓存方案

  • 特征图上一个卷积核width数量的Slice是一个Column

  • DNNBuilder 至少缓存两列,这样在完成一列后可以立即开始第二列的滑动窗口的计算

  • Slice1空间释放后,Slice5将被缓存形成下一个Column

这样做的优势?

  • 大多数输入的图像的高度小于宽度,在列方向缓存Slice有利于节省on-chip存储(行方向缓存,宽度大,数据长就需要存的数据更多;我把图片转90度输入岂不是基于行的缓存方案?)
  • 提高了低computation-to-communication (CTC) ratio的层的性能,例如小特征图输入的卷积层、FC层,它们存取数据的花销大,计算的花销小

自适应存储层次系统

  • 权重缓冲区:dual-port RAMs in FPGA

  • reshape buffer: 提供特征图输入

  • external memory:提供片外存储

  • ping-pong buffers:在层的输入处提供可选的乒乓缓冲区;

    • 所需的权重超过一定的阈值,数据需要片外存储,自动生成乒乓缓冲区,克服从外部存储器获取数据时的数据短缺问题
    • 反之,当用户开发一个低位宽量化DNN时,当所需数据的大小低于阈值时,将不会产生乒乓。
    • (乒乓缓冲区是什么?数据流控制的处理技巧,一个缓冲区用于存放输入,一个缓冲区用于取出输出)

Automatic Resource Allocation

通过考虑网络的复杂性,片外存储访问带宽和数据重用,给每个层生成并行方案(决定CPF和KFP的值)以及数据缓冲区的大小

Theoretical Guideline

image-20221112194832480

需要的计算资源: C i C_i Ci

分配的资源(dsp的数量): R i R_i Ri

硬件工作频率相关的比例常数: α \alpha α

i i i 层的延迟: L i L_i Li

公式(1)说明分配的资源越多,层的延迟越小

整体吞吐量throughput: T P TP TP

公式(2)说明整体吞吐量取决于延迟最大的那个层(瓶颈)

公式(3)提供了最理想的状况:所有层的延迟相同,工作负载完全相同,吞吐量最大


Memory Bandwidth Adjustment

image-20221112200855425

斜率是带宽

计算通信比(CTC)小的时候,蓝色部分;性能受限于存储访问的延迟,通信需求大,计算需求小,数据复用少

CTC大的时候,灰色部分,性能受限于计算资源,计算需求大,数据复用多,带宽不是瓶颈。

优化设计的目标是:用最少的带宽资源和要求的CTC达到最大吞吐量

优化的方案:通过调整数据重用的行为改变CTC,从而缓解带宽的要求

image-20221112205324991

首先按照公式(3)求出分配的计算资源 R i R_i Ri,根据DNN各层的数据重用行为确定CTC比

(a)先给FC分配带宽,如果带宽无法满足,需要feedback步骤重设计采取更激进的量化方案;

(b)剩下的带宽给CONV层分配

©CONV i&j层被存储访问的延迟限制了,就需要缓存更多的column,得到更高的CTC后CONV层就被计算资源限制

(d)CONV i&j层没有被存储限制但是被带宽限制了,调整带宽需求最高的层(CONV i),通过缓存相应特征映射的更多列来减少其带宽使用(斜率变缓)


Allocation Algorithm in DNNBuilder

计算资源分配算法:

并行系数必须是2的幂,对瓶颈层j分配多一倍的计算资源

根据Ri计算CPF和KPF

image-20221112213215610

存储带宽资源分配算法:

image-20221112214439097

  • 初始化

卷积剩余可用存储带宽 B W t o t a l c o n v BW_{total}^{conv} BWtotalconv

特征图reshape可用片上存储资源 m e m t o t a l r b mem^{rb}_{total} memtotalrb

单个DSP的带宽 B W R BW_R BWR

PF表示并行因子等于Ri

  • 首先满足分配计算资源的带宽需求:

R i × B W R R_i\times BW_R Ri×BWR :dsp数量与单个dsp的带宽相乘得到带宽总和

H i o u t × C o l i H_i^{out}\times Col_i Hiout×Coli : 特征图高度与缓存列数(宽度)相乘,特征图的数据在这两个方向上复用了

它们相除得到根据计算资源Ri分配所需的深度方向的带宽

  • 要求的带宽超过总可用带宽:while1循环

Experiment

FPGA

  • XC7Z045 in Xilinx ZC706,

  • KU115 in AlphaData 8K5

Test DNN model: Alexnet ZF VGG16 YOLO

为了满足实时性VGG16砍掉了一半的卷积和池化层且使用4bit位宽量化权重

准确率:

f.t表示feedback,()内箭头表示正则化后的提升

image-20221113212022230

资源利用率和性能:

性能峰值在嵌入式FPGA中为526个GOPS,在高端FPGA中为4218个GOPS

image-20221113212623623


引入DSP效率来展示所分配的DSP的实际和理论最大性能之比:

分母等于在给定频率下分配的DSP提供的理论最佳性能。分子表示实际实现的性能(GOPS);VGG16加速器DSP效率最高:VGG16具有统一的CONV (3×3 with stride 1)和pooling pattern (2×2 with stride 2),使得在Ri为2的幂的约束下,方程(3)完全满足。每层时延越均衡,DSP效率越高

image-20221113212803438

20FPS(frame delay=50ms),1280×384相机的实施输入

image-20221113213854886

startup latency is 9.92ms,

keeps generating outputs until 9.04ms

output time-slot” which lasts 50+9.04-9.92=49.12ms

image-20221113214509304

细粒度的基于层的管道架构的优点:

隐藏数据传输延迟(在第一个帧仍在加载时生成输出),并交付一个小的启动延迟(在本例中为9.92ms)

传统的管道架构(右图)具有20帧/秒的总体吞吐量,承受457.24毫秒的延迟

在收集i层的几列输出特征图后开始运行第i + 1层管道阶段,我们的延迟为59.04ms,实现7.7倍减少

image-20221113215230477

基于列的缓存的优势:

显著降低了保存DNN特征图所需的BRAM;YOLO加速器中只实例化了137个bram,而不是在传统的管道设计中实例化5920个bram,总体BRAM减少为5920 ÷ 137 = 43x

image-20221113215353152

Comparison to FPGA & GPU Accelerators

image-20221113215458954

image-20221113215508440

[1] J. Qiu et al. Going deeper with embedded FPGA platform for convolutional neural network. In FPGA, 2016.

[2] Q. Xiao et al. Exploring heterogeneous algorithms for accelerating deep convolutional neural networks on FPGAs. In DAC, 2017.

[5] U. Aydonat et al. An OpenCL deep learning accelerator on Arria 10. In FPGA, 2017.

[6] J. Zhang et al. Improving the performance of OpenCL-based FPGA accelerator for convolutional neural network. In FPGA, 2017.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值