数据处理方法、装置、系统及计算机可读存储介质转让专利

申请号 : CN202111436322.7

文献号 : CN113849293B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 原嵩张运星迟亮金正雄

申请人 : 湖北芯擎科技有限公司

摘要 :

本申请实施例公开了一种数据处理方法、装置、系统及计算机可读存储介质。该方法包括:将神经网络的子网络模块部署在芯片上的神经网络处理器中,通过神经网络处理器的计算单元将保存子网络输出数据的内存地址封装为报文,该子网络输出数据为神经网络处理器调用神经网络的子网络模块处理而输出的数据,并将报文发送至RDMA引擎中的待发送队列,由RDMA引擎将内存地址中保存的子网络输出数据发送至神经网络另一子网络模块所在的目标神经网络处理器上,如此,提高了神经网络处理器之间传输数据的效率,可在不增加芯片成本的基础上,实现将一个复杂的神经网络部署到多个神经网络处理器上。

权利要求 :

1.一种数据处理方法,其特征在于,应用在芯片中的神经网络处理器上,所述神经网络处理器上安装有集成远程直接内存访问引擎的硬件,所述神经网络处理器上部署有神经网络的子网络模块,所述神经网络处理器包括多个计算单元和存储器,所述数据处理方法,包括:

所述神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,所述子网络输出数据是调用所述存储器中的子网络模块进行处理而输出的数据;

所述计算单元将所述内存地址封装为预设格式的硬件层的报文,并通过硬件将所述报文发送至所述远程直接内存访问引擎中的待发送队列,从而无需所述芯片上的CPU来创建传输请求,无需经过所述芯片上的CPU的调度将所述传输请求发送至所述待发送队列并将所述传输请求转换为预设格式,所述预设格式为所述直接内存访问引擎支持的格式;

所述远程直接内存访问引擎获取所述待发送队列中的所述报文中的所述内存地址,从所述内存地址中获取所述子网络输出数据,并通过所述子网络模块与部署有所述神经网络的另一子网络模块之间创建的传输通道,将所述子网络输出数据发送至所述另一子网络模块所在的目标神经网络处理器上。

2.根据权利要求1所述的数据处理方法,其特征在于,所述计算单元将所述内存地址封装为预设格式的硬件层的报文,并将所述报文发送至所述远程直接内存访问引擎中的待发送队列的步骤,包括:

所述计算单元利用预设算子将内存地址封装为预设格式的硬件层的报文,并利用所述预设算子将所述报文发送至所述远程直接内存访问引擎中的待发送队列,其中,所述预设算子是预先封装的原子计算指令集合,所述原子计算指令集合中包括远程直接内存访问原语。

3.根据权利要求2所述的数据处理方法,其特征在于,在所述计算单元利用预设算子将内存地址封装为预设格式的硬件层的报文的步骤之前,还包括:在定义所述神经网络的网络结构时,加入预设算子;或者在利用神经网络编译器编译所述神经网络,并将编译后的所述神经网络切片后得到的每个子网络模块中加入预设算子。

4.根据权利要求1所述的数据处理方法,其特征在于,所述计算单元将所述内存地址封装为预设格式的硬件层的报文的步骤,包括:所述计算单元触发CPU中断,并将所述内存地址的发送指令发送至用户态协议栈,所述CPU为神经网络处理器内嵌的CPU;

基于所述发送指令,利用所述用户态协议栈将所述内存地址直接封装为硬件层的报文。

5.根据权利要求1所述的数据处理方法,其特征在于,在所述获取用于保存子网络输出数据的内存地址的步骤之后,还包括:所述计算单元将所述内存地址进行保存;

当检测到需要向所述内存地址中写入所述子网络输出数据时,触发将所述内存地址封装为预设格式的硬件层的报文的步骤。

6.根据权利要求5所述的数据处理方法,其特征在于,还包括:当所述神经网络处理器接收到所述神经网络的其他子网络模块发送的子网络输出数据后,获取预先分配的保存所接收到的所述子网络输出数据的目标内存地址;

获取预先分配的所述神经网络处理器自身的存储地址范围、以及其他神经网络处理器中部署的神经网络的其他子网络模块所对应的网络层数据;

根据所述目标内存地址、所述存储地址范围和所述网络层数据确定保存所述子网络输出数据的目标神经网络处理器;

当所确定的目标神经网络处理器为所述神经网络处理器时,将所述子网络输出数据保存在所述目标内存地址中;

当所确定的目标神经网络处理器不为所述神经网络处理器时,所述计算单元将所述子网络输出数据和所述目标神经网络处理器的标识信息封装为预设格式的硬件层的报文,并触发将所述报文发送至所述远程直接内存访问引擎中的待发送队列的步骤。

7.根据权利要求1所述的数据处理方法,其特征在于,还包括:当所述神经网络处理器接收到所述神经网络的其他子网络模块发送的子网络输出数据后,将所述子网络输出数据保存在所述存储器中,并向所述计算单元广播所述子网络输出数据;

所述计算单元调用所述存储器中的子网络模块对所述子网络输出数据进行处理。

8.一种数据处理装置,其特征在于,应用在芯片中的神经网络处理器上,所述神经网络处理器上安装有集成远程直接内存访问引擎的硬件,所述神经网络处理器上部署有神经网络的子网络模块,所述神经网络处理器包括多个计算单元和存储器,所述数据处理装置,包括:

第一获取模块,用于通过所述神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,所述子网络输出数据是调用所述存储器中的子网络模块进行处理而输出的数据;

封装模块,用于通过所述计算单元将所述内存地址封装为预设格式的硬件层的报文,并通过硬件将所述报文发送至所述远程直接内存访问引擎中的待发送队列,从而无需所述芯片上的CPU来创建传输请求,无需经过所述芯片上的CPU的调度将所述传输请求发送至所述待发送队列并将所述传输请求转换为预设格式,所述预设格式为所述直接内存访问引擎支持的格式;

第二获取模块,用于通过所述远程直接内存访问引擎获取所述待发送队列中的所述报文中的所述内存地址,从所述内存地址中获取所述子网络输出数据;

发送模块,用于通过所述子网络模块与部署有所述神经网络的另一子网络模块之间创建的传输通道,将所述子网络输出数据发送至所述另一子网络模块所在的目标神经网络处理器上。

9.一种数据处理系统,其特征在于,所述数据处理系统包括多个神经网络处理器,神经网络的多个子网络模块被部署于各神经网络处理器中,所述神经网络处理器上安装有集成远程直接内存访问引擎的硬件,所述神经网络处理器包括多个计算单元和存储器,所述存储器中存储有子网络模块,所述神经网络处理器用于执行上述权利要求1‑7任一项所述的数据处理方法。

10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于处理器进行加载,以执行如权利要求1‑7任一项所述的数据处理方法中的步骤。

说明书 :

数据处理方法、装置、系统及计算机可读存储介质

技术领域

[0001] 本申请涉及数据处理技术领域,具体涉及一种数据处理方法、装置、系统及计算机可读存储介质。

背景技术

