CN113313247A - 基于数据流架构的稀疏神经网络的运算方法 - Google Patents
基于数据流架构的稀疏神经网络的运算方法 Download PDFInfo
- Publication number
- CN113313247A CN113313247A CN202110161624.1A CN202110161624A CN113313247A CN 113313247 A CN113313247 A CN 113313247A CN 202110161624 A CN202110161624 A CN 202110161624A CN 113313247 A CN113313247 A CN 113313247A
- Authority
- CN
- China
- Prior art keywords
- data
- task
- weight
- input image
- neural network
- 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
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 63
- 238000000034 method Methods 0.000 title claims abstract description 52
- 239000011159 matrix material Substances 0.000 claims abstract description 49
- 238000004590 computer program Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 description 46
- 238000010586 diagram Methods 0.000 description 22
- 230000008569 process Effects 0.000 description 22
- 238000013507 mapping Methods 0.000 description 13
- 230000001133 acceleration Effects 0.000 description 10
- 238000012546 transfer Methods 0.000 description 8
- 230000005540 biological transmission Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000012804 iterative process Methods 0.000 description 3
- 238000013138 pruning Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 101150039208 KCNK3 gene Proteins 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明提供了一种基于数据流架构的稀疏神经网络的运算方法,包括:依据数据流处理器的结构将稀疏神经网络的运算任务从低到高依次划分为子任务、任务和应用三个运算层级;确定所述运算层级中每个所述任务包含的所述子任务的个数、每个所述应用包含的所述任务的个数以及所述应用的个数,其中所述稀疏神经网络的输入图像数据和权重数据至少之一是稀疏矩阵;依据所述运算层级以及各个运算层级的个数,将所述稀疏神经网络的输入图像数据或权重数据划分为若干数据块;以及基于所述运算层级以及每个运算层级对应的数据块完成所述稀疏神经网络的运算任务。
Description
技术领域
本发明涉及机器学习技术领域,尤其涉及基于数据流架构的稀疏神经 网络的加速方法。
背景技术
近年来,为了使神经网络在车载设备、手机等资源受限的环境中推广 和使用,往往通过剪枝(Pruning)将神经网络中冗余的、信息量少的连接 进行剪除,以达到压缩神经网络存储空间的目的。然而,对已被剪枝处理 过的神经网络进行计算时,通常需要先将被压缩的神经网络数据层解压为 稀疏矩阵再进行乘加运算。因此,虽然剪枝后神经网络权重大量减少,但 计算并没有相应地减少,反而存在着大量的以零为乘数或被加数的无效计算。另一方面,现有的神经网络计算采用控制流架构的传统冯诺依曼计算 机,数据访存开销较大,限制了神经网络的计算运行速度。
因此,亟需一种基于数据流架构的稀疏神经网络的加速方法。
发明内容
因此,本发明实施例的目的在于克服上述现有技术的缺陷,提供一种 基于数据流架构的稀疏神经网络的运算方法,包括:依据数据流处理器的 结构将稀疏神经网络的运算任务从低到高依次划分为子任务、任务和应用 三个运算层级;确定所述运算层级中每个所述任务包含的所述子任务的个 数、每个所述应用包含的所述任务的个数以及所述应用的个数,其中所述 稀疏神经网络的输入图像数据和权重数据至少之一是稀疏矩阵;依据所述运算层级以及各个运算层级的个数,将所述稀疏神经网络的输入图像数据 或权重数据的稀疏矩阵划分为若干数据块;以及基于所述运算层级以及每 个运算层级对应的数据块完成所述稀疏神经网络的运算任务。
在一个实施例中,在所述运算层级中,所述运算任务包含若干个应用, 每个所述应用包含若干个任务,每个所述任务包含若干个子任务,以及其 中,所述应用用于执行所述稀疏神经网络的输入图像数据与部分权重数据 的矩阵乘运算,所述任务用于执行所述输入图像数据与该任务所属应用对 应的所述部分权重数据中的8列权重数据的矩阵乘运算,所述子任务用于 执行所述输入图像数据中的8行输入图像数据与该子任务所属任务对应的 8列权重数据的矩阵乘运算。
在一个实施例中,所述确定所述运算层级中每个所述任务包含的所述 子任务的个数、每个所述应用包含的所述任务的个数以及所述应用的个数 包括:设置每个所述任务包含2个所述子任务;设置每个所述应用中包含 的所述任务的个数;依据所述稀疏神经网络中权重数据的大小以及每个所 述应用包含的所述任务的个数确定所述应用的个数。
在一个实施例中,所述依据所述运算层级以及各个运算层级的个数, 将所述稀疏神经网络的输入图像数据和权重数据划分为若干数据块包括: 依据所述应用的个数将所述稀疏神经网络中的权重数据划分为若干权重 数据块;依据每个所述应用包含的所述任务的个数将每个所述权重数据块 划分为若干权重子数据块,其中每个所述权重子数据块包含8列权重数据; 将所述输入图像数据划分为若干输入图像块,每个所述输入图像数据块包 含8行输入图像数据。
在一个实施例中,所述基于所述运算层级以及每个运算层级对应的数 据块完成所述稀疏神经网络的运算任务包括:对于每个所述应用中包含的 任一所述任务,将每个所述任务对应的所述权重子数据块与所述输入图像 数据进行矩阵乘法运算,直至完成所述应用中的所有所述任务;重复上述 步骤,直至完成所有所述应用。
在一个实施例中,所述任务包括第一子任务和第二子任务,以及其中, 所述第一子任务用于执行所述任务对应的所述权重子数据块在所述数据 流处理器的计算阵列上的传递和复用,所述第二子任务用于执行每个所述 输入图像数据块在所述数据流处理器的计算阵列上的传递、复用、与所述 任务对应的所述权重子数据块的矩阵乘法运算以及存储结果。
在一个实施例中,还包括:提取每个所述权重数据块中的有效权重数 据;建立每个所述权重数据块对应的数据索引记录;以及基于所述数据索 引记录以及每个所述子任务对应的数据块完成所述稀疏神经网络的运算 任务。
在一个实施例中,所述建立每个权重数据块对应的数据索引记录包括: 依据所述每个权重数据块中每一行/列中有效权重数据的个数以及每个所 述有效权重数据在所在行/列中的位置建立所述每个权重数据块对应的索 引记录。
本发明另一方面提供了一种存储介质,其中存储有计算机程序,在所 述计算机程序被处理器执行时,能够用于实现上述任一项所述的方法。
本发明另一方面提供了一种电子设备,包括处理器和存储器,所述存 储器中存储有计算机程序,在所述计算机程序被处理器执行时,能够用于 实现上述任一项所述的方法
本发明实施例的技术方案可以包括以下有益效果:
通过重新设计的全连接层计算的方式,并使用全新的数据流动和指令 映射设计,使得应用能够适应神经网络的稀疏性和零值不规则性,有效避 开权重数据中大量的零值带来的无效操作,以实现稀疏全连接层计算的加 速和优化。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释 性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本 发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下 面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来 讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。 在附图中:
图1示出了一种数据流处理器的结构图;
图2示出了数据流处理器中计算阵列中每个计算单元的结构图;
图3示出了本发明一个实施例的基于数据流架构的稀疏神经网络的运 算方法;
图4示出了通用的依据数据流架构加速器划分运算层级的示意图;
图5示出了本发明一个实施例的建立权重数据块对应的数据索引记录 的示意图;
图6示出了本发明一个实施例的第一子任务的数据流图及其在物理计 算阵列上的指令映射关系;
图7示出了本发明一个实施例的第二子任务的迭代过程示意图;
图8示出了本发明一个实施例的第二子任务在物理计算阵列上指令映 射关系示意图。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图 通过具体实施例对本发明进一步详细说明。应当理解,所描述的实施例是 本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例, 本领域普通技术人员在没有做出创造性劳动下获得的所有其他实施例,都 属于本发明保护的范围。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个 或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明 的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明 的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、 组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、 实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实 体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个 硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置 和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操 作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以 分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能 根据实际情况改变。
当今的计算机大致分为两种结构:采用控制流(Control Flow)架构的 传统冯诺依曼计算机和采用数据流(Data Flow)架构的计算机。在数据流 架构中没有冯诺依曼计算机中程序计数器的概念,计算流不是指令驱动的, 而是通过数据的流动来实现的。指令在所有操作数都存在的情况下立即执 行,执行产生输出操作数又成为其他指令的输入操作数,程序按照映射节 点的拓扑结构并发执行。在数据流架构中,数据在执行单元(Processing Element,PE)间直接通信,减小了访存开销。此外,PE无需乱序执行等 操作,因此可以简化程序设计。
图1示出了一种数据流处理器的结构图。如图1所示,数据流处理器 (GPDPU)包括直接内存存取(Direct Memory Access,DMA)、动态随机 存储器(Dynamic Random AccessMemory,DRAM)、加速部件(Acceleration Unit,ACC)以及片上存储,其中,加速部件由8×8规模的计算阵列 (Processing Element,PE)组成的,片上存储包括HBM(High BandwidthMemory)和缓存(Cache)。GPDPU和主机端(Host)之间通过PCIe (Peripheral ComponentInterconnect express)通信。计算过程中,主机端 接口(Host Interface)接收来自主机端的配置命令后,启动DMA模块将主机 端的待处理数据和指令等控制信息复制到GPDPU的DRAM上,然后开始 在核心加速部件ACC上的计算,当ACC整个计算阵列的计算完成后,GPDPU将处理完成的结果数据传回到主机端,其中,微控制单元(Micro Controller)控制运行的应用中每层结构的运行,并且控制不同层次数据流 图所对应的运算单元的管理和调度
图2示出了数据流处理器中计算阵列中每个计算单元的结构图。如图 2所示,计算单元PE包括指令存储模块(Instruction Memory)、操作数存储 模块(Operand Memory)、控制模块(Block Control)、DIV运算单元、MAC 运算单元和数据传输单元(Transfer Unit)。其中,指令存储模块用于保存若 干个指令集合(Instruction block),指令集合符合RISC的设计要求,包括数 据传输和运算两个部分,数据传输可以在运算开始之前执行,也可以在运 算完成之后执行,每个指令集合模块包含载入(Load),复制(Copy),计 算(Calculate),存储(Store)等多种状态,其通过一系列信号的控制完 成状态迁移,实现指令的执行;操作数存储模块用于保存PE上每条指令 的操作数,操作数存储于片上存储中;DIV运算单元和MAC运算单元可 以流水执行指令,分别完成除法和乘法的操作;控制模块完成指令集合模 块在本地计算单元的调度和配置;数据传输单元用于片外数据访问和PE 单元间的数据传输以及计算单元内部的数据传输,计算单元与计算单元之 间、计算单元与内存之间,以及单个计算单元内部可以进行数据传输。计 算单元内部可以完成基本运算操作,每个计算单元支持8个双精度乘加单 元(SIMD 8),即在执行中利用数据并行性,可以基于单个进程(指令)同 时对多个数据点(这里为8个)执行相同的操作。
由于在数据流处理器的运行过程中,整个处理器的运算过程使用数据 流的执行模式,而单个计算单元内部则采用传统的控制流的指令执行模式, 使得不同计算单元之间可以直接通信,并且计算任务能够按照映射节点的 拓扑结构并发执行,因此,相比传统的控制流架构,数据流架构更加适用 于数据分布规律、重复计算量大的神经网络。
神经网络中大量计算存在于卷积层和全连接层。卷积层的计算与上述 全连接层有着很大的相似性,二者数据流的运行方式在硬件平台上的实现 方式也有许多共通之处。以全连接层为例,全连接层通常出现在神经网络 中后几层的位置,在整个网络中起到“分类器”的作用。全连接层中每一 个数据点都与上一层的所有数据点相关联,形成层之间的全相连,以综合 上一层提取到的特征,即其输出结果(本层结果)中的每一个数值都使用了该组的所有输入数据(上层结果),这样两层网络之间的数据利用关系 就变成了“完全连接的”。全连接层的计算公式可以表示为:
其中,O为全连接层的输出图像矩阵,I为全连接层的输入图像矩阵, W为全连接层的卷积核矩阵,Bias为全连接层的偏置量,N为输入图像组 数,M为卷积核组数,H、W、C分别为输入图像的长、宽、层数,x、y、 z、i、j分别为输入图像的序号、卷积核的序号、输入图像长、宽、层数的 序号。
在不考虑偏置量的情况下,可以将全连接层的计算转化为两个矩阵的 乘积运算,公式如下:
其中,A为输入图像数据矩阵,B为卷积核(又称“权重”,本文中 两者可以互换)数据矩阵,k为矩阵A的列号或矩阵B的行号,K为矩阵 A的宽或矩阵B的高,K=C×H×W。
可以看出,在整个全连接层的多维计算中存在卷积核复用和输入图像 复用,其中,卷积核复用是指每个卷积核中的权重都在N个输入数据组 中复用,输入图像复用是指输入图像的每个像素都被M个卷积核复用以 生成输出层中的M个结果数据。
然而,剪枝后的卷积层和全连接层运算中的权重数据部分会出现大量 的零值数据,且数据分布不规则,因此难以直接利用数据流架构进行运算。 为此,本发明提供了一种基于数据流架构的稀疏神经网络的运算方法,该 方法依据数据流处理器的结构将稀疏神经网络的运算任务从低到高依次 划分为子任务、任务和应用三个运算层级;确定每个任务包含的子任务的 个数、每个应用包含的任务的个数以及应用的个数;依据运算层级以及各个运算层级的个数,将稀疏神经网络的输入图像数据和权重数据划分为若 干数据块;以及基于每个子任务对应的数据块完成稀疏神经网络的运算任 务。
由于神经网络中全连接层的稀疏性尤其突出,本发明将以稀疏全连接 层为示例详细阐述在数据流架构上的稀疏神经网络的加速方法。但本领域 内技术人员应当理解,该方法同样适用于卷积层。
图3示出了本发明一个实施例的基于数据流架构的稀疏神经网络的运 算方法。如图3所示,该方法包括以下步骤:
S310,依据数据流处理器的结构将稀疏神经网络的运算任务从低到高 依次划分为子任务、任务和应用三个运算层级。
图4示出了通用的依据数据流架构加速器划分运算层级的示意图。如 图4所示,根据硬件加速部件ACC的结构,可以将具体的运算任务划分 为“应用”(APP),“任务”(Task)和“子任务”(Subtask)三个层级。1 个运算任务仅包含1个APP,该APP下包括多个Task。运算过程以1个 Task为基本运算单位。单个Task的运算任务的完成包含该Task中所包含 每个Subtask对应的运算任务的完成。每个Subtask都有其对应的数据流图, 即表示完成特定功能的数据流动传递关系图,每个Subtask依据其对应的 数据流图以完成其对应的运算任务。在运算过程中,首先将,每个Subtask 的数据流图分别映射到硬件加速部件ACC的计算单元上,完成指令映射 关系的配置,然后以1个Task的运行为基本单位,分别完成每个Task下所有Subtask的运算任务,以最终完成总的运算任务。另外,在运行过 程中可设计单个Subtask的运算迭代进行,这个迭代过程称为Instance。
然而,不同于密集矩阵乘应用中只需要用1个APP就能实现整个应用, 稀疏矩阵乘法运算为了调用不同数据块中的索引,通常需要使用多个APP 来分管不同数据块的计算。因此,在本发明在一个实施例中,可以依据数 据流处理器的结构以及稀疏神经网络的运算任务将运算层级从低到高划 分为Subtask、Task和APP三个层级,其中每个运算任务可以包含若干个 APP,每个APP包含若干个Task,每个Task包含若干个Subtask,其中, APP用于执行稀疏神经网络的输入图像数据与部分权重数据的矩阵乘运 算,同时,由于加速部件由8×8规模的计算阵列组成的,因此每个Task 用于执行输入图像数据与该Task所属APP对应的部分权重数据中的8列 权重数据的矩阵乘运算,同理,基于计算阵列的结构,Subtask可以用于 执行输入图像数据中的8行输入图像数据与该Subtask所属Task对应的8 列权重数据的矩阵乘运算。
S320,确定运算层级中每个任务包含的子任务的个数、每个应用包含 的任务的个数以及应用的个数。
在一个实施例中,可以预先设置每个APP包含的Task的个数,以及 每个Task包含的Subtask的个数,然后基于所述稀疏神经网络中权重数据 的大小,确定一个运算任务中APP的个数。例如,假设一个运算任务中稀 疏神经网络的输入图像数据A大小为N×K,权重数据B为K×M(其中, N为输入图像数据块A组数,M为权重数据块B的组数),则可以预先设置每个APP包含t个Task,由于每个Task用于执行8列权重数据的矩阵 乘运算,因此,可以确定该运算任务可以划分为M/(8t)个APP。在一个 实施例中,可以预先设置每个Task包含2个Subtask。
S330,依据运算层级以及各个运算层级的个数,将稀疏神经网络的输 入图像数据和权重数据划分为若干数据块。
首先依据运算层级中APP的个数将稀疏神经网络中的权重数据划分 为若干权重数据块,然后依据每个APP包含的Task的个数将每个权重数 据块划分为若干权重子数据块,其中每个权重子数据块包含8列权重数据, 最后将输入图像数据划分为若干输入图像块,每个输入图像数据块包含8 行输入图像数据。例如,假设一个运算任务中稀疏神经网络的输入图像数 据A大小为N×K,权重数据B为K×M(其中,N为输入图像数据块A 组数,M为权重数据块B的组数),则可以先根据该运算任务中APP的个 数(例如,M/(8t))将权重数据B先划分为M/(8t)个权重数据块B′, 其中每个权重数据块B′的大小为K×8t,再根据1个APP中Task的个 数(t)将权重数据块B′划分为权重子数据块B″,其中每个权重子数 据块B″的大小为K×8。同时,将输入图像A划分为N/8个输入图像 数据块A′,其中每个输入图像数据块A′的大小为8×K。
在一个实施例中,对于每个权重数据块B′,可以提取其中的有效权 重数据,并建立该权重数据块对应的数据索引记录。
针对稀疏神经网络中大量的权重数据为零值的特性,大多加速器都具 有索引功能,即首先对数据进行索引处理,把有效数据标记出来,再根据 标记在计算过程中对无效计算进行规避。传统的矩阵索引方式有压缩稀疏 行(Compressed Sparse Row,CSR),坐标列表(Coordinate list,COO) 和压缩稀疏列(Compressed Sparse Column,CSC)等。COO方式采用行 数、列数、数值的三元组对稀疏矩阵进行记录,为最基础的方式;CSC和 CSR在COO的基础上对存储的格式进行更新,分别按列和按行来对稀疏 矩阵进行存储,因此所占存储空间更小。
考虑到稀疏神经网络实际运行过程是从存储中按照地址调取数据,并 且矩阵乘是以行和列的一维形式进行并行运算的,在本发明一个实施例中, 可以将较为简单的COO方式进行修改,依据每个权重数据块中每一行/列 中有效数据的个数以及每个有效数据在所在行/列中的位置建立每个权重 数据块对应的索引记录。
图5示出了本发明一个实施例的建立权重数据块对应的数据索引记录 的示意图。如图5所示,权重数据块B′中有若干有效数据,可以以列为 单位,记录每一列中有效数据的个数和每个有效数据在该列中的行数,建 立权重数据块B′对应的数据索引记录。例如,权重数据块B′第0列中 有两个有效数据,分别在第0行和第7行,则可以建立该列的数据索引记 录“第0列:2个,0 7”。
S340,基于运算层级以及每个运算层级对应的数据块完成稀疏神经网 络的运算任务。
基于运算层级,可以首先完成第一个APP中的第一个Task对应的运 算任务,即该Task权重子数据块B″与输入图像数据A′的矩阵乘法 运算,继而迭代完成该APP内的所有Task对应的运算任务,直至完成运 算层级中所有APP对应的运算任务。
在一个实施例中,一个Task可以包含Subtask1和Subtask2,其中, Subtask1用于执行该Task对应的权重子数据块B″在数据流处理器的计 算阵列上的传递和复用,Subtask2用于执行每个输入图像数据块A′在数 据流处理器的计算阵列上的传递、复用、与该Task对应的权重子数据块 B″的矩阵乘法运算以及存储结果。
在一个实施例中,在运行初始时,可以将权重数据块B′的数据索引 记录存储在一个名为“ker_index.cfg”的文件中,假设1个APP中含有的 Task数为t,那么每个APP中会产生t个索引记录文件,分别对应t个Task 中的不同索引需求。同时,针对每个APP生成“matrix.h”配置文件,其 中定义了该APP对应输入图像数据块A′和权重子数据块B″数据存储 的起始地址,以及其他一些在运行时定义的公共参数,如矩阵的大小规模 等。运行时按照APP的序号按顺序运行,每个APP中按顺序执行多个Task, 每个Task中,首先获取输入图像数据块A′的地址,之后获取权重子数据 块B″的地址,然后获取计算结果的存储地址。最后执行Subtask1和 Subtask2。
所有APP的计算过程如算法1所示:
如上所述,Subtask1负责对应Task下权重子数据块B″中的有效 非零数值的载入和在计算阵列上的复用传递。在算法的运行过程中,对于 计算阵列中的每一个执行单元,首先自动获取其计算中所使用的对应的权 重子数据块B″的数据地址。若为第一行PE,则令其加载计算所需的有 效数据,其中有效数据的判断使用权重子数据块B″矩阵中对应位置的 值是否为零进行判断。之后,若不为最后一行PE,那么令PE执行单元将 自己所含的数据加载到其对应的下一行执行单元上。
Subtask1的运算过程如算法2所示:
其中Array Height,Array Width分别表示PE阵列的高和宽,且都为 8。
图6示出了本发明一个实施例的第一子任务的数据流图及其在物理计 算阵列上的指令映射关系。数据流图即为计算过程中数据在计算阵列上流 动传递的模式图。如图6所示,计算阵列第0行的执行单元负责从内存调 取权重子数据块B″的数据(第一种节点),并且将读取到的数据传递 给其对应的第1行上的执行单元(第二种节点);计算阵列的第1-6行负责 接收传来的数据,并且把得到的数据传递给对应的正下方的执行单元(第 二种节点),即第2-7行的执行单元;计算阵列第7行的执行单元仅负责接 收上方PE传来的数据(第三种节点)。这就形成了一张含有三种节点的数 据流图,由根节点第一种节点起始,连接多个第二种节点,最终到末尾节 点第三种节点截止。如此,数据在计算阵列上流动,减少了数据从内存的 调取,实现了权重子数据块B″中权重数据复用。
在一个实施例中,在指令映射的过程中,为使不同列的执行单元PE分 管不同列的矩阵数据,同行不同列的矩阵应从索引信息文件中读取不同列 的稀疏位置信息,并生成该列PE对应的指令。因此,虽然同行的PE对 应数据流图的节点类型不同,但其映射到的指令随单个PE因在行中位置 的变化而各有不同。“ker_index.cfg”中记录的8列数据的索引信息分别对 应计算阵列第一行的8个PE。在1个Task执行的过程中,Subtask1仅需 执行1次,即迭代次数Instance为1。在多个Task运行的过程中,PE阵 列读取的索引文件发生变化,即在Task 1中,PE阵列的第一行读取 “ker_index1.cfg”中的索引信息,在Task t中,PE阵列的第一行读取 “ker_index t.cfg”中的索引信息。
通过上述Subtask1,权重数据块B′的计算已经通过不同APP和不 同Task进行划分,但输入图像数据块A′作为一个整体,其数据也不能 一次性放到PE阵列中进行运算。因此,在一个实施例中,由Subtask2负 责A′数据的载入、传递、复用、计算以及结果的存储。执行过程中, 按顺序依次执行多个Instance。在每个Instance中,遍历计算阵列中的每 个PE。在每个PE中,首先获取计算时所需的读取数据的地址,以及计算 结果的存储地址。之后按照权重子数据块B″中有效数据的判断结果, 对输入图像数据块A′中的对应位置数据进行读取,并进行提取后数据对 应位置的乘加计算。最后将存储结果存到对应地址,即得到结果C′对应 位置的值。
Subtask2的计算过程可以用算法3表示:
图7和图8示出了第二子任务的数据流图,其中,图7示出了本发明 一个实施例的第二子任务的迭代过程示意图。如图7所示,这里将输入图 像数据A的每8行为一组进行划分,这样输入图像数据A划分为N/8 个规模为8×K的输入图像数据块A′,这样在进行输入图像子数据块 A′的数据分配时,每行PE将会分得输入图像数据块A′中的一行规模 为1×K的数据。在单个Task的运行过程中,Subtask2将会进行多次 迭代,每次迭代中完成一个输入图像数据块A′的读取(Load)、输入图 像数据块A′乘权重子数据块B″的计算(Calculate)以及结果的存储 (Store)过程,共需N/8次迭代。由于矩阵乘中的数据对应关系,输入 图像数据块A′中的一行与权重子数据块B″中的一列的每个数据在计 算时一一对应,因此,在权重子数据块B″为稀疏矩阵的条件下,输入 图像数据块A′中对应位置的数据如果都被读取,将会有很多数据无法被 使用,因为如前分析,计算阵列只读取了权重子数据块B″的非零有效值。因此,在本发明一个实施例中,将针对记录的权重子数据块B″的 有效位置索引,在从内存调取输入图像数据块A′数据时,对输入图像数 据块A′也进行索引筛选。这样,在实际计算过程中,就只包含了有效数 值和有效数值的乘加运算。
图8示出了本发明一个实施例的第二子任务的指令映射关系示意图。 如图8所示,Subtask2中仅含有PE从内存调取数据,而不存在PE与PE 之间的数据传递。因此此子任务形成的数据流图是由一组互不联系的叶子 节点组成的。这是由于,不同于不考虑矩阵的稀疏性时矩阵乘计算中的输 入图像复用,在稀疏性计算中,输入图像的每个像素(即输入图像数据A 中的每个数据)并不都被M个卷积核复用。以单个Task中输入图像数据 块A′中第0行的计算为例,图中展示了在一次迭代过程中,第0行PE 的指令映射关系。在图中,我们用w表示权重子数据块B″中的权重 值,用a表示输入图像数据块A′中的输入图像数据,C′表述计算所得 结果,其中的角标表示数据所在矩阵中的位置。另外,乘加指令用“Compute” 来代替。
执行阵列的第一行,即PE(0,y),0≤y<7,将进行 的计算,即与权重子数据块B″中的每一列 (0-7列)进行乘加操作。由于权重子数据块B″每一列的稀疏信息不 同,即每一列的有效非零数据的位置不同,PE(0,x)在读取A’(0,k)时选取的k值各有不同,其公式如下:
这里C′[x][y]对应PE(x,y)在某次迭代中所产生的计算结果。在进 行完乘加操作后,PE(x,y)将把计算结果存储到该结果对应的结果数据地 址中,这样就完成了Subtask2的一次迭代中的所有任务。多次迭代中, PE阵列进行输入图像数据块A′的数据替换,在每次迭代之前,PE访问 的输入图像数据块A′和结果C′的数据起始地址也进行相应的改变,多次迭代完成整个输入图像数据块A和权重子数据块B″的运算,这样 就完成了Subtask2的整个计算过程。在多个Task的运行层次中,索引信 息的调用和Subtask1中的设置相同,在每个Task中,PE阵列在调取输 入图像数据块A′的数据时,使用与该Task对应的不同的索引信息文件。
上述实施例通过重新设计的全连接层计算的方式,并使用全新的数据 流动和指令映射设计,使得应用能够适应神经网络的稀疏性和零值不规则 性,有效避开权重数据中大量的零值带来的无效操作,以实现稀疏全连接 层计算的加速和优化。
本发明是在实际神经网络中权重数据矩阵为稀疏矩阵的条件下进行 设计的。如果抛开此项限制,本发明中的稀疏信息索引方式和其关联的应 用层次结构,以及应用内部设置的数据流图和指令映射关系可以有更多的 应用场景。假设某应用需要满足的矩阵乘计算中,输入图像数据A,而不 是权重数据块B,是稀疏的,那么该应用使用和上面相同的设计方式,仅 将数据流图的数据传递方向和指令映射的设置稍作改变即可完成。此时Subtask1中满足输入数据重用,使用最左侧第一列PE从内存读取输入图 像数据A,并按照新的数据流向右侧PE传递;Subtask2中通过多个迭代 过程完成权重数据块B’的分割计算。整个应用的配置与原本的应用呈类似 “转置”的关系。若在此基础上再次进行拓展,矩阵乘的输入图像数据A 和权重数据块B都为稀疏矩阵时,这时就要增加考虑逻辑的“与”关系,需要同时记录两个矩阵的稀疏信息,这时仅将输入图像数据A和权重数据 块B的行/列有效值索引位置重合的数据传入PE阵列再进行计算。
在本发明的又一个实施例中,还提供了一种计算机可读存储介质,其 上存储有计算机程序或可执行指令,当所述计算机程序或可执行指令被执 行时实现如前述实施例中所述的技术方案,其实现原理类似,此处不再赘 述。在本发明的实施例中,计算机可读存储介质可以是任何能够存储数据 且可以被计算装置读取的有形介质。计算机可读存储介质的实例包括硬盘 驱动器、网络附加存储器(NAS)、只读存储器、随机存取存储器、CD-ROM、CD-R、CD-RW、磁带以及其它光学或非光学数据存储装置。计算机可读 存储介质也可以包括分布在网络耦合计算机系统上的计算机可读介质,以 便可以分布式地存储和执行计算机程序或指令。
本说明书中针对“各个实施例”、“一些实施例”、“一个实施例”、或 “实施例”等的参考指代的是结合所述实施例所描述的特定特征、结构、 或性质包括在至少一个实施例中。因此,短语“在各个实施例中”、“在一 些实施例中”、“在一个实施例中”、或“在实施例中”等在整个说明书中 各地方的出现并非必须指代相同的实施例。此外,特定特征、结构、或性 质可以在一个或多个实施例中以任何合适方式组合。因此,结合一个实施 例中所示出或描述的特定特征、结构或性质可以整体地或部分地与一个或 多个其他实施例的特征、结构、或性质无限制地组合,只要该组合不是非 逻辑性的或不能工作。
本说明书中“包括”和“具有”以及类似含义的术语表达,意图在于 覆盖不排他的包含,例如包含了一系列步骤或单元的过程、方法、系统、 产品或设备并不限定于已列出的步骤或单元,而是可选地还包括没有列出 的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的 其他步骤或单元。“一”或“一个”也不排除多个的情况。另外,本申请 附图中的各个元素仅仅为了示意说明,并非按比例绘制。
虽然本发明已经通过上述实施例进行了描述,然而本发明并非局限于 这里所描述的实施例,在不脱离本发明范围的情况下还包括所做出的各种 改变以及变化。
Claims (10)
1.一种基于数据流架构的稀疏神经网络的运算方法,包括:
依据数据流处理器的结构将稀疏神经网络的运算任务从低到高依次划分为子任务、任务和应用三个运算层级;
确定所述运算层级中每个所述任务包含的所述子任务的个数、每个所述应用包含的所述任务的个数以及所述应用的个数,其中所述稀疏神经网络的输入图像数据和权重数据至少之一是稀疏矩阵;
依据所述运算层级以及各个运算层级的个数,将所述稀疏神经网络的输入图像数据或权重数据的稀疏矩阵划分为若干数据块;以及
基于所述运算层级以及每个运算层级对应的数据块完成所述稀疏神经网络的运算任务。
2.根据权利要求1所述的方法,其中,在所述运算层级中,所述运算任务包含若干个应用,每个所述应用包含若干个任务,每个所述任务包含若干个子任务,以及其中,所述应用用于执行所述稀疏神经网络的输入图像数据与部分权重数据的矩阵乘运算,所述任务用于执行所述输入图像数据与该任务所属应用对应的所述部分权重数据中的8列权重数据的矩阵乘运算,所述子任务用于执行所述输入图像数据中的8行输入图像数据与该子任务所属任务对应的8列权重数据的矩阵乘运算。
3.根据权利要求2所述的方法,其中,所述确定所述运算层级中每个所述任务包含的所述子任务的个数、每个所述应用包含的所述任务的个数以及所述应用的个数包括:
设置每个所述任务包含2个所述子任务;
设置每个所述应用中包含的所述任务的个数;
依据所述稀疏神经网络中权重数据的大小以及每个所述应用包含的所述任务的个数确定所述应用的个数。
4.根据权利要求3所述的方法,其中,所述依据所述运算层级以及各个运算层级的个数,将所述稀疏神经网络的输入图像数据和权重数据划分为若干数据块包括:
依据所述应用的个数将所述稀疏神经网络中的权重数据划分为若干权重数据块;
依据每个所述应用包含的所述任务的个数将每个所述权重数据块划分为若干权重子数据块,其中每个所述权重子数据块包含8列权重数据;
将所述输入图像数据划分为若干输入图像块,每个所述输入图像数据块包含8行输入图像数据。
5.根据权利要求4所述的方法,其中,所述基于所述运算层级以及每个运算层级对应的数据块完成所述稀疏神经网络的运算任务包括:
5-1)对于每个所述应用中包含的任一所述任务,将每个所述任务对应的所述权重子数据块与所述输入图像数据进行矩阵乘法运算,直至完成所述应用中的所有所述任务;
5-2)重复上述步骤5-1),直至完成所有所述应用。
6.根据权利要求5所述的方法,其中,所述任务包括第一子任务和第二子任务,以及其中,所述第一子任务用于执行所述任务对应的所述权重子数据块在所述数据流处理器的计算阵列上的传递和复用,所述第二子任务用于执行每个所述输入图像数据块在所述数据流处理器的计算阵列上的传递、复用、与所述任务对应的所述权重子数据块的矩阵乘法运算以及存储结果。
7.根据权利要求1所述的方法,还包括:
提取每个所述权重数据块中的有效权重数据;
建立每个所述权重数据块对应的数据索引记录;以及
基于所述数据索引记录以及每个所述子任务对应的数据块完成所述稀疏神经网络的运算任务。
8.根据权利要求7所述的方法,其中,所述建立每个权重数据块对应的数据索引记录包括:依据所述每个权重数据块中每一行/列中有效权重数据的个数以及每个所述有效权重数据在所在行/列中的位置建立所述每个权重数据块对应的索引记录。
9.一种存储介质,其中存储有计算机程序,在所述计算机程序被处理器执行时,能够用于实现权利要求1-8中任一项所述的方法。
10.一种电子设备,包括处理器和存储器,所述存储器中存储有计算机程序,在所述计算机程序被处理器执行时,能够用于实现权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110161624.1A CN113313247B (zh) | 2021-02-05 | 2021-02-05 | 基于数据流架构的稀疏神经网络的运算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110161624.1A CN113313247B (zh) | 2021-02-05 | 2021-02-05 | 基于数据流架构的稀疏神经网络的运算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113313247A true CN113313247A (zh) | 2021-08-27 |
CN113313247B CN113313247B (zh) | 2023-04-07 |
Family
ID=77370672
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110161624.1A Active CN113313247B (zh) | 2021-02-05 | 2021-02-05 | 基于数据流架构的稀疏神经网络的运算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113313247B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114118389A (zh) * | 2022-01-28 | 2022-03-01 | 深圳鲲云信息科技有限公司 | 神经网络数据处理方法、设备及存储介质 |
CN114528966A (zh) * | 2022-01-27 | 2022-05-24 | 山东浪潮科学研究院有限公司 | 一种本地学习方法、设备及介质 |
CN115344526A (zh) * | 2022-08-16 | 2022-11-15 | 江南信安(北京)科技有限公司 | 一种数据流架构的硬件加速方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239824A (zh) * | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
CN110110851A (zh) * | 2019-04-30 | 2019-08-09 | 南京大学 | 一种lstm神经网络的fpga加速器及其加速方法 |
CN110705703A (zh) * | 2019-10-16 | 2020-01-17 | 北京航空航天大学 | 基于脉动阵列的稀疏神经网络处理器 |
CN110851779A (zh) * | 2019-10-16 | 2020-02-28 | 北京航空航天大学 | 用于稀疏矩阵运算的脉动阵列架构 |
CN111062472A (zh) * | 2019-12-11 | 2020-04-24 | 浙江大学 | 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法 |
CN111079919A (zh) * | 2019-11-21 | 2020-04-28 | 清华大学 | 支持权重稀疏的存内计算架构及其数据输出方法 |
CN111738435A (zh) * | 2020-06-22 | 2020-10-02 | 上海交通大学 | 一种基于移动设备的在线稀疏训练方法及系统 |
-
2021
- 2021-02-05 CN CN202110161624.1A patent/CN113313247B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239824A (zh) * | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
CN110110851A (zh) * | 2019-04-30 | 2019-08-09 | 南京大学 | 一种lstm神经网络的fpga加速器及其加速方法 |
CN110705703A (zh) * | 2019-10-16 | 2020-01-17 | 北京航空航天大学 | 基于脉动阵列的稀疏神经网络处理器 |
CN110851779A (zh) * | 2019-10-16 | 2020-02-28 | 北京航空航天大学 | 用于稀疏矩阵运算的脉动阵列架构 |
CN111079919A (zh) * | 2019-11-21 | 2020-04-28 | 清华大学 | 支持权重稀疏的存内计算架构及其数据输出方法 |
CN111062472A (zh) * | 2019-12-11 | 2020-04-24 | 浙江大学 | 一种基于结构化剪枝的稀疏神经网络加速器及其加速方法 |
CN111738435A (zh) * | 2020-06-22 | 2020-10-02 | 上海交通大学 | 一种基于移动设备的在线稀疏训练方法及系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114528966A (zh) * | 2022-01-27 | 2022-05-24 | 山东浪潮科学研究院有限公司 | 一种本地学习方法、设备及介质 |
CN114528966B (zh) * | 2022-01-27 | 2023-09-26 | 山东浪潮科学研究院有限公司 | 一种本地学习方法、设备及介质 |
CN114118389A (zh) * | 2022-01-28 | 2022-03-01 | 深圳鲲云信息科技有限公司 | 神经网络数据处理方法、设备及存储介质 |
CN115344526A (zh) * | 2022-08-16 | 2022-11-15 | 江南信安(北京)科技有限公司 | 一种数据流架构的硬件加速方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113313247B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11907830B2 (en) | Neural network architecture using control logic determining convolution operation sequence | |
CN113313247B (zh) | 基于数据流架构的稀疏神经网络的运算方法 | |
EP3757901A1 (en) | Schedule-aware tensor distribution module | |
CN111667051A (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
WO2017156968A1 (zh) | 神经网络的计算方法、系统及其装置 | |
GB2568102A (en) | Exploiting sparsity in a neural network | |
EP2738675B1 (en) | System and method for efficient resource management of a signal flow programmed digital signal processor code | |
US20200090051A1 (en) | Optimization problem operation method and apparatus | |
US20210350230A1 (en) | Data dividing method and processor for convolution operation | |
WO2023065983A1 (zh) | 计算装置、神经网络处理设备、芯片及处理数据的方法 | |
CN105302536A (zh) | MapReduce应用的相关参数的配置方法和装置 | |
CN111210004B (zh) | 卷积计算方法、卷积计算装置及终端设备 | |
CN111429974A (zh) | 超级计算机平台上的分子动力学模拟短程力并行优化方法 | |
EP3985570A1 (en) | Implementation of a neural network in multicore hardware | |
CN111079078A (zh) | 面向结构网格稀疏矩阵的下三角方程并行求解方法 | |
CN112200310B (zh) | 智能处理器、数据处理方法及存储介质 | |
CN105335135B (zh) | 数据处理方法和中心节点 | |
CN106484532A (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
US20230019151A1 (en) | Implementation of pooling and unpooling or reverse pooling in hardware | |
WO2022057459A1 (zh) | 一种基于Tensorcore处理int4数据类型的方法、系统、设备及介质 | |
KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
US11983128B1 (en) | Multidimensional and multiblock tensorized direct memory access descriptors | |
CN112257843B (zh) | 一种基于MobileNetV1网络推理任务的扩展指令集的系统 | |
CN111198714B (zh) | 重训练方法及相关产品 | |
JP2023024960A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231225 Address after: 215125 11-303, creative industrial park, No. 328, Xinghu street, Suzhou Industrial Park, Suzhou City, Jiangsu Province Patentee after: Suzhou Ruixin integrated circuit technology Co.,Ltd. Address before: 100190 No. 6 South Road, Zhongguancun Academy of Sciences, Beijing, Haidian District Patentee before: Institute of Computing Technology, Chinese Academy of Sciences |
|
TR01 | Transfer of patent right |