一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于神经网络模型执行的加速单元及服务器的制作方法

2022-10-22 06:08:04 来源:中国专利 TAG:


1.本公开涉及神经网络领域,尤其涉及一种用于神经网络模型执行的加速单元及 服务器。


背景技术:

2.神经网络(nns)是近十年来再度兴起的最受人瞩目的技术之一,在语音、图像、 大数据、生物医药科技等领域取得了许多突破性进展并产生了大量的落地应用。但 同时,业界也越来越关注如何提高神经网络模型的执行效率,主要包括两方面措施: 软件方面,通过神经网络模型的算法优化来实现性能提升;硬件方面,通过设计各 种用于神经网络模型执行的硬件加速单元来实现性能提升。


技术实现要素:

3.本公开的目的是提供一种神经网络模型执行的加速单元和服务器,以实现对神 经网络模型执行的硬件加速。
4.根据本公开实施例的第一方面,提供一种用于神经网络模型执行的加速单元, 包括:
5.直接内存访问模块;
6.多个集群组,每个所述集群组包括多个执行相同功能的处理集群;
7.片上内存,包括多个存储单元,每个存储单元分别对应于每个所述集群组,并 用于存储对应的集群组的指令序列和操作数据;
8.命令处理器,用于将与指定神经网络模型相关联的操作分解成多个子操作,将 所述多个子操作转换为在所述处理集群上执行的多个指令序列,并指定每个所述指 令序列的操作数据,通过所述直接内存访问模块分多次加载所述子操作的操作数据;
9.多个分发单元,与所述多个存储单元分别耦接,同时分别与所述多个集群组耦 接,每个分发单元从与其耦接的存储单元中读取所述指令序列及其操作数据,并将 所述指令序列及其操作数据分别发送给与其耦接的集群组。
10.可选地,每个所述分发单元通过第一总线与同一集群组中的多个处理集群耦接, 每个分发单元将所述指令序列及其操作数据发送到所述第一总线上,与其耦接的多 个处理集群从所述第一总线上获取所述指令序列及其操作数据。
11.可选地,所述处理集群包括集群控制单元以及通过第二总线与其耦接的多个功 能相同的执行单元,所述集群控制单元获取所述指令序列并控制与其耦接的多个执 行单元分别执行所述指令序列,与其耦接的多个执行单元在执行数据加载指令时从 所述第二总线上加载自身需要的操作数据。
12.可选地,所述将与指定神经网络模型相关联的操作分解成多个子操作包括:将 权重数据和激活数据的高维矩阵运算转换为多个二维矩阵运算;则将所述多个子操 作转换为在所述处理集群上执行的多个指令序列包括:将所述多个二维矩阵运算转 换为在所述
处理集群上执行的多个指令序列。
13.可选地,所述将权重数据和激活数据的高维矩阵运算转换为多个二维矩阵运算 还包括:
14.当二维矩阵的大小超过预设标准时,按行和/列切分二维矩阵,并将所述多个 二维矩阵运算转换为切分后的矩阵运算。
15.可选地,所述命令处理器配置多个映射方法将所述将权重数据和激活数据的高 维矩阵运算转换为多个二维矩阵运算。
16.可选地,所述命令处理器为与指定神经网络模型相关联的特定操作配置优选的 映射方法,以便于所述命令处理器对所述特定操作采用其配置的优选的映射方 法。
17.可选地,所述与指定神经网络模型相关联的操作为矩阵乘法、卷积和深度卷积 中的一种,所述多种映射方法为输入固定映射方法、输出固定映射方法和权重固定 映射方法。
18.可选地,所述命令处理器还包括:接收指示信息,根据指示信息确定所述与指 定神经网络模型相关联的操作以及其操作数据的存储位置。
19.可选地,所述分发单元还用于将与其耦接的处理集群的中间结果数据存储到对 应的存储单元中,并经由所述直接内存访问模块存储到外部存储器。
20.可选地,所述权重数据表示为索引和非零数值的组合。
21.可选地,在所述执行单元加载所述权重数据之前,由所述命令处理器或所述分 发单元将所述权重数据表示为索引和非零数值的组合。
22.可选地,所述命令处理器还包括:将神经网络模型中的特殊功能转换为可在执 行单元上执行的特殊指令。
23.第二方面,本公开实施例提供一种服务器,包括:
24.上述任意一项所述的加速单元;
25.调度器,用于指示所述加速单元执行所述与指定神经网络模型相关联的操作;
26.存储器,用于存储所述指定神经网络应用的权重数据和激活数据。
27.本公开实施例提供的加速单元,包括多个集群组,每个集群组包括多个处理集 群,所述加速单元将与指定神经网络模型相关联的操作分解成多个子操作,将每个 子操作转换为在处理集群上执行的指令序列,并指定每个指令序列的操作数据,从 而通过多个集群组并行执行每个子操作,由此实现硬件加速单元的性能提升。
附图说明
28.通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征 和优点将更为清楚,在附图中:
29.图1是数据中心的层级结构图;
30.图2是数据中心的立体结构图;
31.图3是数据中心的一个通用结构的云服务器的结构示意图;
32.图4是图3中的云服务器的更具体的结构示意图;
33.图5是一个示例性的pe集群的设计图;
34.图6a示出矩阵乘法的示意图;
35.图6b和图6c是卷积和深度卷积的示意图;
36.图7a至图7c是三段伪代码;
37.图8是示例性的二维矩阵乘法的示意图;
38.图9a-图9i用于示出将图8所示的矩阵乘法部署到pe阵列的9种方式。
具体实施方式
39.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在 下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员 来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质, 公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
40.在本文中使用以下术语。
41.加速单元:针对通用处理器在一些专门用途的领域(例如,处理图像、处理神 经网络的各种运算,等等)效率不高的情况,为了提高在这些专门用途领域中的数 据处理速度而设计的处理单元,它往往与通用处理器cpu配套使用,接受通用处理 器的控制,执行一些特定用途或特定领域的处理,提高在特定用途或特定领域中的 计算机处理效率。也可称为ai处理单元,并可包括图形处理单元(gpu)、中央处 理器(cpu)、专用集成电路(asic)、现场可编程门阵列(fpga)、专用集成电路 (asic)、以及专用ai加速硬件(例如加速单元)。
42.片上内存:在主核或副核内单独使用,不能被共享的存储器。
43.命令处理器:在加速单元和驱动该加速单元工作的中央处理单元之间的命令接 口。命令处理器接收中央处理单元让加速单元执行的指令,将这些指令分给加速单 元中的各个部件去执行。另外,它还负责加速单元中各个部件的同步。
44.生命周期:操作数在指令序列中并不是在全部过程中都会涉及到,在指令序列 中其第一次出现和最后一次用到的指令之间的部分,就是该操作数的生命周期。也 就是说,过了该生命周期后,它就不再使用,没有必要留在片上内存中。
45.神经网络:一般指人工神经网络(artificial neural network,简写为ann), 它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法网络。一个 经典的神经网络,也是最简单的神经网络结构,包含三个层次:输入层、输出层和 中间层(又称隐藏层)。输入层、输出层和中间层又各自包括多个节点。
46.神经网络模型:在神经网络中,将节点数学化,产生节点的数学模型,神经网 络中的大量的节点的数学模型构成了神经网络模型。
47.深度学习模型:深度学习的概念源于神经网络的研究,将含有多个中间层的神 经网络称为深度学习网络。因此,从这个意义上将,深度学习模型也是一种神经网 络模型。深度学习模型和神经网络模型都必须经由训练产生。将样本数据输入到设 计好的网络结构中,经由多个中间层提取特征信息,并基于输出层的输出结果不断 地修正各个节点的权重数据,使输出层的输出结果愈来愈趋向于预设结果,直至确 定最终的权重数据。训练好的深度学习模型可以真正地应用于实际场景中,同时还 可以收集深度学习模型在实际场景中的使用情况,反过来优化深度学习模型。
48.节点:深度学习模型中独立运算的最小单位,其接收输入,经本身的权重参数 或其它模型中参数(例如超参)运算后,产生输出。深度学习模型可以包括卷积、 池化等各种
具体操作,进而包括卷积节点、池化节点等各种操作节点。深度学习模 型中有多个层,每个层有多个节点,每个节点的输出是下一层的节点的输入。进一 步地,节点包括具体操作的程序及相关数据。例如,卷积操作节点中包括卷积操作 用到的程序代码和卷积中用到的一些数据。
49.算子:是指在深度学习模型中构建的用于实现特定功能的一系列操作的集合。 深度学习模型的每一层都可包含多个这样的算子。可以在tensorflow框架中被称为 operation,在caffe框架中被称为layer。算子看作在节点基础上的进一步实现, 一个算子可对应一个或多个节点,因此,算子和节点有时对应的程序和数据相同。
50.指令集:芯片内部支持的进行运算的指令的集合,例如主要支持深度学习算子 的运算,如:convolution,pooling,roi等。
51.神经网络应用:是指神经网络模型中诸如像矩阵运算、卷积和深度卷积这样的 操作。下文中所指的与神经网络应用相关联的操作或特定操作和神经网络应用的含 义相同。
52.数据中心
53.图1示出作为本公开实施例所应用的一种场景的数据中心的分层结构图。
54.数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加 速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争 的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而 神经网络作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。
55.在传统的大型数据中心,网络结构通常是图1所示的三层结构,即分级的互连 网络模型(hierarchical inter-networking model)。这个模型包含了以下三层:
56.接入层(access layer)103:有时也称为边缘层,包括接入交换机130和接入 交换机所连接的各服务器140。各服务器140是数据中心的处理和存储实体,数据 中心中大量数据的处理和存储都是由这些服务器140完成的。接入交换机130是用 来让这些服务器接入到数据中心中的交换机。一台接入交换机130接入多台服务器 140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(top of rack) 交换机,它们物理连接服务器。
57.汇聚层(aggregation layer)102:有时候也称为分发层,包括汇聚交换机120。 每台汇聚交换机120连接多台接入交换机,同时提供其他的服务,例如防火墙,入 侵检测,网络分析等。
58.核心层(core layer)101:包括核心交换机110。核心交换机110为进出数据 中心的包提供高速的转发,为多个汇聚层提供连接性。整个数据中心的网络分为l3 层路由网络和l2层路由网络,核心交换机110为通常为整个数据中心的网络提供一 个弹性的l3层路由网络。
59.通常情况下,汇聚交换机120是l2和l3层路由网络的分界点,汇聚交换机120 以下的是l2网络,以上是l3网络。每组汇聚交换机管理一个传送点(pod,point ofdelivery),每个pod内都是独立的vlan网络。服务器在pod内迁移不必修改ip 地址和默认网关,因为一个pod对应一个l2广播域。
60.交换机120和接入交换机130之间通常使用生成树协议(stp,spanning treeprotocol)。stp使得对于一个vlan网络只有一个汇聚层交换机120可用,其他的 汇聚层交换机120在出现故障时才被使用(上图中的虚线)。也就是说,在汇聚层, 做不到水平扩展,
因为就算加入多个汇聚交换机120,仍然只有一个在工作。
61.图2示出了图1的分层的数据中心中各部件的物理连接。如图2所示,一个核 心交换机110连接多个汇聚交换机120,一个汇聚交换机120连接多个接入交换机 130,一个接入交换机130接入多个服务器140。
62.云服务器
63.云服务器140才是数据中心真实的设备。由于云服务器140高速运转以执行诸 如矩阵计算、图像处理、机器学习、压缩、搜索排序等各种任务,因此,为了能够 高效完成上述各种任务,云服务器140通常包括中央处理器(cpu)和各种加速单元, 如图3所示。加速单元例如专用于神经网络的加速单元、数据传输单元(dtu)、图 形处理单元(gpu)、专用集成电路(asic)、现场可编程门阵列(fpga)中的一个。 以下图3所示为例对各个加速单元分别进行介绍。
64.数据传输单元(dtu)260:它是专门用于将串口数据转换为ip数据或将ip数 据转换为串口数据通过无线通信网络进行传送的无线终端设备。dtu的主要功能是 把远端设备的数据通过无线的方式传送回后台中心。在前端,dtu和客户的设备通 过接口相连。dtu上电运行后先注册到移动的gprs网络,然后去和设置在dtu中的 后台中心建立套接字连接。后台中心作为套接字连接的服务端,dtu是套接字连接 的客户端。因此dtu和后台软件配合一起使用,在建立连接后,前端的设备和后台 的中心就可以通过dtu进行无线数据传输。
65.图形处理单元(gpu)240:是专门做图像和图形相关运算工作的处理器。使用 gpu,克服了cpu中计算单元的空间过少的缺点,采用大量用于专门做图形计算的计 算单元,使显卡减少了对cpu的依赖,承担了cpu原来承担的一些计算密集的图像 处理工作。
66.专用集成电路(asic):是指应特定用户要求和特定电子系统的需要而设计、 制造的集成电路。由于这种集成电路是按照用户要求定制的,其结构往往与特定用 户要求相适应。
67.现场可编程门阵列(fpga):是在pal、gal等可编程器件的基础上进一步发展 的产物。它是作为专用集成电路(asic)领域中的一种半定制电路而出现的,既解 决了定制电路的不足,又克服了原有可编程器件门电路数量有限的缺点。
68.用于神经网络模型的加速单元230:它是采用数据驱动并行计算的架构,用于 处理各神经网络节点的大量运算(例如卷积、池化等)的处理单元。由于各神经网 络节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧 密联系,会被经常用到,用现有的cpu构架,由于cpu核内的内存容量很小,因此 要大量频繁访问核外存储器,造成处理的低效。采用加速单元,其内部具有适于神 经网络计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大 提高处理效率,提高计算性能。
69.加速单元230虽然对于特定的应用或领域来说,执行效率大大高于普通处理器 的优点,但也要接受处理单元220的控制。以专用于深度学习模型的加速单元为例, 存储器210中存储有各种深度学习模型,包括这些模型的神经元和神经元的权重数 据等。这些深度学习模型当需要时被图3中的一个处理单元220部署到一个加速单 元230。具体地,处理单元220可以通过指令的形式向加速单元230告知加速单元 230深度学习模型在存储器210的存储位置。加速单元230然后可以根据这些位置 进行寻址,将待执行指令存储在其片上内存中。处理单元220也可以通过指令的形 式向加速单元230发送加速单元230的待执行指
令,加速单元230接收指令并存储 到片上内存中。加速单元230还可以通过上述方式获取输入数据。一旦加速单元230 获取到待执行指令和输入数据,就进行推理计算。节点的权重数据可以包含在深度 学习模型的指令序列中,由加速单元230一并从存储器210中取出。当然节点的权 重数据也可以独立存储,由加速单元230在需要时从存储器210中取出。处理单元 220是具有调度和控制能力的硬件单元,一般为中央处理器(cpu)、微控制器、微 处理器等硬件单元。
70.本公开实施例的加速单元
71.下面结合图4介绍处理单元220和本公开实施例提供的加速单元2301各自的内 部结构以及处理单元220是如何控制加速单元2301工作的。
72.如图4所示,处理单元220包含多个处理器核222和被多个处理器核222共享 的高速缓存221。每个处理器核222包括取指令单元203、指令译码单元224、指令 发射单元225、指令执行单元226。
73.取指令单元223用于将要执行的指令从存储器210中搬运到指令寄存器(可以 是图4示出的寄存器堆229中的一个用于存放指令的寄存器)中,并接收下一个取 指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长 度递增地址或递减地址。
74.取出指令后,处理单元220进入指令译码阶段,指令译码单元224按照预定的 指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从 而为指令执行单元225的操作做准备。操作数获取信息例如指向立即数、寄存器或 其他能够提供源操作数的软件/硬件。
75.指令发射单元225位于指令译码单元224与指令执行单元226之间,用于指令 的调度和控制,以将各个指令高效地分配至不同的指令执行单元226,使得多个指 令的并行操作成为可能。
76.指令发射单元225将指令发射到指令执行单元226后,指令执行单元226开始 执行指令。但如果该指令执行单元226判断该指令应该是加速单元执行的,则将其 转发到相应的加速单元执行。例如,如果该指令是一条神经网络推理(inference) 的指令,指令执行单元226不再执行该指令,而是将该指令通过总线发送到加速单 元230,由加速单元230执行。
77.加速单元2301包括总线通道231、直接内存访问模块235、片上内存236、分 发单元237、命令处理器238和pe阵列。
78.总线通道231是指令从总线进出加速单元230的通道。按照不同的机制,总线 通道231可以包括pcie通道232、i2c通道233、jtag通道234。pcie即pci-express, 是一种高速串行计算机扩展总线标准,是由英特尔在2001年提出的,旨在替代旧的 pci,pci-x和agp总线标准。pcie属于高速串行点对点双通道高带宽传输,所连接 的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告, 端对端的可靠性传输,热插拔以及服务质量等功能。它的主要优势就是数据传输速 率高,而且还有相当大的发展潜力。目前,pcie的总线大多是pcie gen3,但本公 开实施例也可以采用pcie gen4,即遵循pci-express4.0标准的总线通道。i2c通 道233是由philips公司开发的一种简单、双向二线制同步串行总线通道。它只需 要两根线即可在连接于总线上的器件之间传送信息。jtag是联合测试工作组(jointtest action group)的简称,是在名为标准测试访问端口和边界扫描结构的
ieee 的标准1149.1的常用名称。此标准用于验证设计与测试生产出的印刷电路板功能。 1990年jtag正式由ieee的1149.1-1990号文档标准化,在1994年,加入了补充 文档对边界扫描描述语言(bsdl)进行了说明。从那时开始,这个标准被全球的电 子企业广泛采用。边界扫描几乎成为了jtag的同义词。jtag通道234即是遵循该 标准的总线通道。
79.直接内存访问(dma,direct memory access)模块235是一些计算机总线架构 提供的功能,它能使数据从附加设备(例如外部的存储器)直接写入到加速单元2301 的片上内存236中。这种方式相比于通过处理单元220获取数据,大大提高了加速 单元2301的数据访问效率。正是因为有这样的机制,加速单元230可以直接访问存 储器210,读取深度学习模型的权重和激活数据,大大提高了数据访问效率。虽然 图上示出直接内存访问模块235位于处理器238和总线通道231之间,但是加速单 元2301的设计不局限于此。此外,在某些硬件设计中,每个pe单元都可以包含一 个直接内存访问模块235,从而直接从附加设备上读取数据并写入到片上内存236 中。
80.命令处理器238经由总线通道231从处理单元220接收各种指令,然后对指令 进行解析,并根据解析结果驱动其他部件执行。例如,处理单元220指示命令处理 器238从存储器210的设定地址中获取神经网络模型的待执行指令以及与待执行指 令的全部或部分输入数据,命令处理器238则控制直接内存访问模块235从设定地 址获取待执行指令以及其需要的全部或部分输入数据(权重和激活数据中的至少一 种),然后将指令和数据存储到片上内存236中。再例如,命令处理器238经由总 线通道231直接接收神经网络模型的待执行指令,解析该指令,根据解析结果控制 直接内存访问模块235从设定地址获取待执行指令需要的全部或部分数据,然后将 待执行指令和数据存储到片上内存236中。
81.在神经网络模型中,像矩阵运算、卷积和深度卷积这样的神经网络应用涉及大 量的输入数据,通常无法一次性将所有输入数据到导入到加速单元2301上。因此本 公开实施例的加速单元2301的做法是,如果判断该应用无法一次性地完成,由命令 处理器238对要执行的神经网络应用分解成多个执行的子操作,将子操作转换为在 多个pe集群组的pe集群上执行的指令序列(包括多条指令),并指定每个指令序 列的操作数据,通过直接内存访问模块235分多次加载每个子操作需要的操作数据, 最终将每个pe集群组内包含的多个pe集群分别对应的指令序列和操作数据存储到 相应存储单元中。其中,为每个指令序列的操作数据指定操作数据通常是将子操作 的操作数据均匀指定给每个指令序列。
82.应注意,每个子操作产生的结果都是中间结果,因此最终还需要将多个子操作 的中间结果整合为最终结果,由于中间结果是在pe集群中产生,而pe集群上的存 储空间有限,由此不可能无限度地存储中间结果,因此指令序列中需包含将中间结 果从pe集群倒回到相应的存储单元或将中间结果经由相应的存储单元导出到存储 器210,而在所有或者部分在子操作完成之后的整合步骤时,可有多种整合方式, 例如可将与同一个分发单元耦接的多个pe集群(在图4中属于同一行的pe集群) 的中间结果整合,然后多个pe集群组的中间结果整合。
83.如图上所示,命令处理器238与内存236耦接,内存236被划分为多个存储单 元。多个存储单元分别与多个分发单元一一对应地耦接,每个分发单元分别与由多 个pe集群组成的一个pe集群组耦接。每个分发单元从与其耦接的存储单元获取可 在pe集群上执行的指令序列和操作数据,并分发给提供给与其耦接的pe集群。应 注意,这里设计每个pe集群
组包含的pe集群数量都相同,每个pe集群的功能和硬 件结构都相同,因此部署在pe集群上执行的指令序列可以是相同的,并且可仅在第 一次执行子操作将pe集群的指令序列和操作数据发送给pe集群,而在后续的多个 子操作中只将新的操作数据发送给pe集群。
84.图上作为示例,存储单元为n,分发单元为n个,pe集群为n行m列。每个分发 单元通过第一总线与一行的pe集群耦接,如果一行的pe集群要获得相同数据,则 分发单元通过第一总线将该数据广播给一行的pe单元,否则,分发单元只负责通过 第一总线将指令序列和操作数据分别发送给与其耦接的各个pe集群。如图上所示, 每个pe集群进一步包括k个pe单元,由此,构成了维度为n*m*k的三维pe阵列, 其中m、n和k都是大于1的整数。
85.图5是一个示例性的pe集群的设计图。如图上所示,pe集群500包括集群控 制单元602以及多个相同功能的、与集群控制单元602耦接的pe单元。集群控制单 元602接收指令序列,指令序列中包括数据加载指令。集群控制单元602控制各个 pe单元执行相同的指令序列,并且可通过集群控制单元602产生的控制信号控制指 令序列中的数据加载指令执行时,从不同的数据地址加载不同的操作数据,从而不 同pe单元基于不同的操作数据得到不同的中间结果。
86.pe控制器501包含在每个pe单元中。每个pe单元还包括数据加载单元502、 权重队列503、输入缓冲器504、索引比较单元505、乘法器512、选择器511、累 积缓冲器506、缓冲器508、输出队列513、选择器516、512和514、特殊控制单元 509和特殊功能单元510。
87.数据加载单元502用于加载输入数据,并根据输入数据的数据类型将输入数据存 储到权重队列503或输入缓冲器504。输入数据的数据类型包括权重数据和激活数据, 权重数据被存储到权重队列503中,激活数据被存储到输入缓冲器504中。同时,数 据加载单元502通过检查激活数据的各个数值(即检查矩阵的各个项)是否等于0来 生成激活数据的位掩码,即激活数据的位掩码用于指示激活数据的各个数值是否为0。
88.在一些实施例中,处理单元220在编译和部署神经网络模型时,将其中的权重数 据以“非零值 权重索引”的形式组织和存储,因此当权重数据通过分发单元601进 入pe集群时,加载到权重队列503的权重数据为权重索引以及与权重索引对应的非零 值(图上的权重队列503中,采用不同图案标记权重索引和权重索引所对应的非零值。 另一些实施例中,在进入到权重队列503之前,由分发单元601、命令处理器238完成 将权重数据转换为“非零值 权重索引”的形式组织和存储。这两种实施方式尤其适 用于稀疏神经网络模型。
89.参考图上所示,为了实现权重数据的流式存储,权重队列503采用类似队列的 体系结构设计。构成权重队列503的存储单元可以是移位寄存器,并且它可形成一 个环形路径(loopback path),以支持在卷积操作时对权重数据的复用。环形路径 是指队列首尾连接,当写和/或读操作进行的队列的尾部时,再一次写入和/或读取 将回到队列的队首。
90.输入缓冲器504存储激活数据以及根据激活数据产生的位掩码。虽然未示出,但 是激活数据的每个数值同样表示为激活索引以及与激活索引对应的激活数值。因此 输入缓冲器504中存储激活索引、与激活索引对应的激活数值以及与激活索引对应的 位掩码。
91.索引比较单元505负责产生有效负载,有效负载是指基于非零的权重和激活数据 的矩阵运算。索引比较单元505包括加法器和比较器。加法器用于将权重索引和基地 址(从权重队列503接收权重索引,基地址从集群控制单元602中获得)相加,得到 输入索引。比较器接收加法器的输入索引,将输入索引与输出缓冲器504输出的索引 值比较,如果相同并
且位掩码指示对应的数值不为0,则生成控制信号提供给选择器 511的控制端,使得输入缓冲器504输出与该输入索引对应的数值并提供给乘法累加 器506。乘法累加器506用于执行乘法累加运算。乘法累加器506根据pe控制器501 的控制信号来停止累加乘法累加运算,并将累加结果输出到缓冲器中。
92.累积缓冲器506中,乘法器512产生的乘积被加法器5061累加。累加结果被输入 到选择器5062,以根据来自pe控制器501的控制信号决定将累加结果保存四个缓冲器 5063中的其中之一,视操作而定。每个pe单元都配备有四个同质的累积缓冲器5063。 存储在累积缓冲器5063中的累加结果被传输给不同的子模块,视操作而定。如图上 所示,通过选择器5063和5064,累加结果可被传输给加法器5061以继续累加操作, 累加结果还经过缓冲器508和选择器515和516被存储到输出队列513中。输出队列513 可存储多次操作的累加结果,这些中间结果可经由分发单元601转移到存储单元中, 并可以进而转移到外部的存储器上。累加结果还可作为中间结果长时间地保存在输 出队列513中,并在适当时候提供给四个缓冲器5063,用于将多次累加结果再次累加。 累加结果还可以经过缓冲器516被提供给特殊功能单元510。输出队列513中的累加结 果还可以经由选择器514提供给特殊功能单元510。
93.特殊功能单元(sfu)510用于执行神经网络模型要求的所有特殊功能。特殊功 能单元(sfu)510可通过消息队列/fifo接口与多个并行的pe单元耦接。特殊功能单 元510有自己的指令路径,并且与所有并行pe异步操作。因此,特殊功能单元510仅 利用少量硬件操作算子来匹配多个pe单元的吞吐量,同时最小化面积和功耗。根据 具体应用场景,特殊功能单元510可以在两种模式下运行:链式模式和解耦模式。链 式模式通常应用于元素级(elment-wise)的特殊函数,例如神经网络模型的激活函 数。通常,累积缓冲器506中的数据被写入到输出队列513,然后特殊功能单元510 读取输出队列513以执行特殊函数,并将最终结果写回输出队列513。但是,在链式 模式下,累积缓冲器506直接转移到特殊功能单元510中而不是输出队列513。这样, 特殊功能单元510只需要每个pe单元对应的本地的输出缓冲区地址,对输出缓冲区 513的内存访问减少了2/3。解耦模式通常应用于处理一些特殊的函数,比如归约 (reduction),其需要并行的pe单元上的数据(输入数据在所有pe单元之间交错)。 执行这些特殊函数时,特殊功能单元510中的队列中的数据采用标记/令牌来标识数 据属于哪个pe。通过标记/令牌,特殊功能单元510可以有效地判断当前特殊功能是 否已完成。不同于链式模式,解耦模式需要全局的输出缓存区地址,以灵活访问任 意pe单元的输出数据。
94.将神经网络应用映射到本公开实施例的加速单元上执行
95.加速单元可支持多种神经网络应用,常用的神经网络应用有:矩阵乘法(matrixmultiplication)、卷积和深度卷积(depth convolution)。而这些神经网络应用 的最基础的运算是相乘和累加运算,因此公开实施例设计的pe单元主要完成相乘和 累加运算。下面基于神经网络应用进行详细说明。
96.图6a示出矩阵乘法的示意图。如图6a所示,激活数据为m*k的二维矩阵,m 表示行,k表示列,权重数据为k*n的矩阵,表示行,n表示列,则输出数据为m*n 的矩阵,m表示行,n表示列。举例说明,a是2*3的矩阵,b是3*2的矩阵,c为a 和b的矩阵乘积,为2*2的矩阵,其运算过程如下。
[0097][0098][0099][0100]
如图6b和6c所示,在卷积和深度卷积中,更多维度被包含进来。参考图6b所 示,激活数据、权重数据和输出数据都是四维矩阵(本文将一维和二维矩阵称为低 维矩阵,将三维及以上的矩阵称为高维矩阵)。激活数据的参数为[b,w,h,c
in
],权 重数据的参数为[c
out
,l,l,c
in
],输出数据的参数为[b,w,h,c
out
]。为了方便理解, 我们将本示例理解为对图像数据的卷积操作。b表示图像数量,w和h表示图像尺寸 中的宽度和高度,c
in
表示通道数,例如rgb的图像的c
in
等于3。卷积操作可理解为 采用l*l*c
in
的卷积核在每个图像(图上c
in,
w和h限定的立方体)上进行扫描以得 到输出图像的过程,其对应的计算过程是:先将l*l的矩阵与二维图像中的对应的 特征元素求内积,将内积值求和,然后将c
in
个对应坐标的内积和相加作为二维特征 图上对应坐标上的值。换言之,l*l*c
in
的卷积核与一个[w,h,c
in
]定义的图像进行计 算得到一个w*h的二维特征图。c
out
个l*l*c
in
的卷积核与一个[w,h,c
in
]定义的图像 进行计算得到一个c
out
*w*h输出特征图。由于作为激活数据的图像有b个,因此最 终得到b个cout*w*h的输出特征图。图6c的深度卷积的的计算过程包括:先将l*l 的卷积核与输入二维图像中的对应的特征元素求内积,将内积值求和作为输出二维 特征图上对应坐标上的值,c是输入和卷积核的通道数,保持不变,作为输出图像 的通道数,最终得到b个c*w*h的特征图。
[0101]
从上述内容可以发现,卷积和深度卷积的基础是矩阵运算(相乘和累加),只 是卷积和深度卷积涉及更多维度,但是在程序处理时,可将卷积和深度卷积的高维 矩阵运算转换为多次迭代的多个低维矩阵运算。以图6a-6c为例,将图6b-6c中的 bwh对应于图6a中的m,cin对应于图6a中的k,cout对应于图6a中的n,按照这种 方式,图6b-6c所指示的卷积和深度卷积转换为多次迭代的m*k的二维矩阵与k*n 的矩阵运算。在执行神经网络应用时,还涉及到利用直接内存访问(dma,directmemory access)模块235将每次运算所需的数据加载到片上内存236的操作。
[0102]
在实施时,将卷积和深度卷积的高维矩阵运算转换为多次迭代的多个低维矩阵 运算有多种实现方式。本实施例定义了三种映射方法:输入固定(input stationary) 映射方法、权重固定(weight staionary)映射方法和输出固定(output stationary) 映射方法。命令处理器238在处理神经网络应用时,可选择其中之一的映射方法。 对于每个神经网络应用来说,优选的映射方式应该能够减少加速单元2301与外部存 储器210之间的数据传输。为此,加速单元2301可配置每个神经网络应用的优选的 映射方法,以便于在执行每个神经网络应用时使用对应的方法。
[0103]
下面还是以矩阵相乘为例介绍这三种映射方法。
[0104]
输入固定映射方法的核心思想是尽可能长时间地激活数据保留在pe阵列中。下 面以图7a所示的伪代码示例进行说明。该段伪代码包括多次迭代过程(迭代次数由 iter_n0,iter_k0和iter_m0决定),每次迭代指定一个在pe阵列上运行的二维矩 阵乘法。该二维
矩阵乘法的输入矩阵的符号为i(激活数据)和w(权重数据),输出 矩阵的符号为o。对于i,通过m_start和m_end定义其在二维矩阵(由高维矩阵的 激活数据转换而来)中的行开始序号和行结束序号,通过k_start和k_end定义其 在二维矩阵中的列开始序号和列结束序号。同样,对于w,通过k_start和k_end定 义其在二维矩阵(由高维矩阵的权重数据转换而来)中的行开始序号和行结束序号, 通过n_start和n_end定义其在二维矩阵中的列开始序号和列结束序号。对于o,也 是如此。
[0105]
通过伪代码可以看出,作为嵌套循环的条件语句,n先于k发生改变,k先于m 发生改变,由此k*n限定的来自权重数据的二维矩阵将先于m*k限定的来自激活数 据的二维矩阵发生改变,因此,当m和k保持不变,n发生变化时,将一个由m*k 限定的二维矩阵部署到pe阵列上,并保持一段时间,该一个由k*n限定的二维矩阵 不断地被从外部存储器加载进来并输送到pe阵列中,当k发生变化时,由m*k限定 的二维矩阵才发生改变,此时,将新的m*k从外部存储器上加载到pe阵列中。此外, 由m*n限定的输出二维矩阵有时需要写回到存储器210中。应注意,如果pe阵列能 够保持所有由m*k限定的二维矩阵,则没有必要采用输入固定映射方法。
[0106]
输出固定映射方法的核心思想是尽可能长时间地将输出数据保留在片上内存 236中。对应的伪代码如图7b所示。关于这段伪代码的分析可参见上文,这里就不 再详细叙述。应注意,当在片上内存236中能够存储所有激活数据时,则没有必要 采用输入固定数据加载方法。
[0107]
权重固定映射方法的核心思想是尽可能长时间地将权重数据保留在片上内存 236中。对应的伪代码如图7c所示。关于这段伪代码的分析可参见上文,这里就不 再详细叙述。应注意,权重固定映射方法只能在权重数据和计算分离的情况下才能 够使用。如果权重数据和计算交叠在一起,则不能够使用权重固定映射方法。当采 用权重固定映射方法时,命令处理器238在加载新的激活数据到片上内存236之前, 还需要将当前的部分结果数据(由pe阵列计算得到)写回到存储器210中。
[0108]
在施行上述映射方法时,还需要考虑到数据传输流水线(data transferpipeline)的问题。参考图7a的伪代码,pe阵列执行第k 1次迭代计算时,pe阵 列首先从片上内存236加载本次迭代的激活数据和权重数据。作为本次迭代的激活 数据和权重数据是由命令处理器238在第k个迭代时从存储器210加载到片上内存 236中的。注意片上内存236作为全局存储区,每个存储单元都是按照ping-pong 设计的,该设计针对每个存储单元都设计成两个单元,第一单元用于从存储器210 加载数据,第二单元用于将数据提供给pe阵列。因此,在pe计算期间,将下一次 迭代的激活和权重数据从存储器210传送到片上内存236以及将下一次迭代的激活 数和权重据从片上内存236传送到pe阵列中。因此,如果pe阵列的计算时间大于 从存储器210加载激活和权重数据时,从存储器210加载激活和权重数据的时间就 被隐藏在pe阵列的计算时间内,这将有助于提高加速单元的执行效率。在最后一次 迭代中,需要为下一组的第一次迭代准备输入的激活数据和权重数据。同时,输出 数据在最后一次迭代中将被从pe阵列写回到存储器210中。输出数据从片上内存 236写回到存储器210中的操作在下一个组的第一次迭代中执行。
[0109]
在本公开实施例的加速单元中施行的数据切分方法
[0110]
参见前文所述,命令处理器238经由直接内存访问模块235将每次迭代所需的 数
据加载到片上内存236的各个存储单元中,然后通过分发单元将数据分发给pe集 群,pe集群又进一步将数据分发给pe单元。在此过程中,分发单元通常将按照m, n和k的维度将切分矩阵,以得到可分发给pe集群中的矩阵。
[0111]
参考图8所示,激活数据是行数为4,列数为8的二维矩阵;权重数据是行数为 8,列数为8的二维矩阵;输出矩阵为行数为4,列数为8的二维矩阵。下面具体介 绍如何将图8所示的矩阵相乘部署到2*2的pe阵列中执行,该2*2的pe阵列包括 pe集群(0,0)、pe集群(1,0)、pe集群(0,1)和pe集群(1,1)。在我们的设 计中,每个pe集群是2维网格。因此,将上述矩阵映射到pe阵列时,在每个维度 上有三种选择,总计有9种选择。
[0112]
图9a-图9i示出了如何将图8所示的矩阵乘法部署到pe阵列的9种选择。在 图中,i、w和o分别表示在相应的pe集群执行的矩阵乘法的激活数据、权重数据 和输出矩阵。
[0113]
在图9a中,由pe集群(0,0)执行激活数据的第一行(即i[0:1,0:8])与权 重数据(即w[0:8,0:8])相乘的任务,执行结果是输出输出数据的第一行(即o [0:1,0:8])。其中,i[0:1,0:8]中的[0:1,0:8]指定输入数据的行和列,[0,1]表示 第一行,[0,8]表示第1列到第8列,w[0:8,0:8]表示权重数据中第1至第8行,第 1至第8列组成的矩阵,即一个完整的权重数据,o[0:1,0:8]表示输出数据的第1 行、第1至第8列组成的矩阵。图9a-9i中这些数据的表示方法都相同,因此在下 文中不再详细描述。在pe集群(1,0)上执行激活数据的第二行(即i[1:2,0:8]) 与权重数据(即w[0:8,0:8])相乘的任务,执行结果是输出输出矩阵的第二行(即 o[1:2,0:8])。在pe集群(0,1)上执行激活数据的第三行(即i[2:3,0:8])与权 重数据(即w[0:8,0:8])相乘的任务,执行结果是输出输出矩阵的第三行(即 [2:3,0:8])。在pe集群(1,1)上执行激活数据的第四行(即i[3:4,0:8])与权 重数据(即w[0:8,0:8])相乘的任务,执行结果是输出输出矩阵的第四行(即o [2:3,0:8])。
[0114]
基于图9a可知,pe集群(0,0)至pe集群(1,1)上参与矩阵相乘的输入和输出 矩阵均不相同,但是在pe集群(0,0)至pe集群(1,1)上参与矩阵相乘的权重数据 相同,也就是说,pe集群(0,0)至pe集群(1,1)共享权重数据。
[0115]
在图9b中,由pe集群(0,0)执行激活数据的前两行(i[0:2,0:8])与权重数 据的前4列(即w[0:8,0:4])相乘的任务,执行结果是输出输出数据的前两行和前 四列(即o[0:2,0:4])。在pe集群(1,0)上执行激活数据的后两行(即i[2:4,0:8]) 与权重数据的后4列(即w[0:8,0:4])相乘的任务,执行结果是输出输出矩阵的前 两行和前四列(即o[0:2,0:4])。在pe集群(0,1)上执行激活数据的前两行 (i[0:2,0:8])与权重数据的后四列(即w[0:8,4:8])相乘的任务,执行结果是输 出输出矩阵的前两行和后四列(即[0:2,4:8])。在pe集群(1,1)上执行激活数据 的前两行(即i[2:4,0:8])与权重数据的后4列(即w[0:8,4:8])相乘的任务,执 行结果是输出输出矩阵的前2行和后4列(即o[2:4,4:8])。
[0116]
基于图9b可知,pe集群(0,0)至pe集群(1,1)上参与矩阵相乘的输入和输出 矩阵均不相同,但是pe集群(0,0)和pe集群(1,0)之间的权重数据相同,pe集 群(0,1)和pe集群(1,1)之间的权重数据相同。
[0117]
在图9c中,由pe集群(0,0)执行激活数据的前两行和前四列(i[0:2,0:4]) 与权重数据的前4行(即w[0:4,0:8])相乘的任务,执行结果是输出输出数据的前 两行(即o[0:2,0:8])。在pe集群(1,0)上执行激活数据的后两行和前四列(即 i[2:4,0:4])与权重数据的前四行(即w[0:4,0:8])相乘的任务,执行结果是输出 输出矩阵的后两行(即o[2:4,0:8])。
在pe集群(0,1)上执行激活数据的前两行 和后四列(i[0:2,4:8])与权重数据的后四行(即w[4:8,0:8])相乘的任务,执行 结果是输出输出矩阵的前两行(即[0:2,0:8])。在pe集群(1,1)上执行激活数据 的前两行和后四列(即i[2:4,4:8])与权重数据的后4行(即w[4:8,0:8])相乘的 任务,执行结果是输出输出矩阵的前2行(即o[2:4,0:8])。
[0118]
基于图9c可知,pe集群(0,0)至pe集群(0,1)输出的矩阵相同,需要将两个 矩阵对应位置上的值相加得到最终值。同样,pe集群(1,0)和pe集群(1,1)输出 的矩阵相同,需要将两个矩阵对应位置上的值相加得到最终值。
[0119]
在图9d中,由pe集群(0,0)执行激活数据的前两行(i[0:2,0:8])与权重数 据的前4列(即w[0:8,0:4])相乘的任务,执行结果是输出输出数据的前两行和前 四列(即o[0:2,0:4])。在pe集群(1,0)上执行激活数据的前两行(即i[0:2,0:8]) 与权重数据的后四列(即w[0:8,4:8])相乘的任务,执行结果是输出输出矩阵的前 两行和后四列(即o[0:2,4:8])。在pe集群(0,1)上执行激活数据的后两行 (i[2:4,0:8])与权重数据的前四列(即w[0:8,0:4])相乘的任务,执行结果是输 出输出矩阵的后两行和前四列(即[2:4,0:4])。在pe集群(1,1)上执行激活数据 的后两行(即i[2:4,0:8])与权重数据的后4列(即w[0:8,4:8])相乘的任务,执 行结果是输出输出矩阵的后两行和后四列(即o[2:4,4:8])。
[0120]
基于图9d,将pe集群(0,0)至pe集群(1,1)上的输出矩阵组合起来得到最 终的矩阵相乘结果。
[0121]
在图9e中,由pe集群(0,0)执行激活数据(i[0:4,0:8])与权重数据的前2 列(即w[0:8,0:2])相乘的任务,执行结果是输出输出数据的前两列(即o[0:4, 0:2)。在pe集群(1,0)上执行激活数据(即i[0:4,0:8])与权重数据的第三列 和第四列(即w[0:8,2:4])相乘的任务,执行结果是输出输出矩阵的第三列和第四 列(即o[0:4,2:4])。在pe集群(0,1)上执行激活数据(i[0:4,0:8])与权重数 据的第五到第六列(即w[0:8,4:6])相乘的任务,执行结果是输出输出矩阵的第五 到第六列(即[0:4,4:6])。在pe集群(1,1)上执行激活数据(即i[0:4,0:8]) 与权重数据的第七到第八列(即w[0:8,6:8])相乘的任务,执行结果是输出输出矩 阵的第七到第八列(即o[0:4,6:8])。
[0122]
基于图9e,将pe集群(0,0)至pe集群(1,1)上的输出矩阵组合起来得到最 终的矩阵相乘结果。
[0123]
在图9f中,由pe集群(0,0)执行激活数据的前四列(i[0:4,0:4])与权重数 据的前四行和前四列(即w[0:4,0:4])相乘的任务,执行结果是输出输出数据的前 四列(即o[0:4,0:4)。在pe集群(1,0)上执行激活数据的前四列(即i[0:4,0:4]) 与权重数据的前四行和后四列(即w[0:4,4:8])相乘的任务,执行结果是输出输出 矩阵的前四行和后四列(即o[0:4,4:8])。在pe集群(0,1)上执行激活数据的后 四列(i[0:4,4:8])与权重数据的后四行和前四列(即w[4:8,4:4])相乘的任务, 执行结果是输出输出矩阵的前四行和前四列(即[0:4,0:4])。在pe集群(1,1)上 执行激活数据的后四列(即i[0:4,4:8])与权重数据的后四行和后四列(即 w[4:8,4:8])相乘的任务,执行结果是输出输出矩阵的后四列(即o[0:4,4:8])。
[0124]
基于图9f,将pe集群(0,0)和pe集群(0,1)上的输出矩阵的对应值相加得 到最终值,将pe集群(1,0)和pe集群(1,1)上的输出矩阵的对应值相加得到最 终值,最后组合而成的矩阵为最终的矩阵相乘结果。
[0125]
在图9g中,由pe集群(0,0)执行激活数据的前两行和前四列(i[0:2,0:4]) 与权重
数据的前4行(即w[0:4,0:8])相乘的任务,执行结果是输出输出数据的前 两行(即o[0:2,0:8)。在pe集群(1,0)上执行激活数据的前两行和后四列(即i[0:2,4:8])与权重数据的或四行(即w[4:8,0:8])相乘的任务,执行结果是输出 输出矩阵的前两行(即o[0:2,0:8])。在pe集群(0,1)上执行激活数据的第三和 四行和前四列(i[2:4,0:4])与权重数据的前四行(即w[0:4,0:8])相乘的任务, 执行结果是输出输出矩阵的第三行和第四行(即[2:4,0:8])。在pe集群(1,1)上 执行激活数据的后两行和后四列(即i[2:4,4:8])与权重数据的后四行(即 w[4:8,0:8])相乘的任务,执行结果是输出输出矩阵的后两行(即o[2:4,0:8])。
[0126]
基于图9g,将pe集群(0,0)和pe集群(1,0)上的输出矩阵的对应值相加得 到最终值,将集群(0,1)和pe集群(1,1)上的输出矩阵的对应值相加得到最终值, 最终组合而成的矩阵为最终的矩阵相乘结果。
[0127]
在图9g中,由pe集群(0,0)执行激活数据的前两行和前四列(i[0:2,0:4]) 与权重数据的前4行(即w[0:4,0:8])相乘的任务,执行结果是输出输出数据的前 两行(即o[0:2,0:8)。在pe集群(1,0)上执行激活数据的前两行和后四列(即 i[0:2,4:8])与权重数据的后四行(即w[4:8,0:8])相乘的任务,执行结果是输出 输出矩阵的前两行(即o[0:2,0:8])。在pe集群(0,1)上执行激活数据的第三和 四行和前四列(i[2:4,0:4])与权重数据的前四行(即w[0:4,0:8])相乘的任务, 执行结果是输出输出矩阵的第三行和第四行(即[2:4,0:8])。在pe集群(1,1)上 执行激活数据的后两行和后四列(即i[2:4,4:8])与权重数据的后四行(即 w[4:8,0:8])相乘的任务,执行结果是输出输出矩阵的后两行(即o[2:4,0:8])。
[0128]
基于图9g,将pe集群(0,0)和pe集群(1,0)上的输出矩阵的对应值相加得 到最终值,将集群(0,1)和pe集群(1,1)上的输出矩阵的对应值相加得到最终值, 最终组合而成的矩阵为最终的矩阵相乘结果。
[0129]
在图9h中,由pe集群(0,0)执行激活数据的前四列(i[0:4,0:4])与权重数 据的前4行和前四列(即w[0:4,0:4])相乘的任务,执行结果是输出输出数据的前 四列(即o[0:4,0:4)。在pe集群(1,0)上执行激活数据的后四列(即i[0:4,4:8]) 与权重数据的后四行(即w[4:8,0:8])相乘的任务,执行结果是输出输出矩阵的前 四列(即o[0:4,0:4])。在pe集群(0,1)上执行激活数据的前四列(i[0:4,0:4]) 与权重数据的前四行和后四列(即w[0:4,4:8])相乘的任务,执行结果是输出输出 矩阵的前四行和后四列(即[0:4,4:8])。在pe集群(1,1)上执行激活数据的后四 列(即i[0:4,4:8])与权重数据的后四行和后四列(即w[4:8,4:8])相乘的任务, 执行结果是输出输出矩阵的后四列(即o[0:4,4:8])。
[0130]
基于图9h,将pe集群(0,0)和pe集群(1,0)上的输出矩阵的对应值相加得 到最终值,将集群(0,1)和pe集群(1,1)上的输出矩阵的对应值相加得到最终值, 最终组合而成的矩阵为最终的矩阵相乘结果。
[0131]
在图9i中,由pe集群(0,0)执行激活数据的前两列(i[0:4,0:2])与权重数 据的前2行(即w[0:2,0:8])相乘的任务,执行结果是输出输出数据(即o[0:4, 0:8)。在pe集群(1,0)上执行激活数据的第三和四列(即i[0:4,2:4])与权重 数据的第三行和第四行(即w[2:4,0:8])相乘的任务,执行结果是输出输出矩阵的 前四行(即o[0:4,0:8])。在pe集群(0,1)上执行激活数据的第五和第六列 (i[0:4,4:6])与权重数据的第五行和第六行(即w[4:6,0:8])相乘的任务,执行 结果是输出输出矩阵(即[0:4,0:8])。在pe集群(1,1)上执行激活数据的后两列 (即i[0:4,6:8])与权重数据的第七和第八行(即w[6:8,0:8])相乘的任务,
执行 结果是输出输出矩阵(即o[0:4,0:8])。
[0132]
基于图9h,将pe集群(0,0)至pe集群(1,1)上的输出矩阵的对应值相加得 到最终的矩阵相乘结果。
[0133]
总结而言,沿m方向(激活数据的行方向)切分意味由不同的pe集群处理激活 数据和输出矩阵的不同行数据,但是这些pe集群之间共享相同的权重数据。可根据 激活数据的有效行数确定参与计算的pe集群的个数。例如,在spmv(sparsematrix-vector multiplication,稀疏矩阵-向量乘法)中,只有一个pe集群是有 效的(pe阵列的行和列方向包含不同的m)。
[0134]
沿着n方向(权重数据的列方向)切分意味着由不同pe集群计算各种沿着n方向 切分的各种输出矩阵切片,并且pe集群之间共享相同的输入矩阵切片。在这种切分 方法下,不同pe集群需要不同的权重数据。如果在计算中权重数据的复用程度较低 (更小的m),则数据传输延迟将变得更加严重。
[0135]
沿着k方向(权重数据的行方向)切分意味着不同pe集群计算同一输出矩阵切 片的部分和。在这种切分方法下,在计算期间不同pe集群之间不共享数据。同时, 不同集群产生的部分和需要累加到一起,以得到最终结果。
[0136]
本公开实施例提供的加速单元,通过将神经网络模型的特定操作分解成多个子 操作,通过直接内存访问模块分多次获取每个子操作的操作数据,然后将子操作部 署到pe阵列上执行,由于pe阵列包括三维pe单元,因此三维pe单元的并行执行 能够实现对神经网络模型的硬件加速。
[0137]
进一步地,所述通过将神经网络模型的特定操作分解成多个子操作并将每个子 操作部署到pe阵列上为:将高维矩阵的激活数据和权重数据的运算转换成迭代进行 的低维矩阵的激活数据和权重数据的运算,并将低维矩阵的激活数据和权重数据的 运算部署到pe阵列上,每个pe单元可用于执行一维矩阵相乘运算并且一维相乘运 算结果还可以累加到一起,如此有助于实现对于对神经网络应用的硬件加速。
[0138]
应该理解,由于神经网络模型主要由几个关键操作构成,例如矩阵乘法、卷积 和深度卷积,这些关键操作都可以转换为转换成低维矩阵的激活数据和权重数据的 运算,通过pe阵列并行执行低维矩阵运算,可实现对神经网络应用的硬件加速,并 进一步实现对神经网络模型的硬件加速。
[0139]
同时,虽然每个特定操作可以采用不同映射方法将映射为低维矩阵的激活数据 和权重数据的运算,但是针对每个特定操作的固有特征,优选的映射方法相比其余 映射方法,能够减少外部存储器与pe阵列或者pe单元之间的数据移动,因此通常 会为每个特定操作设置优选的映射方法。例如,对于矩阵乘法,优选的映射方法是 输入固定映射方法。
[0140]
本公开实施例的商业价值
[0141]
本公开实施例提供的加速单元通过pe阵列并行执行矩阵运算,而矩阵运算是神 经网络模型的基础运算,因此加速矩阵运算能够加速神经网络模型的执行速度。目 前很多落地应用配备了神经网络模型,即本公开实施例提供的加速单元已经具有现 实的应用场景,因此本公开实施例提供的加速单元具有市场前景和商业价值。
[0142]
本领域的技术人员能够理解,本公开可以实现为系统、方法和计算机程序产品。 因此,本公开可以具体实现为以下形式,即完全的硬件、完全的软件(包括固件、 驻留软件、
微代码),还可以实现为软件和硬件结合的形式。此外,在一些实施例 中,本公开还可以实现为一个或多个计算机可读介质中的计算机程序产品的形式, 该计算机可读介质中包含计算机可读的程序代码。
[0143]
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算 机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、 磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计 算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计 算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只 读存储器(eprom或者闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光 存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可 以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用, 或者与其结合使用。
[0144]
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号, 其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括 但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可 以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、 传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
[0145]
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于 无线、电线、光缆、rf等等,以及上述任意合适的组合。
[0146]
可以以一种或者多种程序设计语言或者组合来编写用于执行本公开实施例的计 算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如java、c , 还可以包括常规的过程式程序设计语言,例如c。程序代码可以完全地在用户计算 机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户 计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉 及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(lan)或 广域网(wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网 服务提供商来通过因特网连接)。
[0147]
以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人 员而言,本公开可以有各种改动和变化。凡在本公开的精神和原理之内所作的任何 修改、等同替换、改进等,均应包含在本公开的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献