[0002] 在自动驾驶领域,为了提高自动驾驶的准确性(如障碍物检测的准确性)和精度,往往采用增加神经网络的网络层数(如从ResNet‑18到ResNet‑200,网络层数从18层增加到
200层)的方式,随着感知引擎记录了越来越多的对象,导致了神经网络规模迅速膨胀。另一
方面,在未来的发展中,自动驾驶领域中的车辆又需要支持更高级别的ADAS系统(Advanced 
Driving Assistance System,高级驾驶员辅助系统),而更高级别的ADAS系统需要更大的
算力。
[0003] 目前有很多的AI处理器被开发出来,以用于自动驾驶领域,如硬件化的神经网络处理器(AI Processing Unit,AIPU),包括NPU(Neural Network Processing Unit or 
Neural Processing Unit,神经网络处理器)、TPU(Neural Processing Unit,张量处理器)
等,这些专用的神经网络处理器往往以资源和空间来换取效率,采用多个计算单元排列成
矩阵实现并行处理、采用矩阵分解的方式来简化过滤器的计算等。
[0004] 为了支持更大规模的神经网络以及提高更大规模的神经网络的计算效率,一个可行的方法是在单块神经网络处理器,如NPU/TPU上增加权重网络存储空间、增加更多的计算
单元。由于各个处理器厂商的解决方案不同,就需要有低、中、高算力的系列芯片同时生产,
同时更多权重网络存储空间和更多计算单元增加了成本。
[0005] 另一个未来可能会使用的方法是把一个复杂的神经网络分布到多个TPU/NPU上,在不同TPU/NPU之间利用CPU通过软件模块来传递子网络输出数据,CPU的介入严重降低了
整体的性能和效率;且多个TPU/NPU中的很多中间计算结果和信息都被丢掉了,会显著降低
智能性和舒适性;另外,CPU作为中间人在NPU、GPU和CPU的多个软件模块中传递数据导致端
到端反应时间超长。这些原因均导致实现一个复杂的神经网络分布到多个TPU/NPU上存在
诸多困难。

发明内容

[0006] 本申请实施例提供一种数据处理方法、装置、系统及计算机可读存储介质及,可以在不增加芯片成本的情况下,实现将一个复杂的神经网络分布到多个神经网络处理器上,
且可提高神经网络处理器与其他神经网络处理器之间传输数据的效率。
[0007] 本申请实施例提供了一种数据处理方法,应用在芯片中的神经网络处理器上,所述神经网络处理器上安装有集成远程直接内存访问引擎的硬件,所述神经网络处理器上部
署有神经网络的子网络模块,所述神经网络处理器包括多个计算单元和存储器,所述数据
处理方法,包括:
[0008] 所述神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,所述子网络输出数据是调用所述存储器中的子网络模块进行处理而输出的数据;
[0009] 所述计算单元将所述内存地址封装为预设格式的硬件层的报文,并将所述报文发送至所述远程直接内存访问引擎中的待发送队列,所述预设格式为所述直接内存访问引擎
支持的格式;
[0010] 所述远程直接内存访问引擎获取所述待发送队列中的所述报文中的所述内存地址,从所述内存地址中获取所述子网络输出数据,并通过所述子网络模块与部署有所述神
经网络的另一子网络模块之间创建的传输通道,将所述子网络输出数据发送至所述另一子
网络模块所在的目标神经网络处理器上。
[0011] 本申请实施例还提供一种数据处理装置,应用在芯片中的神经网络处理器上,所述神经网络处理器上安装有集成远程直接内存访问引擎的硬件,所述神经网络处理器上部
署有神经网络的子网络模块,所述神经网络处理器包括多个计算单元和存储器,所述数据
处理装置,包括:
[0012] 第一获取模块,用于通过所述神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,所述子网络输出数据是调用所述存储器中的子网络模块进行处理而输
出的数据;
[0013] 封装模块,用于通过所述计算单元将所述内存地址封装为预设格式的硬件层的报文,并将所述报文发送至所述远程直接内存访问引擎中的待发送队列,所述预设格式为所
述直接内存访问引擎支持的格式;
[0014] 第二获取模块,用于通过所述远程直接内存访问引擎获取所述待发送队列中的所述报文中的所述内存地址,从所述内存地址中获取所述子网络输出数据;
[0015] 发送模块,用于通过所述子网络模块与部署有所述神经网络的另一子网络模块之间创建的传输通道,将所述子网络输出数据发送至所述另一子网络模块所在的目标神经网
络处理器上。
[0016] 本申请实施例还提供一种数据处理系统,包括:包括多个神经网络处理器,神经网络的多个子网络模块被部署于各神经网络处理器中,所述神经网络处理器上安装有集成远
程直接内存访问引擎的硬件,所述神经网络处理器包括多个计算单元和存储器,所述存储
器中存储有子网络模块,所述神经网络处理器用于执行上述任一项所述的数据处理方法。
[0017] 本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于处理器进行加载,以执行如上任一实施例所述的数据处
理方法中的步骤。
[0018] 本申请实施例还提供一种芯片,所述芯片包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,执行如上任
一实施例所述的数据处理方法中的步骤。
[0019] 本申请实施例提供的数据处理方法、装置、系统及计算机可读存储介质,将神经网络的子网络模块部署在芯片上的神经网络处理器中,通过神经网络处理器的计算单元将保
存子网络输出数据的内存地址封装为报文,该子网络输出数据为神经网络处理器调用神经
网络的子网络模块处理而输出的数据,并将报文发送至直接内存访问引擎中的待发送队
列,并由直接内存访问引擎将内存地址中保存的子网络输出数据发送至神经网络另一子网
络模块所在的目标神经网络处理器上,如此,将部署有神经网络的子网络模块的神经网络
处理器处理得到的子网络输出数据发送至部署有神经网络的另一子网络模块的目标神经
网络处理器上,子网络输出数据并没有被丢掉,使得可很好的利用子网络模块处理得到的
子网络输出数据进行下一步的处理,提高神经网络处理数据的效率,此外,子网络模块处理
得到的子网络输出数据的传输不必经过芯片上的CPU,不必生成传输请求(生成传输请求需
要调用芯片上的CPU来进行处理),而直接封装为硬件层的报文,从计算单元发送至直接内
存访问引擎中的待发送队列,直接通过硬件传输,如此提高了神经网络处理器之间传输数
据的效率。在子网络模块处理得到的子网络输出数据没有丢失,且能高效的在神经网络处
理器之间传输子网络输出数据的基础上,不增加芯片成本,即可实现将一个复杂的神经网
络部署到多个神经网络处理器上,解决了现有技术的难题。

附图说明

[0020] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于
本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附
图。
[0021] 图1为现有技术中的自动驾驶控制系统的示意图。
[0022] 图2为本申请实施例提供的数据处理系统的应用场景示意图。
[0023] 图3为本申请实施例提供的数据处理系统的另一应用场景示意图。
[0024] 图4为本申请实施例提供的数据处理系统的工作流程示意图。
[0025] 图5为本申请实施例提供的数据处理系统的另一工作流程示意图。
[0026] 图6为本申请实施例提供的神经网管理处理器之间传输数据的示意图。
[0027] 图7为本申请实施例提供的数据处理方法的流程示意图。
[0028] 图8为本申请实施例提供的数据处理方法的另一流程示意图。
[0029] 图9为本申请实施例提供的在单个神经网络处理器上执行子网络模块的示意图。
[0030] 图10为本申请实施例提供的数据处理方法的另一流程示意图。
[0031] 图11为本申请实施例提供的数据处理方法的又一流程示意图。
[0032] 图12为本申请实施例提供的数据处理方法的又一流程示意图。
[0033] 图13为本申请实施例提供的数据处理装置的结构示意图。
[0034] 图14为本申请实施例提供的数据处理装置的另一结构示意图。

