CN110490308A - 加速库的设计方法、终端设备及存储介质 - Google Patents
加速库的设计方法、终端设备及存储介质 Download PDFInfo
- Publication number
- CN110490308A CN110490308A CN201910880303.XA CN201910880303A CN110490308A CN 110490308 A CN110490308 A CN 110490308A CN 201910880303 A CN201910880303 A CN 201910880303A CN 110490308 A CN110490308 A CN 110490308A
- Authority
- CN
- China
- Prior art keywords
- data
- hidden layer
- library
- input
- cnn model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
- G06F16/212—Schema design and management with details for data modelling support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Abstract
本发明适用于计算机技术领域,提供了加速库的设计方法、终端设备及存储介质,所述方法包括:将卷积神经网络CNN模型的数据进行定点化,以采用整型数据表示所述CNN模型的浮点型数据;通过磁盘直接存储器存取DDMA优化方案,将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中;根据载入到所述IDM中的隐层数据,通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,以对所述CNN模型进行优化。本加速库通过DDMA技术和VPU指令对CNN模型进行优化,支持CNN模型的大部分操作,可将本加速库移植到现有前向推理引擎中,使现有前向推理引擎支持DSP优化,以及支持在本加速库的基础上开发新的前向推理框架。
Description
技术领域
本发明属于计算机技术领域,尤其涉及加速库的设计方法、终端设备及存储介质。
背景技术
目前,随着大规模的卷积神经网络(Convolution Neutral Network,CNN)网络对硬件的要求不断提高,CNN前向推理引擎应运而生,如腾讯公司开发的NCNN、阿里巴巴公司开发的MNN以及英伟达公司开发的TensorRT。据统计,在全球范围内,每3部智能手机中就有一部使用了CEVA DSP技术,而现有的所有前向推理引擎都只支持ARM优化,无法支持DSP优化。因此,采用CEVA DSP技术的终端难以使用现有前向推理引擎进行智能图像和视觉处理,这样不利于前向推理引擎的广泛应用。
发明内容
有鉴于此,本发明实施例提供了加速库的设计方法、终端设备及存储介质,以解决现有技术中现有的所有前向推理引擎无法支持DSP优化的问题。
本发明实施例的第一方面提供了一种前向推理引擎加速库的设计方法,基于CEVADSP芯片,方法包括:
将卷积神经网络CNN模型的数据进行定点化,以采用整型数据表示所述CNN模型的浮点型数据;
通过磁盘直接存储器存取(Disk Direct Memory Access,DDMA)优化方案将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中;
通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,以对所述CNN模型进行优化。
本发明实施例的第二方面提供了一种前向推理引擎加速库的设计装置,包括CEVADSP芯片和外部内存,所述CEVA DSP芯片,用于将卷积神经网络CNN模型的数据进行定点化,以采用整型数据表示所述CNN模型的浮点型数据;通过磁盘直接存储器存取DDMA优化方案将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中;通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,以对所述CNN模型进行优化;所述外部内存,用于存储所述隐层数据。
本发明实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述前向推理引擎加速库的设计方法的步骤。
本发明实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述前向推理引擎加速库的设计方法的步骤。
本发明实施例通过将卷积神经网络CNN模型的数据进行定点化,采用DDMA优化技术将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中,并通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,从而得到基于CEVA DSP芯片的CNN前向推理引擎加速库,本加速库通过DDMA技术和VPU指令对CNN模型进行优化,支持CNN模型的大部分操作,可将本加速库移植到现有前向推理引擎中,使现有前向推理引擎支持DSP优化,以及支持在本加速库的基础上开发新的前向推理框架。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的CEVA XM4芯片的组织架构示意图;
图2是本发明实施例提供的前向推理引擎加速库的设计方法的实现流程示意图;
图3是本发明实施例提供的DDMA优化效果与影响因数的关系示意图;
图4是本发明实施例提供的计算输出通道的示意图;
图5是本发明实施例提供的预设的卷积核模板的示意图;
图6是本发明实施例提供的卷积层的滑窗计算的示意图;
图7是本发明实施例提供的全连接层计算的示意图;
图8是本发明实施例提供的前向推理引擎加速库的设计装置的结构示意图;
图9是本发明实施例提供的终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
目前,现有的所有前向推理引擎都只支持ARM优化,无法支持DSP优化。本发明基于CEVA DSP芯片的CNN前向推理引擎加速库可移植到现有前向推理引擎,使现有前向推理引擎支持DSP优化,以及支持在本加速库的基础上开发新的前向推理框架。
图1示出了CEVA XM4芯片的组织架构示意图,上述CEVA DSP芯片以CEVA XM4为例,如图1所示,CEVA XM4包括:2个LSU(Load Store UNit),分别用于加载数据和存储数据,4个标量处理单元(Scale Process Unit,SPU),用于标量计算;2个向量处理单元(VectorProcess Unit,VPU),用于向量运算。其中,VPU采用单指令多数据流(Single InstructionMulti Data,SIMD)架构,向量运算支持一条指令同时完成多个数据的计算。
CEVA XM4还包括40个向量寄存器,每个向量寄存器的存储容量为32byte,即每个向量寄存器可存储32个char类型或16个short类型或8个int类型的数据。
CEVAXM4还包括4块存储容量为128k的片上内存,也就是芯片的内部内存(Internal Data Memory,IDM),片上内存的读写速度极快。将数据在片上内存的内部与内部之间或片上内存与外部内存之间搬运的操作称为磁盘直接存储器访问(Disk DirectMemory Access,DDMA)。
需要说明的是,上述CEVA XM4仅用于举例说明,其不作为限定本发明的CEVA DSP芯片。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
图2示出了本发明一实施例提供的前向推理引擎加速库的设计方法的实现流程示意图。如图2所示,上述方法基于CEVA DSP芯片,包括:
S101,将卷积神经网络CNN模型的数据进行定点化,以采用整型数据表示所述CNN模型的浮点型数据。
在步骤S101中,CNN模型的常见的卷积运算和全连接运算都是基于32位的单精度浮点型数据,但是采用低精度的数据来表示权重和激活值,对CNN模型的性能提升很小。通过将浮点型数据定点化,即采用整型数据来表示浮点型数据,提升计算速度(整型的运算速度比浮点型的运算速度更快)以及使VPU支持更多的模型运算(例如滑窗操作不支持浮点数,而支持整型)。
具体地,将32位的浮点型数据(float)压缩为8位的整型数据(int),从而实现模型压缩和减少模型数据量,以及使得VPU采用的每条指令计算的数据量是浮点型数据的4倍。
S102,通过磁盘直接存储器存取DDMA优化方案,将所述CNN模型的隐层数据载入到内部内存IDM中。
在步骤S102中,上述隐层数据包括但不限于1*1卷积层、普通卷积层、最大池化层、全连接层或Relu层的输入数据,以及1*1卷积层的偏置项。将隐层数据从外部内存(非芯片内部内存)载入到内部内存,使得芯片直接在内部内存中读写隐层数据,而不需要每次读写隐层数据都要到外部内存,从而提高数据的读写速度,进而实现对CNN模型运算的加速。
其中,如图3示出的DDMA优化效果与影响因数的关系示意图,DDMA优化的效果与IDM每次载入的数据量及数据利用率有关。具体地,IDM每次载入的数据量越大,IDM的数据利用率越高,DDMA优化的效果越好,如图3所示,当数据量Data Size只有32bytes时,数据被利用次数Number of Use只有1次;当数据量为120k时,数据被利用次数可达1000次。
S103,通过所述CEVA DSP芯片的VPU指令对所述隐层进行优化。
在步骤S103中,上述VPU基于SIMD架构,VPU通过指令处理数据,每条指令可同时处理多条数据,提高了对CNN模型运算的效率。通过VPU针对1*1卷积层、普通卷积层、最大池化层、全连接层或Relu层等隐层做优化,提高CNN模型运算的速度。
本加速库支持包括标准卷积层、1*1卷积层、2*2最大池化层、全局最大池化层、Depthwise卷积层、全连接层和relu激活函数的计算,可满足大部分CNN模型的部署需求;本加速库可通过纯c语言开发,而不需要依赖第三方计算库;本加速库可移植到NCNN、MNN等广泛使用的前向推理引擎,弥补NCNN、MNN框架在DSP优化上的缺失;以及可在本加速库的基础上开发新的前向推理引擎。
在图2示出的实施例的基础上,上述步骤S102具体包括:
获取所述IDM能够载入的最大输入通道数;判断所述最大输入通道数是否大于所述CNN模型的输入总通道数;若是,则将所述输入总通道数对应的所有输入通道的隐层数据载入到所述IDM中。
本实施例中,由于DDMA队列管理需要资源开销,如果每次载入到IDM中的数据量太少,则数据的利用率低,最终导致没有加速效果,因此将尽可能多的数据载入每个IDM(如CEVA XM4有4块IDM)中,以提高数据加载量。每个IDM有多个输入通道,每个输入通道可存储多个数据;当IDM的最大输入通道数大于CNN模型数据对应的输入总通道数时,说明IDM可载入的数据量大于当前CNN模型的数据量,从而一次性将全部隐层数据输入到IDM中。
进一步地,当最大输入通道数不大于输入总通道数,则将向IDM载入所述最大输入通道数对应数据量的隐层数据,将剩余的隐层数据载入到其他IDM中。
在图2示出的实施例的基础上,上述步骤S103具体包括:
通过所述VPU采用采用多个输出通道同时对所述隐层数据进行计算。
在本实施例中,VPU可通过指令采用多个输出通道同时对所述隐层数据进行计算,指令为VPU处理数据的指令,如vcmpmov指令、vdeinterleave指令以及操作向量寄存器的vselect指令等类型的指令。应理解,以上具体指令仅用于举例说明,不作为限定本申请的具体实现方式。
由于对一个输出通道的隐层数据计算后,将隐层数据存储至外部内存中,而对下一个输出通道的隐层数据进行计算时,需要重新将隐层数据从外部内存载入到IDM,这样载入到IDM的数据的利用率很低,DDMA优化的效果并不突出,因此为了提高IDM中的数据的利用率,如图4所示的计算输出通道的示意图,INPUT为输入通道,FILTER为卷积核,OUTPUT为输出通道。如图4的箭头所示,一个输入通道INPUT的输入数据同时被多个输出通道OUTPUT(应理解,图4仅示出部分输出通道)采用对应数量的卷积核FLITER进行卷积滑窗计算。对IDM的输入通道的隐层数据采用多个输出通道进行计算,从而提高IDM的数据利用率和处理效率。
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为1*1卷积层,上述步骤S103,包括:
通过所述VPU采用int8数据类型的指令,将int类型的偏置项bias赋值给卷积输出;其中,每条所述int8数据类型的指令可复制8个int类型的所述bias。
上述偏置项bias为上述隐层数据。卷积操作的第一步是将bias赋值给输出,一般采用暴力遍历的方法,但遍历过程比较耗时。而本实施例通过CEVA DSP指令中的int8数据类型,每条指令复制8个int数据类型的数据,从而提高赋值速度,使得最终输出数初始化的速度提升4倍。
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为1*1卷积层,上述步骤S103,包括:
对载入所述IDM中的所述输入数据进行计算,得到输出数据,并将所述输出数据存储至外部内存中;其中,每次计算第一数据量的输入数据;当载入到所述IDM中的所述输入数据中剩余的数据量小于所述第一数据量时,通过预设指令将剩余数据量的所述输入数据计算后得到的输出数据存储至所述外部内存中。
在本实施例中,将所述输出数据存储至外部内存中包括:先将输出数据存储至内部内存,再从内部内存存储至外部内存。VPU可通过指令对载入所述IDM中的所述输入数据进行计算,每条指令可处理第一数据量(如16位)的输入数据,但经过多条VPU指令处理输入数据后,最终剩余的输入数据可能存在不足16位的情况,此时一般采用SPU循环遍历,而本实施例采用VPU,在输入数据计算完成后从寄存器存储到内存的过程进行一些处理,实现VPU加速。
可选地,将对所述剩余的输入数据进行计算得到的输出数据分为低n位的输出数据和高m位输出数据,其中所述n为所述输入数据剩余的数据量,所述n与m之和为第一数据量;
通过所述预设指令只将所述低n位的输出数据存储至所述外部内存中。
在本实施例中,剩余的输入数据依旧以第一数据量进行计算,其中不足第一数据量的部分用空数据填充,则得到的输出数据也是第一数据量,此时输出数据包含剩余的输入数据计算得到的输出数据和用于填充的空数据,而空数据是无效的,所以不保存空数据。
例如,用Reminder表示剩余的输入数据的数据量(大于0,小于16),Reminder分为高8位和低8位,并分别将计算得到的输出数据保存至寄存器的output_int8_hi和output_int8_lo,当Reminder大于8时,将低8位的输出数据保存至外部内存中,此时Reminder减8,则剩余的高8位的输出数据不足8位数,则通过预设指令vst(output_int8_hi),(int8*)output_int16+1,((1<<reminder)-1)),将寄存器中output_int8_hi的低Reminder位存储至外部内存中,最终使得1*1卷积层的核心循环性能提高1.3倍。应理解,以上预设指令仅用于举例说明,不作为限定本申请的具体实现方式。
其中,当Reminder小于8时,则output_int8_hi中的输出数据为空,output_int8_lo中的输出数据的数据量不足8位,则将寄存器中output_int8_lo的低Reminder位存储至外部内存中。
可选地,上述步骤S102,包括:通过所述DDMA优化方案,将所述1*1卷积层的卷积核数据载入到所述IDM中。
对1*1卷积层的输入数据进行计算,即为通过卷积核数据对输入数据进行滑窗计算,所以将卷积核数据载入到IDM中,减少从外部内存读取卷积核数据的时间,否则每次滑窗计算时,等待从外部内存中读取卷积核数据的时间是很漫长的。
其中,卷积核的大小对CNN模型加速的效果不同。例如,卷积层的输入数据为150*150*32,卷积核个数为64,则卷积核数据大小为32*64byte,由于DDMA优化的操作本身也需要消耗计算资源,优化效果并没提升,反而下降;再例如,卷积层的输入数据为10*10*1024,卷积核个数为1024,则卷积核数据大小为1024*1024=1M,其计算速度比卷积核数据不载入IDM快3倍,等待时长占总时长的百分比降低为405704/79897688*100%=0.5%,等待总时长比卷积核数据不载入IDM减少393倍。
需要说明的是,由于在实际应用中的输入数据的数据量都比较大,并且对卷积核数据的大小进行计算也是需要占耗计算资源的,所以不对卷积核数据的大小进行计算,不管卷积核数据多大或多小,均将卷积核数据载入到IDM中。
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为卷积层,上述步骤S103,包括:
根据预设的卷积核模板数据,对所述卷积层的输入数据进行滑窗计算;根据预设的卷积核存储顺序,将所述滑窗计算的结果累加到所述向量寄存器中。
在本实施例中,卷积层的滑窗计算的结果累加到寄存器中。由于CEVA DSP只支持2*2卷积核和4*4卷积核的滑窗计算,例如,以4x4卷积核为例,介绍在VPU内部,滑窗计算是如何实现加速的。
1.vswmac5v0.s16,v1.s16,v16.s16,r0.ui,vacc0.i8;r0[20:16]=0
2.vswmac5v2.s16,v3.s16,v16.s16,r1.ui,vacc0.i8;r1[20:16]=4
3.vswmac5v4.s16,v5.s16,v16.s16,r2.ui,vacc0.i8;r2[20:16]=8
4.vswmac5v6.s16,v7.s16,v16.s16,r3.ui,vacc0.i8;r3[20:16]=12
r为标量寄存器,v为向量寄存器,vacc为累加向量寄存器。r保存的是控制数D。以上四条指令分别将D的20到16位置计算为0,4,8,12,其表示卷积核分别从0,4,8,12的位置开始计算,而D的第13到8位都为0,这表示滑窗操作从{v0,v1}的0偏移位置开始计算,并且将8个int计算结果保存到vacc寄存器中。经过这四条指令的计算,可求出了前四行,每行前8个数的4x4卷积计算的结果。
而针对其他大小的卷积核,本申请可基于CEVA DSP中的vspmac指令,采用预设卷积核模板对输入数据进行滑窗计算,其中卷积核由多个卷积核模板组成。具体地,图5示出了预设卷积核模板的示意图,图6示出了预设的卷积核模板对输入数据的滑窗计算的示意图。如图5,预设卷积核模板为2*4个格子的卷积核,每次最多可任意选择4个格子作为滑窗计算的模板。其中,在CEVA DSP指令中的vspmac与vswmac5有以下区别:vspmac中的vA和vB寄存器存储的是相邻两行的数据,而不是同一行连续的两块数据;vspmac中的rD的第31位到第24位的数据用于表示模板的形状。
如图6,5*5卷积核对输入数据进行一次滑窗计算时,需要通过按照预设的存储顺序的若干个预设卷积核模板进行计算,得到一次滑窗计算的结果(即图6右边所示的5*5的方框),将所有滑窗计算的结果累加到向量寄存器中,完成滑窗计算,从而解决了CEVA DSP只能支持2*2卷积核和4*4卷积核,而无法支持其他卷积核的滑窗计算的问题。
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为卷积层,上述步骤S103,包括:
将一行所述卷积层的输入数据的头部指针向前移动i个位置;将所述头部指针之后的输入数据写入到所述向量寄存器中;其中,每个所述向量寄存器可写入j个位置的数据,i小于j;将所述向量寄存器的前i个位置的数据置0,以及将所述向量寄存器中所述一行卷积层的输入数据的的尾部之后的位置的数据置0,以对所述输入数据进行padding操作。
在传统方式中,通过将需要padding(填充)的数据复制到新的内存中,然后在数据前后置0填充即可,但是由于padding过程的数据量可能很大,这样需要花费大量时间用于复制数据,导致padding效率很低,不利于CNN前向推理引擎的加速;或者只将需要padding(填充)的数据的头部14位数和尾部14位数复制到新的内存,中间的数据保持不变,这样对于比较长的数据,性能有所提升,但仍然无法达到最佳。而本实施例,可通过VPU采用指令(如vselect指令)在寄存器中进行padding。
具体地,每个向量寄存器可写入16个位置的数据,例如存储尾部数据的向量寄存器的数据为:
inC=0001111111111111=0x1fff,inA=
25 | 26 | 27 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
则padding后,inA=vselect(inA,0,inC)=
25 | 26 | 27 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
例如存储尾部数据的向量寄存器的数据为:
inC=1100000000000000=0xc000,inB=
26 | 27 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
则padding后,inB=vselect(inB,0,inC)=
0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为卷积层,上述步骤S103,包括:
判断所述卷积层的输入数据是否已经进行padding操作;若否,则通过所述VPU采用第一预设指令,将在向量寄存器中的所述输入数据存储至外部内存;若是,则通过所述VPU采用第二预设指令,将在所述向量寄存器中的所述输入数据存储至外部内存。
上述第一预设指令包括根据卷积核大小计算出输入数据经过卷积核多次滑窗后(其中每次滑窗操作后输入数据量的数据量都减少16位),若剩余的输入数据的数据量大于0,则将在所述向量寄存器中的输入数据存储至外部数据,如第一预设指令(reminder为剩余的输入数据的数据量,kernel_size为卷积核大小)为:
loop=(cols+1-kernel_size)>>5;
reminder=(cols+1-kernel_size)&0x1F;
If(reminder>=16){process…reminder-=16;}
If(reminder>0){process…只保存寄存器中低reminder位到内存中}。
上述第二预设指令包括根据卷积核大小和padding大小计算出输入数据经过卷积核多次滑窗后(其中每次滑窗操作后输入数据量的数据量都减少16位),若剩余的输入数据的数据量大于0,且剩余的输入数据的数据量与填充的边界大小之和大于16,则将在所述向量寄存器中的输入数据存储至外部数据,如第二预设指令(reminder为剩余的输入数据的数据量,padding_size为填充的边界大小)中存储输入数据的指令:
If(reminder>0){process…reminder_min=MIN(reminder+padding_size,16);只保存寄存器中低reminder_min位到内存中}
If(reminder+padding_size>16){process…reminder=padding_size-(16-reminder);只保存寄存器中低reminder位到内存中}。应理解,以上第一预设指令和第二预设指令仅用于举例说明,不作为限定本申请的具体实现方式。
进一步地,上述隐层为标准卷积层,标准卷积计算为三维卷积,而Depthwise卷积为二维卷积,其中Depthwise卷积为普通卷积中的一种,因此可利用Depthwise卷积层的优化成果,将而二维卷积的计算结果进行累加,从而得到三维卷积的优化结果。
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为最大池化层,上述步骤S103,包括:
选取所述最大池化层的输入数据中相邻两行的大值,并根据所述大值生成向量,其中所述大值为输入数据从大到小排序中靠前的预设数量的值;分别依次选取所述向量中的奇数位置和偶数位置的值,并根据选取的所述奇数位置的值和所述偶数位置的值,生成两个新的向量;选取所述两个新的向量中的大值作为最大池化层的输出。
最大池化层实现降采样,减少CNN模型过拟合的风险。在本实施例中,采用大小为2*2,步长为2的最大池化层。通过两次选取大值,从而减少CNN模型的数据量。
在图2示出的实施例的基础上,本实施例提供另一种前向推理引擎加速库的设计方法,具体地,上述隐层为全连接层,上述步骤S103,包括:
根据预设的全连接层与1*1卷积层的对应关系,对所述全连接层的权重值与偏置项bias进行计算,以对所述全连接层进行优化;其中,所述权重值对应所述1*1卷积层的输入。
在本实施例中,将全连接层退化为只有一个卷积核的conv1*1,则全连接层的输入INPUT相当于1*1卷积层的卷积核FILTER,全连接层的权重W相当于1*1卷积层的输入INPUT,全连接层的W中的一列相当于1*1卷积层的输入INPUT的一个通道。
图7示出了全连接层计算的示意图,INPUT为全连接层的输入,W为全连接层的权重,BIAS为偏置项,OUTPUT为全连接层的输出。通过利用1*1卷积层的优化成果,修改了bias的处理方式,从而完成对全连接层的优化和加速。
在一实施例中,上述隐层为Relu层,可通过VPU采用vcmpmov指令将向量和标量进行一一比较,并取出较大的数组成一个新的向量,而将对应的标量置0,从而完成relu激活函数的计算,实现relu层的加速。
图8示出了本发明实施例一种前向推理引擎加速库的设计装置8,包括CEVA DSP芯片81和外部内存82,所述CEVA DSP芯片81,用于将卷积神经网络CNN模型的数据进行定点化,以采用整型数据表示所述CNN模型的浮点型数据;通过磁盘直接存储器存取DDMA优化方案将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中;通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,以对所述CNN模型进行优化;
所述外部内存82,用于存储所述隐层数据。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置,电路和器件的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
图9是本发明一实施例提供的终端设备的示意图。如图9所示,该实施例的终端设备9包括:处理器90、存储器91以及存储在所述存储器91中并可在所述处理器90上运行的计算机程序92,例如将卷积神经网络CNN模型的数据进行定点化的程序。所述处理器90执行所述计算机程序92时实现上述各个前向推理引擎加速库的设计方法实施例中的步骤,例如图1所示的步骤S101至S103。
所述终端设备9可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器90、存储器91。本领域技术人员可以理解,图9仅仅是终端设备9的示例,并不构成对终端设备9的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器90可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器91可以是所述终端设备9的内部存储单元,例如终端设备9的硬盘或内存。所述存储器91也可以是所述终端设备9的外部存储设备,例如所述终端设备9上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器91还可以既包括所述终端设备9的内部存储单元也包括外部存储设备。所述存储器91用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器91还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种前向推理引擎加速库的设计方法,基于CEVA DSP芯片,其特征在于,所述方法包括:
将卷积神经网络CNN模型的数据进行定点化,以采用整型数据表示所述CNN模型的浮点型数据;
通过磁盘直接存储器存取DDMA优化方案,将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中;
通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,以对所述CNN模型进行优化。
2.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述通过磁盘直接存储器存取DDMA优化方案,将所述CNN模型的隐层对应的隐层数据载入到内部内存IDM中,包括:
获取所述IDM能够载入的最大输入通道数;
判断所述最大输入通道数是否大于所述CNN模型的输入总通道数;
若是,则将所述输入总通道数对应的所有输入通道的隐层数据载入到所述IDM中。
3.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,包括:
通过所述VPU采用多个输出通道同时对所述隐层数据进行计算。
4.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述隐层为1*1卷积层时,通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,还包括:
对载入所述IDM中的所述1*1卷积层的输入数据进行计算,得到输出数据,并将所述输出数据存储至外部内存中;其中,每次计算第一数据量的所述输入数据;
当载入到所述IDM中的所述输入数据中剩余的数据量小于所述第一数据量时,通过预设指令将剩余数据量的所述输入数据计算后得到的输出数据存储至所述外部内存中。
5.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述隐层为卷积层时,所述通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,包括:
根据预设的卷积核模板数据,对所述卷积层的输入数据进行滑窗计算;
根据预设的卷积核存储顺序,将所述滑窗计算的结果累加到所述向量寄存器中。
6.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述隐层为卷积层时,所述通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,包括:
将一行所述卷积层的输入数据的头部指针向前移动i个位置;
将所述头部指针之后的输入数据写入到所述向量寄存器中;其中,每个所述向量寄存器可写入j个位置的数据,i小于j;
将所述向量寄存器的前i个位置的数据置0,以及将所述向量寄存器中所述一行卷积层的输入数据的尾部之后的位置的数据置0,以对所述输入数据进行padding操作。
7.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述隐层为卷积层时,所述通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,包括:
判断所述卷积层的输入数据是否已经进行padding操作;
若否,则通过所述VPU采用第一预设指令,将在向量寄存器中的所述输入数据存储至外部内存;
若是,则通过所述VPU采用第二预设指令,将在所述向量寄存器中的所述输入数据存储至外部内存。
8.根据权利要求1所述的前向推理引擎加速库的设计方法,其特征在于,所述隐层为最大池化层时,所述通过所述CEVA DSP芯片的向量处理单元VPU对所述隐层数据进行计算,包括:
选取所述最大池化层的输入数据中相邻两行的大值,并根据所述大值生成向量,其中所述大值为所述输入数据从大到小排序中靠前的预设数量的值;
分别依次选取所述向量中的奇数位置和偶数位置的值,并根据选取的所述奇数位置的值和所述偶数位置的值,生成两个新的向量;
选取所述两个新的向量中的大值作为最大池化层的输出。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910880303.XA CN110490308B (zh) | 2019-09-16 | 2019-09-16 | 加速库的设计方法、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910880303.XA CN110490308B (zh) | 2019-09-16 | 2019-09-16 | 加速库的设计方法、终端设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110490308A true CN110490308A (zh) | 2019-11-22 |
CN110490308B CN110490308B (zh) | 2022-02-18 |
Family
ID=68558238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910880303.XA Active CN110490308B (zh) | 2019-09-16 | 2019-09-16 | 加速库的设计方法、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110490308B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111144571A (zh) * | 2019-12-20 | 2020-05-12 | 深圳市金溢科技股份有限公司 | 一种深度学习推理运算方法及中间件 |
CN111858036A (zh) * | 2020-06-29 | 2020-10-30 | 浪潮电子信息产业股份有限公司 | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980582A (zh) * | 2016-01-18 | 2017-07-25 | 中兴通讯股份有限公司 | 数据处理方法和装置 |
US20180046913A1 (en) * | 2016-08-12 | 2018-02-15 | DeePhi Technology Co., Ltd. | Combining cpu and special accelerator for implementing an artificial neural network |
CN108665059A (zh) * | 2018-05-22 | 2018-10-16 | 中国科学技术大学苏州研究院 | 基于现场可编程门阵列的卷积神经网络加速系统 |
CN108985450A (zh) * | 2018-06-28 | 2018-12-11 | 中国人民解放军国防科技大学 | 面向向量处理器的卷积神经网络运算向量化方法 |
CN109508782A (zh) * | 2018-10-09 | 2019-03-22 | 福州瑞芯微电子股份有限公司 | 基于神经网络深度学习的加速电路和方法 |
US20190102671A1 (en) * | 2017-09-29 | 2019-04-04 | Intel Corporation | Inner product convolutional neural network accelerator |
CN110084739A (zh) * | 2019-03-28 | 2019-08-02 | 东南大学 | 一种基于cnn的画质增强算法的fpga并行加速系统 |
CN110197111A (zh) * | 2018-02-27 | 2019-09-03 | 意法半导体国际有限公司 | 用于深度学习引擎的加速单元 |
-
2019
- 2019-09-16 CN CN201910880303.XA patent/CN110490308B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980582A (zh) * | 2016-01-18 | 2017-07-25 | 中兴通讯股份有限公司 | 数据处理方法和装置 |
US20180046913A1 (en) * | 2016-08-12 | 2018-02-15 | DeePhi Technology Co., Ltd. | Combining cpu and special accelerator for implementing an artificial neural network |
US20190102671A1 (en) * | 2017-09-29 | 2019-04-04 | Intel Corporation | Inner product convolutional neural network accelerator |
CN110197111A (zh) * | 2018-02-27 | 2019-09-03 | 意法半导体国际有限公司 | 用于深度学习引擎的加速单元 |
CN108665059A (zh) * | 2018-05-22 | 2018-10-16 | 中国科学技术大学苏州研究院 | 基于现场可编程门阵列的卷积神经网络加速系统 |
CN108985450A (zh) * | 2018-06-28 | 2018-12-11 | 中国人民解放军国防科技大学 | 面向向量处理器的卷积神经网络运算向量化方法 |
CN109508782A (zh) * | 2018-10-09 | 2019-03-22 | 福州瑞芯微电子股份有限公司 | 基于神经网络深度学习的加速电路和方法 |
CN110084739A (zh) * | 2019-03-28 | 2019-08-02 | 东南大学 | 一种基于cnn的画质增强算法的fpga并行加速系统 |
Non-Patent Citations (1)
Title |
---|
王慧丽 等: "基于通用向量DSP的深度学习硬件加速技术", 《中国科学:信息科学》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111144571A (zh) * | 2019-12-20 | 2020-05-12 | 深圳市金溢科技股份有限公司 | 一种深度学习推理运算方法及中间件 |
CN111144571B (zh) * | 2019-12-20 | 2023-09-05 | 深圳市金溢科技股份有限公司 | 一种深度学习推理运算方法及中间件 |
CN111858036A (zh) * | 2020-06-29 | 2020-10-30 | 浪潮电子信息产业股份有限公司 | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 |
CN111858036B (zh) * | 2020-06-29 | 2022-06-10 | 浪潮电子信息产业股份有限公司 | 基于FPGA设备的TensorFlow系统加速方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110490308B (zh) | 2022-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN207895435U (zh) | 神经网络计算模组 | |
CN107578095B (zh) | 神经网络计算装置及包含该计算装置的处理器 | |
CN108874744A (zh) | 矩阵乘积累加运算的广义加速 | |
CN104050632B (zh) | 用于多样本像素数据处理的方法和系统 | |
JP2020074099A (ja) | 処理装置と処理方法 | |
CN107833176A (zh) | 一种信息处理方法及相关产品 | |
CN107563953A (zh) | 具有二维执行通道阵列和二维移位寄存器的图像处理器的区块操作 | |
CN108733348B (zh) | 融合向量乘法器和使用其进行运算的方法 | |
CN107563512A (zh) | 一种数据处理方法、装置以及存储介质 | |
CN106462393A (zh) | 用于统一应用编程接口和模型的系统和方法 | |
CN110415157A (zh) | 一种矩阵乘法的计算方法及装置 | |
Wu et al. | A flexible and efficient FPGA accelerator for various large-scale and lightweight CNNs | |
CN107957976A (zh) | 一种计算方法及相关产品 | |
CN107563954A (zh) | 具有二维执行通道阵列和二维移位寄存器的图像处理器上区块操作的核处理 | |
CN107533460A (zh) | 紧缩有限冲激响应(fir)滤波处理器、方法、系统和指令 | |
CN110276447A (zh) | 一种计算装置及方法 | |
CN103956991B (zh) | 一种基于cpu/gpu异构平台的fir滤波并行实现方法 | |
CN110490308A (zh) | 加速库的设计方法、终端设备及存储介质 | |
CN112686379A (zh) | 集成电路装置、电子设备、板卡和计算方法 | |
CN107402905A (zh) | 基于神经网络的计算方法及装置 | |
CN107957977A (zh) | 一种计算方法及相关产品 | |
CN112051981B (zh) | 一种数据流水线计算路径结构及单线程数据流水线系统 | |
CN109472734A (zh) | 一种基于fpga的目标检测网络及其实现方法 | |
CN106484532A (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
CN108960415A (zh) | 处理装置和处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |