CN113191494A - 一种基于fpga的高效lstm加速器 - Google Patents

一种基于fpga的高效lstm加速器 Download PDF

Info

Publication number
CN113191494A
CN113191494A CN202110563708.8A CN202110563708A CN113191494A CN 113191494 A CN113191494 A CN 113191494A CN 202110563708 A CN202110563708 A CN 202110563708A CN 113191494 A CN113191494 A CN 113191494A
Authority
CN
China
Prior art keywords
module
lstm
data
fpga
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.)
Granted
Application number
CN202110563708.8A
Other languages
English (en)
Other versions
CN113191494B (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.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
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 Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN202110563708.8A priority Critical patent/CN113191494B/zh
Publication of CN113191494A publication Critical patent/CN113191494A/zh
Application granted granted Critical
Publication of CN113191494B publication Critical patent/CN113191494B/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/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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • G06F1/0307Logarithmic or exponential functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/781On-chip cache; Off-chip memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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/044Recurrent networks, e.g. Hopfield networks
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明公开了一种基于FPGA的高效LSTM加速器,FPGA加速器内部包括多个计算单元、存储单元和控制单元;计算单元包括矩阵向量乘法模块及Element_wise运算模块,矩阵向量乘法模块由4*N个DSP及4个加法器构成,N个DSP用于权重数据与输入数据的并行乘累加运算,并将N个乘累加结果相加得到单个门对应的结果向量,同时四个门的乘累加运算并行执行;Element_wise运算模块,用于计算当前时刻的细胞状态值和输出数据;多个计算单元采用并行运算及复用策略;存储单元用于缓存LSTM网络计算所需的权重数据、输入数据、输出值、以及细胞状态值;控制单元用于控制LSTM网络计算的状态转换和数据流传输过程,本发明FPGA加速器相对于通用处理器具有高性能、低功耗及大吞吐量的特点。

Description

一种基于FPGA的高效LSTM加速器
技术领域
本发明涉及计算机硬件加速领域,尤其是涉及一种基于FPGA的高效LSTM加速器及其设计方法。
背景技术
长短期记忆网络(Long Short-Term Memory,LSTM)是循环神经网络中的一个典型的代表,可以有效的解决循环神经网络中的长时依赖问题。随着应用规模的增大,神经网络模型算法的计算量和存储复杂度也在不断增大,大规模的神经网络模型在训练和预测过程中均需要考虑到存储、计算性能和能耗方面的问题,因此如何以高性能和低能耗的方式实现神经网络算法应用,是目前研究的热点。
现有的通用计算平台(CPU、GPU)受限于串行执行的结构,并行计算能力极其有限,且计算和存储相分离的结构使数据搬移占用大量存储器带宽和功耗,很难满足实际智能应用对功耗和性能的综合需求。FPGA由于具有可编程性、可重构性、高并行性以及低功耗等优点更适合作为神经网络硬件加速的平台。目前,一些研究人员针对卷积神经网络的推理阶段利用FPGA实现高性能加速,能效比可以达到GPU的3倍。因此根据LSTM网络算法自身的算法特性设计一种基于FPGA的高效LSTM硬件加速器,实现高性能和高并行度,减少运算过程中不必要的逻辑,获得更低的功耗开销,是当前非常具有研究价值的研究课题。
发明内容
本发明的目的是:提供一种基于FPGA的高效LSTM加速器,根据LSTM专用神经网络结构,在FPGA平台实现LSTM神经网络前向推理的完整运算过程。采用多个计算单元并行运算及复用策略,同时单个计算单元内4个门采用并行乘累加运算以及在单个门内采用N个DSP并行乘累加运算,同时采用定点量化、流水线设计及分层与多块存储加速策略,提升硬件加速器的计算性能,相对于通用处理器具有高性能和低功耗的特点。
本发明的技术方案是:
一种基于FPGA的高效LSTM加速器,所述FPGA加速器内部包括多个计算单元、存储单元和控制单元;
所述计算单元包括矩阵向量乘法模块及Element_wise运算模块,所述矩阵向量乘法模块由4*N个DSP及4个加法器构成,所述N个DSP用于权重数据与输入数据的并行乘累加运算,并将N个乘累加结果相加得到单个门对应的结果向量,同时四个门的乘累加运算并行执行;Element_wise运算模块,用于计算当前时刻的细胞状态值和输出数据;所述多个计算单元采用并行运算及复用策略;
所述存储单元用于缓存LSTM网络计算所需的权重数据、输入数据、输出值、以及细胞状态值;所述控制单元用于控制LSTM网络计算的状态转换和数据流传输过程。
进一步地,所述矩阵向量乘法模块,包括以下计算步骤:
步骤S1.将当前时刻输入x、上一时刻的输出h以及一个常数1合并为一个一维的长向量,将隐藏节点的权值以及偏置拼接成一个权重矩阵;
步骤S2.将合并后的长向量和权重矩阵进行乘法运算,四个门的乘累加运算并行执行,其中,每个门的乘累加运算由N个DSP并行执行,即每次依次将长向量中的N个输入值及权重矩阵中的4*N个权重值分配给每个门的DSP,4*N个DSP并行地进行乘累加运算,将每个门对应的N个DSP得到的结果值相加得每个门对应的结果向量,从而获得四个门对应的结果向量。
进一步地,所述的Element_wise运算模块,采用时分复用的策略,将运算过程分成三个不同的状态周期,实际消耗的资源只有一个sigmoid激活函数模块,一个tanh激活函数模块,一个加法器和一个乘法器,最终得到当前时刻的细胞状态值以及当前时刻的输出值,具体包括以下计算步骤:
步骤S1.第一个周期将输入门对应的结果向量进行sigmoid函数激活计算得到输入门i,同时将记忆门对应的结果向量进行tanh函数激活计算得到记忆门g,然后将输入门i和记忆门g相乘;
步骤S2.第二个周期将遗忘门对应的结果向量进行sigmoid函数激活计算得到遗忘门f,将遗忘门f与上一时刻的细胞状态值Ct-1相乘后,再加上第一周期的输出i×g,更新当前时刻新的细胞状态值Ct
步骤S3.第三个周期将输出门对应的结果向量进行sigmoid函数激活计算得到输出门o,同时将新的细胞状态值Ct进行tanh函数激活计算,然后将两者进行乘法运算得到当前时刻的输出值ht
进一步地,所述FPGA加速器采用并行运算提升运算性能,为了提升加速性能,采用定点量化、流水线设计及分层与多块存储策略的优化手段。
进一步地,所述定点量化为采用数据结构优化技术对浮点数据进行低位宽的定点量化,采用16位二进制来表示定点数,对于有符号数,最高位是符号位,有效位有15位,小数点之后可以有0-15位;对于无符号数,有效位有16位,小数点之后可以有0-16位。
进一步地,所述流水线设计为:矩阵向量乘法模块计算完成后将数据送入Element_wise模块后不需要等待,直接开始下一时刻的矩阵向量乘法运算,形成矩阵向量乘法运算和Element_wise运算的流水线设计。
进一步地,所述分层与多块存储策略为存储单元划分为权重缓存、输入缓存、输出缓存及计算单元的内部缓存,将LSTM网络每一层的权重数据存储在权重缓存的多个BRAM内,后续并行地从多个BRAM中读取权重数据依次传输至计算单元的内部缓存,从而完成每个计算单元中4个门对应的权重矩阵读入;当前时刻的输出值缓存在输出缓存中以便提供给下一时刻的计算,通过分层与多块存储策略可以有效减少数据交换的时间。
进一步地,所述FPGA加速器还包含全连接模块,所述全连接模块将最后一层LSTM的最后时刻输出值与全连接层的权重矩阵进行矩阵乘法运算提取特征,通过对特征加权求和得到两个类别的分数,所述全连接层的权重数据缓存在权重缓存的1个BRAM内;所述全连接模块包含8个乘法器和10个加法器。
进一步地,所述FPGA加速器还包含softmax模块,所述softmax模块用于将经过全连接模块后的分数映射为概率;
所述softmax模块采用查找表的方式来实现指数函数的运算,通过公式转换将以e为底的指数函数化为以1/e为底的指数函数,将1/e为底的指数函数分成有限的区间,每个区间分别采用一个固定值近似,在FPGA上存储每一个区间的系数值;采用查找表的方式实现指数函数运算的具体计算步骤如下:
步骤S1.计算输入两个类别的分数的差值绝对值;
步骤S2.选取差值绝对值对应区间的系数值;
步骤S3.将得到的系数值与固定值32768相加作为分母、系数值与固定值32768作为分子送入除法器中获得最终的概率值。
本发明的有益效果在于:
在满足FPGA平台资源的前提下,采用并行运算和流水线设计实现LSTM网络的加速运算,其中并行运算体现在多个计算单元、4个门及单个门内的累加乘均采用并行运算;同时通过优化存储单元设计采用多级分块的存储策略减少了数据搬运所需的时间;另外对模型中的浮点数进行低位宽的定点量化等方式,合适的定点数位宽来进行线性量化可以有效降低存储资源和内存访问的开销,同时对最终模型结果的影响可以忽略不计。本发明显著提升了LSTM神经网络在硬件上的吞吐率,同时降低了片上资源的需求,在保证了模型网络的准确性前提下,大大增加了网络运算速度。
附图说明
图1是基于FPGA的深度神经网络硬件加速器的设计方法流程图;
图2是控制单元的运算状态图;
图3是存储单元设计示意图;
图4是矩阵向量乘法模块示意图;
图5是Element_wise模块示意图;
图6是激活函数模块示意图;
图7是全连接层模块示意图;
图8是softmax函数模块示意图;
图9是矩阵向量乘法模块精度设计图;
图10是Element-wise运算模块精度设计图;
图11是sigmoid激活函数模块精度设计图;
图12是tanh激活函数模块精度设计图;
图13是全连接模块精度设计图;
图14是softmax激活函数精度设计图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,本发明中的临时、第一均是为了说明算法训练中的不同阶段,没有限定意义。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,一种基于FPGA的高效LSTM加速器,所述FPGA加速器内部包括多个计算单元(PE)、存储单元、全连接模块、softmax模块及控制单元;
所述计算单元由矩阵向量乘法模块及Element_wise运算模块串联构成,所述矩阵向量乘法模块由4*N个DSP及4个加法器构成,所述N个DSP用于权重数据与输入数据的并行乘累加运算,并将N个乘累加结果相加得到单个门对应的结果向量,同时四个门的乘累加运算并行执行;Element_wise运算模块,用于计算当前时刻的细胞状态值和输出数据;所述多个计算单元采用并行运算及复用策略;所述全连接模块将最后一层LSTM的最后时刻输出值与全连接层的权重矩阵进行矩阵乘法运算提取特征,通过对特征加权求和得到两个类别的分数;所述softmax模块用于将经过全连接模块后的分数映射为概率。
在本实施例中LSTM网络采用2层网络,共计128个隐藏节点。矩阵向量乘法模块由4*4个DSP及4个加法器构成,即单个门对应的结果向量利用4个DSP及1个加法器实现,FPGA加速器包含32个计算单元,此时32个计算单元通过复用4次实现一层中128个隐藏节点的计算。全连接层加速模块主要包括接受第二层LSTM的输出作为输入,然后与对应的权重矩阵进行乘累加操作,得到相应加权分类的分数,再经过softmax激活函数映射得到两个最终的输出结果。
所述存储单元用于缓存LSTM网络计算所需的权重数据、输入数据、输出值、以及细胞状态值;
如图2所述,所述控制单元用于控制LSTM网络计算的状态转换和数据流传输过程,其中,数据流传输具体如下:控制单元主要控制FPGA片外DRAM和片上BRAM的读写信号,所述权值数据及偏置是从片外DRAM读入,控制单元还控制整个前向推理运算过程中输入数据、权重数据以及计算中间数据的分配,同时还控制了加速器整体的计算逻辑;状态转换具体如下:加速器控制单元由四个状态组成,其中S0是空闲状态,等待LSTM计算开始;S1状态是将LSTM网络中的权重数据从权重缓存依次写入到32个并行计算单元的内部缓存中;S2状态是LSTM前向推理算法的计算,其中包括矩阵向量乘法运算及Element-wise运算;S3状态表示全连接层和softmax运算;S4状态表示计算结束,完成了整个LSTM网络加速流程。当开始使能信号start有效时,加速系统从S0状态进入S1状态,开始从权重缓存中读取权重数据然后逐个写入计算单元的内部缓存中;当数据写入完成时,write_done信号有效,系统开始进入S2状态,LSTM计算使能信号calculate有效开始第一个时刻的运算,当所有时刻运算均完成后,LSTM_done信号有效完成一层LSTM的加速计算,同时跳转回S0空闲状态开始下一层的LSTM网络计算。待所有层LSTM计算完成信号calculate_done有效,系统进入S3状态,开始分类运算。待全连接层和softmax运算完成并输出最终结果后dense_done信号有效,系统转入S4状态,标志加速过程运算完成。
如图3所示,所述矩阵向量乘法模块,这一部分运算可以分层与多块存储策略提升加速效率,具体包括以下计算步骤:
步骤a.将当前时刻输入x、上一时刻的输出h以及一个常数1合并为一个一维的长向量,将隐藏节点的权值以及偏置拼接成一个权重矩阵;
其中,隐藏节点的权值以及偏置是由控制单元从片外DRAM读取,然后按照这四个权值矩阵按照网络对应的隐藏节点数划分,每个节点得到四个一维的向量,在向量末端加上对应的偏置值,并将对应四个门的一维向量拼接为一个权重矩阵,待所有隐藏节点的权重矩阵全部计算完成后将所有隐藏节点的权重数据存储在权重缓存的多个BRAM内;
步骤b.并行地从多个BRAM中读取权重数据依次传输至计算单元的内部缓存(PE_weight),从而完成每个计算单元中4个门对应的权重矩阵读入。
一般来说是1个BRAM存储多个对应计算单元需要的权重数据,具体实现如下:给每个计算单元设置一个地址,在发送权重数据时先进行计算单元的地址判断,当计算单元地址和发送的地址相同时,依次将权重数据发送到相应的计算单元中,设计权重缓存内数据存储的顺序需要按照每一时刻读取四个门的权重矩阵进行排列,即权重矩阵按照行顺序来存储。
步骤c.将合并后的长向量和权重矩阵进行乘法运算,四个门的乘累加运算并行执行,其中,每个门的乘累加运算由N个DSP并行执行,即每次依次将长向量中的N个输入值及权重矩阵中的4*N个权重值分配给每个门的DSP,4*N个DSP并行地进行乘累加运算,将每个门对应的N个DSP得到的结果值相加得每个门对应的结果向量,从而获得四个门对应的结果向量。
根据计算单元内部矩阵乘法模块的并行和复用规则,设计计算单元内部缓存内存储顺序需要按照每一时刻读取4个门*N个权重值进行排列,即将每个门对应的权重数据按照N个一组交替存储,这样可以保证每时刻取出的4*N个数据进行4个门及每个门的N个DSP并行计算。
本实施例中的步骤b中隐藏节点的权重数据存储在两块BRAM中(weight_biffer1及weight_buffer2),weight_biffer1中缓存前16个计算单元所需权重数据,weight_buffer2中缓存后16个计算单元所需权重数据,同时依次向计算单元发送数据。步骤a中LSTM运算模块中每个时刻的输入包括两个部分,第一部分是当前时刻的输入数据,第二部分是来自LSTM上一时刻的输出。其中第一部分的输入数据从输入缓存中读取,而上一个时刻的输出需要从输出缓存中读取,LSTM每个时刻的运算之后均会产生一个输出数据,因此需要将该输出数据缓存到输出缓存区中暂存起来,然后作为输入数据参与下一时刻的运算。最后全连接层运算所需的权重从weight_buffer3中直接读取,输入数据是上一层LSTM网络最后时刻的输出值,因此从输出缓存区中读取。通过分层与多块存储策略可以有效减少数据交换的时间。另外,全连接层运算所需的权重存储在权重缓存的1个BRAM内(weight_buffer3)中。
如图4所示,矩阵向量乘法模块由十六个DSP及四个加法器构成,四个门的乘累加运算并行执行,每个门的乘累加运算由4个DSP并行执行,直接从具体算法如下:每个时刻将合并后的长向量及权重数据分割成4个输入子数据及权重子数据,并行地在每个DSP内实现输入子数据及权重子数据的乘累加,并将得到的4个结果值相加获得一个门对应的结果向量,从而获得四个门对应的结果向量;其中隐藏节点的权重数据从计算单元的内部缓存内部直接读取,计算单元的内部缓存的权重矩阵仅在计算单元需要复用或者计算LSTM层数发生变化时才需要变化,可以有效地减少数据搬运所需的时间。
如图5所示,所述的Element_wise运算模块采用时分复用的策略,将运算过程分成三个不同的状态周期,实际消耗的资源只有一个sigmoid激活函数模块,一个tanh激活函数模块,一个加法器和一个乘法器,最终得到当前时刻的细胞状态值以及当前时刻的输出值,具体包括以下计算步骤:
步骤S1.第一个周期将输入门对应的结果向量进行sigmoid函数激活计算得到输入门i,同时将记忆门对应的结果向量进行tanh函数激活计算得到记忆门g,然后将输入门i和记忆门g相乘;
步骤S2.第二个周期将遗忘门对应的结果向量进行sigmoid函数激活计算得到遗忘门f,将遗忘门f与上一时刻的细胞状态值Ct-1相乘后,再加上第一周期的输出i×g,更新当前时刻新的细胞状态值Ct
步骤S3.第三个周期将输出门对应的结果向量进行sigmoid函数激活计算得到输出门o,同时将新的细胞状态值Ct进行tanh函数激活计算,然后将两者进行乘法运算得到当前时刻的输出值ht
为了进一步提升加速性能,所述FPGA加速器采用流水线设计:矩阵向量乘法模块计算完成后将数据送入Element_wise模块后不需要等待,直接开始下一时刻的矩阵向量乘法运算,形成矩阵向量乘法运算和Element_wise运算的流水线设计。
如图6所示,本发明中针对sigmoid和tanh激活函数模块通过线性分段后采用查找表来进行设计。当x∈(-∞,-8)时sigmoid(x)=0;当x∈(8,+∞)时sigmoid(x)=1;x∈[-8,8]这个范围内将sigmoid函数将分割成128个区域,每个区间分段采用aix+bi形式的线性函数近似。当x∈(-∞,-4)时tanh(x)=-1;当x∈(4,+∞)时tanh(x)=1;tanh函数将x∈[-4,4]分割成256个区域进行线性函数近似。Sigmoid和tanh函数的图像中心对称,因此可以通过f(-x)=1-f(x)等式变换,将系数的存储量减少一半。在硬件设计时提前将每个分段区的系数存放在两个RAM中,根据输入x的范围,生成对应的RAM的地址,读取相应的ai和bi的系数值,也就是选择相应的线性段,然后通过一个乘法器和一个加法器完成aix+bi的线性函数近似。其中sigmoid函数和tanh函数只是在ai和bi的取值上不同,电路模块的设计完全一样
为了进一步提升加速性能,所述定点量化为采用数据结构优化技术对浮点数据进行低位宽的定点量化,采用16位二进制来表示定点数,对于有符号数,最高位是符号位,有效位有15位,小数点之后可以有0-15位;对于无符号数,有效位有16位,小数点之后可以有0-16位,各个模块的精度设计如下:
图9为矩阵向量乘法模块精度设计图。第一层LSTM前32个输入数据x采用的Q1格式的定点数,权重数据采用Q15格式的定点数,将32位的乘累加结果截为Q7格式的16位定点数;后32个输入数据h来自上一时刻的输出,数据格式为Q15的定点数,为了保证整个乘累加过程中的小数点对齐,后32个数据的乘法结果同样需要截为Q7格式的定点数,然后进行溢出保护加。第二层矩阵乘法单元单元的前32个输入来自第一层的输出ht,后32个输入数据来自上一时刻的输出,因此输入数据均变成了Q15,每次乘累加后将32位的乘法结果截为Q12格式的定点数,从而满足精度要求。
图10为Element-wise运算模块精度设计图。第一层Element-wise输入数据i,f,g,o来自矩阵乘法模块的输出,数据格式均为Q7格式的定点数。经过激活函数sigmoid和tanh之后,数据格式均变为Q15;为了保证数据不产生溢出从而导致数据发生错误,状态值Ct的定点数格式需要设为Q9(整数部分要保留足够的位宽)。第二层Element-wise输入数据来变成了Q12格式的定点数,经过激活函数sigmoid和tanh之后,数据格式均变为Q15,状态值ct的定点数格式截成设为Q10格式定点数。两层当前时刻的输出值ht的取值范围均在(-1,1)之间,因此可以将32位乘法结果截为Q15格式的定点数,从而最大程度的保留结果精度。
图11为sigmoid激活函数模块精度设计图。两层sigmoid激活函数的输入数据格式不完全一样,因此需要根据不同的输入采用不同的方式截尾。第一层sigmoid的输入的格式均为Q7格式,存储在RAM中的系数均采用Q15格式,同时由于sigmoid的结果范围在(0,1)之间,因此可以将32位的乘法结果截为Q15格式的定点数,然后与系数b进行溢出保护加,输出Q15格式定点数。同理,第二层sigmoid的输入的格式均为Q12格式定点数,采取相应的结尾操作,最终的结果仍然使用Q15格式的定点数表示。
图12为tanh激活函数模块精度设计图。第一层tanh激活函数中,第一次输入数据的格式为Q7,同时存储在RAM中的系数格式为Q15,tanh函数的结果范围为(-1,1),因此可以将32位的乘法结果截为Q15格式的定点数,然后与系数b进行溢出保护加,输出Q15格式定点数。第二次tanh的输入为Q9格式,最终的结果仍然截为Q15格式的数据。第二层tanh激活函数中,第一次输入数据的格式为Q12,乘法结果截为Q15格式的数据,第二次tanh的输入为Q10格式,最终的结果仍然截为Q15格式的定点数。
图13为全连接模块精度设计图。全连接层的输入来自第二层LSTM最后一个时刻的128个输出,数据格式为Q15,权重数据的格式同样为Q15。由于全连接层如果发生溢出会导致最终的结果误差很大,因此必须保留足够的整数位宽,避免数据产生溢出,因此本发明中最终的结果采用Q10格式的定点数表示。
图14为softmax激活函数精度设计图。softmax的输入来自全连接层的乘累加结果,输入数据格式为Q10格式的定点数,经过softmax激活后的概率值范围在(0,1)之间。因此在本发明中最后经过除法器后的输出结果格式采用Q16格式的定点数表示。
如图7所示,所述全连接模块将最后一层LSTM的最后时刻输出值与全连接层的权重矩阵进行矩阵乘法运算提取特征,通过对特征加权求和得到两个类别的分数。在本实施例中全连接模块接受第二层LSTM的最后时刻输出作为输入,然后与对应的权重矩阵进行乘累加操作,得到加权后的两个分类结果。为了提升运算性能,设计全连接模块由八个乘法器、十个加法器构成。针对每个分类,同一时刻输入四个数据并行执行乘累加操作,再将四个乘累加后的计算结果相加即可得到一个分类的分数值。
如图8所示,所述FPGA加速器还包含softmax模块,所述softmax模块用于将经过全连接模块后的分数映射为概率;
所述softmax模块采用查找表的方式来实现指数函数的运算,通过公式将以e为底的指数函数化为以1/e为底的指数函数,输入数据在(0,6)之间分成48段,分段精度为0.001,根据全连接层输出的两个类别的分数的差值绝对值确定指数函数的输入范围,并查找差值绝对值所在的区间读取相应的RAM地址得到指数函数的系数值。利用一个加法器和两个除法器,将得到系数值与固定值32768(浮点数中1的Q15定点表示方式)相加得到分母,最后把系数值和固定值32768分别除以分母算出其对应的概率。
接下来利用具体的实验结果说明本发明的FGPA加速器具备高性能、低功耗、高精度及大吞吐量的优点。表1是LSTM软硬件结果的信噪比结果。定点数格式设计中采用了截尾和溢出保护加等操作,不可避免的会引入一定的误差,使用信号量化噪声比公式(SQNR)来衡量软硬件结果计算的误差,信噪比的计量单位是dB,信噪比越高代表数据的误差越小,结果精度也越准确,当信噪比在30dB以上时,认为FPGA硬件加速计算的结果是可以接受的。其中第一层LSTM网络的结果信噪比为76.49dB,第二层LSTM网络的结果信噪比为38.25dB,经过最终的softmax函数后,结果的信噪比可以达到60.07dB,硬件计算结果的精度在可接受范围之内。
层数 SQNR(信噪比)
第一层LSTM 76.49
第二层LSTM 38.25
全连接层 60.07
表1
表2为不同硬件平台实现LSTM推理算法的运行时间和功耗。其中CPU采用IntelCore i5-6500处理器,主频为3.2GHz;GPU采用NVIDIA GeForce CTX 1660,核心频率为1.785GHZ。FPGA采用的是Virtex-7 VC707开发板,具体型号为XC7VX485T,硬件加速器综合后的FPGA的工作频率可以达到200MHz。可以看到,相比CPU,基于FPGA的加速器可以获得近100倍的速度提升;相比GPU,基于FPGA的加速器可以获得近4倍的速度提升,但是功耗约为GPU功耗开销的三分之一。吞吐率是根据总吞吐量除以运行时间便可得出,吞吐率的单位为GOPS。吞吐量为加速器定点运算操作的数量乘以预测任务量,其中一次定点数的加减乘除操作。当预测任务基于FPGA的LSTM循环神经网络加速器设计与研究量为1时,隐藏层节点为128的LSTM总的操作数为17420291,时钟周期为24977,在200MHz的时钟频率下可以得到加速器的吞吐率约为139.3GOPS。
平台 CPU GPU FPGA
时间(ms) 12.979 0.541 0.125
功耗(W) 9.52 17 5.346
表2
表3为FPGA资源消耗情况。其中LUT占用比例为36.27%,DSP占用比例为18.29%,BRAM的占用比例为50.63%。本发明所提出的加速器设计充分考虑了资源复用和多级存储,在主流Xilinx V7开发板上综合资源利用率不超过80%,有利于设计的加速器跑到更高的频率。
资源 比例(%)
LUT 110126/303600 36.27%
DSP 512/2800 18.29%
BRAM 521.5/1030 50.63%
表3
以上实施例仅表达了本发明优选实施方式,其描述较为具体和详细但并不能因此而理解为对本申请专利范围的限制。对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于FPGA的高效LSTM加速器,其特征在于,所述FPGA加速器内部包括多个计算单元、存储单元和控制单元;
所述计算单元包括矩阵向量乘法模块及Element_wise运算模块,所述矩阵向量乘法模块由4*N个DSP及4个加法器构成,所述N个DSP用于权重数据与输入数据的并行乘累加运算,并将N个乘累加结果相加得到单个门对应的结果向量,同时四个门的乘累加运算并行执行;Element_wise运算模块,用于计算当前时刻的细胞状态值和输出数据;所述多个计算单元采用并行运算及复用策略;
所述存储单元用于缓存LSTM网络计算所需的权重数据、输入数据、输出值、以及细胞状态值;所述控制单元用于控制LSTM网络计算的状态转换和数据流传输过程。
2.根据权利要求1所述的基于FPGA的高效LSTM加速器,其特征在于,所述矩阵向量乘法模块,包括以下计算步骤:
步骤S1.将当前时刻输入x、上一时刻的输出h以及一个常数1合并为一个一维的长向量,将隐藏节点的权值以及偏置拼接成一个权重矩阵;
步骤S2.将合并后的长向量和权重矩阵进行乘法运算,四个门的乘累加运算并行执行,其中,每个门的乘累加运算由N个DSP并行执行,即每次依次将长向量中的N个输入值及权重矩阵中的4*N个权重值分配给每个门的DSP,4*N个DSP并行地进行乘累加运算,将每个门对应的N个DSP得到的结果值相加得每个门对应的结果向量,从而获得四个门对应的结果向量。
3.根据权利要求2所述的基于FPGA的高效LSTM加速器,其特征在于,所述的Element_wise运算模块,采用时分复用的策略,将运算过程分成三个不同的状态周期,实际消耗的资源只有一个sigmoid激活函数模块,一个tanh激活函数模块,一个加法器和一个乘法器,最终得到当前时刻的细胞状态值以及当前时刻的输出值,具体包括以下计算步骤:
步骤S1.第一个周期将输入门对应的结果向量进行sigmoid函数激活计算得到输入门i,同时将记忆门对应的结果向量进行tanh函数激活计算得到记忆门g,然后将输入门i和记忆门g相乘;
步骤S2.第二个周期将遗忘门对应的结果向量进行sigmoid函数激活计算得到遗忘门f,将遗忘门f与上一时刻的细胞状态值Ct-1相乘后,再加上第一周期的输出i×g,更新当前时刻新的细胞状态值Ct
步骤S3.第三个周期将输出门对应的结果向量进行sigmoid函数激活计算得到输出门o,同时将新的细胞状态值Ct进行tanh函数激活计算,然后将两者进行乘法运算得到当前时刻的输出值ht
4.根据权利要求2所述的基于FPGA的高效LSTM加速器,其特征在于,所述FPGA加速器采用并行运算提升运算性能,为了提升加速性能,采用定点量化、流水线设计及分层与多块存储策略的优化手段。
5.根据权利要求4中所述的基于FPGA的高效LSTM加速器,其特征在于,所述定点量化为采用数据结构优化技术对浮点数据进行低位宽的定点量化,采用16位二进制来表示定点数,对于有符号数,最高位是符号位,有效位有15位,小数点之后可以有0-15位;对于无符号数,有效位有16位,小数点之后可以有0-16位。
6.根据权利要求5所述的基于FPGA的高效LSTM加速器,其特征在于,所述流水线设计为:矩阵向量乘法模块计算完成后将数据送入Element_wise模块后不需要等待,直接开始下一时刻的矩阵向量乘法运算,形成矩阵向量乘法运算和Element_wise运算的流水线设计。
7.根据权利要求5所述的基于FPGA的高效LSTM加速器,其特征在于,所述分层与多块存储策略为存储单元划分为权重缓存、输入缓存、输出缓存及计算单元的内部缓存,将LSTM网络每一层的权重数据存储在权重缓存的多个BRAM内,后续并行地从多个BRAM中读取权重数据依次传输至计算单元的内部缓存,从而完成每个计算单元中4个门对应的权重矩阵读入;当前时刻的输出值缓存在输出缓存中以便提供给下一时刻的计算,通过分层与多块存储策略可以有效减少数据交换的时间。
8.根据权利要求5所述的基于FPGA的高效LSTM加速器,其特征在于,所述FPGA加速器还包含全连接模块,所述全连接模块将最后一层LSTM的最后时刻输出值与全连接层的权重矩阵进行矩阵乘法运算提取特征,通过对特征加权求和得到两个类别的分数,所述全连接层的权重数据缓存在权重缓存的1个BRAM内;所述全连接模块包含8个乘法器和10个加法器。
9.根据权利要求8所述的基于FPGA的高效LSTM加速器,其特征在于,所述FPGA加速器还包含softmax模块,所述softmax模块用于将经过全连接模块后的分数映射为概率;
所述softmax模块采用查找表的方式来实现指数函数的运算,通过公式转换将以e为底的指数函数化为以1/e为底的指数函数,将1/e为底的指数函数分成有限的区间,每个区间分别采用一个固定值近似,在FPGA上存储每一个区间的系数值;采用查找表的方式实现指数函数运算的具体计算步骤如下:
步骤S1.计算输入两个类别的分数的差值绝对值;
步骤S2.选取差值绝对值对应区间的系数值;
步骤S3.将得到的系数值与固定值32768相加作为分母、系数值与固定值32768作为分子送入除法器中获得最终的概率值。
CN202110563708.8A 2021-05-24 2021-05-24 一种基于fpga的高效lstm加速器 Active CN113191494B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110563708.8A CN113191494B (zh) 2021-05-24 2021-05-24 一种基于fpga的高效lstm加速器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110563708.8A CN113191494B (zh) 2021-05-24 2021-05-24 一种基于fpga的高效lstm加速器

Publications (2)

Publication Number Publication Date
CN113191494A true CN113191494A (zh) 2021-07-30
CN113191494B CN113191494B (zh) 2022-10-04

Family

ID=76985282

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110563708.8A Active CN113191494B (zh) 2021-05-24 2021-05-24 一种基于fpga的高效lstm加速器

Country Status (1)

Country Link
CN (1) CN113191494B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115018062A (zh) * 2022-05-30 2022-09-06 南京航空航天大学 一种基于fpga的卷积神经网络加速器
CN116805155A (zh) * 2023-08-25 2023-09-26 太初(无锡)电子科技有限公司 一种lstm网络处理方法、装置、设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180174036A1 (en) * 2016-12-15 2018-06-21 DeePhi Technology Co., Ltd. Hardware Accelerator for Compressed LSTM
CN108446761A (zh) * 2018-03-23 2018-08-24 中国科学院计算技术研究所 一种神经网络加速器及数据处理方法
CN108763159A (zh) * 2018-05-22 2018-11-06 中国科学技术大学苏州研究院 一种基于fpga的lstm前向运算加速器
CN110110851A (zh) * 2019-04-30 2019-08-09 南京大学 一种lstm神经网络的fpga加速器及其加速方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180174036A1 (en) * 2016-12-15 2018-06-21 DeePhi Technology Co., Ltd. Hardware Accelerator for Compressed LSTM
CN108446761A (zh) * 2018-03-23 2018-08-24 中国科学院计算技术研究所 一种神经网络加速器及数据处理方法
CN108763159A (zh) * 2018-05-22 2018-11-06 中国科学技术大学苏州研究院 一种基于fpga的lstm前向运算加速器
CN110110851A (zh) * 2019-04-30 2019-08-09 南京大学 一种lstm神经网络的fpga加速器及其加速方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
DAZHONG HE等: "《An FPGA-Based LSTM Acceleration Engine for Deep》", 《ELECTRONICS》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115018062A (zh) * 2022-05-30 2022-09-06 南京航空航天大学 一种基于fpga的卷积神经网络加速器
CN116805155A (zh) * 2023-08-25 2023-09-26 太初(无锡)电子科技有限公司 一种lstm网络处理方法、装置、设备及可读存储介质
CN116805155B (zh) * 2023-08-25 2024-01-19 太初(无锡)电子科技有限公司 一种lstm网络处理方法、装置、设备及可读存储介质

Also Published As

Publication number Publication date
CN113191494B (zh) 2022-10-04

Similar Documents

Publication Publication Date Title
CN108564168B (zh) 一种对支持多精度卷积神经网络处理器的设计方法
CN111459877B (zh) 基于FPGA加速的Winograd YOLOv2目标检测模型方法
CN113191494B (zh) 一种基于fpga的高效lstm加速器
CN109472361B (zh) 神经网络优化方法
CN110717583B (zh) 卷积电路、处理器、芯片、板卡和电子设备
Chen et al. A compact and configurable long short-term memory neural network hardware architecture
CN115018062A (zh) 一种基于fpga的卷积神经网络加速器
CN113792621B (zh) 一种基于fpga的目标检测加速器设计方法
Shahshahani et al. Memory optimization techniques for fpga based cnn implementations
CN113283587A (zh) 一种Winograd卷积运算加速方法及加速模块
CN113361695A (zh) 卷积神经网络加速器
Que et al. Recurrent neural networks with column-wise matrix–vector multiplication on FPGAs
CN112540946A (zh) 可重构处理器及其上多种神经网络激活函数计算方法
Lee et al. ECIM: exponent computing in memory for an energy-efficient heterogeneous floating-point DNN training processor
Shivapakash et al. A power efficiency enhancements of a multi-bit accelerator for memory prohibitive deep neural networks
Tsai et al. An on-chip fully connected neural network training hardware accelerator based on brain float point and sparsity awareness
CN117421703A (zh) 一种深度符号回归加速器及深度符号回归方法
CN111882050A (zh) 基于fpga的用于提高bcpnn速度的设计方法
Zhan et al. Field programmable gate array‐based all‐layer accelerator with quantization neural networks for sustainable cyber‐physical systems
Kang et al. Design of convolution operation accelerator based on FPGA
Su et al. Processing element architecture design for deep reinforcement learning with flexible block floating point exploiting signal statistics
Özkilbaç et al. Real-Time Fixed-Point Hardware Accelerator of Convolutional Neural Network on FPGA Based
CN115033204A (zh) 一种精度与位宽可重构的高能效近似乘法器
Huang et al. A high-speed VLSI fuzzy logic controller with pipeline architecture
Tan et al. Efficient Multiple-Precision and Mixed-Precision Floating-Point Fused Multiply-Accumulate Unit for HPC and AI Applications

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