一种动态多精度神经网络加速单元
技术领域
本发明涉及集成电路领域及人工智能领域,具体地说涉及系统级别的集成电路芯片,特别涉及一种动态多精度神经网络加速单元。
背景技术
随着数据的爆炸增长以及计算性能的飞速提升,机器学习已经变得越来越火热,逐渐渗入到我们生活中的各个角落:常见的应用有语音视频比如苹果公司的Siri以及微软公司的Cortana;人脸识别如苹果公司的Apple iPhoto和谷歌公司的Google Picasa;人工智能比如谷歌旗下DeepMind公司的Alhpa Go已经击败了人类的顶尖棋手。目前,机器学习领域中最吸引人目光的是以神经网络为代表的深度学习。
深度神经网络通过建立模型模拟人类大脑的神经连接结构,在图像处理,语音识别等领域有了很大的突破。但是由于神经网络模型越来越复杂,权重数据越来越大,所需精度越来越高,以及卷积神经网络的兴起,较大的图像输入数据,对硬件提出了较高的要求。通常使用的通用处理器通用芯片由于其通用性以及分支预测,地址合并等通用功能,并不完全适用于神经网络的加速,且会占用芯片的设计面积以及资源。现有的通用处理器已经慢慢不再能满足神经网络加速的要求,于是人们开始设计专用的神经网络加速硬件来加速神经网络。
由于现场可编程逻辑门阵列(FPGA)可编程性强,作为加速器研发周期短,在它上面实现神经网络加速的研究越来越多。但目前的深度神经网络计算还是重度依赖密集的浮点矩阵乘,抛开独特的数据类型(利用稀疏压缩后的数据类型)设计,它更利于映射到GPU上(常规并行性),因此市场上依然是GPU被广泛地用于加速深度神经网络。FPGA虽然提供了卓越的能耗效率,但它并不能达到当今GPU的性能,现阶段还不适合普及。
发明内容
针对上述存在问题或不足,为了解决现有神经网络加速技术存在的功耗、成本与面积等问题,本发明提供了一种动态多精度神经网络加速单元,是一种专用集成电路(ASIC),该芯片在同等的芯片面积下,相较于GPU或FPGA降低了功耗和成本,并且提高了芯片的计算性能。并且相对于一般的专用集成电路,本发明由于其可编程性以及多精度,更具有灵活性。该ASIC的实现使得低功耗低成本高性能的在线学习人工智能芯片成为可能。
具体技术方案如下:
一种动态多精度神经网络加速单元,包括:数据接口模块、配置接口模块、内存接口、输入缓冲模块、神经网络计算单元、内存调度单元、输出缓冲模块和系统控制模块。
所述配置接口模块通过向系统控制模块输送配置信息来配置整个系统。
所述数据接口模块负责向系统传输输入数据。
所述内存接口与输入缓冲模块、内存调度单元和输出缓冲模块相连;通过内存调度单元的控制以及监控下,向输入缓冲模块传输内存中储存的权重数据,或接受输出缓冲模块的运算结果数据,或通过内存调度单元控制暂存神经网络计算单元的中间运算结果。
所述输入缓冲模块与数据接口模块、内存接口和神经网络计算单元相连接,将内存中的权重数据、以及通过数据接口获得的输入数据,经过数据预处理后送入神经网络计算单元。
所述输出缓冲模块与内存调度单元、内存接口相连,在神经网络计算单元得到最终运算结果后,在内存调度单元的调度下,将运算结果排列准备,存入对应的内存地址中。
所述内存调度单元负责数据的调度以及与内存的交互,从相应地址处取数据、将计算的最终结果存入相应的内存地址、或将神经网络计算单元运算结果暂时存入内存;所述系统控制模块通过监控神经网络计算单元,以及内存调度单元的当前数据流动状态,控制输入缓冲模块、神经网络计算单元、内存调度单元以及输出缓冲模块协同同步工作。
所述系统控制模块通过监控神经网络计算单元,以及内存调度单元的当前数据流动状态,控制输入缓冲模块、神经网络计算单元、内存调度单元以及输出缓冲模块协同同步工作。实现根据神经网络模型的需要,满足不同精度的数据类型运算。同时支持神经网络中的基本运算,例如卷积,池化,非线性映射,矩阵乘等。
所述内存调度单元负责数据的调度以及与内存的交互。
所述神经网络计算单元包含N个并行的处理单元(PE)阵列,N≥2,根据神经网络算法模型编程设置相应数量的PE阵列并行运行,来提高计算处理效率以及速度,用以进行卷积运算和矩阵乘法运算。处理单元(PE)阵列是由S个处理单元(PE)构成的n1×m1的二维矩阵,n1和m1均≥2,各处理单元(PE)间的连接通路为可编程,以支持不同规模的神经网络算法模型。
所述神经网络计算单元进行卷积运算时,根据卷积核尺寸大小配置PE个数来满足计算要求。同时还通过配置PE阵列的个数在输出通道维度上以及输入数据维度上进行并行,以控制不同PE阵列输出不同的输出通道,以及控制多个PE阵列同时处理同一个输入图像的不同部位的数据,提高并行度,从而加速运算。
所述神经网络计算单元进行矩阵乘法运算时,根据输入矩阵的尺寸大小配置PE以及PE阵列在行或列的维度上拼接,以满足计算要求。
进一步的,所述数据接口、内存接口、输入缓冲模块和输出缓冲模块可挂靠在片内的总线上,提高传输效率,优化结构。
进一步的,所述神经网络计算单元在每个PE阵列后还连接有M级加法链,在所有的M级加法链后还连接有K级加法树以减少关键路径延时从而提高系统速度和计算效率。
进一步的,所述神经网络计算单元的每个PE均可处理多个数据精度的浮点数和定点数乘加运算,数据精度为int-16、int-8、int-4、int-2、int-1和floating-16。
进一步的,所述神经网络计算单元的PE所用硬件资源复用,高位宽的乘法运算复用低位宽乘法器,所有数据位宽的加法运算复用同一个加法器。
进一步的,所述神经网络算法模型为ResNet,VggNet,GoogleNet,YoLo或RCNN。
本发明提供的一种动态多精度神经网络加速单元,通过将PE单元阵列化后,再次将PE单元阵列作为阵列单元的双重阵列设计,来支持不同的神经网络层级运算,满足不同算法以及不同数据精度的需求。还对神经网络计算单元进行硬件加速设计,在整体设计中加入流水线设计,极大提升数据吞吐率与运算速度,且重点优化神经运算单元的乘加单元,提升硬件资源的复用,极大减少硬件面积;能根据神经网络模型的需要,满足不同精度的数据类型运算;同时支持神经网络中的基本运算,例如卷积,池化,非线性映射,矩阵乘等。
附图说明
图1是本发明的架构框图。
图2是本发明神经网络计算单元的架构框图。
图3是本发明单个PE的结构示意框图。
图4是本发明实施例低位宽乘法器搭建高位宽乘法器的结构框图。
图5是本发明实施例映射一种卷积运算时数据流动示意图。
图6是本发明实施例映射一种矩阵运算时数据流动示意图。
具体实施方式
为使本发明的发明目的,技术方案和优点更加清楚,下面将结合附图和具体实施例对本发明作进一步地详细描述。
实施例一
本实施例提供的一种动态多精度神经网络加速单元,应用于智能辅助驾驶领域AI加速芯片设计,其架构参见图1,包括:数据接口模块、配置接口模块、内存接口、输入缓冲单元、神经网络计算单元、内存调度单元、输出缓冲单元和系统控制模块。
所述系统控制模块实施对输入缓冲模块、内存接口、神经网络计算单元、内存调度单元、输出缓冲模块的控制,通过监控整个神经网络的进程,控制协调整个系统。
所述配置接口模块可以通过向系统控制模块输送配置信息来根据需要配置整个系统。
所述系统控制模块可以挂靠在外围总线上,如AMBA的APB总线等,通过总线与配置接口、外部系统等模块交互。
所述数据接口模块负责向系统传输输入数据,支持USB、MIPI、RGB888、BT1120、BT656等接口,来传输图像数据以及其他类型的数据。
所述内存接口与输入缓冲模块、内存调度单元和输出缓冲模块相连;所述内存接口可以通过内存调度单元的控制以及监控下,向输入缓冲模块传输内存中储存的权重数据,或接受输出缓冲模块的运算结果数据,或在数据规模比较大时,通过内存调度单元控制暂存神经网络计算单元的中间运算结果。
所述输入缓冲模块与数据接口模块、内存接口、神经网络计算单元相连接,将内存中的权重数据、以及通过数据接口获得的输入数据,经过数据预处理后送入神经网络计算单元。
所述输出缓冲模块与内存调度单元、内存接口相连,所述输出缓冲模块在神经网络计算单元得到最终运算结果后,在内存调度单元的调度下,将运算结果排列准备,存入对应的内存地址中。
所述数据接口、内存接口、输入缓冲模块,输出缓冲模块可挂靠在片内的总线上,如AMBA的AXI总线协议等,提高传输效率,优化结构。
所述内存调度单元负责数据的调度以及与内存的交互:比如从相应地址处取数据、将计算的最终结果存入相应的内存地址、或在神经网络计算单元所处理数据过大时,将部分运算结果暂时存入内存,随后再取出等用途。
所述神经网络计算单元的结构如图2所示,包括:N个并行的处理单元(PE)阵列、与阵列相连的加法链、以及加法树。
单个PE阵列可根据实际应用以及卷积核尺寸的要求,排列成所需要的大小,例如3×3、5×5等尺寸大小(一般情况下为正方形阵列)。
可以设置N个PE阵列相并行,来提高计算处理效率以及速度。
在每个单个PE阵列后可连接M级加法链,M为每个PE阵列的阶数,所述M级加法链将PE阵列的计算结果分步相加,而不是将所有结果一起相加,这在硬件层面上考虑可以用来提升计算的效率以及速度。
在所有的加法链后可以连接K级加法树,所述K级加法树用来处理前面M级加法链的结果,其中
,N为并列的PE阵列个数。用来提高计算的效率以及速度,并且可以减少关键路径延时以提高系统速度和计算效率。
本发明所述PE主要完成乘法以及累加操作,支持多精度数据类型的计算,支持浮点数也支持定点数的计算。
具体地,所述神经网络计算单元中的PE可以根据配置动态支持神经网络模型中不同精度的数据类型运算,比如:int-16、int-8、int-4、int-2、int-1、floating-16等数据类型。
如图3所示是本实施例的一种PE的结构。当输入数据以及权重数据为浮点数时,乘法操作,需要乘法器、加法器协同工作,完成浮点数指数相加、尾数相乘的操作;加法操作需要用到图示的比较器和移位寄存器,来完成浮点数加法中的比阶、对阶操作。当输入数据以及权重数据为整数时,乘法操作只需用到乘法器即可,加法操作也可以跳过浮点数模块,直接将数据输入到加法器即可。
当有数据在PE阵列中流动而不需要进行计算时,所述PE结构还包含了数据传输接口,经历过一个时钟周期后直接输出给下个PE,而不在本PE内进行运算。
可选地,图3中PE结构中所采用乘法器使用最低精度的数据类型来搭建。以int-16、int-8、int-4、floating-16数据类型为例,所有乘法器采用4bit乘法器搭建,更高数据宽度的乘法使用多个4bit乘法器拼接而成。
具体地,例如a,b为16bit数据类型,分别拆分成两个8bit数,a1、a2、b1、b2。则a、b的16bit乘法可拆分为8bit的乘法:
同理8bit数,可以拆分成两个4bit数,将8bit的乘法拆分为4bit的乘法。
于是可将16bit的数乘c,d法拆分成c1、c2、c3、c4,d1、d2、d3、d4的4bit数据。则c、d的16bit乘法可拆分为4bit乘法:
具体地,如图4所示,8bit乘法器由4个4bit搭建,16bit由4个8bit乘法器搭建。
可选地,本发明所述PE硬件结构中加法器复用同一个加法器,来达到尽可能的硬件资源复用,减少设计所需的面积。
具体地,如果N个T bit定点数相加,所需要的加法器位宽应为:
,即可复用同一个加法器。
为了方便说明,本实施例中以下所提到的单个PE阵列尺寸大小均为3×3,下面结合图5,以卷积运算为例给出本发明在进行卷积运算时的数据流动。
如图5所示,以卷积核尺寸为3x3为例,通过输入缓冲模块,把卷积核对应的权重值按照图示方式反向载入至阵列中。
当有输入数据时,输入缓冲模块从数据接口模块获得输入数据后,将输入特征数据以行为单位依次流入阵列,即按照R11、R21、R31、……、R1n、R2n、R3n的顺序送入阵列,其中n为输入数据的总列数。
经过两个单位时钟周期的数据流动后,第一列数据R11、R21、R31…….流动到阵列最右边,开始第一次卷积运算。每运算一次,数据向右移动一个步长,相当于卷积运算中卷积核在输入图像中向右移动一个步长,直到最后一列数据进入阵列完成运算后,数据向下移动一个步长,继续上面的操作,直到遍历完整个输入图像。
即完成公式所述计算:
其中Z代表神经元在三维空间的结果;
为输入通道数;
为其中一个输出通道;
为输出特征图在2-D平面上的坐标轴;
为卷积核的尺寸;
分别表示三个坐标轴上的坐标;
为卷积运算的步长;
是输入特征图像;W代表卷积核中的权重值;
为神经元的偏置;f为激活函数。
可选地,可以并行使用多个PE阵列来同时处理输入数据,来提高计算的效率以及计算速度。比如可用资源一共有3个PE阵列,即3×9=27个PE。输出通道也有3个,那么每个PE就可负责一个输出通道,3个输出通道并行输出。又如只有一个输出通道,可使用3个PE阵列同时处理输入图像,比如分别处理1~3行、4~6行、7~9行……n2~n2+2行,其中n2<(m-1),m为输入数据的总行数。
可选地,本发明除了可以进行卷积运算以外,也可以用于进行矩阵运算。图6中,给出了本发明进行矩阵运算时的数据流动。
可选地,权重矩阵从PE阵列的一侧流入,输入矩阵从另一侧流入。如图6所示,计算[3,n3]的输入矩阵和[n3,3]的权重矩阵,结果为[3,3]的矩阵。权重矩阵从PE阵列的上段向下流动,输入矩阵从PE阵列的左侧向右端流入。在权重矩阵中,数据按列输入、在输入矩阵中,数据按行输入,并且相邻的行或者列之间相隔一个时钟周期,目的是不丢失矩阵乘法的部分结果。
具体地,例如PE阵列中位于第二行第一列的矩阵,如果没有相隔一个时钟周期,第二行的输入数据会比第一列的权重数据早一个周期到达。相隔一个时钟周期后,第二行的输入数据和第一列的权重数据可同时到达这个PE,保证数据以及结果的正确。
每一个单个PE计算的是矩阵乘中一行乘一列的结果,位于第一行第一列的PE输出的是结果的矩阵乘结果的第一行第一列即S11,相应坐标的PE计算结果矩阵中相应位置的结果,即PE阵列和结果矩阵大小是对应的。
可选地,可使用多个3×3的PE阵列拼接,来满足不同大小矩阵的乘法。比如[3,n3]和[n3,6]的数据矩阵以及权重矩阵,结果为[3,6]的矩阵。可在行维度上并行两个阵列,形成3×6的PE阵列,就可满足计算要求。同理若结果为[6,3]的矩阵,可在列的维度上并行两个阵列,形成6×3的PE阵列。若要计算[m3,n3]矩阵和[n3,m3]矩阵的乘法,结果为[m3,m3]的矩阵,需要在行、列的维度上各并行(m3/3)个阵列。
可以算出矩阵乘法的结果,其中M代表神经元在二维空间的结果;
为输出结果的横纵坐标;O是输出层的神经元数目;D为输入数据;W为权重数据;Bias为神经元的偏置;f为激活函数。
在整个卷积运算以及矩阵运算过程中,系统控制模块通过监控神经网络计算单元,通过内存调度单元控制数据出入以及阵列中的数据流动,控制输入缓冲模块、神经网络计算单元、内存调度以及输出缓冲模块协同同步工作。
本发明实施例提供的技术方案带来的有益效果是:
本发明提供的一种动态多精度神经网络加速单元,通过系统控制模块控制各单元协同工作进行神经网络运算的加速。本发明中的神经网络计算单元采用通用硬件加速设计,可编程控制神经网络运算类型以及运算规模。设计中加入流水线设计,极大提升数据吞吐率与运算速度,并重点优化神经运算单元的乘加单元,提升硬件资源的复用,极大减少硬件面积。本发明能根据神经网络模型的需要,满足不同精度的数据类型运算。同时支持神经网络中的基本运算,例如卷积,池化,非线性映射,矩阵乘等。可以通过不同计算部件之间的组合来支持不同的神经网络层级运算,满足不同算法的需求。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。