CN110197262B - 用于lstm网络的硬件加速器 - Google Patents

用于lstm网络的硬件加速器 Download PDF

Info

Publication number
CN110197262B
CN110197262B CN201810157774.3A CN201810157774A CN110197262B CN 110197262 B CN110197262 B CN 110197262B CN 201810157774 A CN201810157774 A CN 201810157774A CN 110197262 B CN110197262 B CN 110197262B
Authority
CN
China
Prior art keywords
lstm
output
module
input
calculation
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
CN201810157774.3A
Other languages
English (en)
Other versions
CN110197262A (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.)
Xilinx Technology Beijing Ltd
Original Assignee
Xilinx Technology Beijing Ltd
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 Xilinx Technology Beijing Ltd filed Critical Xilinx Technology Beijing Ltd
Priority to CN201810157774.3A priority Critical patent/CN110197262B/zh
Publication of CN110197262A publication Critical patent/CN110197262A/zh
Application granted granted Critical
Publication of CN110197262B publication Critical patent/CN110197262B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

本发明公开了一种用于长短期记忆(LSTM)网络的硬件加速器。LSTM计算模块对T个有序输入进行前向LSTM计算,得到分别对应于所述T个有序输入的T个第一输出,并对所述T个有序输入进行后向LSTM计算,得到分别对应于所述T个有序输入的T个第二输出,其中,T为正整数。第一缓存用于缓存所述第一输出和所述第二输出。组合模块对所述第一缓存中缓存的对应于同一个输入的第一输出和第二输出执行组合运算,以得到对应于所述同一个输入的组合输出。由此,可以提高双向LSTM计算性能,降低响应延时,实现对双向LSTM网络计算的加速效果。

Description

