FPGA万花筒之(十一):基于FPGA的卷积神经网络实现之资源分配(1)

姓名:张俸玺 学号:20012100022 学院:竹园三号书院

转自https://blog.csdn.net/qq_38798425/article/details/107084504

【嵌牛导读】FPGA,可编程门阵列,作为一种较为新型的技术,为大多数人所陌生。如今,用FPGA实现神经网络成为一种热门技术话题。本文对基于FPGA的卷积神经网络实现的资源分配(部分)进行了简要叙述。

【嵌牛鼻子】FPGA   卷积神经网络

【嵌牛提问】基于FPGA的卷积神经网络实现的一些资源是如何分配的?

【嵌牛正文】

github

前面曾经说过这个demo使用最简单的方法,也就是对每一层都单独分配资源,所以需要提前设计好每一层所分配的资源数量。这里的资源主要是指DSP单元和片上存储资源,CNN的卷积层是计算密集型层,全连接层是存储密集型层,整个CNN所需要的计算资源(也就是我们使用DSP单元来实现)和存储资源远远大于对其他资源的需求。仍然是从最简单的方式开始,整个demo的网络结构很小而简单(网络结构在这里),再买上一块儿略屌的板子,比如说zynq7000-zc706(这板子确实很贵,但是一开始我们可以只是仿真,对于上板可以等基本掌握了这种设计思路之后,再进行优化,然后对于不同的板子进行不同的设),19.1M block RAM,900DSP单元(详细信息)。现在网络框架有了板子也有了,那么我们根据这些资源数据来设计。


假设我们使用全精度(32位浮点)来存储,那么总计需要片上存储空间13M(如果对参数进行低位宽量化,将会减小对存储的需求)。

下面考虑可能出现的运行缓存,这里的缓存是指,在每一层计算的时候,该层的结果在输入到下一层使用之前需要暂时存储起来。我们先不考虑优化问题,假设每一层的所有输出都需要缓存起来,并且一直不释放一直到整个前向传播过程结束,来计算最大需要的缓存空间。(事实上,每一部分缓存数据在使用完后可以得到释放,只需要单层最大缓存空间即可;另外,使用一定的优化方法可以进一步降低缓存占用空间)。每一层输入所需要的缓存空间如下表所示:

仍然假设使用全精度(32位浮点数)来存储,那么总计需要片上存储空间 2M。是不是就结束了?其实并没有,前面我们只是认为卷积层和全连接层这样的计算层需要缓存,实际上,池化层也需要单独拎出来,也就是说池化层的输入也需要缓存,每一个卷积层后面会接一个池化层,那么我们再重新来计算一下存储需求上限:

这样一来缓存需要的存储空间上限为6.7M,也就是说,如果我们将所有的参数和缓存数据存储在片上存储空间,总计需要19.7M,ZC706是不可以cover的。但是呢这里有个值得注意的地方在于,我们所有的数据都是使用32bit的位宽进行存储,实际上我们可以使用更低bit来存储这些数据,这将缩小对空间是使用,关于量化的问提,进来的研究有很多,16bit定点数基本可以是无损的,pytorch1.4也提供了定点数量化工具,如果想在这方面进行研究的同学可以自行搜索一些相关论文(我有同学做这个,今年在CVPR2020有几篇低bit量化的工作做的已经很强了)。如果想快速做一个demo出来,最简单的办法就是训练出来的网络,将参数直接进行量化,不再retrain,这样会有一定精度损失。

回到FPGA的硬件资源继续分析,既然16bit定点数来存储各种数据我们认为是无损的,那么我们可以认为整个demo的存储需求上限是9.85M,也就是说这个板子能够cover整个网络的存储,所以就不需要在认为去分配每一层使用多少。这里要注意的是,我们说的是存储上限,也就是说实际设计的时候还会比这更低,这需要结合DSP资源的分配来设计结构,我们后面再进一步分析。

下面去考虑DSP单元的数量。DSP单元用于计算卷积,我们使用DSP计算乘法(乘加)运算,我们还是以最简单的来,就让一个DSP单元计算在一个时钟内计算一次乘法,加法再单独计算。

对于每个卷积核的卷积的计算有两种方式:

1.一些(或一个)DSP单元重复利用,每个时钟进行一定数量的(或一个)乘法运算,串行完成所有计算

2.多个DSP单元在一个时钟内完成所有乘法计算

对于不同的卷积核之间又有两种情况:

1.一层所有的卷积核并行进行

2.部分卷积核(也可能是一个卷积核)并行进行

对于本demo来说,如果我们在卷积核内选择第二种方式,卷积核间也选择第一种方式,那么每一层需要的DSP单元数量如下表所示:

是不是非常眼熟?没错,这就是前面的卷积层参数量的表格,显然这种方式等价于我们给每个卷积层参数分配一个DSP单元。也就是说我们总计需要4100个DSP单元,显然这是远远超过板载DSP单元数量的,因此这是不可行的。那么我们来考虑降低卷积核之间的并行程度,降到最低的状态即为每一层都只并行计算一个卷积核,那么每一层需要的DSP数量变为:

总计为325个,因此我们的卷积核内部是可以全部并行进行计算的。

另一种组合是卷积核间仍然是全并行的,而卷积核内部是部分并行的,这种方式是可行的,这种方式所需要的最小DSP单元个数是每个卷积核分配一个DSP单元,那么总计需要28个,我们仍可以进一步的增加卷积核内部的并行程度,以充分利用板载DSP资源。

最后一种组合方式是卷积核内部部分并行,卷积核见也部分并行,显然这种方式的最小DSP单元需求量更小,也是可以考虑的一种。

结论:我们在分配DSP单元的时候,应使得每一层卷积核内部的卷积运算部分并行,卷积核之间部分或完全并行

下一节我将对这两种方式进行对比,并将对缓存的优化纳入考量,最终确定DSP资源的分配。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341