一种基于数据压缩的神经网络处理器、设计方法、芯片转让专利

申请号 : CN201610977182.7

文献号 : CN106447034B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 韩银和许浩博王颖

申请人 : 中国科学院计算技术研究所

摘要 :

本发明提出一种基于数据压缩的神经网络处理器、设计方法、芯片,该处理器包括至少一个存储单元,用于存储操作指令与参与计算的数据;至少一个存储单元控制器,用于对所述存储单元进行控制;至少一个计算单元,用于执行神经网络的计算操作;控制单元,与所述存储单元控制器与所述计算单元相连,用于经由所述存储单元控制器获得所述存储单元存储的指令,并且解析所述指令以控制所述计算单元;至少一个数据压缩单元,用于按照数据压缩存储格式对所述参与计算的数据进行压缩,其中每个所述数据压缩单元与所述计算单元相连。本发明降低了神经网络处理器中数据资源的占用,提高了运算速度,提升了能量效率。

权利要求 :

1.一种基于数据压缩的神经网络处理器,其特征在于,包括:

至少一个存储单元,用于存储操作指令与参与计算的数据;

至少一个存储单元控制器,用于对所述存储单元进行控制;

至少一个计算单元,用于执行神经网络的计算操作,所述计算单元包括数据检索结构,保证被压缩的数据在计算单元中能够正确地与相应权重进行计算;

控制单元,与所述存储单元控制器与所述计算单元相连,用于经由所述存储单元控制器获得所述存储单元存储的指令,并且解析所述指令以控制所述计算单元;

至少一个数据压缩单元,用于按照数据压缩存储格式对所述参与计算的数据进行压缩,其中每个所述数据压缩单元与所述计算单元相连;

在进行数据调度过程时,根据所述计算单元的容量将所述参与计算的数据分为多个数据块,所述多个数据块依次载入到所述计算单元中,每个所述数据块按照所述数据压缩存储格式存储在所述存储单元中,所述数据压缩存储格式由<数值,偏移量>两部分构成,“数值”为所述参与计算的数据中非零数据的数值,“偏移量”为所述数值在所述数据块中的相对位置。

2.如权利要求1所述的基于数据压缩的神经网络处理器,其特征在于,所述存储单元包括输入数据存储单元、输出数据存储单元、权重存储单元、指令存储单元。

3.如权利要求2所述的基于数据压缩的神经网络处理器,其特征在于,所述输入数据存储单元用于存储所述参与计算的数据,所述参与计算的数据包括原始特征图数据与参与中间层计算的数据;所述输出数据存储单元包括计算获得的神经元响应值;所述权重存储单元用于存储已经训练好的神经网络权重;所述指令存储单元用于存储参与计算的指令信息。

4.如权利要求1所述的基于数据压缩的神经网络处理器,其特征在于,所述参与计算的数据依照所述数据压缩存储格式存储,保证数值为零的所述参与计算的数据不参与神经网络计算,只有非零的所述参与计算的数据会被存储并参与计算。

5.如权利要求2所述的基于数据压缩的神经网络处理器,其特征在于,所述计算单元从与其相关联的所述输入数据存储单元中获得数据以进行计算,并且向与其相关联的所述输出数据存储单元写入数据。

6.一种设计如权利要求1-5任意一项所述基于数据压缩的神经网络处理器的设计方法,其特征在于,包括:步骤1,所述控制单元对所述存储单元进行寻址,读取并解析下一步需要执行的指令;

步骤2,根据解析出的指令获得存储地址,并从所述存储单元中获取所述参与计算的数据与权重;

步骤3,将所述参与计算的数据与权重分别从输入数据存储单元与权重存储单元载入至所述计算单元;

步骤4,所述计算单元执行神经网络运算中的运算操作,其中通过所述计算单元中数据检索结构保证被压缩的数据可以与权重数据正确计算;

步骤5,将神经网络计算结果存储在输出数据存储单元中。

7.一种包括如权利要求1-5任意一项所述基于数据压缩的神经网络处理器的芯片。