用于LSTM网络的硬件加速器
技术领域
本公开涉及双向长短期记忆(LSTM)架构,特别涉及双向LSTM的硬件实现装置及其控制方法。
背景技术
LSTM架构经常用于大规模声学建模以及声学输出概率计算。其中,LSTM往往是计算和内存密集度最高的部分。因此,需要加速LSTM计算。
LSTM是循环神经网络(RNN)的一种,其中时间点t的输入依赖于时间点t-1的输出。
图1示意性地示出了使用LSTM网络的一种网络结构。
输入数据经多次LSTM网络运算后进入全连接层FC,再经回归模型softmax回归,向外输出。
图1右侧示意性地示出了LSTM网络的内部结构。
与传统RNN相比,LSTM在循环隐藏层中包含特殊的记忆块(memoryblock)。记忆块中的自连接的记忆单元(cell)可以存储网络的时间状态(temporal state)。记忆块还包含称为门的特殊乘法单元:输入门i、输出门o和遗忘门f。输入门i控制输入数据流入记忆单元。输出门o控制输出数据流到网络的其余部分。遗忘门f在将记忆单元的内部状态作为输入加到记忆单元之前缩放记忆单元的内部状态,这样可以自适应地忘记记忆单元中的记忆。
另外,如图1虚线所示,现代LSTM体系结构包含从其内部单元到门的窥视孔连接,以学习输出的精确时序。其中,输入经过多种运算后,通过递归、投射,然后输出。
LSTM网络接收输入序列x=(x1;...;xT),T为正整数,例如可以是512。例如,可以将预定时长的一段输入语音均分为T段,基于每一段语音分别得到相应的输入向量xt,其中t为1至T的正整数。
LSTM网络通过使用以下公式从t=1到T迭代计算输出序列y=(y1;...;yT):
it=σ(Wixxt+Wiryt-1+bi) (1)
ft=σ(Wfxxt+Wrfyt-1+bf) (2)
ct=ft⊙ct-1+it⊙g(Wcxxt+Wcryt-1+bc) (3)
ot=σ(Woxxt+Woryt-1+bo) (4)
yt=ot⊙h(ct) (5)
这里W表示权重矩阵(例如Wix是从输入到输入门的权重的矩阵)。b表示偏置向量,而σ是逻辑斯谛函数(logistic sigmoid function)。符号i、f、o、c和m分别是输入门、遗忘门、输出门、单元激活向量和单元输出激活向量,并且它们都具有相同的尺寸。g和h是单元输入激活函数和单元输出激活函数。“⊙”符号表示逐点相乘运算。
上面描述了前向LSTM计算。双向LSTM计算则包含前向计算和后向计算两部分。各部分可认为与上述单向LSTM计算相同,只是在后向LSTM计算中,基于yt+1而不是yt-1来计算yt,即将上述公式中的yt-1替换为yt+1。当前向LSTM计算和后向LSTM计算均完成后,将相应结果进行相加等运算后,即可得到双向LSTM计算结果yt
可以理解,LSTM网络的运算量非常大,完全由例如CPU通过软件方法来执行运算将是非常耗时耗资源的。要实现双向LSTM计算则更是需要耗费更多的时间和资源。
相对于单向LSTM参考前面的信息推断后面的信息,双向LSTM为了推断出所需信息,不但需要前面的信息,还要结合后面的信息。显而易见,双向LSTM相对于单向LSTM,可更准确地推断出所需信息,即提高信息识别率。
但是,区别于单向LSTM只计算前向反馈,双向LSTM需要同时完成前向反馈和后向反馈两部分,计算量扩大近一倍。为了保证较低的计算延迟,要求计算网络可提供更高的算力,更高的计算效率。
一种可实现较高算力的双向LSTM计算结构变得十分必要。
发明内容
本发明要解决的技术问题是提供一种用于LSTM网络的硬件加速器,来提高双向LSTM计算性能,降低响应延时,实现对双向LSTM计算的加速效果。
根据本发明,提供了一种用于长短期记忆(LSTM)网络的硬件加速器,包括:LSTM计算模块,用于对T个有序输入进行前向LSTM计算,得到分别对应于T个有序输入的T个第一输出,并对T个有序输入进行后向LSTM计算,得到分别对应于T个有序输入的T个第二输出,其中,T为正整数;第一缓存,用于缓存第一输出和第二输出;以及组合模块,用于对第一缓存中缓存的对应于同一个输入的第一输出和第二输出执行组合运算,以得到对应于同一个输入的组合输出。
由此,可以实现双向LSTM网络计算的硬件加速。
可选地,该硬件加速器还可以包括:控制模块,用于控制LSTM计算模块和/或第一缓存和/或组合模块的运行。
由此,可以在控制模块的控制下,更加顺畅地执行双向LSTM网络计算。
可选地,控制模块可以响应于第一缓存中存在对应于同一个输入的第一输出和第二输出,执行控制以从第一缓存向组合模块发送第一输出和第二输出。
由此,可以根据前向和后向LSTM计算的进展情况,根据实际情况调度前向和后向LSTM计算结果,即第一输出和第二输出,向组合模块的输入,进一步减小了时延,提高了计算性能。
可选地,LSTM计算模块可以包括多个级联计算子模块和多个级间缓存,级间缓存分别用于缓存上一级计算子模块的级间输出,以作为下一级计算子模块的级间输入。
由此,可以实现流水式计算,级间缓存充当数据池,在上下两级计算子模块之间进行缓冲。上下两级计算子模块之间不需要相互等待,进一步减小了时延,提高了计算性能。
可选地,控制模块可以响应于级间缓存中存在用于下一级计算子模块的级间输入,执行控制以从级间缓存向下一级计算子模块发送相应的级间输入。
这样,级间缓存中一旦准备好下一级计算子模块所需输入数据,就发送给下一级计算子模块,进一步减小了时延,提高了计算性能。
可选地,多个级联计算子模块可以包括以下中的至少一个:矩阵乘法模块,用于执行矩阵与向量之间的矩阵乘法操作,以得到矩阵乘法结果,其中,输入、第一输出、第二输出都是向量;加法树模块,用于对矩阵乘法结果进行累加操作,以得到累加结果;功能函数模块,用于对累加结果和/或逐点相乘结果进行功能函数运算,以得到功能函数运算结果;以及逐点相乘运算模块,用于对功能函数运算结果进行逐点相乘运算。
由此,分别由相应的模块实现LSTM计算所涉及的各项运算,结构清晰,操作简便,硬件逻辑容易实现,且执行过程顺畅。
可选地,LSTM计算模块可以包括多个并联的矩阵乘法模块,用于并行执行乘法操作。
由此,可以为较为耗时的矩阵乘法运算提供更多的硬件资源,减小运算耗时,提高计算性能。
可选地,多个级间缓存可以包括以下中的至少一个:第二缓存,用于缓存矩阵乘法结果,作为加法树模块的级间输入;第三缓存,用于缓存功能函数运算结果,作为逐点相乘运算模块的级间输入。
在实施例中,在前向LSTM计算中,基于对应于前一个输入的第一输出和当前输入,计算对应于当前输入的第一输出;在后向LSTM计算中,基于对应于后一个输入的第二输出和当前输入,计算对应于当前输入的第二输出。
可选地,该硬件加速器还可以包括:输入缓存,用于缓存T个有序输入,并且缓存对应于前一个输入的第一输出和/或对应于后一个输入的第二输出,作为用于LSTM计算模块的输入,控制模块响应于输入缓存中存在用于LSTM计算模块的输入,执行控制以从输入缓存向LSTM计算模块发送用于LSTM计算模块的输入。
由此,能够实现输入数据向LSTM计算模块的快速输入,减少时延,提高计算性能。
可选地,该硬件加速器可以包括两个LSTM计算模块,分别用于执行前向LSTM计算和后向LSTM计算。
由此,可以并行执行前向LSTM计算和后向LSTM计算,计算延迟可以减少一半。
可选地,组合模块可以为加法树模块。
根据本发明,可以对双向LSTM网络计算实现硬件加速。
根据本发明实施例的技术方案,进一步通过流水线设计达到了降低响应延时、提高计算性能的目的。流水线设计可有效地平衡IO带宽、片上资源与计算性能。本发明的实施例通过顺序或并行的流水线方式完成矩阵乘法运算,进一步达到了降低响应延迟,提高计算性能的目的。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示意性地示出了使用LSTM网络的一种基本结构。
图2示意性地示出了根据本发明的LSTM网络硬件加速器的基本架构。
图3示意性地示出了根据本发明一个实施例的LSTM网络硬件加速器。
图4示意性地示出了根据本发明另一个实施例的LSTM网络硬件加速器。
图5示意性地示出了根据本发明另一个实施例的LSTM网络硬件加速器。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本发明公开了一种专用电路,用于双向LSTM(Bi-LSTM)计算的硬件实现,以便达到提高计算性能、降低响应延时的目的。该硬件实现方案可以支持稀疏化的双向LSTM网络。
下面参考附图2-5详细描述根据本发明的LSTM网络硬件加速器。
图2示意性地示出了根据本发明的用于LSTM网络的硬件加速器的基本架构。
如图2所示,根据本发明的用于LSTM网络的硬件加速器可以包括LSTM计算模块100、第一缓存200、组合模块300。
LSTM计算模块100对T个有序输入进行前向LSTM计算和后向LSTM计算,T为正整数。如前文所述,每个输入可以是一个向量。
可以由一个LSTM计算模块既执行前向LSTM计算,又执行后向LSTM计算,例如下文中参考图3和图4所描述的实施例。
或者,该硬件加速器也可以包括两个LSTM计算模块,分别用来同步执行前向LSTM计算和后向LSTM计算,例如下文中参考图5所描述的实施例。
在前向LSTM计算中,LSTM计算模块100基于对应于前一个输入xt-1的第一输出y(t-1)f和当前输入xt,计算对应于当前输入xt的第一输出ytf。第一输出ytf也可以是向量。其中,t为1至T的正整数。
在后向LSTM计算中,LSTM计算模块100基于对应于后一个输入xt+1的第二输出y(t+1)b和当前输入xt,计算对应于当前输入xt的第二输出ytb。第二输出ytb也可以是向量。
在前向LSTM计算和后向LSTM计算,都需要用到输入xt,但是两者对xt的需求是不同步的。
如图2所示,该硬件加速器还可以设置输入缓存500,连接到LSTM计算模块100。
输入缓存500缓存上述T个有序输入。这样,可以节省一部分读取输入向量xt的时间。
或者,输入缓存500也可以仅缓存当前需要的输入向量xt,换言之,可以分别为前向LSTM计算和后向LSTM计算缓存当前输入。这样可以减小对输入缓存500的存储空间要求。
另外,输入缓存500还可以缓存对应于前一个输入xt-1的第一输出y(t-1)f和/或对应于后一个输入xt+1的第二输出y(t+1)b,以便根据LSTM计算模块100的计算需要而向其提供。
当LSTM计算模块要针对当前输入向量xt进行前向LSTM计算时,根据需要,从输入缓存500向LSTM计算模块100提供当前输入向量xt和对应于前一个输入xt-1的第一输出y(t-1)f
当LSTM计算模块要针对当前输入向量xt进行后向LSTM计算时,根据需要,从输入缓存500向LSTM计算模块100提供当前输入向量xt和对应于后一个输入xt+1的第二输出y(t+1)b
如图2所示,该硬件加速器还可以包括控制模块400。控制模块400用于控制LSTM计算模块100和/或第一缓存200和/或组合模块300的运行。
控制模块400可以设置为响应于输入缓存500中存在用于LSTM计算模块100的向量,执行控制以从输入缓存500向LSTM计算模块100发送用于LSTM计算模块100的向量。
具体说来,T个有序输入可以全部缓存在输入缓存500中,也可以根据需要获取当前输入xt并放入输入缓存500中。第一输出y(t-1)f和第二输出y(t+1)b则需要在上一轮LSTM计算结束后得到并放入输入缓存500中。
在LSTM计算中,涉及多个矩阵的乘法运算,例如前述公式(1)至(4)中的Wix、Wir、Wfx、Wrf、Wcx、Wcr、Wox、Wor等。下标带“x”的矩阵与当前输入向量xt相乘,而前向LSTM计算中下标带“f”的矩阵与对应于前一个输入xt-1的输出yt-1相乘,而后向LSTM计算中下标带“f”的矩阵则与对应于后一个输入xt+1的输出yt+1相乘。前向LSTM计算和后向LSTM的各相应矩阵可以不同。
当在LSTM计算模块100的矩阵乘法模块中存储一个矩阵的各项系数(权重数据)之后,可以视为该矩阵乘法模块转化为用于执行对应于该矩阵的矩阵乘法模块。控制模块400可以响应于该矩阵所对应的向量已缓存在输入缓存500中,控制输入缓存500向该矩阵乘法模块提供该向量,以便进行相应的矩阵乘法运算。
LSTM计算模块100可以包括多个并联的矩阵乘法模块(例如下文中参考图4描述的实施例),这样可以并行执行乘法操作。
例如,在前向LSTM计算和后向LSTM的各相应矩阵不同的情况下。可以由不同的矩阵乘法模块来分别执行前向LSTM计算和后向LSTM计算中涉及的矩阵乘法运算。这样可以同步或接近同步地进行前向LSTM计算和后向LSTM计算。
或者,也可以由不同的矩阵乘法模块来分别执行针对xt的矩阵乘法运算和针对yt-1/yt+1的矩阵乘法运算。这样可以减少xt、yt-1/yt+1的输入操作。
还可以有多种其它形式的并行运算设计方案。
应当理解,如果分别为每个矩阵分别准备一个矩阵乘法模块,那么就只需要读取一次矩阵各项系数(权重数据),就可以一直用于执行相应的矩阵乘法运算,而不必每次读取矩阵系数。这样,可以进一步节省系数读取时间,当然也会耗用更多的硬件资源。可以根据实际需要在时间与资源之间折衷考虑。
对于T个有序输入,例如x1,x2,x3,……,xT,LSTM计算模块100一方面从x1开始进行前向LSTM计算,依次得到分别对应于上述T个有序输入x1,x2,x3,……,xT的T个第一输出y1f,y2f,y3f,……,y(T-2)f,y(T-1)f,yTf
另一方面,LSTM计算模块100还从xT开始进行后向LSTM计算,依次得到分别对应于上述T个有序输入xT,xT-1,xT-2,……,x3,x2,x1的T个第二输出yTb,y(T-1)b,y(T-2)b,……,y3b,y2b,y1b
第一缓存200缓存LSTM计算模块100的计算结果,即第一输出y1f,y2f,y3f,……,y(T-2)f,y(T-1)f,yTf和第二输出yTb,y(T-1)b,y(T-2)b,……,y3b,y2b,y1b
组合模块300对第一缓存200中缓存的对应于同一个输入xt的第一输出ytf和第二输出ytb执行组合运算,以得到对应于同一个输入xt的组合输出yt
这里,组合模块300可以是加法树模块。相应地,组合运算可以是加法运算。更具体地,组合运算可以是向量加法运算。
不论是前向LSTM计算,还是后向LSTM计算,一次计算都是得到对应于一个输入xt的一个第一输出ytf或一个第二输出ytb
前向LSTM计算从x1开始,依次得到y1f,y2f,y3f,……,y(T-2)f,y(T-1)f,yTf。后向LSTM计算从xT开始,依次得到yTb,y(T-1)b,y(T-2)b,……,y3b,y2b,y1b。而组合模块需要对y1f和y1b,y2f和y2b,y3f和y3b,……,y(T-2)f和y(T-2)b,y(T-1)f和y(T-1)b,yTf和yTb进行计算。
即使前向LSTM计算和后向LSTM计算同时进行,例如前向LSTM计算最先输出y1f之后,也要一直等到后向LSTM计算最后输出y1b,才能进行组合运算得到y1
第一缓存200缓存第一输出和第二输出,可以在不影响前向LSTM和后向LSTM计算的情况下,缓存组合模块300的输入,直到需要组合的一对输入都已准备好。
可以由同一个第一缓存200缓存第一输出和第二输出。或者,也可以分别为第一输出和第二输出分别设置第一缓存200。
控制模块400响应于第一缓存200中存在对应于同一个输入的第一输出和第二输出,执行控制以从第一缓存200向组合模块300发送第一输出和第二输出。
控制模块400可以待一个轮次的前向LSTM计算和后向LSTM计算全都完成,即得到全部第一输出y1f,y2f,y3f,……,y(T-2)f,y(T-1)f,yTf和全部第二输出yTb,y(T-1)b,y(T-2)b,……,y3b,y2b,y1b之后,执行控制以从第一缓存200向组合模块300发送对应的第一输出和第二输出,以进行组合运算。
或者,在前向LSTM计算和后向LSTM计算同步或接近同步执行的情况下,当得到第一输出y(T+1)/2f(T为奇数)或y(T/2+1)f(T为偶数)时,一般也差不多时间得到了对应于同一个输入的第二输出y(T+1)/2b(T为奇数)或y(T/2+1)b(T为偶数)。此时,控制模块400即可以执行控制以从第一缓存200向组合模块300发送已经得到的相应第一输出和第二输出。此后,每当得到一个第一输出或第二输出,都能得到一组相应的第一输出和第二输出,都可以发送给组合模块300以进行组合运算。
LSTM计算模块100可以包括多个级联计算子模块和多个级间缓存。
级间缓存分别用于缓存上一级计算子模块的输出(可以称为“级间输出”),以作为下一级计算子模块的输入(可以称为“级间输入”)。
控制模块400可以响应于级间缓存中存在用于下一级计算子模块的级间输入,执行控制以从级间缓存向下一级计算子模块发送相应的级间输入。
这样,可以实现流式计算。上一级计算子模块可以不必考虑下一级计算子模块当前的计算状态,持续进行其自身的计算,并将计算结果缓存在级间缓存中。下一级计算模块可以从级间缓存中获取级间输入。由此,可以避免前后级计算模块相互等待,提高计算性能、降低响应延时,实现更加流畅的计算。
下面参考图3至图5更加详细地描述根据本发明实施例的LSTM网络硬件加速器,其中示出了一些LSTM计算模块100可以包括的级联计算子模块和级间缓存。
在进行Bi-LSTM计算时,可针对应用场景对硬件加速器的架构进行适当调整。当硬件资源有限时,可采用图3所示架构完成Bi-LSTM计算。
图3示意性地示出了根据本发明一个实施例的LSTM网络硬件加速器。
图3所示硬件加速器的总体架构与图2所示硬件加速器相同。上文中参考图2描述的内容也适用于图3所示硬件加速器。同样的内容在此不再赘述。
如图3所示,LSTM计算模块100可以包括矩阵乘法模块110、加法树模块130、功能函数模块140、逐点相乘运算模块160等级联计算子模块。该硬件加速器还可以包括第二缓存120和第三缓存150等级间缓存。
控制模块(Controller)400用于实现全局控制。例如可以控制计算向量数据的读取、参与加法树或逐点相乘等运算数据的读取、计算结果的存储等。
输入缓存(也可称为“向量数据缓存模块”,Vector_CACH)500用于存储并向LSTM计算模块100的矩阵乘法模块110输出Bi-LSTM计算所需的向量数据。
LSTM计算的核心计算为矩阵乘法运算,矩阵乘法运算时所需的向量主要有xt和yt-1,其中xt可以为输入的帧向量或是上层Bi-LSTM计算的最终输出yt(作为本层Bi-LSTM计算的输入向量xt)、yt-1为同层Bi-LSTM计算中前一帧的输出结果。当执行多层(例如两层)Bi-LSTM计算时,上一层Bi-LSTM计算的最终输出yt作为下一层Bi-LSTM计算的输入向量xt,以进一步执行Bi-LSTM计算。
输入缓存500的输出数据即为Bi-LSTM计算所需的向量数据。在该硬件加速器同步进行前向和后向LSTM计算的情况下,输入缓存500在控制模块400的控制下,同时输出两路向量数据,以分别用于前向和后向LSTM计算。
矩阵乘法模块(MatrixVector_MOD)110可以读取矩阵参数(权重数据(weight)),并根据需要从输入缓存500读取相应的向量数据(vector),如上面所述的输入向量xt、先前的输出向量y(t-1)f或y(t+1)b,从而可以执行相应的矩阵与向量之间的矩阵乘法运算,以得到矩阵乘法结果(图中用“WX”表示)。
第二缓存(也可称为“矩阵结果缓存模块”,MatrixVector_CACH)120缓存矩阵乘法结果WX,作为加法树模块130的输入(WX1至WXn)。
矩阵乘法模块110按照一定顺序/规划/设计/控制,完成各个矩阵乘法运算。当对应的各个矩阵乘法运算完成后,在第二缓存120中缓存相应矩阵乘法结果,即可基于这些矩阵乘法结果开始后续运算。
加法树模块(AddTree_mod)130执行加法树运算,即对矩阵乘法结果进行累加操作,以得到累加结果。还可以根据需要进一步获取偏置向量Bias,例如上述公式(1)至(4)中的bi、bf、bc、bo,以便与累加结果相加。
功能函数模块(Function_mod)140,用于对来自加法树模块130的累加结果和/或逐点相乘运算模块160的逐点相乘结果进行功能函数运算,以得到功能函数运算结果。功能函数例如可以包括上述公式(1)至(4)中的逻辑斯谛函数σ、单元输入激活函数g和单元输出激活函数h。常见的功能函数例如有sigmoid或tanh等。
第三缓存(也可称为“中间结果缓存模块”,Sub_CACH)150缓存各功能函数运算结果,作为逐点相乘运算模块160的输入。第三缓存150的输入为各功能函数运算结果,根据控制模块400的指令而输出不同数据给逐点相乘运算模块160。
逐点相乘运算模块160对功能函数运算结果进行逐点相乘运算。参考上述公式(3)和公式(5)。在执行上述公式(3)所示的第一项逐点相乘运算ft⊙ct-1时,逐点相乘运算模块160可以(例如从存储器或缓存)读取上一轮次计算得到的逐点相乘运算结果c(t-1)f(前向LSTM计算)/c(t+1)b(后向LSTM计算)。另外,逐点相乘运算模块160还可以向功能函数模块140输出本轮逐点相乘运算结果ct,以执行上述公式(5)中的功能函数运算h(ct)。
第一缓存(也可称为“结果缓存模块”,Ward_CACH)200缓存前向/后向LSTM计算结果。在控制模块400的控制下,向组合模块300输出相应的前向LSTM计算结果和后向LSTM计算结果,以便组合模块300执行组合运算输出组合结果yt,作为本层Bi-LSTM计算结果。
组合模块300也可以是加法树模块,对相应的前向LSTM计算结果和后向LSTM计算结果执行加法树运算,得到本层Bi-LSTM计算结果yt
图3所示硬件加速器架构采用一组LSTM计算模块100,先后或交叉完成前向(Forward)和后向(Backward)LSTM计算。当双向计算均完成后,或者已经得到相应地第一输出和第二输出之后,再通过控制模块400控制,分别从第一缓存200中读取对应的前向/后向结果(第一输出和第二输出),由组合模块300进行相加,得到这一层Bi-LSTM计算的结果。循环多次,直到完成所有层的计算。
该架构在每次仅完成一个方向所有帧的计算的情况下,相对于下文中参考图5描述的前向/后向同时计算的方案,计算延迟增加一倍,但同时仅需要一半的计算逻辑,是一种面积和速度的置换/折衷。
图4示意性地示出了根据本发明另一个实施例的LSTM网络硬件加速器。
图4所示硬件加速器的总体架构与图3所示硬件加速器基本相同。上文中参考图3描述的内容也适用于图4所示硬件加速器。同样的内容在此不再赘述。
在图4所示硬件加速器中,设置了多个矩阵乘法模块110,以便同步进行乘法运算。
LSTM计算过程中,矩阵乘法运算耗时较长。设置多个矩阵乘法模块,可以实现并行矩阵乘法运算,减少LSTM计算总体耗时。
矩阵乘法运算的并行运算设计方案可以如上文所述。
从前述可知,Bi-LSTM主要计算量体现在矩阵计算。通常,计算所需权重(Weight)数据量较大,参与计算所需的权重数据的加载带宽对计算的效率有很大的影响。在计算时提供权重数据的接口IO可同时提供多个矩阵运算的情况下,可以同时开始多个矩阵运算,这样将会大幅提高Bi-LSTM计算效率,降低计算延时。
例如:当IO带宽提高2倍,则同时可进行2个矩阵的计算。则相比每次计算1个矩阵时计算所耗时间则降低一半,由于LSTM计算是流水进行的,那么,考虑到计算的相关性,一层LSTM计算时间将会缩减约一半。由此可见,IO带宽越大,则计算性能越高。
图5示意性地示出了根据本发明另一个实施例的LSTM网络硬件加速器。
图5所示硬件加速器的总体架构与图2所示硬件加速器基本相同。每个LSTM计算模块都与图3所示硬件加速器中的LSTM计算模块基本相同。上文中参考图2和图3描述的内容也适用于图5所示硬件加速器。同样的内容在此不再赘述。
在图5所示硬件加速器中,为前向LSTM计算和后向LSTM计算分别设置了LSTM计算模块100f和100b、第一缓存200f和200b。
前向LSTM计算模块100f可以包括矩阵乘法模块110f、加法树模块130f、功能函数模块140f、逐点相乘运算模块160f等级联计算子模块,以及第二缓存120f和第三缓存150f等级间缓存。
后向LSTM计算模块100b可以包括矩阵乘法模块110b、加法树模块130b、功能函数模块140b、逐点相乘运算模块160b等级联计算子模块,以及第二缓存120b和第三缓存150b等级间缓存。
矩阵乘法模块100f接收前向矩阵系数(前向权重数据)。矩阵乘法模块100b接收后向矩阵系数(后向权重数据)。
在控制模块400的控制下,第一缓存200f和200b分别向组合模块300输出相对应的第一输出(前向计算输出)和第二输出(后向计算输出)。
组合模块对第一输出(前向计算输出)和第二输出(后向计算输出)执行组合运算以输出组合结果yt
由此,分别由前向LSTM计算模块100f和后向LSTM计算模块100b进行前向LSTM计算和后向LSTM计算,可以实现前向LSTM计算和后向LSTM计算的同步并行运算,尽快得到相对应的第一输出和第二输出,减少计算等待时间。
Bi-LSTM计算需要分别完成前向(Forward)和后向(Backward)运算,该实施例采用对称设计,可以同时完成相应向量的双向计算,最后将各向量的对应各向结果对应相加后,得到最终运算结果。由于采用对称结构,可更加高效的实现Bi-LSTM。
由于前向/后向LSTM计算可以同时进行,相对于例如上文中参考图3描述的方案,计算延迟可以减少一半,但同时需要两倍的计算逻辑。如上所述,这是一种面积和速度的置换/折衷。
另外,在前向和后向LSTM计算模块中,还可以如图4所示,分别设置多个矩阵乘法模块110,以便并行进行多个矩阵乘法运算。
上面描述了本发明各实施例的用于LSTM网络的硬件加速器。
本发明的实施例通过流水线设计达到了降低响应延时、提高计算性能的目的。流水线设计可有效地平衡IO带宽、片上资源与计算性能。LSTM计算主要在于矩阵乘法运算和逐点相乘运算。双向LSTM的特点是需要分别完成所有帧的前向和后向运算,然后将前向和后向相应帧(对应于相同输入向量xt)的结果相加后得到一层的计算结果。LSTM运算通常包含多层。一层LSTM计算中又包含众多的矩阵乘法运算。本发明的实施例通过顺序或并行的流水线方式完成矩阵乘法运算,达到了降低响应延迟,提高计算性能的目的。
上文中在有关控制模块400的描述中,已经描述了该LSTM网络加速器的部分控制方案。
下面简要描述一下,在一个实施例中,该LSTM网络硬件加速器的控制方法。该控制方法可以适用于上文中参考2-5所示的各硬件加速器。
首先,在步骤1,控制模块400读取计算所需的输入向量到输入缓存500。
接着,在步骤2,控制模块400依据全局控制信息读取LSTM计算所需的权重数据,即相应矩阵的矩阵参数。
在步骤3,当输入向量和计算所需的权重数据均准备完成后,控制模块400给出计算开始信号,矩阵乘法模块110依次或并行开始LSTM中所包含的矩阵计算。
在步骤4,矩阵乘法模块110依次或并行完成各个矩阵运算,并将计算结果存储在第二缓存120中。当在第二缓存120中已经准备好加法树模块130执行计算所需的数据准备后,控制模块400发出指令,使得加法树模块130开始从第二缓存120中读取相应数据,并完成加法树运算。由于在矩阵乘法模块110和加法树模块130之间设置了第二缓存120,加法树运算和矩阵乘运算可以以流水线方式同时进行。
在步骤5,同样的,由于在功能函数模块140和逐点相乘运算模块160之间设置了第三缓存150,可以在控制模块400控制下依次以流水线方式完成功能函数运算和逐点相乘运算,并将运算结果写入到第一缓存200中。例如在前向和后向LSTM计算由不同的LSTM计算模块执行的情况下,可以将前向和后向计算的输出(即第一输出和第二输出)分别写入相应的两个第一缓存200中。
在步骤6,前向和后向运算可以依次执行,也可以同步或接近同步进行。重复步骤4、5,直到针对所有输入向量帧xt的计算完成。控制模块400控制第一缓存200输出同帧(同一个输入向量xt)对应的前向和后向LSTM计算结果(即第一输出和第二输出),并通过加法树计算模块得到该帧(同一个输入向量xt)对应的Bi-LSTM计算结果。此时,即完成了所有帧一层的Bi-LSTM计算;
然后,在需要执行多层Bi-LSTM计算的情况下,重复步骤3到步骤6,直到Bi-LSTM要求的所有层均计算完成。
通过该控制方法,可以实现流畅的Bi-LSTM计算,达到了降低响应延迟,提高计算性能的目的。
上文中已经参考附图详细描述了根据本发明的用于LSTM网络的硬件加速器。
附图中示出了多个模块。应当明白,这些模块还可以以各种不同的方式来组合或重新划分。而这样的组合或重新划分都应当在本发明的保护范围之中。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (12)

