您的位置 首页 资料

实测!AlexNet卷积核在FPGA占90%资源仍跑750MHz 算力达288万张图画/秒

本文将重点描述基于AlexNet的2D卷积核的实例应用。

MLP_Conv2D是功用完全的规划,可将2D输入图画与多个内核一起进行卷积。 该规划充分运用了MLP和BRAM模块,每个MLP一个周期履行12个int8乘法。此外,MLP列和BRAM块平等级联以有效地将图画数据传递,然后答应一起处理多个内核。

该规划运用NoC接入点(NAP)从片上网络(NoC)读取或写入数据。NoC连接到Speedster7t器材中的GDDR6操控器再到外部存储器。

AlexNet

虽然开端为AlexNet图画和内核巨细装备了MLP_Conv2D规划,可是2D卷积是一个通用进程,因而能够从头装备该规划并使其习惯许多不同的2D办法。

2D卷积的一般原理是在图画(实践上是另一个2D矩阵)上传递内核(2D矩阵)。关于每次核算,内核均以输入图画的像素为中心,并对每个内核值(称为权重)与其当时对齐的像素履行乘法运算。这些乘法的总和给出了原始图画像素的特定卷积成果。然后将内核移至下一个像素,并重复该进程。

通过训练的内核,2D卷积生成一个输出成果图画,杰出显现输入图画的特定特征,例如笔直线,水平线,改变视点的对角线和改变半径的曲线。然后能够将这些特征输入到其他处理层(包含其他2D卷积),然后能够将其标识为(通常在软件中)为特定目标。

因而,二维卷积处理不该被视为图画识别的完好解决方案,而应被视为处理操作链中的单个要害组件。

1587775777189864.png

图1 单个Kernel进行2D卷积的动态示意图

乘法密度

2D卷积的应战是所需的乘法数量,这便是MLP中专用的乘法器阵列。关于AlexNet装备,每个内核为11×11= 121个权重值。可是,卷积实践上是3D的,因为输入图画具有三层(RGB),因而一组内核有121×3 = 363个乘法来发生单个输出成果。AlexNet输入图画为227×227;可是,此图画的stride为4(在核算之间内核移动了四个像素)。此进程导致输出成果矩阵为54×54 = 2916个成果。因而,关于一幅图画需求363×2916 = 1,058,508次乘法;即处理一个图画需求进行一百万次以上的累加运算。其间单个Kernel进行2D卷积的动态示意图如下:

关于MLP_Conv2D,其规划旨在一次处理一幅图画中的60个内核,单次履行超越6000万次乘法累加操作。

1587775827463097.png

图2 单个MLP_Conv2D实例资源运用

MLP_Conv2D规划能够以750 MHz的频率运转。单个MLP能够在137 µs内对具有11×11内核的单个227×227 RGB输入图画进行卷积,相当于每秒15.4GOPS(包含乘和加)。 但一个MLP_Conv2D实例由60个并行运转的MLP构成,能够一起对60个输入图画进行卷积,相当于924GOPS。 最终,将多达40个MLP_Conv2D实例化到单个器材中,每个实例都通过自己的NAP将数据传输到GDDR6存储器,然后完成了组合高达37 TOPS的功用-相当于每秒处理28,8000张图画(本规划首要针对卷积核)。

1587775867442282.png

图3 并行40个MLP_Conv2D实例资源运用

MLP_Conv2D环绕MLP和BRAM块功用而规划,并运用它们各自的内部级联走线。 相同,NAP答应直接从外部存储器路由数据互联。这些功用可完成最小的附加逻辑或路由要求,运用率表如下:

1587775909341329.png

图4 MLP_Conv2D框图

数据流:单个MLP

每个MLP都有一个附近的BRAM。 在此规划中BRAM用于存储内核并将其屡次传递到MLP。 初始化时,将从输入NAP中读取不同的内核,并将其写入相应的BRAM。 BRAM在写侧装备为72位,而读取设置为144位。在操作期间,仅将96位用作内核权重,即读取为4个权重×3层×8位。初始图画数据从NAP读取到输入FIFO中,该输入FIFO用于将图画存储为一系列行。虽然此输入存储器被列为FIFO,但仍可作为可重复读取的FIFO,因为能够屡次从中读取行。该存储器装备为144位宽,仅运用96位,由两个BRAM72K组成。每个字由4个像素×3层×8位组成。初始化时,将读取满足的行以匹配内核中的行数加上笔直跨步所需的行数。即

