【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs

【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs

算法如图,比较直观。

 

一、硬件架构设计

需要解决如下问题:

memorybandwidth。存储读取数据功耗和速度称为瓶颈,速度与conv硬件处理部分不匹配。所以文中很老套的方法,通过line buffer来复用每个tile交叠的部分(垂直和水平都有交叠的部分)。

 

1、整体架构

所有数据(input feature map, filter)都存在外部存储上。

有多通道(M)的input feature mapline buffer 的每一行存储所有channel的同一行。

Winograd PE line buffer 取出数据。通过FIFO,进入FPGA

使用double buffer 交叠数据。

在前向过程中,filter的数据不能全部存在on-chip memory中,所以把其按照channnel分成几组,每次处理一组。

【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs

2Line Buffer Design

on-chip memory上存储部分(n+m行)的line,用来data reuse

每一行的输入line buffer,有 MxW 个元素。输出的line buffer每一行有 NxC 个元素,N是输出的channel数,Coutput feature map的宽度。

由于不同的层,其feature map的大小也是不同的,所以这里硬件上取W为所有中最大的的widthResNet处理ImageNet的话,最大就是第一层输入图像224x224,而MxW最大为112x64)。

为了reuse dataon-chip memory每次存 n+m input,也就是2overlapkernel的长度。 然后循环位移lines,相当于一个circular buffer

 

当电路初始化时,处理电路Winograd engine直接从line buffer中读取前n行(存在on-chip),同时 line buffer 从外存中读取接下的m行。

n行的数据开始处理时,同时并行地,将m行转移到on-chip memory中。(读取数据、移动数据,还是很多,假如就放在原地,只读不搬运,然后增加读取控制逻辑,能减少读取)

处理完该轮数据,pe跳过一个stride = m行,读取余下的n行,同时,该m行数据被重新写入接下来的m行新数据。

 

 

3Winograd PE Design

【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs

将算法分解为四个步骤,可以有效的pipeline

变换矩阵的计算都是offline完成的。

filter的变换相对也是固定的,可以offline完成。但是文中采用线上计算的方式,来节省on-chip BRAM资源。同时两个变换是并行的所以不会增加延迟。

使用DSP array来处理矩阵的点乘。

将变换矩阵和中间变量矩阵存在registers。(而不是local buffer)。这样可以提升访存带宽,因为避免了memory bank conflict

变换矩阵的常数乘法,不使用DSP,而是用位移操作,其可以用FPGA LUTarray来完成。

 

4PE Parallelization

要使用PE并行化处理数据,首先对于数据,有行、列、输入channel、输出channelrow, col, ti, to)四个可以并行化的参数。

7】有介绍不同的并行化方式。

本文选择对tito进行并行化处理,并行度分别为pmpn,所以PE总的并行度为pm x pn,即采用loopunroll来实现并行化。(row会导致line buffer的增加,col会导致访存冲突)

我们还将输入,输出和滤波器buffer分区以维持高效的内存带宽

需要处理的filter4维的,将其划分为row, column, input and output channels

硬件实现一个2维的输入输出buffer,并划分每一个维度。

 

 

下表是Memory 划分的方式:

【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs

5、参数设计

Tile size n 并行参数pm , pn 都是需要考虑的设计参数。

对于n,一般越大,节省的乘法越多;但是其变换矩阵的数值越大,会导致精度损失。

使用16bit 定点数来表示data filter

filter的精度为 2^-10

为了保证上述精度要求,设n最大的取值为8

 

资源消耗分析:

只有矩阵点乘需要用到DSP,所以

 

  • DSP的数量为:【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
  • LUT粗略估计为线性模型:【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
where αrn is the LUT consumption of a single Winograd PE with the input tile size n and filter size r.

BRAM bank 的数量(基于表 1 计算):
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
还对memory bandwidth进行建模,数据传输速率需要大于等于计算的速率。计算 line buffer n input 的时间为:
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
II denotes the iteration interval of the pipeline.   In our implementation, loops in Figure 1 (b) are perfectly pipelined, so the II = 1.
Pdepth is the pipeline depth, which can beignored when the loop trip count is large enough.

而传输 m 行数据的时间为:
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
需要满足
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
则有
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
初始化 on-chip 载入n行的时间:
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs
用来评价性能的指标:
【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs

6、其他层的实现

Fully Connected (FC) layers, Pooling and Rectified Linear Unit (ReLU) layers

1)全连接层

全连接层 可以看做是 矩阵和矢量相乘,把矢量展开可以看做是 矩阵点乘。

bypass前置处理电路,即可以reuse Win PE的乘法单元。

FC层的weight远大于输入的neuron。根据这个特性,将input neuron数值全部load on-chip memoryweights通过FIFO接口读入。

batch提高memory bandwidth

2ReLU & Pooling

ReLU and Pooling are implemented by introducing comparison operators to the output buffers.

你可能感兴趣的:(【FPGA17】EvaluatingFastAlgorithmsforConvolutionalNeuralNetworksonFPGAs)