具体实施方式

[0035] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于
本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施
例,都属于本申请保护的范围。
[0036] 本申请实施例提供一种数据处理方法、装置、系统、计算机可读存储介质及芯片。具体地,本申请实施例的数据处理方法可以由芯片来执行,具体地,由芯片中的神经网络处
理器来执行。其中,该芯片可以为系统级芯片(SoC),还可以是其他的可集成神经网络处理
器的芯片。在每个芯片中,集成有一个或者多个神经网络处理器。神经网络处理器包括TPU、
NPU等AIPU处理器,下文中以NPU为例进行说明。
[0037] 再具体介绍本申请实施例的具体方案之前,先介绍下当前自动驾驶车辆所采用的自动驾驶控制系统的示意图,以进一步帮助理解本申请实施例的方案。
[0038] 目前,量产或者即将量产的自动驾驶车辆基本都采用pipeline(类似管线传输)的模式。如图1所示,在自动驾驶车辆的自动驾驶控制系统中,包括物体感知模块、物体跟踪模
块或者传感器融合模块、定位和预测模块、规划和决策模块、控制模块等。其中,神经网络用
在物体感知、物体跟踪或传感器融合上,使用神经网络处理器来进行处理,而定位和预测模
块、规划和决策模块、控制模块等往往利用CPU或者GPU来进行处理。
[0039] 为了提高自动驾驶的准确性,在不久的将来,在定位和预测模块、规划和决策模块也可能会开始大量采用各种类型的神经网络。如图2所示,为本申请实施例提供的一种自动
驾驶控制系统的示意图,在该自动驾驶控制系统中,包括了图像识别和分类的神经网络、多
目标连续跟踪网络、3D感知识别网络(感知骨干)和采用类似SSD的感知神经网络(感知头
部)。可以看到,图2中使用了四类神经网络(图中灰色所示方框),其中,类似SSD的感知神经
网络还需要使用3D感知识别网络的中间层数据。
[0040] 为了支撑如图2所示的更大规模的神经网络,一个可行的方法是在单块神经网络处理器上增加权重网络存储空间、增加更多的计算单元,而多权重网络存储空间和更多计
算单元增加了芯片的成本。由此,想到另一种可能会使用的方案,即将一个复杂的神经网络
分布到多个神经网络处理器上。
[0041] 然而当前不同芯片上的多个神经网络处理器之间传递数据需要利用芯片所属系统所对应的CPU,并通过软件模块来实现。例如,在发送的时候,发送者NPU内嵌的CPU要被触
发调度,由发送者NPU内嵌的CPU和中间人CPU(系统的主控CPU)之间要发生交互,CPU要运行
自己的软件栈、再把被传送的数据或者指针发送给接收者NPU内嵌的CPU,接收者NPU内嵌的
CPU需要获取数据的地址,进一步可能需要把数据拷贝到自己的地址空间,再触发自己的
NPU逻辑继续执行。这样使用CPU来实现多个任务/进程/芯片间交互的方式,导致效率非常
低下;而且CPU作为中间人在NPU和GPU和CPU的多个软件模块中传递数据导致端到端反应时
间超长。
[0042] 而且,如图2所示,单个NPU无法容纳一个非常复杂的神经网络,会把该复杂的神经网络分为几个小的神经网络来处理,这样的话,会导致很多中间计算结果和信息被丢失掉
了,而修改现有神经网络或者建立新的网络会使得开发代价变高。
[0043] 以上这些原因均导致把一个复杂的神经网络分布到多个神经网络处理器上,真正实现起来非常困难。
[0044] 本申请实施例提供的数据处理方法、装置、系统及计算机可读存储介质和芯片可在一定程度上解决上述技术问题,真正实现将一个复杂的神经网络分布到多个神经网络处
理器上。
[0045] 需要注意的是,本申请实施例中的芯片中可集成一个或者多个神经网络处理器,由于当前环境下,一般一个芯片中集成一个神经网络处理器,本申请实施例以一个独立封
装的芯片集成一个神经网络处理器来进行说明。本申请实施例中的方案适用于多个神经网
络处理器之间传递数据,而无论多个神经网络处理器是处于同一个芯片中,还是处于多个
不同的芯片中。
[0046] 以下将分别对本申请实施例提供的一种数据处理方法、装置、计算机可读存储介质及计算机设备进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序
的限定。
[0047] 本申请实施例提供一种数据处理系统,该数据处理系统包括多个神经网络处理器,多个神经网络处理器集成在至少一个芯片中。神经网络的多个子网络模块被部署于各
神经网络处理器中,每个神经网络处理器上安装有集成远程直接内存访问(Remote Direct 
Memory Access,RDMA)引擎的硬件,神经网络处理器包括多个计算单元和存储器。存储器中
包括用于保存中间结果和子网络模块的子网络模型的静态随机存取存储器(Static 
Random Access Memory,SRAM)和用于保存子网络模块的子网络输出数据/子网络计算结果
数据的外接双倍速率随机存储器(Double Data Rate Random Access Memory, DDR‑RAM)。
[0048] 其中,RDMA引擎的数据发送和接收功能可以承载在以太网或者PCIe(Peripheral Component Interconnect Express,高速串行计算机扩展总线标准)网络上,或者其他支持
RDMA引擎的网络上。可以在以太网上部署RDMA引擎,采用支持RDMA引擎的网卡和相关的协
议栈/硬件数字逻辑、以及以太网交换机来构建通信子系统;也可以在PCIe上部署RDMA引
擎,采用PCIe交换机来连接多个芯片上集成的多个神经网络处理器来构建通信子系统。
[0049] 其中,本申请实施例中的子网络模块可以对应一个/多个独立的神经网络,如此,子网络模块的最小单位为神经网络,多个子网络模块形成一个大型的复杂的神经网络;子
网络模块还可以对应神经网络中的权重网络,其中,权重网络包括计算数据的权重,用于将
一个神经元的输出数值乘以权重,再传递给一下个神经元,作为下一个神经元的输入,对应
地,子网络模块的最小单位为权重网络,多个权重网络构成一个大型神经网络;子网络模块
还可以以层为最小单位,如此,子网络模块对应神经网络的一层/多层,多个子网络模块形
成一个神经网络。
[0050] 图3是本申请实施例提供的数据处理系统的应用场景示意图,数据处理系统可应用于自动驾驶控制系统中。在该自动驾驶的应用场景中,数据处理系统包括四个神经网络
处理器,该四个神经网络处理器级联来实现一个大型的复杂的神经网络。将神经网络部署
在四个不同的神经网络处理器中,这四个不同的神经网络处理器分别实现感知/跟踪/融
合、定位和预测、规划、决策等功能,将这四种不同的功能分别通过神经网络的子网络模块
来实现。
[0051] 其中,感知/跟踪/融合模块可使用一个神经网络来实现;定位和预测模块,可使用区域卷积神经网络(Region Convolutional Neural Network,RCNN)来实现;规划模块可使
用长短时记忆神经网络(Long Short Term Mermory network,LSTM)或卷积神经网络
(Convolutional Neural Network,卷积神经网络)来实现;决策模块可使用空时神经网络
来实现等。需要注意的是,此处的每个子网络模块所使用的神经网络仅仅只是示例说明,方
便理解。
[0052] 这四个神经网络处理器都安装有集成RDMA引擎的硬件,之间通过部署了RDMA引擎的交换机来高效率在四个神经网络处理器之间传递数据。其中,下文中的数据处理方法应
用于每个神经网络处理器中。
[0053] 其中,若四个神经网络处理器分别集成在四个不同的芯片上,则理解为在四个不同的芯片上安装RDMA引擎的硬件,通过网络把四个RDMA引擎之间两两连接起来,如此,这四
个芯片之间的数据传递就可以直接通过RDMA引擎出来,无需芯片上的CPU来帮忙,大大提高
了四个芯片之间的数据传递效率。
[0054] 请继续参看图3,将图像、雷达数据、点云等作为神经网络的输入数据,输入至感知/跟踪/融合模块中,感知/跟踪/融合模块通过交换机分别与定位和预测模块、规划模块、
决策模块进行连接。自动驾驶控制系统还包括实时性调控模块、控制模块、精确定位模块
等,这些模块有自动驾驶控制系统的CPU来进行调度和处理。其中,实时性调控模块用于对
神经网络的感知/跟踪/融合模块进行实时性管控,神经网络的最终处理结果和高清地图会
发送至精确定位模块以用于得到精确定位相关的定位信息,并将定位信息发送至控制模
块,控制模块控制车控微控制单元(Microcontroller Unit,MCU)来控制动力系统和底盘系
统,以实现车辆的自动驾驶。
[0055] 在一实施例中,也可以利用神经网络的最终处理结果生成行车轨迹,或者利用神经网络的最终处理结果得到行车决策,以并形成轨迹或者行车决策发送至车控微控制单
元,再利用车控微控制单元来控制动力系统和底盘系统,以实现车辆的自动驾驶。
[0056] 在一些情况下,可将多个神经网络处理器级联起来,形成一个神经网络处理器集群,将该神经网络处理器集群作为数据处理系统。把神经网络中的大的权重网络分布在该
多个神经网络处理器中。可采用流式处理机制(以数据流的流向为准),当第一个神经网络
处理器上的权重网络处理结束,输出的子网络输出数据会自动传送至下一级的神经网络处
理器,采用下一级的神经网络处理器的权重网络来进行处理。如此,可线性扩展整个神经网
络的算力,而且对于自动驾驶这类需要承担连续处理任务的应用来说,可提高处理效率。
[0057] 如图4所示,为本申请实施例提供的数据处理系统的工作流程示意图。该数据处理系统中包括三个神经网络处理器,神经网络中对应包括三个权重网络,分别是权重网络1、
权重网络2和权重网络3。每个权重网络之间通过子网络输出数据连接起来。需要注意的是,
图4仅仅是示例说明而已。
[0058] 其中,第一级的神经网络处理器如NPU1根据输入数据和权重网络1,利用计算单元的硬件逻辑来进行计算,将计算得到的子网络输出数据利用RDMA引擎发送至第二级的神经
网络处理器如NPU2。其中,输入数据可以是整个神经网络的输入数据如图片,还可以是神经
网络中的某些层的输入数据,如包括输入图片和中间层得到的特征图等。
[0059] 第二级的神经网络处理器NPU2根据上一级(第一级)得到的子网络输出数据和权重网络2,利用计算单元的硬件逻辑来进行计算,将计算得到的子网络输出数据利用RDMA引
擎发送至第三级的神经网络处理器如NPU3。第三级的神经网络处理器NPU3根据上一级得到
的子网络输出数据和权重网络3,利用计算单元的硬件逻辑来进行计算,以得到神经网络的
各权重网络计算的最终处理结果。
[0060] 在一些实施例中,还可以以神经网络中的层为单位,把整个神经网络都分摊在数据处理系统中的多个神经网络处理器上。例如,一个神经网络包括500层(网络层),其中,将
第1‑100层作为一个子网络模块,部署在第一个神经网络处理器上,第101‑200层作为一个
子网络模块,部署在第二个神经网络处理器上,第201‑350层作为一个子网络模块,部署在
第三个神经网络处理器上,第351至500层作为一个子网络模块,部署在第四个神经网络处
理器上,该神经网络的多层之间通过子网络模块的子网络输出数据连起来。
[0061] 如图5所示,为本申请实施例提供的数据处理系统的另一工作流程示意图。该实施例中,以一个简单的卷积神经网络为例,该卷积神经网络包括三个卷积层和一个全连接层。
其中,该卷积神经网络的每层对应的权重网络保存在存储器中。把每层作为子网络模块,将
神经网络的四层分布到四个神经网络处理器上,根据数据流的流向来进行处理。其中,大箭
头的方向表示数据流的流向。
[0062] 从图5中可以看到,第一级NPU中的计算单元调用存储器中的权重网络(对应卷积层CONV Layer)进行卷积计算,得到低尺度特征图(Low‑Level Features),将低尺度特征图
作为子网络输出数据保存在第一级NPU的存储器中,并发送至第二级NPU。第二级NPU中的计
算单元根据低尺度特征图调用存储器中的权重网络进行卷积计算,得到中尺度特征图
(Mid‑Level Features),将中尺度特征图作为子网络输出数据保存在第二级NPU的存储器
中,并发送至第三级NPU。第三级NPU中的计算单元调用存储器中的权重网络进行卷积计算,
得到大尺度特征图(High‑Level Features),将大尺度特征图保存保存在对应的存储器中,
同时发送至第四级NPU。最后,第四级NPU根据大尺度特征图调用全连接网络(FC Layer)进
行处理,如全连接处理(Fully Connected)和非线性化处理(Nonlinearity),以得到卷积神
经网络的分类结果,即最终处理结果(Class Scores)。对于每个卷积层,分别进行卷积计算
(convolution)、归一化处理(Normalization)、非线性化处理(Nonlinearity)和池化
(Pooling)等处理。
[0063] 如图6所示,每级NPU的子网络输出数据都需要高效的输出给下一级NPU,采用RDMA机制在连个相邻的NPU之间建立映射关系,以把子网络输出数据的存储块映射到下一级NPU
的输入层。其中,每级NPU中的子网络输出数据都是本级NPU的子网络模块处理后得到的数
据。下文中介绍本申请实施例中的数据处理方法时将会详细描述如何高效的将子网络输出
数据输出至下一级NPU。
[0064] 以上提供的数据处理系统中,可以使用级联NPU的方法来扩展算力,可以在不改变芯片成本的基础上,实现将一个复杂的神经网络部署到多个神经网络处理器上。
[0065] 下文中将描述本申请实施例中的数据处理方法,该数据处理方法应用于上述数据处理系统中的神经网络处理器中,神经网络处理器上安装有集成远程直接内存访问引擎的
硬件,神经网络处理器上部署有神经网络的子网络模块,所述神经网络处理器包括多个计
算单元和存储器。如图7所示,是本申请实施例提供的数据处理方法的流程示意图,该数据
处理方法包括如下步骤。
[0066] 101,通过神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,该子网络输出数据是调用存储器中的子网络模块进行处理而输出的数据。
[0067] 其中,子网络输出数据是该神经网络处理器调用存储器中的子网络模块进行处理而输出的数据。在定义神经网络时,将子网络输出数据保存在变量参数中。在神经网络编译
器对神经网络编译并切片后,该变量会映射到具体的内存地址,如此用于保存子网络输出
数据的内存地址就已确定,即该内存地址在神经网络编译器编译所述神经网络,并对编译
后的神经网络进行切换后确定的。神经网络处理器的计算单元获取该神经网络中用于保存
子网络输出数据的内存地址。
[0068] 需要注意的是,子网络输出数据可以是子网络模块的任意一网络层处理后得到的可以被下一级NPU使用的数据。在本申请实施例中以子网络输出数据为子网络模块的最后
一网络层处理后得到的数据为例进行说明。
[0069] 102,通过计算单元将内存地址封装为预设格式的硬件层的报文,并将报文发送至远程直接内存访问引擎中的待发送队列,该预设格式为直接内存访问引擎支持的格式。
[0070] 预设格式为RDMA引擎支持的格式,例如,QWE(Work Queue Ellement)格式,还可以为其他的RDMA引擎支持的格式,只要通信双方的RDMA引擎都支持该预设格式即可。本申请
实施例中,以QWE格式为例进行说明。
[0071] 通过计算单元将内存地址封装为QWE格式的报文,该报文为硬件层的报文,可直接被硬件层读取解析执行。报文中包括内存地址以及内存地址的地址长度等信息。可以理解
为将一段内存地址构成的消息送给本地的RDMA引擎。
[0072] 在这里有必要先简单介绍下现有技术中RDMA引擎实现的原理,以更加了解和明白该步骤所对应的有益效果。
[0073] 其中,RDMA引擎提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。消息服务建立在通信双方本端(本级的神经网络
处理器)和远端(下一级神经网络处理器)应用之间创建的channel‑IO连接之上。当应用需
要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对Queue Pairs(队列
对,QP),每对QP由Send Queue(发送队列,SQ)和Receive Queue(接收队列,RQ)构成,这些队
列中管理着各种类型的消息。QP会被映射到应用的虚拟地址空间,使得应用直接通过它访
问RNIC(直接内存存储)。
[0074] 现有技术中,RDMA引擎提供了一套software transport interface(软件传输接口),以方便用户创建传输请求(Work Request,WR),WR中描述了应用希望传输到Channel对
端的消息内容。其中,创建传输请求WR时,需要用到RDMA引擎中的函数库来创建,而RDMA引
擎的函数库运行于芯片的CPU之上,即在创建传输请求WR时,需要调用芯片的CPU来进行处
理(而调用芯片的CPU必然会大大降低效率),并将传输请求WR通知/发送给QP中的某个队
列‑Work Queue(WQ)。在WQ中,用户的WR被转化为Work Queue Ellement(WQE)的格式,等待
RNIC的异步调度解析,并从WQE指向的内存(buffer)中拿到真正的消息发送到Channel对
端。
[0075] 而本申请实施例中,直接将内存地址生成硬件层的报文,并直接发送至RDMA引擎的待发送队列。如此,本申请实施例中,无需调用软件传输接口,无需调用RDMA函数库,无需
经过芯片上的CPU来生成传输请求(在应用层生成),无需经过CPU来进行调度(CPU进行调度
时还可能需要等待或者发生其他异常的几率较大),而直接将内存地址封装为硬件层的报
文,直接通过硬件发送至RDMA引擎中的待发送队列。其中,本申请实施例中的待发送队列可
以包括QWE格式的发送队列。首先,本申请实施例直接通过生成硬件层的报文,通过硬件发
送的方式出现异常的几率较小,几乎不会出现异常;其次,生成硬件层的报文通过硬件发
送,无需经过芯片上的CPU来生成传输请求,无需经过芯片上的CPU的调度,大大提高了处理
的效率;最后,生成的报文采用的是预设格式的,是RDMA引擎支持的格式,如此,省去了现有
技术中的将传输请求转换为RDMA引擎支持格式的时间,如转换为QWE格式,进一步提高了效
率。
[0076] 需要注意的是,本步骤中的发送并不是指发送至另一个神经网络处理器,而是指发送至本地的RDMA引擎的待发送队列。或者也可以将本步骤中的发送理解为传输。
[0077] 103,通过远程直接内存访问引擎获取待发送队列中的报文中的内存地址,从内存地址中获取子网络输出数据,并通过子网络模块与部署有神经网络的另一子网络模块之间
创建的传输通道,将子网络输出数据发送至另一子网络模块所在的目标神经网络处理器
上。
[0078] 当RDMA引擎执行到待发送队列中的报文时,获取待发送队列中的报文中的内存地址,从对应内存地址中获取子网络输出数据,并通过子网络模块与部署有神经网络的另一
子网络模块之间创建的传输通道,如channel‑IO传输通道,将子网络输出数据发送至另一
子网络模块所在的目标神经网络处理器上。其中,将子网络输出数据发送至目标神经网络
处理器中对应的目标存储器上。该目标存储器上会分配对应的内存地址以用来保存该子网
络输出数据。
[0079] 需要注意的是,在从内存地址中获取子网络输出数据的步骤之前,还需要将计算单元调用该神经网络处理器的子网络模块而得到的子网络输出数据(如partial sum队列)
回写至本地对应的内存地址中。
[0080] 其中,另一子网络模块可以是可以是神经网络的其他任一子网络模块,如可以是下一级神经网络处理器中部署的下一个子网络模块,如图5所示。该另一子网络模块所部署
的神经网络处理器为目标神经网络处理器。
[0081] 可以理解为,该步骤中本地的RDMA引擎和下一级NPU的RDMA引擎交互,把内存地址所对应的由本地得到的子网络输出数据发送至下一级NPU的RDMA引擎,下一级NPU的RDMA引
擎把子网络输出数据写到对应的被指定的内存地址中。
[0082] 本申请实施例将部署有神经网络的子网络模块的神经网络处理器处理得到的子网络输出数据发送至部署有神经网络的另一子网络模块的目标神经网络处理器上,子网络
输出数据并没有被丢掉,使得可很好的利用子网络模块处理得到的子网络输出数据进行下
一步的处理,提高神经网络处理数据的效率,此外,子网络模块处理得到的子网络输出数据
的传输不必经过芯片上的CPU,不必生成传输请求(生成传输请求需要调用芯片上的CPU来
进行处理),而直接封装为硬件层的报文,从计算单元发送至直接内存访问引擎中的待发送
队列,直接通过硬件传输,如此提高了神经网络处理器之间传输数据的效率。
[0083] 在子网络模块处理得到的子网络输出数据没有丢失,且能高效的在神经网络处理器之间传输子网络输出数据的基础上,上述数据处理系统中,不必改变神经网络处理器的
功能,也不必改变神经网络处理器所在的芯片的功能,即可实现将一个复杂的神经网络部
署到多个神经网络处理器上。
[0084] 需要注意的是,因为需要将子网络输出数据发送至目标神经网络处理器上,因此,上述数据处理方法是应用于数据处理系统中的非最后一个神经网络处理器中。其中,当上
述数据处理方法应用于数据处理系统中的第一个神经网络处理器时,子网络输出数据是调
用存储器中的子网络模块,对输入数据如原始图片进行处理而得到的数据。
[0085] 在一实施例中,当上述数据处理方法应用于数据处理系统中的中间神经网络处理器时,所述数据处理方法还包括:当神经网络处理器接收到神经网络的其他子网络模块发
送的子网络输出数据时,将接收的子网络输出数据保存在本地存储器中,并将计算单元广
播子网络输出数据,计算单元调用存储器中的子网络模块对接收的子网络输出数据进行处
理。如此,对应的子网络输出数据是调用存储器中的子网络模块,对上一级输出的子网络输
出数据进行处理而得到的数据。需要提醒的是,该实施例中的方案同样应用于下文中所述
的数据处理方法中。
[0086] 在一实施例中,若当前神经网络处理器为最后一级的神经网络处理器,对应的,当前神经网络处理器上部署的子网络模块为神经网络的最后一个子网络模块时,所述数据处
理方法,还包括:通过计算单元调用存储器中的子网络模块对接收到的子网络输出数据进
行处理后,得到神经网络的最终处理结果,得到最终处理结果之后,结束神经网络部分的处
理;再利用最终处理结果生成行车轨迹、或者利用最终处理结果得到行车决策,并将形成轨
迹或者行车决策发送至车控微控制单元。需要提醒的是,该实施例中的方案同样应用于下
文中所述的数据处理方法中。
[0087] 图8是本申请实施例提供的数据处理方法的另一流程示意图,该数据处理方法包括如下步骤。
[0088] 201,当神经网络处理器的计算单元得到子网络输出数据时,获取用于保存子网络输出数据的内存地址,该子网络输出数据是调用存储器中的子网络模块进行处理而输出的
数据。
[0089] 该步骤中限定了触发本申请实施例的执行时间,即在计算单元调用存储器中的子网络模块进行处理得到子网络输出数据时,触发获取内存地址的步骤。
[0090] 在一实施例中,上述步骤102中可通过步骤202来实现,步骤202如下。
[0091] 202,通过计算单元利用预设算子将内存地址封装为预设格式的硬件层的报文,并利用预设算子将报文发送至远程直接内存访问引擎中的待发送队列,其中,该预设算子是
预先封装的原子计算指令集合,该原子计算指令集合中包括远程直接内存访问原语,该预
设格式为直接内存访问引擎支持的格式。
[0092] 由于预设算子operator中包括了预先封装的原子计算指令集合,原子计算指令集合中包括远程直接内存访问原语,因此,预设算子可以被计算单元直接进行处理。可以理解
地,预设算子operator会变换为计算单元执行的指令序列,其中,该指令序列中包括远程直
接内存访问原语构成的指令序列。该步骤中可以理解为通过预设算子实现把一段内存地址
构成的消息(包括内存地址和内存地址的地址长度)送给本地的RDMA引擎,从而避免了现有
技术中创建传输请求等的步骤,避免了使用芯片的CPU来进行处理。具体的有益效果可参看
上文中的对应描述,在此不再赘述。
[0093] 如图9所示,为本申请实施例提供的在单个神经网络处理器上执行子网络模块的示意图。其中,I000、I100、I200表示本地上的三层神经网络的不同输入;O000、O100、O200等表示三
层神经网络的不同神经元的输出,该不同神经元的输出一起构成partial sum队列,即子网
络输出数据;F000、F100、F010等表示神经网络计算的代码逻辑,包括加法计算、减法计算、矩阵
计算等,还可以实现逻辑解析等功能。最后,将保存子网络输出数据的内存地址经过RDMA原
语处理后的数据发送至RDMA引擎的待发送队列。
[0094] 203,通过远程直接内存访问引擎获取待发送队列中的报文中的内存地址,从内存地址中获取子网络输出数据,并通过子网络模块与部署有神经网络的另一子网络模块之间
创建的传输通道,将子网络输出数据发送至另一子网络模块所在的目标神经网络处理器
上。
[0095] 该实施例中未详细描述的步骤请参看上文中对应步骤的描述,在此不再赘述。
[0096] 在一实施例中,如图8所示,在步骤201之前,还包括步骤201a。
[0097] 201a,在定义神经网络的网络结构时,加入预设算子;或者在利用神经网络编译器编译神经网络,并将编译后的神经网络切片后得到的每个子网络模块中加入预设算子。
[0098] 其中,神经网络的网络结构包括网络层的数量等。在一实施例中,预先确定在哪个网络层会将对应的处理结果发送至下一级NPU,因此,在定义神经网络的网络结构时,在对
应的网络层处理得到对应的处理结果时,加入预设算子。
[0099] 在一实施例中,在利用神经网络编译器编译神经网络得到图,并将图进行优化如进行切片,在切片后得到的每个子网络模块中加入预设算子,例如,在每个子网络模块的最
后一个网络层处理完毕后加入预设算子。
[0100] 如此,通过加入预设算子的方式,利用预设算子,调用RDMA原语,实现将保存子网络输出数据的内存地址封装为预设格式的硬件层的报文,并利用预设算子将报文发送至
RDMA引擎的待发送队列。
[0101] 图10是本申请实施例提供的数据处理方法的另一流程示意图,该数据处理方法包括如下步骤。
[0102] 301,当神经网络处理器的计算单元得到子网络输出数据时,获取用于保存子网络输出数据的内存地址,该子网络输出数据是调用存储器中的子网络模块进行处理而输出的
数据。
[0103] 302,计算单元触发CPU中断,并将内存地址的发送指令发送至用户态协议栈。
[0104] 触发的CPU中断为硬件方式的中断,通过CPU中断,将内存地址的发送指令发送至用户态协议栈。由于用户态协议栈运行于CPU上,因此,先触发CPU中断。需要注意的是,该步
骤中的CPU指的是神经网络处理器内嵌的CPU,即神经网络处理器自带的CPU。
[0105] 303,基于发送指令,利用用户态协议栈将内存地址直接封装为硬件层的报文,并将报文发送至远程直接内存访问引擎中的待发送队列,该预设格式为直接内存访问引擎支
持的格式。
[0106] 其中,利用用户态协议栈跳过TCP层、IP层,使得用户态协议栈直接运行于硬件层,在硬件层中将内存地址封装为硬件层的报文,并将该报文发送至RDMA引擎中的待发送队
列。在该实施例中,是基于用户态协议栈的改进,使得用户态协议栈可直接从应用层调至硬
件层来运行。
[0107] 在现有技术中,创建传输请求是在应用层完成,在应用层完成之后,需要经过TCP层、IP层等,需要创建session,还要有句柄等信息,同时传输请求需要进入内核中进行调度
处理等,这些直接降低了现有技术中的创建传输请求并发送至RDMA引擎的效率。本申请实
施例中利用用户态协议栈直接运行于硬件层,利用硬件层来进行将内存地址转换为硬件层
的报文的处理,无需创建session、保存句柄,无需进行内核中调度等(在内核中调度需要从
应用程序的用户态切换至内核态,切换时需要占用CPU资源,且同时需要占用较多的时间),
提高了处理的效率。
[0108] 304,通过远程直接内存访问引擎获取待发送队列中的报文中的内存地址,从内存地址中获取子网络输出数据,并通过子网络模块与部署有神经网络的另一子网络模块之间
创建的传输通道,将子网络输出数据发送至另一子网络模块所在的目标神经网络处理器
上。
[0109] 该实施例中为详细描述的步骤请参看上文中对应步骤的描述,在此不再赘述。
[0110] 在一实施例中,用户态协议栈也可以调用预设算子,来实现将内存地址直接封装为预设格式的硬件层的报文,并将报文发送至远程直接内存访问引擎中的待发送队列。对
应地,预先在用户态协议栈的硬件层中加入预设算子。对应步骤可参看上文中的描述,在此
不再赘述。
[0111] 该实施例通过触发用户态协议栈,利用用户态协议栈将内存地址直接封装为预设格式的硬件层的报文,并将报文发送至远程直接内存访问引擎中的待发送队列,该种方式
虽然触发用户态协议栈会调用一次CPU(该CPU是神经网络内嵌的CPU,并不是芯片上的
CPU),但触发用户态协议栈后则完全运行于硬件层上,通过硬件发送的方式出现异常的几
率较小,几乎不会出现异常;其次,生成硬件层的报文通过硬件发送,无需经过芯片上的CPU
来生成传输请求,无需经过芯片上的CPU的调度,大大提高了处理的效率;最后,生成的报文
采用的是预设格式的,是RDMA引擎支持的格式,如此,省去了现有技术中的将传输请求转换
为RDMA引擎支持格式的时间,如转换为QWE格式,进一步提高了效率。
[0112] 图11是本申请实施例提供的数据处理方法的又一流程示意图,该数据处理方法使得NPU上运行的计算单元做到对存储的内存地址敏感,该数据处理方法包括如下步骤。
[0113] 401,通过神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址并将内存地址进行保存,该子网络输出数据是调用存储器中的子网络模块进行处理而输出
的数据。
[0114] 需要注意的是,本地神经网络处理器调用本地存储器中的子网络模块进行处理而输出的子网络输出数据需先保存在本地存储器的DDR‑RAM中。该步骤中所获取的子网络输
出数据的内存地址,即指的是本地存储器的DDR‑RAM中保存的本地得到的子网络输出数据
的内存地址。该内存地址也是在神经网络编译器编译神经网络并对网络进行优化如切片时
就可得到。该内存地址保存在本地存储器中。或者也可以是当神经网络编译器编译并优化
神经网络后,将保存本地子网络输出数据的内存地址告知计算单元,如此,计算单元获取用
于保存子网络输出数据的内存地址并进行保存。
[0115] 402,当检测到需要向内存地址中写入子网络输出数据时,触发计算单元将内存地址封装为预设格式的硬件层的报文,并将报文发送至远程直接内存访问引擎中的待发送队
列,该预设格式为直接内存访问引擎支持的格式。
[0116] 该步骤中,确定了地址感知的触发时机,也即触发时机为当检测到需要向内存地址中写入数据时,触发计算单元执行对应的操作:将内存地址封装为预设格式的硬件层的
报文,并将报文发送至远程直接内存访问引擎中的待发送队列。由于计算单元已经知道保
存本地子网络输出数据的内存地址,因此,将检测到需要向内存地址中写入数据,可确定写
入的数据为本地子网络输出数据。
[0117] 403,通过远程直接内存访问引擎获取待发送队列中的报文中的内存地址,从内存地址中获取子网络输出数据,并通过子网络模块与部署有神经网络的另一子网络模块之间
创建的传输通道,将子网络输出数据发送至另一子网络模块所在的目标神经网络处理器
上。
[0118] 该实施例中未详细描述的部分请参看上文中对应的描述,在此不再赘述。该实施例中计算单元也可以调用预设算子来实现将内存地址封装为预设格式的硬件层的报文,并
利用预设算子将报文发送至远程直接内存访问引擎中的待发送队列。对应的内容请参看上
文中对应步骤的描述。
[0119] 该实施例实现了内存地址感知,本申请实施例中可以做到对内存地址感知需要对硬件进行了改动,或者可理解为,实现地址感知的原因在于需提前将保存本地子网络输出
数据的内存地址告知每个计算单元,每个计算单元需要保存该内存地址。如此,当计算单元
检测到需要向内存地址中写入数据时,即可触发计算单元执行封装报文并发送报文的操
作。由于计算单元需要保存内存地址,因此,需要对计算单元(计算单元是硬件)进行相应的
改进,以使地计算单元可以保存该内存地址。
[0120] 上述步骤401至403中描述了内存地址感知方案中生成子网络输出数据所对应的神经网络处理器该如何处理。请参看图12,图12中具体描述了内存地址感知方案中,接收到
其他子网络模块发送的子网络输出数据后该如何处理。
[0121] 请参看图12,数据处理方法还包括如下步骤。
[0122] 501,当神经网络处理器接收到神经网络的其他子网络模块发送的子网络输出数据后,获取预先分配的保存所接收到的子网络输出数据的目标内存地址。
[0123] 由于神经网络处理器也会接收其他子网络模块发送的子网络输出数据,因此神经网络处理器也会从存储器中分配内存来保存该子网络输出数据,保存所接收到的子网络输
出数据的内存地址为目标内存地址,该目标内存地址是预先分配的可用来保存其他子网络
输出数据的内存地址。
[0124] 502,获取神经网络处理器自身的存储地址范围、以及其他神经网络处理器中部署的神经网络的其他子网络模块所对应的网络层数据。
[0125] 每个神经网络处理器自身的存储地址范围是固定的,获取该存储地址范围,以及其他子网络模块所对应的网络层数据。
[0126] 其中,在神经网络编译器对神经网络进行编译并将编译后的神经网络切片时,神经网络编译器就可识别切换后的各子网络模块所对应的网络层数据,也可识别各子网络模
块部署在哪个NPU上。例如,神经网络的网络层为300层,第一个子网络模块的网络层为第1‑
90层,部署在第一个NPU上,第二个NPU上部署的第二个子网络模块的网络层为第91‑200层,
第三个NPU上部署的第三个子网络模块所对应的网络层为第201‑250层,第四个NPU上部署
的第四个子网络模块所对应的网络层为第251‑300层。
[0127] 503,根据目标内存地址、存储地址范围和网络层数据确定保存子网络输出数据的目标神经网络处理器。
[0128] 根据目标内存地址和存储地址范围可确定是否要写入到本地存储器中,如目标内存地址在存储地址范围内,则确定要写入到本地存储器中,若是则将本神经网络处理器作
为目标神经网络处理器,若否,则根据写入的目标内存地址可确定需要子网络输出数据的
目标网络层,根据目标网络层和神经网络的其他子网络模块所对应的网络层数据可确定目
标神经网络处理器。
[0129] 504,当所确定的目标神经网络处理器不为本神经网络处理器时,计算单元将子网络输出数据和目标神经网络处理器的标识信息封装为预设格式的硬件层的报文,并将报文
发送至远程直接内存访问引擎中的待发送队列,该预设格式为直接内存访问引擎支持的格
式。
[0130] 需要说明的是,在该种情况下,除了将子网络输出数据封装到报文中之外,还需要将目标神经网络处理器的标识信息也封装到报文中,以使地直接内存访问引擎知道需要发
送至哪一个目标神经网络处理器。
[0131] 505,通过远程直接内存访问引擎获取待发送队列中的报文中的子网络输出数据,并通过子网络模块与部署有神经网络的另一子网络模块之间创建的传输通道,将子网络输
出数据发送至另一子网络模块所在的目标神经网络处理器上。
[0132] 506,当所确定的目标神经网络处理器为本神经网络处理器时,将子网络输出数据保存在目标存储地址中。
[0133] 该实施例适用于需要反向反馈的神经网络如下一级的NPU需要向上一级NPU回传数据,或者需要跨层操作的神经网络如ResNet神经网络。当NPU上的计算单元发现传递的子
网络输出数据的存储地址不在本NPU的内存地址范围内,触发对应的报文传输操作,将子网
络输出数据发送至目标神经网络处理器上。
[0134] 上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
[0135] 为便于更好的实施本申请实施例的数据处理方法,本申请实施例还提供一种数据处理装置。请参阅13,图13为本申请实施例提供的数据处理装置的结构示意图。该数据处理
装置600应用在芯片中的神经网络处理器上,神经网络处理器上安装有集成远程直接内存
访问引擎的硬件,神经网络处理器上部署有神经网络的子网络模块,神经网络处理器包括
多个计算单元和存储器,该数据处理装置600可以包括第一获取模块601,封装模块602,第
二获取模块603以及发送模块604。
[0136] 第一获取模块601,用于通过所述神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,所述子网络输出数据是调用所述存储器中的子网络模块进行处理
而输出的数据。
[0137] 封装模块602,用于通过所述计算单元将所述内存地址封装为预设格式的硬件层的报文,并将所述报文发送至所述远程直接内存访问引擎中的待发送队列,所述预设格式
为所述直接内存访问引擎支持的格式。
[0138] 第二获取模块603,用于通过所述远程直接内存访问引擎获取所述待发送队列中的所述报文中的所述内存地址,从所述内存地址中获取所述子网络输出数据。
[0139] 发送模块604,用于通过所述子网络模块与部署有所述神经网络的另一子网络模块之间创建的传输通道,将所述子网络输出数据发送至所述另一子网络模块所在的目标神
经网络处理器上。
[0140] 在一实施例中,所述封装模块602,具体用于通过计算单元利用预设算子将内存地址封装为预设格式的硬件层的报文,并利用所述预设算子将所述报文发送至所述远程直接
内存访问引擎中的待发送队列,其中,所述预设算子是预先封装的原子计算指令集合,所述
原子计算指令集合中包括远程直接内存访问原语。对应地,数据处理装置600还包括添加模
块605。其中,添加模块605,用于在所述计算单元利用预设算子将内存地址封装为预设格式
的硬件层的报文之前,在定义所述神经网络的网络结构时,加入预设算子;或者在利用神经
网络编译器编译所述神经网络,并将编译后的所述神经网络切片后得到的每个子网络模块
中加入预设算子。
[0141] 在一实施例中,所述封装模块602,在执行通过计算单元将所述内存地址封装为预设格式的硬件层的报文的步骤时,具体执行:所述计算单元触发CPU中断,并将所述内存地
址的发送指令发送至用户态协议栈;基于所述发送指令,利用所述用户态协议栈将所述内
存地址直接封装为硬件层的报文。
[0142] 在一实施例中,第一获取模块601,在获取用于保存子网络输出数据的内存地址之后,通过计算单元将所述内存地址进行保存。对应的,封装模块602,用于当检测到需要向所
述内存地址中写入所述子网络输出数据时,将所述内存地址封装为预设格式的硬件层的报
文,并将所述报文发送至所述远程直接内存访问引擎中的待发送队列。
[0143] 在一实施例中,如图14所示,数据处理装置600还包括接收模块606、广播模块607、网络处理模块608。其中,接收模块606,用于接收所述神经网络的其他子网络模块发送的子
网络输出数据,并将所述子网络输出数据保存在所述存储器中。广播模块606,用于向所述
计算单元广播所述子网络输出数据。网络处理模块607,用于通过所述计算单元调用所述存
储器中的子网络模块对所述子网络输出数据进行处理,以得到子网络输出数据/神经网络
的最终处理结果,得到最终处理结果之后,结束神经网络部分的处理,再利用最终处理结果
生成行车轨迹、或者利用最终处理结果得到行车决策,以将形成轨迹或者行车决策发送至
车控微控制单元。
[0144] 在一实施例中,数据处理装置还包括第三获取模块、确定模块。其中,第三获取模块,用于当所述神经网络处理器接收到所述神经网络的其他子网络模块发送的子网络输出
数据后,获取预先分配的保存所接收到的所述子网络输出数据的目标内存地址,以及获取
预先分配的所述神经网络处理器自身的存储地址范围、以及其他神经网络处理器中部署的
神经网络的其他子网络模块所对应的网络层数据。确定模块,用于根据所述目标内存地址、
所述存储地址范围和所述网络层数据确定保存所述子网络输出数据的目标神经网络处理
器。接收模块606,还用于当所确定的目标神经网络处理器为所述神经网络处理器时,将所
述子网络输出数据保存在所述目标内存地址中。封装模块602,还用于当所确定的目标神经
网络处理器不为所述神经网络处理器时,通过所述计算单元将所述子网络输出数据和所述
目标神经网络处理器的标识信息封装为预设格式的硬件层的报文,并将所述报文发送至所
述远程直接内存访问引擎中的待发送队列。
[0145] 上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
[0146] 相应的,本申请实施例还提供一种数据处理系统,所述数据处理系统包括多个神经网络处理器,神经网络的多个子网络模块被部署于各神经网络处理器中,所述神经网络
处理器上安装有集成远程直接内存访问引擎的硬件,所述神经网络处理器包括多个计算单
元和存储器,所述存储器中存储有子网络模块,所述神经网络处理器用于执行上述任一项
所述的数据处理方法。
[0147] 该数据处理系统让堆叠式/级联式AIPU集群成为可能,且可高效率地在一个AIPU集群中的多个神经网络处理器之间传递子网络输出数据。使用级联AIPU集群的方法来扩展
算力,使用该数据处理系统可在不增加芯片成本的基础上,实现将一个复杂的神经网络部
署到多个神经网络处理器上,解决了现有技术的难题。数据处理系统中的部分具体可参看
前文中所述的对应内容。
[0148] 相应的,本申请实施例还提供一种芯片,该芯片可以为系统级芯片。该系统级芯片上集成有一个或者多个神经网络处理器,该神经网络处理器可执行上述任一项实施例中所
述的数据处理方法。具体达到的有益效果可参看上文中所述的有益效果,在此不再赘述。
[0149] 本申请还提供一种终端或者服务器。在该终端或者服务器上包括上述所述的芯片,芯片中集成有上述任一项数据处理方法所述的神经网络处理器。该终端和服务器上还
可以包括处理器、存储器、触控显示屏、射频电路、音频电路、输入单元、电源、摄像头、传感
器、无线保真模块、蓝牙模块中的一个或者多个。其中,处理器分别与触控显示屏、射频电
路、音频电路、输入单元、电源、摄像头、传感器、无线保真模块、蓝牙模块电性连接。
[0150] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0151] 本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存
储介质中,并由处理器进行加载和执行。
[0152] 为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种数据处理方法
中的步骤。例如,该计算机程序可以执行如下步骤:
[0153] 所述神经网络处理器的计算单元获取用于保存子网络输出数据的内存地址,所述子网络输出数据是调用所述存储器中的子网络模块进行处理而输出的数据;所述计算单元
将所述内存地址封装为预设格式的硬件层的报文,并将所述报文发送至所述远程直接内存
访问引擎中的待发送队列,所述预设格式为所述直接内存访问引擎支持的格式;所述远程
直接内存访问引擎获取所述待发送队列中的所述报文中的所述内存地址,从所述内存地址
中获取所述子网络输出数据,并通过所述子网络模块与部署有所述神经网络的另一子网络
模块之间创建的传输通道,将所述子网络输出数据发送至所述另一子网络模块所在的目标
神经网络处理器上。
[0154] 以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0155] 其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
[0156] 由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种数据处理方法中的步骤,因此,可以实现本申请实施例所提供的任一种数据处理方法所能
实现的有益效果,详见前面的实施例,在此不再赘述。
[0157] 以上对本申请实施例所提供的一种数据处理方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实
施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,
依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内
容不应理解为对本申请的限制。