1.一种用于双向长短期记忆网络的硬件加速器,包括:
LSTM计算模块,用于对T个有序输入x1,x2,x3,……,xT进行前向LSTM计算,得到分别对应于所述T个有序输入的T个第一输出y1f,y2f,y3f,……,y(T-2)f,y(T-1)f,yTf,并对所述T个有序输入xT,xT-1,xT-2,……,x3,x2,x1进行后向LSTM计算,得到分别对应于所述T个有序输入的T个第二输出yTb,y(T-1)b,y(T-2)b,……,y3b,y2b,y1b,其中,T为正整数;
第一缓存,用于缓存所述第一输出y1f,y2f,y3f,……,y(T-2)f,y(T-1)f,yTf和所述第二输出yTb,y(T-1)b,y(T-2)b,……,y3b,y2b,y1b;以及
组合模块,用于对所述第一缓存中缓存的对应于同一个输入xt的第一输出ytf和第二输出ytb执行组合运算,以得到对应于所述同一个输入xt的组合输出yt,其中,t为1至T的正整数。
2.根据权利要求1所述的硬件加速器,还包括:
控制模块,用于控制所述LSTM计算模块和/或所述第一缓存和/或所述组合模块的运行。
3.根据权利要求2所述的硬件加速器,其中,
所述控制模块响应于所述第一缓存中存在对应于同一个输入xt的第一输出ytf和第二输出ytb,执行控制以从所述第一缓存向所述组合模块发送所述第一输出ytf和所述第二输出ytb
4.根据权利要求2所述的硬件加速器,其中,
所述LSTM计算模块包括多个级联计算子模块和多个级间缓存,
所述级间缓存分别用于缓存上一级计算子模块的级间输出,以作为下一级计算子模块的级间输入。
5.根据权利要求4所述的硬件加速器,其中,
所述控制模块响应于所述级间缓存中存在用于下一级计算子模块的级间输入,执行控制以从所述级间缓存向所述下一级计算子模块发送相应的级间输入。
6.根据权利要求4或5所述的硬件加速器,其中,所述多个级联计算子模块包括以下中的至少一个:
矩阵乘法模块,用于执行矩阵与向量之间的矩阵乘法操作,以得到矩阵乘法结果,其中,所述输入、所述第一输出、所述第二输出都是向量;
加法树模块,用于对矩阵乘法结果进行累加操作,以得到累加结果;
功能函数模块,用于对累加结果和/或逐点相乘结果进行功能函数运算,以得到功能函数运算结果;以及
逐点相乘运算模块,用于对功能函数运算结果进行逐点相乘运算。
7.根据权利要求6所述的硬件加速器,其中,
所述LSTM计算模块包括多个并联的矩阵乘法模块,用于并行执行所述乘法操作。
8.根据权利要求6所述的硬件加速器,其中,所述多个级间缓存包括以下中的至少一个:
第二缓存,用于缓存所述矩阵乘法结果,作为所述加法树模块的级间输入;
第三缓存,用于缓存所述功能函数运算结果,作为所述逐点相乘运算模块的级间输入。
9.根据权利要求2所述的硬件加速器,其中,
在所述前向LSTM计算中,基于对应于前一个输入xt-1的第一输出y(t-1)f和当前输入xt,计算对应于当前输入xt的第一输出ytf
在所述后向LSTM计算中,基于对应于后一个输入xt+1的第二输出y(t+1)b和当前输入xt,计算对应于当前输入xt的第二输出ytb
10.根据权利要求9所述的硬件加速器,还包括:
输入缓存,用于缓存所述T个有序输入,并且缓存对应于前一个输入xt-1的第一输出y(t-1)f和/或对应于后一个输入xt+1的第二输出y(t+1)b,作为用于所述LSTM计算模块的输入,
所述控制模块响应于所述输入缓存中存在用于LSTM计算模块的输入,执行控制以从所述输入缓存向所述LSTM计算模块发送所述用于所述LSTM计算模块的输入。
11.根据权利要求1所述的硬件加速器,包括两个所述LSTM计算模块,分别用于执行所述前向LSTM计算和所述后向LSTM计算。
12.根据权利要求1所述的硬件加速器,其中,
所述组合模块为加法树模块。
CN201810157774.3A 2018-02-24 2018-02-24 用于lstm网络的硬件加速器 Active CN110197262B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810157774.3A CN110197262B (zh) 2018-02-24 2018-02-24 用于lstm网络的硬件加速器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810157774.3A CN110197262B (zh) 2018-02-24 2018-02-24 用于lstm网络的硬件加速器

