基于CTPN网络的异构加速系统及方法转让专利
申请号 : CN202110090277.8
文献号 : CN112732638B
文献日 : 2022-05-06
发明人 : 蒋剑飞 , 蔡亮 , 郭怡良 , 董峰 , 虞科华 , 陈可
申请人 : 上海交通大学 , 北京爱奇艺科技有限公司
摘要 :
权利要求 :
1.一种基于CTPN网络的异构加速系统,其特征在于,包括CPU端和FPGA端;
所述FPGA端包括第一子图和第二子图,所述CPU端包括第三子图;
所述第一子图包括CTPN网络的CNN部分,第二子图包括CTPN网络的RNN部分,所述第三子图包括CTPN网络的剩余部分;
所述第一子图的CNN部分与第二子图的RNN部分的分隔为CNN网络的CONV/Relu节点,第二子图的RNN部分与第三子图的分隔节点为RNN网络的Reshape_1节点;
所述第一子图和第二子图在FPGA端执行,所述第三子图在CPU端执行;
所述FPGA端的输出作为第三子图的输入;
所述CPU端最终实现网络推断,并得到最终结果。
2.根据权利要求1所述的基于CTPN网络的异构加速系统,其特征在于,所述CNN部分包括数据读取模块、卷积和激活函数计算模块、数据写回模块和池化计算模块,各模块之间通过FIFO连接并完成数据传输。
3.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述数据读取模块包括:采用多重循环展开和乒乓缓冲的方式搬运数据,利用内外部带宽减少外部存储器的访问。
4.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述卷积和激活函数计算模块包括:分别实现卷积和激活函数功能,采用多计算单元并行方式,通过缓冲器累加中间结果的方法提高计算速度,并且核心乘累加部分采用定制算子替换,进一步提高卷积计算的性能。
5.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述数据写回模块包括:采用多任务核心,提高数据写回外部存储器的并行度。
6.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述池化计算模块包括:采用多计算单元并行方式,采用分级大小比较的策略,同一行的数值位于第一级比较,每一行的最大值位于第二级比较,实现每次计算获取九个数最大值的功能,通过配置参数改变池化核大小。
7.根据权利要求1所述的基于CTPN网络的异构加速系统,其特征在于,所述RNN部分包括:LSTM权重读取模块、LSTM计算模块和中间数据调度模块,各模块之间通过FIFO连接,实现流水线执行。
8.根据权利要求7所述的基于CTPN网络的异构加速系统,其特征在于,所述LSTM权重读取模块包括:通过正向反向LSTM的共用减少对外部存储器的重复访问,提高数据提取的效率。
9.根据权利要求8所述的基于CTPN网络的异构加速系统,其特征在于,所述LSTM计算模块包括:接收LSTM权重读取模块通过channel发来的权重,特征图以及bias数据,将计算得到的新的记忆数据和输出数据发送给中间数据调度模块形成闭环,对分块的矩阵乘法在计算过程中实现分块不同精度量化;
所述中间数据调度模块包括:接收LSTM计算模块发送过来的新的记忆数据和输出数据并更新缓存。
10.一种基于CTPN网络的异构加速方法,其特征在于,采用权利要求1‑9中任一种所述的基于CTPN网络的异构加速系统,包括:步骤1:将RPN网络以子图的形式切割出来;
步骤2:调用软件接口对子图形式的RPN网络进行网络推断,得到最终结果,从而在CPU端实现RPN网络。
说明书 :
基于CTPN网络的异构加速系统及方法
技术领域
背景技术
其中CNN用于提取深度特征,RNN用于字符序列特征识别。此网络发挥了CNN与RNN各自的优
点,其中RNN还使用了双向LSTM(BiLSTM)从图片的不同方向来进行文字的识别和推测,使得
文字检测精度大大提高。因为场景文字识别的各种应用场合都要求网络识别推断尽可能快
速,所以对CTPN网络实施硬件加速就显得尤为重要。但是其复杂的网络结构使得硬件加速
由于资源限制而变得不易实现,所以对该网络实现异构加速是一个有效的解决方案。
数据源获取图像数据;使用所述GPU对所述图像数据进行第一处理;所述CPU对经过所述第
一处理的数据进行第二处理,输出目标检测结果;其中,所述第二处理包括非极大值抑制
和/或后处理,所述第一处理为所述神经网络目标检测的计算过程中除所述第二处理之外
的其他处理。
发明内容
分采用定制算子替换,进一步提高卷积计算的性能。
九个数最大值的功能,通过配置参数改变池化核大小。
块形成闭环,对分块的矩阵乘法在计算过程中实现分块不同精度量化;
的性能,本发明具有加速性能好,通用性强和部署方便的优点;
的方式循环交错排列。而输入矩阵xt和ht‑1则在竖直方向拼接,这样可以使得按照正常顺序
计算矩阵乘法时可以尽量少存储中间结果,每算得一组四个中间结果之后直接算得当前次
计算的h结果并写回存储h的buffer,可以实现数据无相关性的完全流水线执行,并且可以
在不影响矩阵乘法并行计算性能情况下大幅度节省FPGA的资源;
矩阵拼接的不同分块数据并不在同一个量级。为了在计算矩阵量化时需要采用分块矩阵分
精度量化,在乘累加的时候不同的矩阵分块采用不同的精度进行累加,可使得在额外开销
很小的情况下大幅减小量化带来的精度下降。
附图说明
具体实施方式
人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明
的保护范围。
代价,对于网络层的功能在执行设备上做了调整,使得FPGA和CPU都更好的加速效果。
能够减少CTPN网络的总体执行时间,取得加速性能的提升。
程可以分为几个不同的部分(在本发明中称为子图)分别在CPU和FPGA中执行。不同的分割
方法对于性能的影响很大,本发明的子图分割和执行方法,有利于提高加速器的性能。
作等。
执行。
中,CNN部分的计算时间。
部分,对其性能影响较大。
现完全流水线执行。
核心乘累加部分可采用定制算子替换,进一步提高卷积计算的性能。上述各模块中,其中写
回模块的逻辑简单重复度高,采用多任务核心,以提高数据写回外部存储器的并行度,其他
模块都为流水线执行的单任务核心。
数最大值的功能。可以通过配置参数改变池化核大小。
CTPN网络中,RNN部分的计算时间。
大,而BiLSTM是RNN的重要组成部分,对整体性能影响也较大。
c以及特征图等),后向中间数据调度模块。所述5个模块之间采用类似FIFO的连接,实现流
水线执行,提高处理性能:
模块分开,所述前向和方向的计算共用权重读取模块。
错重排。
其中在FPGA运行部分可以实现加速和性能提升,对于不适合FPGA运行部分仍然在CPU上运
行。本发明的优化子模块设计(CNN加速器,BiLSTM加速),能够减少子模块(子图)的执行时
间,本发明的子图划分和执行方式能够减少子模块(子图)之间的数据交互开销,这两者结
合能够提升加速性能。
的主机函数和CPU端网络子图实现模块,如附图1所示。
性高,但是复杂性较低的操作。CTPN网络的后半部分的RPN网络以及NMS等操作在FPGA上执
行的并行度并不高而且较为复杂,占用FPGA资源,甚至影响卷积计算的性能。对不同的输入
神经网络,需要确定网络各层在异构加速平台上的执行方式。如果FPGA支持该层的运行则
设置该层为FPGA执行,否则设置为CPU。根据网络中各层在网络模型中的位置和硬件的执行
位置,可以把原网络图分成多个子图,其中每个子图都在同一个设备上执行。
FPGA之间的传输次数。所以对于CTPN网络,需要在FPGA、CPU异构加速器设计上进行优化使
得子图划分方式更好。
部署在FPGA上执行,网络的后半部分RPN网络以及RPN网络、非极大值抑制(NMS)以及网络的
后处理操作被部署在CPU上执行,这些操作耗时较短,数据量较少,适合部署在CPU上执行。
3个子图,最大限度减少了CPU和FPGA之间的传输时间。整个网络运算过程中只有两次CPU和
FPGA的数据交互,对性能的影响已经降到最低。前两个子图都在FPGA上实现加速,两个子图
之间的数据通过FPGA的外部存储器进行交互。其中CTPN网络的VGG特征提取部分在第1个子
图上执行,该子图包含大部分的卷积。RNN序列特征提取部分在第2个子图上执行,其中包含
双向LSTM模块的实现和优化加速。第3个子图在CPU上实现,包含CTPN中除CNN和RNN之外的
部分如RPN网络、非极大值抑制(NMS)以及网络的后处理操作等。
经网络为VGG16网络去除全连接层的部分,共有13层卷积层和四层最大池化层。在最后一层
卷积层之后再进行一次卷积,并将最后的结果输入到BiLSTM部分。该部分网络结构如附图3
所示。
NDRange kernel之外其他kernel均为流水线执行的Single Task Kernel。整体的架构图如
附图4所示。
输入来源和输出目的,不需要重复搬运数据,节约了资源,提高了运算速率,提高了缓存区
的利用效率,如附图5所示。内核每次获取一个覆盖卷积滤波器区域的数据窗口,并将数据
缓存在片上缓冲区中。对于连续的卷积过滤操作,从本地存储器重复加载特征图和权重,从
而避免访问外部存储器。该内核同时利用了OpenCL编程的特性:将任务分为多个工作组,每
个工作组又分为多个工作项,每个工作组、工作项之间都是并行的关系,这样大大提高了运
算性能。同时采用了一些OpenCL编译指令进行优化,通过循环展开操作或忽略循环间相关
来提高并行度。
借助了RTL代码调用IP的方法对其进行了优化,具体优化方法在实例三中阐释。卷积函数中
采取的乘积累加运算有八个输入数据,每次计算四个特征图输入数据与四个权重数据相乘
后,乘积相加的结果。之后这些结果将会被存入队列,进行累加操作,当每个卷积核层的所
有运算结束后,将累加结果与偏置数据相加后输出,便完成了本次卷积运算。这样的运算存
在于多个工作组中,多个乘积累加单元一同工作,使系统的运算性能大大提升,如附图6所
示。之后在该内核中完成ReLU激活后,数据被写入OpenCL channel,供其他模块读取。
存储器的并行度,提高将数据写入外部存储器的执行效率。
作的基于比较函数,该函数可以返回输入数据中的最大值。池化操作同样分为不同的工作
组和工作项并行执行。每个工作项为一个基本的比较单元,可以比较九个数据,得到其中的
最大值。该流程如附图7所示。执行与否取决于CPU主机函数对于该层的配置信息,不执行则
被旁路。
下:卷积核在图像上滑动,卷积核中元素与图像中元素对应相乘后,再将所有的结果相加,
就完成了一次运算。之后卷积核继续滑动,并进行相同的操作。在硬件实现中,本发明采取
多路并行计算卷积的方法,并行组数为64,该参数可以根据具体需求进行调整。在每个并行
组中,会有八个数据被进行处理。这八个数据分别为四个图像数据与四个权重数据。图像数
据分别与权重数据相乘,之后四个不同的乘积被相加起来,就完成了这个并行组的工作。该
流程示意图如附图8所示。
能不能达到最优。在编译OpenCL时,我们可以设置RTL语言作为OpenCL library。OpenCL函
数可以调用RTL编写的模块。在最终综合分配资源时,RTL语言将会完成预设的功能。该操作
流程如附图9所示。首先我们需要编写好Verilog代码,该代码可以实现八个操作数的乘加
功能,之后利用编译器首先将其综合为library文件。在OpenCL代码中对应的函数中引用该
库中模块,编译时将OpenCL kernel与OpenCL library一同编译,最终可以得到所需的可执
行文件。
8bit,输出设为32bit。为了保证计算结果的稳定性和正确性,我们在输入输出处设置寄存
器暂存数据。IP内部采用流水线式的运算方式,当数据输入IP后,两个周期可以在输出处得
到结果。该IP的示意图如附图10所示。
字序列是前后关联的,由于BiLSTM从图片的不同方向来进行文字的识别和推测,大大提高
了CTPN网络文字识别的准确率。
次循环的算法实现方式如附图11所示,遗忘门ft、输入门it,更新门 输出门ot的计算公式
如下:
结果,t‑1为上次循环的结果,下标f则表示遗忘门相关的数据;WC表示更新门权重;bC表示更
新门偏置;下标C表示更新门相关的数据;Wo表示输出门权重;bo表示输出门偏置;下表o表示
输出门相关的数据。
化后的合并重排矩阵如附图12所示。将权重八个矩阵如图水平方向上x和h拼接,竖直方向
上icfo四个门交错排列,xt和ht‑1在竖直方向拼接,这样可以在计算时尽量少存储中间结
果,每算得一组四个itC1tftot之后直接算得当前次计算的h结果并存回存储h的buffer,可
以实现数据无相关性的完全流水线执行,并且可以在不影响矩阵乘法并行计算性能情况下
大幅度节省FPGA的资源。
块。各个模块之间通过channel(类似FIFO)来连接并完成kernel之间的数据传输保证各个
kernel流水线执行。
块,用于同一个时间点的多个CU并行计算。
并累积结果。之后通过OpenCL中自带的可编译为expf函数完成sigmoid和tanh激活函数的
计算,将四个门的一组计算数据it C1t ft ot得出,最后再得到这一组的h结果,并返回给
下文提到的调度模块。
bias从外部存储器中一次性读取并存于buffer中,h和c一直存于buffer中),之后通过
channel接收来自计算模块的计算结果并写回存储循环中间结果(h,c)的buffer。
器的VGG部分,对于权重和层间结果都要进行int8量化。由于卷积中大数对特征提取更为重
要,所以采用最大值映射的方式。量化前后的计算关系式如下,其中sf为量化因子,决定
8bit数的小数点位置:
储,在卷积某一结果累加结束后再将int32的数据根据其sf值转换为int8存储回外部存储
器中。
结果h拼接而成的input矩阵由于x与h的大小差异较大,所以不能在该矩阵中使用相同的sf
值,需要对x和h进行分块分精度int8量化。在矩阵乘法的乘累加中,在累加时需要将x部分
的部分和乘以一个分精度量化系数m,使得矩阵乘法结果无误,计算方法如下所示:
执行的部分,将该部分的计算图分割出来。在执行完整的网络推断时,被截取的计算图所涉
及到的计算任务由CPU执行。本例中的CPU端网络子图切割在Intel OpenVINO 2020R2软件
框架下进行,通过在命令行参数中声明拟截取的子图起始节点与末尾节点,执行Model
Optimizer工具下的mo.py脚本来实现。本例中的RPN网络实现方法基于上述CPU端网络子图
切割方法。具体来说,RPN网络是所实现的CTPN网络的组成部分,可以被看作是CTPN网络的
计算图的子图。通过应用上述CPU端网络子图切割方法将RPN网络以子图的形式切割出来,
并在Intel OpenVINO 2020R2软件框架下调用Inference Engine工具下的IENetwork软件
接口对子图形式的RPN网络进行网络推断,从而在CPU端实现RPN网络。
系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微
控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为
是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结
构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部
件内的结构。
响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相
互组合。