说明书 :

一种基于数据压缩的神经网络处理器、设计方法、芯片

技术领域

[0001] 本发明涉及神经网络模型计算的硬件加速领域,特别涉及一种基于数据压缩的神经网络处理器、设计方法、芯片。

背景技术

[0002] 深度学习技术在近几年得到了飞速的发展。深度神经网络,尤其是卷积神经网络,在图像识别、语音识别、自然语言理解、天气预测、基因表达、内容推荐和智能机器人等领域取得了广泛的应用。
[0003] 深度学习所得到的深度网络结构是一种运算模型,其中包含大量数据节点,每个数据节点与其他数据节点相连,各个节点间的连接关系用权重表示。伴随神经网络复杂度的不断提高,神经网络技术在实际应用过程中存在占用资源多、运算速度慢、能量消耗大等问题,因此该技术在嵌入式设备或低开销数据中心等领域应用时存在严重的能效问题和运算速度瓶颈。采用硬件加速替代传统软件计算的方法成为了提高神经网络计算效率的一种行之有效方式。主流的硬件加速方式包括通用图形处理器、专用处理器芯片和现场可编程逻辑阵列(FPGA)等。
[0004] 当前的深度神经网络在实际应用中网络规模越来越大、数据吞吐量越来越高、任务类型越来越复杂,这会导致神经网络处理器电路规模变大、数据传输效率降低、计算速度变差。现有技术实际应用时,在神经网络计算过程中存在大量数值为0的数据元素,这类元素经过乘法和加法等数据运算后对运算结果不产生数值上的影响,但是神经网络处理器在处理这部分数据元素时会占用大量片上存储空间、消耗多余传输资源并增加运行时间,因此难以满足神经网络处理器的性能要求。
[0005] 学术界和工业界针对目前神经网络模型中存在大量计算无关数据这一问题,开展了大量研究。文献“Albericio J,Judd P,Hetherington T,et al.Cnvlutin:ineffectual-neuron-free deep neural network computing[C]//Computer Architecture(ISCA),2016ACM/IEEE 43rd Annual International Symposium on.IEEE,2016:1-13.”通过在片上提供大规模的存储单元实现大规模并行计算并以此为基础实现了对数据元素的压缩,但是该方法依赖大规模的片上存储单元以满足其在并行计算的需求,不适用于嵌入式设备;
文献“Chen Y H,Emer J,Sze V.Eyeriss:A Spatial Architecture for Energy-Efficient Dataflow for Convolutional Neural Networks[J].2016.”通过共享数据和权重实现数据重用并采用电源门控的方法关闭数据0的计算,可以有效提高能量效率,但是该方法只能降低运算功耗而无法跳过数值为0的元素进而加快计算速度。
[0006] 发明“一种神经网络加速器及其运算方法”,该发明适用于神经网络算法领域,提供了一种神经网络加速器及其运算方法,该神经网络加速器包括片内存储介质、片内地址索引模块、核心计算模块以及多ALU装置,片内存储介质,用于存储外部传来的数据或用于存储计算过程中产生的数据;片内数据索引模块,用于执行运算时根据输入的索引映射至正确的存储地址;核心计算模块用于执行神经网络运算;多ALU装置用于从核心计算模块或片内存储介质获取输入数据执行核心计算模块无法完成的非线性运算。该发明提供一种神经网络加速器,其在神经网络加速器中引入多ALU设计,从而提升非线性运算的运算速度,使得神经网络加速器更加高效,本发明与该发明的最大区别是在神经网络加速器中引入了数据压缩存储结构,提高了神经网络运算速度并降低了能量损耗。
[0007] 发明“加速深度神经网络算法的加速芯片的运算装置及方法”,该发明提供一种加速深度神经网络算法的加速芯片的运算装置及方法,所述装置包括:向量加法处理器模块,进行向量的加法或减法、和/或深度神经网络算法中的pooling层算法的向量化的运算;向量函数值运算器模块,深度神经网络算法中的非线性求值的向量化运算;向量乘加器模块,进行向量的乘加运算;所述三个模块执行可编程指令,互相交互以计算神经网络的神经元值和网络输出结果、以及、代表输入层神经元对输出层神经元作用强度的突触权重变化量;所述三个模块中均设置有中间值存储区域,并对主存储器进行读取与写入操作。由此,能够减少对主存储器的中间值读取和写入次数,降低加速器芯片的能量消耗,避免数据处理过程中的数据缺失和替换问题。本发明与该发明的最大区别是在神经网络加速器中引入了数据压缩存储结构,提高了神经网络运算速度并降低了能量损耗。