Publications (2)

Publication Number Publication Date
CN110197262A CN110197262A (zh) 2019-09-03
CN110197262B true CN110197262B (zh) 2021-07-30

Family

ID=67743951

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810157774.3A Active CN110197262B (zh) 2018-02-24 2018-02-24 用于lstm网络的硬件加速器

Country Status (1)

Country Link
CN (1) CN110197262B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114186690B (zh) * 2022-02-16 2022-04-19 中国空气动力研究与发展中心计算空气动力研究所 飞行器知识图谱构建方法、装置、设备及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10515307B2 (en) * 2015-06-05 2019-12-24 Google Llc Compressed recurrent neural network models
CN105389772B (zh) * 2015-12-02 2018-09-07 百度在线网络技术(北京)有限公司 基于图形处理器的数据处理方法和装置
CN107229967B (zh) * 2016-08-22 2021-06-15 赛灵思公司 一种基于fpga实现稀疏化gru神经网络的硬件加速器及方法
CN107239825B (zh) * 2016-08-22 2021-04-09 赛灵思电子科技(北京)有限公司 考虑负载均衡的深度神经网络压缩方法
US10621486B2 (en) * 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
CN107239824A (zh) * 2016-12-05 2017-10-10 北京深鉴智能科技有限公司 用于实现稀疏卷积神经网络加速器的装置和方法
CN106775599B (zh) * 2017-01-09 2019-03-01 南京工业大学 递归神经网络的多计算单元粗粒度可重构系统及方法