Initial Lines read = FILTER_HEIGHT + STRIDE

一旦加载了初始数据和内核,便开端核算。

从输入FIFO中读取榜首条图画行,并读取与内核水平巨细匹配的图画数据像素数量。在读取这些像素时,将读取匹配的内核权重。MLP将这些96位流的每一个乘以12个int8值并累加成果。输入FIFO前进到第二行,重复此进程,直到内核的一切行都与输入图画左上角的恰当像素相乘。在此进程中,MLP堆集了成果;现在,该成果是图画与内核卷积的左上角的2D卷积。该成果以16位成果的方法从MLP输出。重复此进程,输入FIFO跨行超前STRIDE参数设置的像素数(关于当时规划,STRIDE固定为4)。在每个处理周期包含在内时,都会生成另一个成果,直到水平地获取了恰当数量的成果停止。

然后,将输入FIFO下移STRIDE行数,然后重复该进程以生成输入图画中下一组线的卷积成果。当输入FIFO向下移动时,不再需求FIFO中的初始行,因而与MLP核算并行时,将加载下一组用于输入图画的STRIDE行。考虑外部存储源的带宽要求时,能够看到映像和内核仅从内存中读取一次。然后,它们能够从各自的BRAM中从头运用,然后减少了外部存储器带宽的整体担负,其进程参阅图表1。

数据流:多个MLP

MLP的一个明显特点是能够将数据和成果从一个MLP或BRAM级联到同一列中。 MLP_Conv2D通过将MLP及其相关的BRAM放在列组中来运用这些级联途径。在将BRAM加载到内核时,级联途径用于将数据流水线传输到每个BRAM,而且运用BRAM块地址形式挑选要写入内核的BRAM。

在核算进程中,输入的图画数据将在MLP的列中级联,以便每个MLP在其下一个街坊之后的一个周期接纳到图画数据。一起,操控内核读取的BRAM读取地址以一个周期的推迟级联到BRAM列中。这样,每个MLP在其从前的MLP之后一个周期接纳相同的图画数据和相同的内核读取地址。每个MLP的核算差异在于,其相关的BRAM将具有不同的内核数据。成果是一个图画并行地与多个内核卷积。并行卷积的数量称为BATCH。

数据流:核算成果

如前所述,每个MLP为内核和图画部分的每个卷积生成16位成果。

MLP摆放在16列中,因而从该列中生成一个256位字,该字由该列中每个MLP的成果组成。然后将此256位字写入输出NAP。 这种组织导致卷积成果作为同一图画的图层存储在内存中;因而,当三层或RGB存储在单个输入字中时,匹配输入字摆放。

然后,因为能够在完好的256位成果上的16个并行实例中履行激活功用,因而该组织答应将触及的成果并行处理到激活层中。相同,一旦256位成果通过输出NAP写回到存储器中,则能够将成果读回到另一个2D卷积电路中。

1587776024309959.png

图5 MLP_Conv2D布局示意图

布局

在Speedster7t架构中,每个NAP对应32个MLP。该规划通过优化,可运用两个NAP,一个用于读取,一个用于写入,因而能够对应64个MLP。

可是,输入和输出FIFO需求两个BRAM 72K存储块才干创立一个256位宽的组合存储器。因而,这些存储器将耗费64个可用方位中的四个用于数据I / O。

规划被组织为运用与两个NAP相相关的四列MLP。可是,榜首列和最终一列都运用14个MLP,剩余两个MLP方位别离用于输入和输出FIFO。中心两列运用一切16个可用的MLP。在平面图中,各列的摆放方法是使榜首列(底部具有输入FIFO存储器)与NAP相邻,以改进时序。

下面显现了一个实例,即运用了60个MLP(Batch=60)的规划实践布局图(杰出显现了道路):

1587776041929850.png

图6 60个MLP布局图

在全芯片构建中运用40个实例时,尽力使每个实例都运用NAP与内存进行通讯。成果,FMax仍能到达750MHz,并运用掉芯片中的一切80个NAP以及94%的MLP和BRAM72K。

1587776111732138.png

图7 2400个MLP布局图

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/123975.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部