发明内容

[0008] 针对神经网络处理器的上述缺陷,本发明提出一种基于数据压缩的神经网络处理器、设计方法、芯片。
[0009] 本发明提出一种基于数据压缩的神经网络处理器,包括:
[0010] 至少一个存储单元,用于存储操作指令与参与计算的数据;
[0011] 至少一个存储单元控制器,用于对所述存储单元进行控制;
[0012] 至少一个计算单元,用于执行神经网络的计算操作;
[0013] 控制单元,与所述存储单元控制器与所述计算单元相连,用于经由所述存储单元控制器获得所述存储单元存储的指令,并且解析所述指令以控制所述计算单元;
[0014] 至少一个数据压缩单元,用于按照数据压缩存储格式对所述参与计算的数据进行压缩,其中每个所述数据压缩单元与所述计算单元相连。
[0015] 所述存储单元包括输入数据存储单元、输出数据存储单元、权重存储单元、指令存储单元。
[0016] 所述输入数据存储单元用于存储所述参与计算的数据,所述参与计算的数据包括原始特征图数据与参与中间层计算的数据;所述输出数据存储单元包括计算获得的神经元响应值;所述权重存储单元用于存储已经训练好的神经网络权重;所述指令存储单元用于存储参与计算的指令信息。
[0017] 在进行数据调度过程时,根据所述计算单元的容量将所述参与计算的数据分为多个数据块,所述多个数据块依次载入到所述计算单元中。
[0018] 每个所述数据块按照所述数据压缩存储格式存储在所述存储单元中,所述数据压缩存储格式由<数值,偏移量>两部分构成。
[0019] 所述数据压缩存储格式中的“数值”为所述参与计算的数据的数值,所述“偏移量”为所述数值在所述数据块中的相对位置。
[0020] 所述参与计算的数据依照所述数据压缩存储格式存储,保证数值为零的所述参与计算的数据不参与神经网络计算,只有非零的所述参与计算的数据会被存储并参与计算。
[0021] 所述计算单元从与其相关联的所述输入数据存储单元中获得数据以进行计算,并且向与其相关联的所述输出数据存储单元写入数据。
[0022] 本发明还提出一种设计所述基于数据压缩的神经网络处理器的设计方法,包括:
[0023] 步骤1,所述控制单元对所述存储单元进行寻址,读取并解析下一步需要执行的指令;
[0024] 步骤2,根据解析出的指令获得存储地址,并从所述存储单元中获取所述参与计算的数据与权重;
[0025] 步骤3,将所述参与计算的数据与权重分别从所述输入存储单元与所述权重存储单元载入至所述计算单元;
[0026] 步骤4,所述计算单元执行神经网络运算中的运算操作,其中通过所述数据检索单元保证了被压缩的数据可以与权重数据正确计算;
[0027] 步骤5,将神经网络计算结果存储在所述输出存储单元中。
[0028] 本发明还提出一种包括所述基于数据压缩的神经网络处理器的芯片。
[0029] 由以上方案可知,本发明的优点在于:
[0030] 本发明的处理器在现有神经网络处理器系统中引入数据压缩单元,进而提升了神经网络处理器的运算速度及运行能量效率。

附图说明