Also Published As

Publication number Publication date
CN110197262A (zh) 2019-09-03

Similar Documents

Publication Publication Date Title
US11494620B2 (en) Systolic neural network engine capable of backpropagation
US10691996B2 (en) Hardware accelerator for compressed LSTM
CN107341547B (zh) 一种用于执行卷积神经网络训练的装置和方法
CN107657316B (zh) 通用处理器与神经网络处理器的协同系统设计
CN107341542B (zh) 用于执行循环神经网络和lstm运算的装置和方法
CN107301453B (zh) 支持离散数据表示的人工神经网络正向运算装置和方法
CN109375951B (zh) 一种用于执行全连接层神经网络正向运算的装置和方法
CN106991476B (zh) 用于执行人工神经网络正向运算的装置和方法
KR20190003612A (ko) 완전연결층 신경망 역방향 트레이닝 실행용 장치와 방법
WO2017185347A1 (zh) 用于执行循环神经网络和lstm运算的装置和方法
KR20190128795A (ko) 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템
JP7027371B2 (ja) ニューラルネットワークの演算装置、ニューラルネットワーク、ニューラルネットワークの制御方法
CN107886166B (zh) 一种执行人工神经网络运算的装置和方法
JPH06292178A (ja) 適応形ビデオ信号演算処理装置
Geng et al. O3BNN: An out-of-order architecture for high-performance binarized neural network inference with fine-grained pruning
CN113435682A (zh) 分布式训练的梯度压缩
CN113469355A (zh) 分布式系统中的多模型训练管道
CN115423081A (zh) 一种基于fpga的cnn_lstm算法的神经网络加速器
CN108734270B (zh) 一种兼容型神经网络加速器及数据处理方法
CN110197262B (zh) 用于lstm网络的硬件加速器
KR102263598B1 (ko) 파이프라인 구조를 가지는 인공신경망용 연산 가속 장치
Meng et al. PPOAccel: A high-throughput acceleration framework for proximal policy optimization
CN113112400B (zh) 一种模型训练方法及模型训练装置
US20230306236A1 (en) Device and method for executing lstm neural network operation
JPH076146A (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
TA01 Transfer of patent application right

Effective date of registration: 20200904

Address after: Unit 01-19, 10 / F, 101, 6 / F, building 5, yard 5, Anding Road, Chaoyang District, Beijing 100029

Applicant after: Xilinx Electronic Technology (Beijing) Co., Ltd

Address before: 100083, 17 floor, four building four, 1 Wang Zhuang Road, Haidian District, Beijing.

Applicant before: BEIJING DEEPHI TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant