CN111427895B - 一种基于两段式缓存的神经网络推理加速方法 - Google Patents

一种基于两段式缓存的神经网络推理加速方法 Download PDF

Info

Publication number
CN111427895B
CN111427895B CN202010251314.4A CN202010251314A CN111427895B CN 111427895 B CN111427895 B CN 111427895B CN 202010251314 A CN202010251314 A CN 202010251314A CN 111427895 B CN111427895 B CN 111427895B
Authority
CN
China
Prior art keywords
cache
dyn
sta
neural network
index
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.)
Active
Application number
CN202010251314.4A
Other languages
English (en)
Other versions
CN111427895A (zh
Inventor
伍卫国
康益菲
王今雨
冯雅琦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN202010251314.4A priority Critical patent/CN111427895B/zh
Publication of CN111427895A publication Critical patent/CN111427895A/zh
Application granted granted Critical
Publication of CN111427895B publication Critical patent/CN111427895B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种基于两段式缓存的神经网络推理加速方法,统计各个输入张量在数据集中出现的次数,根据出现的次数采用降序对各个输入张量进行排序,最后输出排序完成的输入张量排序数据集,构造静态缓存的数据结构,确定静态缓存的存入和读取方法;确定动态缓存中存储的基础单元,确定动态缓存的缓存替换方法;在神经网络被部署之前构建完成静态缓存,在神经网络部署时动态缓存为空,在神经网络运行中根据缓存替换方法存入、换出输入输出对,完成基于两段式缓存的神经网络推理加速。本发明充分考虑了神经网络推理过程中输入数据的特征,针对性地设计了两段式缓存算法和数据结构,避免了不必要的计算,降低了推理耗时,减少了服务成本。

Description

一种基于两段式缓存的神经网络推理加速方法
技术领域
本发明属于神经网络推理计算技术领域,具体涉及一种基于两段式缓存的神经网络推理加速方法。
背景技术
近年来随着技术的发展,硬件的计算能力不断提升,而互联网业务的蓬勃发展,也使得数据量呈爆炸式增长趋势。计算能力的提高和数据量的增多促进了机器学习的发展,尤其是人工神经网络的快速发展。
神经网络需要训练才能学习到所需的模式,一般经过上万乃至数百万次在专家细致地控制下的训练步之后会达到近似最优。
训练完成的神经网络会被部署到生产环境中。生产环境中的神经网络运算过程通常被称为推理,这个过程只需要前向传播。推理过程中神经网络会接受一个输入张量,经过网络内部的运算,产生一个输出张量。
神经网络的性能非常优异,在图像识别,自然语言翻译等领域取得了目前最好的成绩。但是目前性能优异的网络其架构一般都非常庞大,含有几兆字节乃至几十兆字节的参数。神经网络的推理过程也是以浮点数运算为主,导致所需的运算量十分巨大。
针对计算量过大而导致的推理效率过低问题,通常的加速方式有:剪枝,去除神经网络中不重要的连接,从而减少计算量;量化,通过把神经网络中各项参数所占用的比特数减少,比如从64位比特表示的整数类型变换为8位比特表示的整数类型,从而减少计算量;蒸馏,训练一个较小的网络来模仿现有网络,然后使用较小的网络推理,从而减少计算量。
以上各种方式都是针对网络结构本身做出改变或者训练一个新的网络。但是随着神经网络的发展,神经网络模型趋向于黑盒化,掌握并修改其结构并非易事。而且以上的优化是从纯神经网络学科角度出发的,没有考虑到计算机体系结构的特点。
缓存在计算机体系结构中非常常见。计算机中存储器的造价与容量成正比,也与读写速度成正比。这就导致了受限于成本因素,存储器的容量和读写速度是成反比的。容量大的存储器读写速度慢,读写速度快的存储器容量小。计算机处理器的处理速度一般是非常快的,为了减少处理过程中的I/O等待,倾向于使用读写速度快的存储器,但是一般我们又有大数据量存储的需求。因此,计算机发展出了多级存储器的架构。每一级存储器比下一级存储器都容量小,但是读写速度快。处理器只与最上级存储器进行交互,当最上级存储器中不含有处理器所需内容时,再依次向下查找,把所需内容缓存入最上级存储器,以供处理器处理。当数据不再被需要时,数据被写回下层存储器。具体的数据存取方法被称为缓存替换方法。
发明内容
本发明所要解决的技术问题在于针对上述现有技术中的不足,提供一种基于两段式缓存的神经网络推理加速方法,通过使用两段式缓存加速了神经网络的推理过程,减少了推理的耗时,降低了服务成本。
本发明采用以下技术方案:
一种基于两段式缓存的神经网络推理加速方法,其特征在于,包括以下步骤:
S1、统计各个输入张量在数据集中出现的次数,根据出现的次数采用降序对各个输入张量进行排序,最后输出排序完成的输入张量排序数据集Ssorted,构造静态缓存Dsta的数据结构,确定静态缓存Dsta的存入和读取方法;
S2、确定动态缓存Ddyn中存储的基础单元ddyn,确定动态缓存Ddyn的缓存替换方法;
S3、在神经网络被部署之前构建完成静态缓存Dsta,在神经网络部署时动态缓存Ddyn为空,在神经网络运行中根据缓存替换方法存入、换出输入输出对,完成基于两段式缓存的神经网络推理加速。
具体的,步骤S1中,静态缓存Dsta的大小定义为Lsta,计算出静态缓存存储n个dsta,从输入张量排序数据集Ssorted中选出前n个输入,通过模型计算得到对应的输出构成n个数据;然后使用CacheUnchangeable_set方法将n个数组存储到静态缓存中,构造完成静态缓存表。
进一步的,静态缓存Dsta由数组和单链表构成,数组长LA;数组的每一个元素上存储一个以dsta为元素的链表,dsta的数据结构为:
dsta{
din,
dout,
pointer->next dsta
}
其中,din是网络的输入张量,dout是网络的输出张量,pointer是一个指针,指向另外一dsta个;每个dsta的大小为Ldsta静态缓存;Dsta是由数组和单链表构成的,数组长LA;数组的每一个元素上存储一个以dsta为元素的链表。
进一步的,静态缓存Dsta的存入方法具体为:
S1011、计算输入张量的哈希值Hash(new_dsta.d_in);
S1012、令哈希值Hash(new_dsta.d_in)对LA取余得到应存入的数组索引i;
S1013、检查数组索引i处是否已存在元素;
S1014、如果不存在,在数组索引i处存入new_dsta
S1015、如果存在,根据数组索引i处元素dsta的pointer,向下遍历寻找链表的尾部,将链表尾部元素dsta的Pointer指向new_dsta,即dsta.pointer→new_dsta
进一步的,静态缓存Dsta的读取方法具体为:
S1021、计算输入张量的哈希值Hash(xin);
S1022、令哈希值Hash(xin)对LA取余得到应存入的数组索引i;
S1023、检查数组索引i处是否已存在元素;
S1024、如果不存在,缓存表中不存在这个xin值对应的元素
Figure BDA0002435591460000041
返回null,方法结束;
S1025、如果存在,转到步骤S1026;
S1026、检查索引i对应的链表的第一项
Figure BDA0002435591460000042
是否与xin一致;
S1027、如果一致,返回dsta.dout,方法结束;
S1028、如果不一致,根据dsta.pointer找到链表的下一项,继续重复判断,如果存在一致,转到步骤S1027;如果直至链表尾部也不存在一致,转到步骤S1029;
S1029、缓存中不存在这个xin值对应的元素,返回null,方法结束。
具体的,步骤S2中,动态缓存Ddyn由数组和单链表构成的,数组长LA;数组的每一个元素上存储一个以ddyn为元素的链表,动态缓存中存储的基础单元ddyn其结构为:
Figure BDA0002435591460000051
其中,din是网络的输入张量,dout是网络的输出张量;index是ddyn的序号;ddyn.index在动态缓存全生命周期中随ddyn产生而自增,即全局第一个ddyn的index为1,全局第二个ddyn的index为2,ddyn.index在动态缓存全生命周期中全局唯一;usedTimes是此Ddyn被读取的次数;pointer是一个指针,指向另外一个ddyn;每个ddyn的大小为Lddyn
进一步的,动态缓存Ddyn的存入方法具体为:
S2011、检查缓存Ddyn是否已满;
S2012、如果步骤S2011已满,寻找TimeUsed最小的ddyn,如果存在多个,则选择Index最小的ddyn,将它移除,转到步骤S2014;
S2013、如果步骤S2011未满,转到步骤S2014;
S2014、计算输入张量的哈希值Hash(new_ddyn.din);
S2015、令哈希值Hash(new_ddyn.din)对LA取余得到应存入的数组索引i;
S2016、检查数组索引i处是否已存在元素;
S2017、如果不存在,在数组索引i处存入new_ddyn
S2018、如果存在,根据数组索引i处已有元素的pointer的向下遍历寻找链表的尾部,将链表末端元素ddyn的Pointer指向new_ddyn
进一步的,动态缓存Ddyn的读取方法为:
S2021、计算输入张量的哈希值Hash(xin);
S2022、令Hash(xin)对LA取余得到应存入的数组索引i;
S2023、检查数组索引i处是否已存在元素;
S2024、如果不存在,说明缓存表中不存在这个xin值对应的元素ddyn,返回null,方法结束;
S2025、如果存在,转到步骤S2026;
S2026、检查数组索引i处链表第一项ddyn.din是否与xin一致;
S2027、如果一致,返回ddyn.dout,并令ddyn.usedTimes=ddyn.usedTimes+1;
S2028、如果不一致,根据ddynpointer找到链表的下一项,继续重复判断,如果存在一致的转到步骤S2027,如果直至链表尾部都不存在一致的,转到步骤S2029;
S2029、缓存中不存在这个xin值对应的元素ddyn,返回null,方法结束。
具体的,步骤S3具体为:
S301、检查静态缓存中是否存在输入张量xin对应的输出张量
Figure BDA0002435591460000061
具体为:
Figure BDA0002435591460000062
S302、如果
Figure BDA0002435591460000063
不为null,则
Figure BDA0002435591460000064
为结果,方法结束;
S303、如果
Figure BDA0002435591460000065
为null,转到步骤S304;
S304、检查动态缓存中是否存在输入张量xin对应的输出张量
Figure BDA0002435591460000066
具体为:
Figure BDA0002435591460000071
S305、如果
Figure BDA0002435591460000072
不为null,则
Figure BDA0002435591460000073
为结果,方法结束;
S306、如果
Figure BDA0002435591460000074
为Null,转到步骤S307;
S307、调用神经网络模型计算输入张量xin,模型输出对应的doutput
S308、构造新数据new_ddyn,将目前全局最大的index存入动态缓存中CacheChangeable_set(new_ddyn)中,方法结束。
进一步的,步骤S308中的新数据new_ddyn为:
Figure BDA0002435591460000075
其中,lastindex是目前全局最大的index。
与现有技术相比,本发明至少具有以下有益效果:
本发明一种基于两段式缓存的神经网络推理加速方法,通过使用两段式缓存,兼顾了输入数据总体特征和运行时输入数据特征,减少了不必要的推理次数,降低了推理耗时。
进一步的,静态缓存根据输入数据总体特征确定,可以从全生命周期角度有效地提供缓存,增加缓存命中率,避免不必要的计算。
进一步的,动态缓存充分地考虑运行时输入数据的特征,从数据局部性角度有效的提供缓存,增加缓存命中率,减少不必要的计算。
进一步的,通过哈希散列方法,有效地把缓存平均分配到数组中,对于哈希冲突情况使用链表来解决,提高了访存效率,降低了缓存的查找、读取时间。
综上所述,本发明充分考虑了神经网络推理过程中输入数据的特征,针对性地设计了两段式缓存算法和数据结构,避免了不必要的计算,降低了推理耗时,减少了服务成本。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为静态缓存存入流程图;
图2为静态缓存读取流程图;
图3为动态缓存存入流程图;
图4为动态缓存读取流程图;
图5为基于两段式缓存的神经网络推理加速流程图。
具体实施方式
神经网络在推理时接受一个输入,然后经过大量运算产生一个输出。这个过程相比于直接从高度存储器中读取是非常缓慢的。而在实际生产环境中,模型的输入张量存在局部性。针对这一特点,本发明提出一种基于两段式缓存的神经网络推理加速方法。
定义存储在高速存储器上的缓存D={d1,d2,...,dn},其包含n项数据,每一项数据di,i=1,2,...,n由一个数据对组成di=(din,dout),din为神经网络的输入数据,dout是与之对应计算出的相应输出。
缓存的运行规则为:当外部系统提供一个输入xin时,首先查询缓存中是否包含该输入din=xin,若有,则返回对应的dout;若无,调用神经网络进行计算。
将D按内容分为两个部分D=(Dsta,Ddyn),其中Dsta为静态缓存部分,该部分预先分析神经网络模型的输入数据,选取其中的高频输入,将对应数据对进行保存,该部分内容不可变,其中存储的di被称为dsta;Ddyn为动态缓存部分,该部分内容可变,是在神经网络模型运行的期间根据缓存替换方法决定的,其中存储的di被称为ddyn。具体为:
S1、静态缓存的数据结构和构造方法
神经网络模型一般是领域特定(domain-specific)的,目前还不存在可以解决各个领域问题的通用神经网络模型。因此,神经网络的输入张量一般是有限种的,通过在神经网络模型待部署环境中进行一段时间的数据收集,构建出一个神经网络模型输入张量数据集S;然后对这个数据集作频次分析。
具体构造方法为:首先统计各个输入张量在数据集中出现的次数,然后根据出现次数降序对各个输入张量进行排序,最后输出排序完成的输入张量排序数据集Ssorted
频次分析方法伪代码如下
输入:神经网络模型输入张量数据集S
输出:按数据出现频次降序排列的数据集Ssorted
Figure BDA0002435591460000091
Figure BDA0002435591460000101
静态缓存Dsta中存储的dsta的数据结构为:
dsta{
din,
dout,
pointer->next dsta
}
其中,din是网络的输入张量,dout是网络的输出张量,pointer是一个指针,指向另外一dsta个;每个dsta的大小为Ldsta静态缓存Dsta是由数组和单链表构成的,数组长LA;数组的每一个元素上存储一个以dsta为元素的链表。
请参阅图1,静态缓存Dsta的存入方法CacheUnchangeable_set(new_dsta)具体为:
S1011、计算输入张量的哈希值Hash(new_dsta.d_in);
S1012、令哈希值Hash(new_dsta.d_in)对LA取余得到应存入的数组索引i;
S1013、检查数组索引i处是否已存在元素;
S1014、不存在的话在数组索引i处存入new_dsta
S1015、存在的话,根据数组索引i处元素dsta的pointer的向下遍历寻找链表的尾部,将链表尾部元素dsta的Pointer指向new_dsta,即dsta.pointer→new_dsta
其中,new_dsta为待存入的数据;
请参阅图2,静态缓存Dsta的读取方法CacheUnchangeable_get(xin)具体为:
S1021、计算输入张量的哈希值Hash(xin);
S1022、令Hash(xin)对LA取余得到应存入的数组索引i;
S1023、检查数组索引i处是否已存在元素;
S1024、不存在的话说明缓存表中不存在这个xin值对应的元素
Figure BDA0002435591460000111
返回null,方法结束;
S1025、存在的话转到S1026;
S1026、检查索引i对应的链表的第一项
Figure BDA0002435591460000112
是否与xin一致;
S1027、一致的话返回dsta.dout,方法结束;
S1028、不一致的话根据dsta.pointer找到链表的下一项,继续重复判断,如果存在一致,转到步骤S1027;如果直至链表尾部也不存在一致,转到步骤
S1029;
S1029、说明缓存中不存在这个xin值对应的元素,返回null,方法结束。
其中,xin为欲读取数据的输入张量;
静态缓存Dsta的大小定义为Lsta,计算出静态缓存存储n个dsta,具体为:
Figure BDA0002435591460000113
从输入张量排序数据集Ssorted中选出前n个输入,通过模型计算得到对应的输出,从而构成n个数据;然后使用CacheUnchangeable_set方法将这n个数组存储到静态缓存中。静态缓存表即构造完成。
S2、动态缓存的缓存替换方法
由于静态缓存大小有限,而神经网络的输入张量种类非常多,只能存储有限的部分。而且生产环境中前后事件的发生存在关联性,针对这一特点。本发明提出维护一个固定大小的动态缓存,将最近的,频繁的输入输出对缓存下来,用于加快网络推理速度。
动态缓存中存储的基础单元ddyn其结构为:
Figure BDA0002435591460000121
其中,din是网络的输入张量,dout是网络的输出张量;index是ddyn的序号;ddyn.index在动态缓存全生命周期中随ddyn产生而自增,即全局第一个ddyn的index为1,全局第二个ddyn的index为2,依次类推;因此ddyn.index在动态缓存全生命周期中全局唯一;usedTimes是此Ddyn被读取的次数;pointer是一个指针,指向另外一个ddyn;每个ddyn的大小为Lddyn
动态缓存Ddyn是由数组和单链表构成的,数组长LA;数组的每一个元素上存储一个以ddyn为元素的链表。
请参阅图3,动态缓存Ddyn的存入方法CacheChangeable_set(new_ddyn)具体为:
S2011、检查缓存Ddyn是否已满;
S2012、如果已满,寻找TimeUsed最小的ddyn,如果存在多个,则选择Index最小的ddyn,将它移除,转到S2014;
S2013、如果未满,转到S2014;
S2014、计算输入张量的哈希值Hash(new_ddyn.din);
S2015、令哈希值Hash(new_ddyn.din)对LA取余得到应存入的数组索引i;
S2016、检查数组索引i处是否已存在元素;
S2017、不存在的话在数组索引i处存入new_ddyn
S2018、存在的话,根据数组索引i处已有元素的pointer的向下遍历寻找链表的尾部,将链表末端元素ddyn的Pointer指向new_ddyn
其中,new_ddyn为待存入的数据。
请参阅图4,动态缓存Ddyn的读取方法CacheChangeable_get(xin)为:
S2021、计算输入张量的哈希值Hash(xin);
S2022、令Hash(xin)对LA取余得到应存入的数组索引i;
S2023、检查数组索引i处是否已存在元素;
S2024、不存在的话说明缓存表中不存在这个xin值对应的元素ddyn,返回null,方法结束;
S2025、存在的话转到S2026;
S2026、检查数组索引i处链表第一项ddyn.din是否与xin一致;
S2027、一致的话返回ddyn.dout,并令ddyn.usedTimes=ddyn.usedTimes+1;
S2028、不一致的话根据ddynpointer找到链表的下一项,继续重复判断,如果存在一致的转到S2027。如果直至链表尾部都不存在一致的,转到S2029;
S2029、缓存中不存在这个xin值对应的元素ddyn,返回null,方法结束。
S3、基于两段式缓存的神经网络推理加速方法
静态缓存在神经网络被部署之前构建完成,动态缓存在神经网络部署时为空,在神经网络运行中根据缓存替换方法存入、换出输入输出对。
请参阅图5,基于两段式缓存的神经网络推理加速方法为:
S301、检查静态缓存中是否存在输入张量xin对应的输出张量
Figure BDA0002435591460000141
S302、如果
Figure BDA0002435591460000142
不为null,则
Figure BDA0002435591460000143
为结果,方法结束;
S303、如果
Figure BDA0002435591460000144
为null,转到步骤S304;
S304、检查动态缓存中是否存在输入张量xin对应的输出张量
Figure BDA0002435591460000145
S305、如果
Figure BDA0002435591460000146
不为null,则
Figure BDA0002435591460000147
为结果,方法结束;
S306、如果
Figure BDA0002435591460000148
为Null,转到步骤S307;
S307、调用神经网络模型计算输入张量xin,模型输出对应的doutput
Figure BDA0002435591460000149
其中,lastindex是目前全局最大的index,并将其存入动态缓存中CacheChangeable_set(new_ddyn),方法结束。
在基于算数编码的FPGA配置文件压缩中,可以把缓存部署在BRAM上,按本发明提出的方法,在调用神经网络计算之前先查找缓存,可以有效地减少压缩和解压缩时间。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中的描述和所示的本发明实施例的组件可以通过各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实验结果
以德国埃尔朗根-纽伦堡大学计算机科学系的标准测试集中Xilinx Virtex-V板数据集中5个bit文件:v5_des.bit,v5_rc5.bit,v5_fft.bit,v5_fir.bit,v5_net.bit,v5_soc.bit作为训练集,以v5_xbar.bit作为测试集训练一个神经网络,神经网络目的是预测文件中某一位的出现概率。网络输入张量为一个32维的向量,输出张量为一个2维的向量。网络按顺序由2个128个单元的LSTM层,1个含有100个单元的Dense层,一个含有2个单元的Dense层构成。网络使用Adam优化器进行优化,损失函数是交叉熵。构造一个含有1024个数据的静态缓存,和一个含有1024个数据的动态缓存,神经网络在没有缓存的情况下计算了8374584次,加入缓存后计算了4223966次,降低了49.56%。
综上所述,本发明一种基于两段式缓存的神经网络推理加速方法,充分考虑了实际生产环境中模型输入张量存在局部性,通过构建缓存,并且将缓存器分为静态、动态两个部分,避免了神经网络模型推理过程中重复的、不必要的计算,缩短了响应时延,降低了运行成本。
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。

Claims (4)

1.一种基于两段式缓存的神经网络推理加速方法,其特征在于,包括以下步骤:
S1、统计各个输入张量在数据集中出现的次数,根据出现的次数采用降序对各个输入张量进行排序,最后输出排序完成的输入张量排序数据集Ssorted,构造静态缓存Dsta的数据结构,确定静态缓存Dsta的存入和读取方法;
静态缓存Dsta由数组和单链表构成,数组长LA;数组的每一个元素上存储一个以dsta为元素的链表,dsta的数据结构为:
dsta{
din,
dout,
pointer->nextdsta
}
其中,din是网络的输入张量,dout是网络的输出张量,pointer是一个指针,指向另外一dsta个;每个dsta的大小为Ldsta静态缓存;Dsta是由数组和单链表构成的,数组长LA;数组的每一个元素上存储一个以dsta为元素的链表;
静态缓存Dsta的存入方法具体为:
S1011、计算输入张量的哈希值Hash(new_dsta.d_in);
S1012、令哈希值Hash(new_dsta.d_in)对LA取余得到应存入的数组索引i;
S1013、检查数组索引i处是否已存在元素;
S1014、如果不存在,在数组索引i处存入new_dsta
S1015、如果存在,根据数组索引i处元素dsta的pointer,向下遍历寻找链表的尾部,将链表尾部元素dsta的Pointer指向new_dsta,即dsta.pointer→new_dsta
静态缓存Dsta的读取方法具体为:
S1021、计算输入张量的哈希值Hash(xin);
S1022、令哈希值Hash(xin)对LA取余得到应存入的数组索引i;
S1023、检查数组索引i处是否已存在元素;
S1024、如果不存在,缓存表中不存在这个xin值对应的元素
Figure FDA0003809458970000021
返回null,方法结束;
S1025、如果存在,转到步骤S1026;
S1026、检查索引i对应的链表的第一项
Figure FDA0003809458970000022
是否与xin一致;
S1027、如果一致,返回dsta.dout,方法结束;
S1028、如果不一致,根据dsta.pointer找到链表的下一项,继续重复判断,如果存在一致,转到步骤S1027;如果直至链表尾部也不存在一致,转到步骤S1029;
S1029、缓存中不存在这个xin值对应的元素,返回null,方法结束;
S2、确定动态缓存Ddyn中存储的基础单元ddyn,确定动态缓存Ddyn的缓存替换方法,动态缓存Ddyn由数组和单链表构成的,数组长LA;数组的每一个元素上存储一个以ddyn为元素的链表,动态缓存中存储的基础单元ddyn其结构为:
Figure FDA0003809458970000023
其中,din是网络的输入张量,dout是网络的输出张量;index是ddyn的序号;ddyn.index在动态缓存全生命周期中随ddyn产生而自增,即全局第一个ddyn的index为1,全局第二个ddyn的index为2,ddyn.index在动态缓存全生命周期中全局唯一;usedTimes是此Ddyn被读取的次数;pointer是一个指针,指向另外一个ddyn;每个ddyn的大小为Lddyn
动态缓存Ddyn的存入方法具体为:
S2011、检查缓存Ddyn是否已满;
S2012、如果步骤S2011已满,寻找TimeUsed最小的ddyn,如果存在多个,则选择Index最小的ddyn,将它移除,转到步骤S2014;
S2013、如果步骤S2011未满,转到步骤S2014;
S2014、计算输入张量的哈希值Hash(new_ddyn.din);
S2015、令哈希值Hash(new_ddyn.din)对LA取余得到应存入的数组索引i;
S2016、检查数组索引i处是否已存在元素;
S2017、如果不存在,在数组索引i处存入new_ddyn
S2018、如果存在,根据数组索引i处已有元素的pointer的向下遍历寻找链表的尾部,将链表末端元素ddyn的Pointer指向new_ddyn
动态缓存Ddyn的读取方法为:
S2021、计算输入张量的哈希值Hash(xin);
S2022、令Hash(xin)对LA取余得到应存入的数组索引i;
S2023、检查数组索引i处是否已存在元素;
S2024、如果不存在,说明缓存表中不存在这个xin值对应的元素ddyn,返回null,方法结束;
S2025、如果存在,转到步骤S2026;
S2026、检查数组索引i处链表第一项ddyn.din是否与xin一致;
S2027、如果一致,返回ddyn.dout,并令ddyn.usedTimes=ddyn.usedTimes+1;
S2028、如果不一致,根据ddynpointer找到链表的下一项,继续重复判断,如果存在一致的转到步骤S2027,如果直至链表尾部都不存在一致的,转到步骤S2029;
S2029、缓存中不存在这个xin值对应的元素ddyn,返回null,方法结束;
S3、在神经网络被部署之前构建完成静态缓存Dsta,在神经网络部署时动态缓存Ddyn为空,在神经网络运行中根据缓存替换方法存入、换出输入输出对,完成基于两段式缓存的神经网络推理加速。
2.根据权利要求1所述的基于两段式缓存的神经网络推理加速方法,其特征在于,步骤S1中,静态缓存Dsta的大小定义为Lsta,计算出静态缓存存储n个dsta,从输入张量排序数据集Ssorted中选出前n个输入,通过模型计算得到对应的输出构成n个数据;然后使用CacheUnchangeable_set方法将n个数组存储到静态缓存中,构造完成静态缓存表。
3.根据权利要求1所述的基于两段式缓存的神经网络推理加速方法,其特征在于,步骤S3具体为:
S301、检查静态缓存中是否存在输入张量xin对应的输出张量
Figure FDA0003809458970000041
Figure FDA0003809458970000042
具体为:
Figure FDA0003809458970000043
S302、如果
Figure FDA0003809458970000044
不为null,则
Figure FDA0003809458970000045
为结果,方法结束;
S303、如果
Figure FDA0003809458970000046
为null,转到步骤S304;
S304、检查动态缓存中是否存在输入张量xin对应的输出张量
Figure FDA0003809458970000047
Figure FDA0003809458970000048
具体为:
Figure FDA0003809458970000049
S305、如果
Figure FDA00038094589700000410
不为null,则
Figure FDA00038094589700000411
为结果,方法结束;
S306、如果
Figure FDA00038094589700000412
为Null,转到步骤S307;
S307、调用神经网络模型计算输入张量xin,模型输出对应的doutput
S308、构造新数据new_ddyn,将目前全局最大的index存入动态缓存中CacheChangeable_set(new_ddyn)中,方法结束。
4.根据权利要求3所述的基于两段式缓存的神经网络推理加速方法,其特征在于,步骤S308中的新数据new_ddyn为:
Figure FDA0003809458970000051
其中,lastindex是目前全局最大的index。
CN202010251314.4A 2020-04-01 2020-04-01 一种基于两段式缓存的神经网络推理加速方法 Active CN111427895B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010251314.4A CN111427895B (zh) 2020-04-01 2020-04-01 一种基于两段式缓存的神经网络推理加速方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010251314.4A CN111427895B (zh) 2020-04-01 2020-04-01 一种基于两段式缓存的神经网络推理加速方法

Publications (2)

Publication Number Publication Date
CN111427895A CN111427895A (zh) 2020-07-17
CN111427895B true CN111427895B (zh) 2022-10-25

Family

ID=71557516

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010251314.4A Active CN111427895B (zh) 2020-04-01 2020-04-01 一种基于两段式缓存的神经网络推理加速方法

Country Status (1)

Country Link
CN (1) CN111427895B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108241890A (zh) * 2018-01-29 2018-07-03 清华大学 一种可重构神经网络加速方法及架构
CN108280514A (zh) * 2018-01-05 2018-07-13 中国科学技术大学 基于fpga的稀疏神经网络加速系统和设计方法
CN108509723A (zh) * 2018-04-02 2018-09-07 东南大学 基于人工神经网络的LRU Cache预取机制性能收益评估方法
CN109635944A (zh) * 2018-12-24 2019-04-16 西安交通大学 一种稀疏卷积神经网络加速器及实现方法
CN110334799A (zh) * 2019-07-12 2019-10-15 电子科技大学 基于存算一体的神经网络推理与训练加速器及其运行方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9183145B2 (en) * 2009-04-27 2015-11-10 Intel Corporation Data caching in a network communications processor architecture

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108280514A (zh) * 2018-01-05 2018-07-13 中国科学技术大学 基于fpga的稀疏神经网络加速系统和设计方法
CN108241890A (zh) * 2018-01-29 2018-07-03 清华大学 一种可重构神经网络加速方法及架构
CN108509723A (zh) * 2018-04-02 2018-09-07 东南大学 基于人工神经网络的LRU Cache预取机制性能收益评估方法
CN109635944A (zh) * 2018-12-24 2019-04-16 西安交通大学 一种稀疏卷积神经网络加速器及实现方法
CN110334799A (zh) * 2019-07-12 2019-10-15 电子科技大学 基于存算一体的神经网络推理与训练加速器及其运行方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Placement Delivery Array Design for Coded Caching Scheme in D2D Networks;Jinyu Wang 等;《IEEE Transactions on Communications》;20190120;第3388 - 3395页 *
UPRFloor:一种动态可重构FPGA建模方法与布局策略;伍卫国 等;《电子学报》;20190402;第2862-2869页 *
基于深度神经网络压缩的嵌入式目标检测研究;王琪;《中国优秀硕士学位论文全文数据库》;20200115;第I138-1890页 *
通过K-means算法实现神经网络的加速和压缩;陈桂林等;《计算机工程与科学》;20190515(第05期);第36-43页 *

Also Published As

Publication number Publication date
CN111427895A (zh) 2020-07-17

Similar Documents

Publication Publication Date Title
Hegde et al. UCNN: Exploiting computational reuse in deep neural networks via weight repetition
Liang et al. FP-BNN: Binarized neural network on FPGA
Kraska et al. The case for learned index structures
Han Efficient methods and hardware for deep learning
Koskela et al. Web cache optimization with nonlinear model using object features
JP5235666B2 (ja) 選択されたセグメントのビット平面表現を用いた連想マトリックス法、システムおよびコンピュータプログラム製品
CN110020435B (zh) 一种采用并行二进制蝙蝠算法优化文本特征选择的方法
CN112667528A (zh) 一种数据预取的方法及相关设备
EP3637327A1 (en) Computing device and method
Jiang et al. SKCompress: compressing sparse and nonuniform gradient in distributed machine learning
Mostafa Sequential aggregation and rematerialization: Distributed full-batch training of graph neural networks on large graphs
Shahshahani et al. Memory optimization techniques for fpga based cnn implementations
CN111427895B (zh) 一种基于两段式缓存的神经网络推理加速方法
CN109697509B (zh) 处理方法及装置、运算方法及装置
JP7363145B2 (ja) 学習装置および学習方法
CN109389210A (zh) 处理方法和处理装置
Anis FPGA implementation of parallel particle swarm optimization algorithm and compared with genetic algorithm
CN115905546A (zh) 基于阻变存储器的图卷积网络文献识别装置与方法
Xu et al. Applying an improved elephant herding optimization algorithm with spark-based parallelization to feature selection for intrusion detection
Przymus et al. Compression planner for time series database with GPU support
Liao et al. Mimose: An input-aware checkpointing planner for efficient training on gpu
Hu et al. Ccied: Cache-aided collaborative intelligence between edge devices
Wang et al. A novel parallel algorithm for sparse tensor matrix chain multiplication via tcu-acceleration
Kang et al. A framework for area-efficient multi-task BERT execution on ReRAM-based accelerators
JP7200766B2 (ja) 学習装置および学習方法

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