[0031] 图1为本发明提供的神经网络处理器结构框图;
[0032] 图2为本发明提出的一种数据压缩存储格式图;
[0033] 图3为本发明一种实施例中计算单元的结构示意图;
[0034] 图4为本发明一种实施例中数据压缩单元示意图;
[0035] 图5为本发明提出的神经网络处理器进行神经网络运算的流程图。

具体实施方式

[0036] 发明人在对神经网络处理器研究时发现,在神经网络计算过程中存在大量数值为0的数据元素,这类元素经过乘法和加法等数据运算后对运算结果不产生数值上的影响,但是神经网络处理器在处理这部分数据元素时会占用大量片上存储空间、消耗多余传输资源并增加运行时间,因此难以满足神经网络处理器的性能要求。
[0037] 发明人经过对现有神经网络处理器的计算结构进行分析发现,可以对神经网络数据元素进行压缩,实现加快运算速度、降低能量损耗的目的。现有技术提供了神经网络加速器基本架构,本发明在现有技术基础上提出一种数据压缩存储格式,数据经过数据压缩单元的重编码后,在存储、传输和计算过程中采用数据压缩存储格式,并在神经网络计算单元增加数据检索结构,确保了被压缩后的权重可以和数据元素正确运算
[0038] 为实现上述目的,本发明提供的神经网络处理系统,包括:
[0039] 至少一个存储单元,用于存储操作指令和运算数据;
[0040] 至少一个计算单元,用于执行神经网络计算;以及控制单元,与所述至少一个存储单元和所述至少一个计算单元相连,用于经由所述至少一个存储单元获得所述至少一个存储单元存储的指令,并且解析该指令以控制所述至少一个计算单元;
[0041] 至少一个数据压缩单元,其中每个数据压缩单元与所述至少一个计算单元相连,用于压缩参与神经网络计算的数据,对参与神经网络计算的数据重新压缩编码;
[0042] 提出一种数据压缩格式,用于存储和传输参与神经网络计算的数据;
[0043] 根据本发明提出的神经网络处理器系统,所述数据包括原始特征图数据或中间层数据计算结果;
[0044] 根据本发明的神经网络处理系统,所述神经网络处理器系统进行神经网络计算时,数据压缩单元会将特征图数据或中间层计算结果整合映射成为数据压缩格式;
[0045] 所述具有数据压缩格式的数据为神经网络计算过程中间计算结果,需要进行再次存储或被其他系统单元使用。
[0046] 本发明还提出一种包括所述基于数据压缩的神经网络处理器的芯片。
[0047] 本发明提出一种数据压缩存储格式,该数据存储格式在进行数据存储时进行重编码,可以跳过数值为0的数据,从而实现了数据压缩的功能。在进行数据调度过程时,每个数据块按照数据压缩存储格式存储在存储单元中,该存储格式由<数值,偏移量>两部分构成,其中<数值>代表了为原始数据数值,<偏移量>代表了该数值在数据块中的相对位置。数据依照数据压缩存储格式存储,保证数值为零的数据不参与神经网络计算,只有非零数据会被存储并参与计算。数据压缩存储格式对原始数据进行了重编码,重编码后的数据与原始数据一一对应。
[0048] 本发明提出一种带有数据检索结构的神经网络计算单元,计算单元由N个运算子单元构成,每个运算子单元包括数据和权重共两个队列,每组数据及权重内有P个元素。每个数据元素包括原始数值和偏移量两部分组成,数据索引结构根据偏移量在权重队列中索引与之匹配的权重值进行乘法操作,运算结果经过后续运算后形成下一层网络的输入原始数据值,该原始数据值经过后续数据压缩单元重新编码后以数据压缩存储格式存储在存储电路中。每次计算过程中,同一组数据同时载入到不同计算单元中,实现了数据的共享。
[0049] 本发明还提出一种数据压缩单元,该单元由数据压缩单元由输入缓冲器、偏移量计数器和输出缓冲器组成,在每个周期,控制系统从输入缓冲器读入一个数据并使偏移量计数器计数值加一,当且仅当该数值不为0时,该数据会被存储至输出缓冲器,同时也会存储与之对应的偏移量计数值。当输入缓冲器402被填充满时,输出缓冲器内也保留了与之对应的数据。
[0050] 为了使本发明的目的、技术方案、设计方法及优点更加清楚明了,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0051] 本发明旨在提供一种基于数据压缩的神经网络处理器,其在神经网络处理系统中引入数据压缩结构,从而降低片上存储开销、减小运算电路规模并提高运算效率,使得神经网络处理系统整体性能更高。
[0052] 本发明提供的神经网络处理器基于存储-控制-计算的结构。
[0053] 存储结构用于存储参与计算的数据、神经网络权重及处理器操作指令;
[0054] 控制结构包括译码电路与控制逻辑电路,用于解析操作指令,生成控制信号,该信号用于控制片上数据的调度与存储以及神经网络计算过程;
[0055] 计算结构包括计算单元,用于参与该处理器中的神经网络计算操作,其中应包括数据检索结构,保证被压缩的数据在计算单元中能够正确地与相应权重进行计算。
[0056] 图1为本发明提供的一种神经网络处理器系统101,该神经网络处理器系统101架构由七个部分构成,包括输入数据存储单元102、控制单元103、输出数据存储单元104、权重存储单元105、指令存储单元106、计算单元107和数据压缩单元108。
[0057] 输入数据存储单元102用于存储参与计算的数据,该数据包括原始特征图数据和参与中间层计算的数据;输出数据存储单元104存储计算得到的神经元响应值;指令存储单元106存储参与计算的指令信息,指令被解析为控制流来调度神经网络计算;权重存储单元105用于存储已经训练好的神经网络权重;
[0058] 控制单元103分别与输出数据存储单元104、权重存储单元105、指令存储单元106、计算单元107相连,控制单元103获得保存在指令存储单元106中的指令并且解析该指令,控制单元103可根据解析指令得到的控制信号控制计算单元进行神经网络计算。
[0059] 计算单元107用于根据控制单元103产生的控制信号来执行相应的神经网络计算。计算单元107与一个或多个存储单元相关联,计算单元107可以从与其相关联的输入数据存储单元102中的数据存储部件获得数据以进行计算,并且可以向与其相关联的输出数据存储单元104写入数据。计算单元107完成神经网络算法中的大部分运算,即向量乘加操作等。
此外,由于载入到计算单元107中参与计算的数据格式为数据压缩格式,因此在计算单元
107中还应包括数据检索子单元,该子单元用于保证被压缩的数据可以与权重正确计算。
[0060] 数据压缩单元108用于参与数据压缩,对计算结果重新编码,将原始计算结果中数值为0的元素排除,采用新的数据编码方式进行存储。
[0061] 本发明提供一种数据压缩存储格式,该数据存储格式在进行数据存储时进行重编码,可以跳过数值为0的数据,从而实现了数据压缩的功能。
[0062] 计算数据依据数据压缩存储格式参与神经网络计算的过程如下:在进行数据调度过程时,首先根据计算单元的容量将原始数据分为不同的数据块,不同数据块依次载入到计算单元中。每个数据块按照数据压缩存储格式存储在存储单元中,该存储格式由<数值,偏移量>两部分构成,其中<数值>代表了为原始数据数值,<偏移量>代表了该数值在数据块中的相对位置。数据依照数据压缩存储格式存储,保证数值为零的数据不参与神经网络计算,只有非零数据会被存储并参与计算。数据压缩存储格式对原始数据进行了重编码,重编码后的数据与原始数据一一对应。
[0063] 每一个数据块的分组保证了能够以数据块内第一个数据为基准在数据队列中索引任何一个数据。数据块分组重编码在保证了数据分组调度的同时避免了过多偏移量检索位数,减小了存储偏移量的额外开销。以由16个数据组成的数据块为例,需要记录偏移量而增加的比特位为4。
[0064] 图2举例说明原始数据通过编码形成数据压缩存储格式的过程。由16个数据元素组成的一个数据块被分为4个数据组,每个数据组中由4个数据元素构成。第一行数据为原始数据,第二行数据为被重新编码后形成数据压缩格式的数据。每个数据块在计算前被预取至缓存中等待计算。
[0065] 数据索引单元、计算单元及数据压缩单元实现了数据压缩和解压缩功能,数据压缩单元将原有数据格式重新编码为数据压缩存储格式;计算单元完成数据与权重相乘、中间结果累加等计算操作;数据索引单元起到解压缩(检索查找)的作用,保证被压缩重新排列的数据按照偏移量可以与权重值正确运算。
[0066] 图3为计算单元结构系统示意图。计算单元由N个运算子单元构成,每个运算子单元包括数据和权重共两个队列,每组数据及权重内有P个元素。每个数据元素包括原始数值和偏移量两部分组成,数据索引结构根据偏移量在权重队列中索引与之匹配的权重值进行乘法操作,运算结果经过后续运算后形成下一层网络的输入原始数据值,该原始数据值经过后续数据压缩单元重新编码后以数据压缩存储格式存储在存储电路中。每次计算过程中,同一组数据同时载入到不同计算单元中,实现了数据的共享。
[0067] 图4为数据压缩单元401的结构示意图。数据压缩单元由输入缓冲器402、偏移量计数器403和输出缓冲器404组成。在每个周期,控制系统从输入缓冲器402读入一个数据并使偏移量计数器计数值加一,当且仅当该数值不为0时,该数据会被存储至输出缓冲器404,同时也会存储与之对应的偏移量计数值。当输入缓冲器402被填充满时,输出缓冲器404内也保留了与之对应的数据。
[0068] 深度神经网络中的输入数据为三维阵列格式。第一层网络的输入为原始数据,其他卷积层将前一层的输出数据作为输入。在本发明中,由于数据需要按照数据压缩存储格式存储并传递给下一层,因此需要在每层输出数据后将数据接入数据压缩单元。每个数据压缩单元需要消除每个数据块内数值为0的元素,留下非零元素。
[0069] 数据压缩存储方式具有两点优势,首先只存储非零元素,会大大减少内存占用;其次,只将非零元素载入到计算单元中,提升了提高了数据传输及计算速度,并增加了计算单元利用率。
[0070] 本发明还提供一种基于数据压缩的神经网络处理器的设计方法,图5是本发明神经网络处理器进行神经网络计算的流程图,该方法包括:
[0071] 步骤S1,控制单元对存储单元寻址,读取并解析下一步需要执行的指令;
[0072] 步骤S2,根据解析指令得到的存储地址从存储单元中获取输入数据;
[0073] 步骤S3,将数据和权重分别从输入存储单元和权重存储单元载入至计算单元;
[0074] 步骤S4,计算单元执行神经网络运算中的运算操作,其中数据检索结构保证了被压缩的数据可以与权重数据正确计算;
[0075] 步骤S5,数据压缩单元将计算结果重编码为数据压缩存储格式;
[0076] 步骤S6,将以数据压缩存储格式存储的数据存储输出至存储单元中。
[0077] 本发明可根据神经网络卷积中间层的计算结果动态地消除无效数据,从而提高运算效率并降低能耗。
[0078] 本发明能够提升神经网络处理系统的运算速度并降低能耗,使得神经网络处理系统性能更加高效。
[0079] 综上所述,本发明针对神经网络处理器中存在的运算速度差、能量效率低这一问题,通过对数据进行重编码,实现了数据压缩功能,降低了神经网络处理器中数据的存储资源占用,提高了运算速度,提升了能量效率。
[0080] 应当理解,虽然本说明书是按照各个实施例描述的,但并非每个实施例仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
[0081] 以上所述仅为本发明示意性的具体实施方式,并非用以限定本发明的范围。任何本领域的技术人员,在不脱离本发明的构思和原则的前提下所作的等同变化、修改与结合,均应属于本发明保护的范围。