CN111461314B - 基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质 - Google Patents

基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN111461314B
CN111461314B CN202010246216.1A CN202010246216A CN111461314B CN 111461314 B CN111461314 B CN 111461314B CN 202010246216 A CN202010246216 A CN 202010246216A CN 111461314 B CN111461314 B CN 111461314B
Authority
CN
China
Prior art keywords
data
constant
segment
constant data
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.)
Active
Application number
CN202010246216.1A
Other languages
English (en)
Other versions
CN111461314A (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN202010246216.1A priority Critical patent/CN111461314B/zh
Publication of CN111461314A publication Critical patent/CN111461314A/zh
Application granted granted Critical
Publication of CN111461314B publication Critical patent/CN111461314B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算神经网络的方法、装置、板卡及计算机可读存储介质,其中本发明的计算装置包括在集成电路装置中,该集成电路装置包括通用互联接口和其他处理装置。计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。集成电路装置还可以包括存储装置,存储装置分别与计算装置和其他处理装置连接,用于计算装置和其他处理装置的数据存储。

Description

基于常量数据包进行人工神经网络计算的方法、装置及计算 机可读存储介质
技术领域
本发明一般地涉及神经网络领域。更具体地,本发明涉及计算神经网络的方法、装置、板卡及计算机可读存储介质。
背景技术
近年来,神经网络算法取得重大的突破,引领人工智能的发展热潮。由于人工神经网络算法需要大量样本数据进行训练,才能建立输入数据和输出数据之间的映射关系。传统处理器架构,例如x86或ARM,算力不足,无法支撑神经网络大规模并行计算需求。
ASIC是一种为专门目的而设计的集成电路,虽然缺乏弹性,但具备处理速度快的优势,广受人工智能开发商的青睐。即便如此,在进行神经网络计算时,仍需要将各种参数、指令、输出入等数据在主机内存和设备内存间反复读取存储,耗费了大量的资源。
因此如何在神经网络中简化数据搬运的流程,便成为本领域急需解决的问题。
发明内容
为了至少部分地解决背景技术中提到的技术问题,本发明的方案提供了计算神经网络的方法、装置、板卡及计算机可读存储介质。
在一个方面中,本发明揭露一种基于神经网络执行批量计算的方法,包括:定义所述神经网络的数据节点与操作节点的连接关系,所述数据节点绑定常量数据;根据所述连接关系,编译所述神经网络获得硬件指令;根据所述常量数据,批量计算人工神经网络。
在另一个方面,本发明揭露一种基于神经网络执行批量计算的计算装置,包括:处理器、设备内存、设备。处理器用以定义所述神经网络的数据节点与操作节点的连接关系,所述数据节点绑定常量数据;根据所述连接关系,编译所述神经网络获得硬件指令。设备内存用以存储所述常量数据。设备,用以根据所述常量数据,批量计算人工神经网络。
在另一个方面,本发明揭露一种设备内存的指令寻址方法,所述设备内存包括段基址区及多个存放空间,所述方法包括:接收寻址指令,所述寻址指令包括数据名称及块内偏移量;根据所述数据名称,识别所述的同类数据段;从所述基址区读取所述同类数据段的段基址;从所述同类数据段读取所述数据名称的段内偏移量;根据所述段基址、所述段内偏移量及所述块内偏移量,获得目标地址;以及读取所述目标地址里的所述数据。根据所述数据,执行人工神经网络计算。
在另一个方面,本发明揭露一种计算装置,包括:处理器、设备内存、设备。设备内存包括段基址区及多个存放空间。处理器用以:接收寻址指令,所述寻址指令包括数据名称及块内偏移量;根据所述数据名称,识别所述的同类数据段;从所述段基址区读取所述同类数据段的段基址;从所述段同类数据段读取所述数据名称的段内偏移量;根据所述段基址、所述段内偏移量及所述块内偏移量,获得目标地址;读取所述目标地址里的数据。设备用以在执行人工神经网络计算时,输入或输出所述数据。
在另一个方面,本发明揭露一种在人工神经网络计算中绑定多个常量数据的方法,包括:重排序所述多个常量数据;根据所述多个常量数据的数据量,计算同类数据段的段内偏移量;在数据包中回填所述段内偏移量;以及发送所述数据包至设备。其中,所述设备读取所述数据包里的所述多个常量数据,以执行批量的人工神经网络计算。
在另一个方面,本发明揭露一种在人工神经网络计算中组成数据包的方法,包括:在所述数据包中建立标签区,所述标签区记录所述数据包的总数据量;在所述数据包中建立常量数据区,所述常量数据区记录指令及多个常量数据;其中,设备读取所述数据包里的所述指令及常量数据,以执行批量的人工神经网络计算。
在另一个方面,本发明揭露一种基于常量数据包进行人工神经网络计算的计算装置,所述常量数据包包括标签区及常量数据区,所述标签区包括常量数据段。所述计算装置包括:处理器、设备内存、设备。处理器用以:根据所述常量数据段所记录的数据段大小,在所述设备内存上申请常量数据存放空间;以及将所述常量数据区内的多个常量数据存储至所述常量数据存放空间;设备,用以根据所述多个常量数据,执行批量的人工神经网络计算。
在另一个方面,本发明揭露一种基于常量数据包进行人工神经网络计算的方法,所述常量数据包包括标签区及常量数据区,所述标签区包括常量数据段。所述方法包括:根据所述常量数据段所记录的数据段大小,在设备内存上申请常量数据存放空间;将所述常量数据区内的多个常量数据存储至所述常量数据存放空间;以及根据所述多个常量数据,执行批量的人工神经网络计算。
在另一个方面,本发明揭露一种批量计算神经网络的计算装置,所述计算装置访问主机内存,所述主机内存存储有常量数据与多个变量数据,所述计算装置包括:处理器、设备内存、设备。处理器用以:在所述设备内存上申请常量数据存放空间;在所述设备内存上申请输入数据存放空间,以存储输入数据;将所述常量数据一次性拷贝至所述常量数据存放空间。设备用以根据所述输入数据,执行批量计算神经网络。其中,响应执行批量计算神经网络,所述处理器将所述多个变量数据多次性拷贝至所述输入数据存放空间。
在另一个方面,本发明揭露一种基于常量数据与多个变量数据批量计算神经网络的方法,包括:在设备内存上申请常量数据存放空间;在设备内存上申请输入数据存放空间,以存储输入数据;将所述常量数据一次性拷贝至所述常量数据存放空间;根据所述输入数据,批量计算神经网络;以及响应批量计算神经网络,将所述多个变量数据多次性拷贝至所述输入数据存放空间。
在另一个方面,本发明揭露一种集成电路装置,包括前述的计算装置,亦揭露一种板卡,包括前述的集成电路装置。
在另一个方面,本发明揭露一种计算机可读存储介质,其上存储有计算神经网络的计算机程序代码,当所述计算机程序代码由处理器运行时,执行前述的方法。
本发明揭露了基于常变量异步拷贝的神经网络计算方案,解决了推理过程中常量数据的重复拷贝问题,不仅如此,本发明更定义了存储常量数据的数据包,提出了常量数据包装法,针对常量和变量的特点设计了“段直接寻址”和“段间接寻址”两种不同的寻址方式,并实现编译计算分离、常变量异步拷贝、流水计算等功能。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1是示出本发明实施例的一种计算装置的示意图;
图2是示出是示出本发明实施例的设备在进行推理计算的示意图;
图3是示出本发明实施例中基于神经网络执行批量计算方法的流程图;
图4是示出本发明实施例的一种神经网络结构的示意图;
图5是示出本发明另一实施例中基于神经网络执行批量计算方法的流程图;
图6是示出本发明实施例的数据包的示意图;
图7是示出本发明实施例的设备内存中的数据排布示意图;
图8是示出本发明实施例的段直接寻址的流程图;
图9是示出本发明实施例的段间接寻址的流程图;
图10是示出本发明实施例打包数据包的流程图;
图11是示出本发明实施例打包数据包的示意图;
图12是示出本发明实施例的人工神经网络计算的方法的流程图;
图13是示出本发明实施例中将数据包拷贝至设备内存的流程图;
图14是示出本发明实施例在拷贝数据时的示意图;
图15是示出本发明实施例的参数化计算方法的流程图;
图16是示出本发明实施例的参数化计算方法的示意图;
图17是示出本发明实施例的多线程流水线运作的示意图;
图18是示出本发明实施例的集成电路装置的结构图;以及
图19是示出本发明实施例的板卡的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,本发明的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本发明的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本发明。如在本发明说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
下面结合附图来详细描述本发明的具体实施方式。
神经网络包括训练和推理两种计算任务。训练指的是神经网络对训练样本内在规律的学习过程,进行训练的目的是为了让网络模型对训练样本以外的数据能具有较佳的映射能力,也就是训练该网络在输入特定数据时获得正确输出的能力。而推理指的是把数据(例如图像数据、语音数据) 输入网络输入层的各个节点,利用其特性函数分别计算网络中各层的输出,前一层的输出作为后一层的输入,逐层进行计算,并用阈值函数对输出层的输出进行判定,直至得出计算结果。
本发明用于神经网络计算的框架如图1所示,其包括主机101、设备 102、主机内存103及设备内存104。主机101可以是通用处理器,设备 103可以是神经网络加速器,但本发明不限制主机101与设备103的种类。整个计算神经网络的过程的数据流向是:主机101将主机内存103上的输入数据搬移到设备内存104;设备102从设备内存104读入输入数据,按照指令完成计算;设备102将计算结果写回设备内存104;主机101将设备内存104中的输出数据搬移到主机内存103。
图2是示出设备102在进行推理计算的示意图。对于设备102而言,计算时所需的数据包括输入数据(比如图片数据、语音数据等)201、训练网络模型202的参数(例如权值、偏置等)、设备硬件指令203等,输出数据204包括计算结果(例如词向量、分类概率等)。其中,硬件指令 203在网络拓扑结构和硬件参数确定后就可以编译生成,且在计算过程中不会变更,训练网络模型202的参数在训练稳定之后也不会频繁改动,因此它们可以被视为常量数据。输入数据201和计算结果204在每次推理计算时是不同的,它们可以被视为变量数据。换言之,在一次批量的推理计算过程中,训练网络模型202的参数和硬件指令203自主机内存103搬移到设备内存104后,无需重复搬运,便可以参与多个输入样本的推理计算。
更详细来说,因为每次推理计算的输入样本不同,变量数据的拷入拷出就必不可少,但如果每次都拷入相同的常量数据,就会造成不必要的时间和资源浪费。本发明在推理过程中拷入一次常量数据,搭配拷贝多次变量数据,以完成同一训练网络模型202的多次推理计算,即所谓的“常变量异步拷贝”。
本发明提出了一种基于常变量异步拷贝的神经网络推理方案,具体来说,本发明主要揭露有:
(1)实现三个阶段的推理流程。第一阶段是定义网络阶段,以定义神经网络的拓扑结构,和数据节点、操作节点的连接关系,并且实现网络数据节点绑定常量数据;第二阶段是编译网络阶段,完成硬件指令的生成和常量数据的打包;第三阶段是计算网络阶段,实现拷贝常量数据包、拷贝变量数据和计算网络。
(2)本发明提供存储常量数据和各数据块空间大小的数据包,在编译网络阶段按照“REOFF数据包装法”生成数据包,在计算网络阶段解析数据包,完成常量数据从主机内存到设备内存的拷贝。
(3)本发明分别为常量数据和变量数据提出两种不同的寻址方式:“段直接寻址”和“段间接寻址”,便于指令读取常量数据和读写变量数据。
(4)本发明对应上述三个阶段,在第一阶段定义网络结构并且绑定常量数据,第二阶段调用一个接口编译网络,第三阶段拷贝一次常量数据及多次变量数据,以完成多个样本的计算。
本发明涉及的神经网络推理方案分为两个层次:神经网络编程库和神经网络开发框架。神经网络编程库是根据处理器硬件结构与指令集对神经网络算法进行了特殊的优化,使神经网络算法在特定硬件上具有较高的性能和计算效率。神经网络开发框架并不针对具体硬件而设计,而是偏重于算法层面的优化,通常支持一种或多种硬件,也支持多硬件平台的任务协作,通过调用主机的神经网络编程库接口来驱动对应的硬件。
本发明的一个实施例是一种基于神经网络执行批量计算的方法,在进行批量计算时,做到只拷贝一次网络中的所有常量数据,拷贝多次变量数据。图3是示出此实施例的流程图。
在步骤301中,定义神经网络的数据节点与操作节点的连接关系,所述数据节点绑定常量数据。此步骤主要建立三个数据结构的关系,即数据节点、操作节点和神经网络,而神经网络由数据节点和操作节点连接而成。
神经网络是由数据节点和操作节点所搭建起来的架构,图4是示出此实施例的神经网络结构的示意图。该神经网络结构示例性的包括卷积 (conv)层401和缩放(scale)层402两层网络,其中卷积层401是基于 y=w*x+b对输入数据进行特征抽取,而缩放层402是基于y=α*x+β的公式对特征抽取后的矩阵进行缩放。为执行卷积层401的操作,需要输入数据403、卷积滤波器参数404及偏移量参数405,计算完成后卷积层401输出隐藏层数据406。接着执行缩放层402的操作,需要输入隐藏层数据406、缩放参数407及贝塔参数408,计算完成后产生计算结果409,完成一次神经网络计算。其中卷积滤波器参数404即是y=w*x+b中的权重w,偏移量参数405即是y=w*x+b中的偏移量b,缩放参数407就是y=α*x+β中的α值,贝塔参数408就是y=α*x+β中的β值。
图4中以椭圆形模块示例的卷积层401和缩放层402实际执行运算,即为操作节点;以白底方块示例的卷积滤波器参数404、偏移量参数405、缩放参数407及贝塔参数408提供计算所需的数据,即为常量数据节点。在推理计算时常量数据节点和操作节点维持不变,故为常量数据,而以灰底方块示例的输入数据403、隐藏层数据406、计算结果409在每次计算中均不同,故为变量数据节点。
在此实施例中,神经网络、数据节点和操作节点的基本元素与基本操作如下表所示:
Figure BDA0002434038800000081
由于神经网络中仅有数据节点和操作节点,为了简化流程,在步骤301 中,此实施例创建神经网络时,由于操作节点数量一般较数据节点为少,因此只需确定操作节点,根据操作节点的前后链接即可找到数据节点。为了保证后续计算时指令寻址不会出错,过程中还需要声明变量输入、输出节点及其顺序。
为更完整的说明此实施例,图3的流程可以细化为如图5所示的流程。
步骤301进一步细化为步骤501至步骤503。
在步骤501中,接收操作节点的参数。如前所述,此实施例先确定操作节点,以图4的例子来说,便是确定该神经网络结构具有卷积层401和缩放层402两个操作节点,接着基于上表获得操作节点的基本元素:操作类型及参数、输入数据节点指针、输出数据节点指针等信息。
接着执行步骤502,根据这些参数的前后链接,识别数据节点。从操作节点的输入数据节点指针和输出数据节点指针,建立连接关系,便能识别出数据节点有:卷积滤波器参数404、偏移量参数405、缩放参数407 及贝塔参数408。获得操作节点、数据节点以及其连接关系的信息后,图 4的神经网络基本框架便已搭建完成。
接着执行步骤503,为数据节点绑定常量数据。对于数据节点,在神经网络中最重要的作用便是为操作节点准备计算所需的参数,此实施例将推理过程中用到的模型参数记录在数据节点里,等待后续编译网络阶段的数据打包器使用。具体做法是,将保存常量数据的内存空间指针(常量数据指针)记录在数据节点中。然而,不是所有权值、偏置等都必须绑定常量数据,而是根据实际需求,在此实施例中,未绑定的都被视为是变量数据节点。
回到图3,执行完步骤301后,接着执行步骤302,根据连接关系,编译所述神经网络获得硬件指令。在编译网络阶段,此实施例利用两组软件来实现编译过程:指令编译器及数据打包器。指令编译器将神经网络编译为具体硬件的指令,具体来说,指令编译器是针对不同的硬件将神经网络转换成硬件的指令,以驱动特定的硬件。数据打包器将常量数据和记录各数据块空间大小的标签封装在一起,以形成数据包。
步骤302直接对应至步骤504,在此完成硬件平台指令生成和常量数据打包的任务,对外提供编译网络接口。
在步骤303中,根据所述常量数据,批量计算神经网络。此步骤对应至图5的计算网络阶段。在计算网络阶段,此实施例通过三组软件来完成具体任务:内存控制器、设备控制器及数据包解析器。内存控制器负责申请、释放设备内存空间和控制主机内存与设备内存之间的双向数据拷贝;设备控制器负责开启与关闭设备,启动计算,接收中断等;数据包解析器负责拆解数据包,提取常量数据和记录数据块大小的标签。前述三组软件对外功能有两类:常量拷贝和参数化计算。以下将进一步说明。
更细化来说,在步骤505中,申请设备内存的内存空间,并存储数据包至所述内存空间。内存控制器向设备内存申请常量数据的内存空间,设备内存提供指针后,内存控制器将包括常量数据的数据包自主机内存拷贝至设备内存。
在步骤506中,提取数据包,获取常量数据和标签。内存控制器自设备内存的常量数据内存空间读取数据包,数据包解析器拆解数据包,提取常量数据和记录数据块大小的标签。
在步骤507中,申请变量数据的设备内存空间。内存控制器为输入数据及输出数据分别申请设备内存的输入数据及输出数据内存空间,设备内存提供指针以指向这些内存空间。
在步骤508中,拷贝输入数据至所述输入数据内存空间。内存控制器根据输入数据的内存指针,拷贝输入数据至设备内存的输入数据内存空间,内存控制器每次拷贝一份的输入数据以执行计算任务,例如拷贝图2的样本1。
在步骤509中,根据设备内存的常量数据、标签及输入数据,计算网络。设备控制器开启设备,基于标签的信息,取出输入数据(样本1)代入计算,以生成计算结果,例如图2的结果1,再基于标签的信息,设备将计算结果拷贝至设备内存的输出数据内存空间,之后设备控制器关闭设备。
在步骤510中,自输出数据内存空间拷贝输出数据至主机内存。内存控制器将步骤509所生成的结果1自输出数据内存空间拷贝至主机内存。
之后流程回到步骤508,拷贝输入数据的样本2至输入数据内存空间。在步骤509中,基于样本2启动计算,以生成计算结果的结果2。在步骤 510中,自输出数据内存空间拷贝结果2至主机内存。如此循环执行步骤508至510,直到所有的输入数据完成计算。
最后执行步骤511,释放输入数据及输出数据内存空间。输入样本全计算完毕后,内存控制器释放设备内存空间,完成这次的批量计算任务。
在步骤506中,获取常量数据和标签,之后在步骤508至步骤510拷贝多个输入数据至输入数据内存空间,多次启动计算,以生成多个计算结果,自输出数据内存空间拷贝多个计算结果至主机内存。具体来说,此实施例在第一阶段定义网络结构并且绑定常量数据,第二阶段调用一个接口编译网络,第三阶段拷贝多次变量数据,以完成多个样本的计算,充分体现本发明的常变量异步拷贝的神经网络推理方案:拷贝一次常量数据,拷贝多次变量数据,完成批量计算任务。
本发明的另一个实施例是一种基于神经网络执行批量计算的计算装置,在拷贝多次变量数据以执行多次计算时,做到只拷贝一次网络中的所有常量数据。其框架如图1所示,包括主机101、设备102、主机内存103 及设备内存104。
首先,主机101定义神经网络的数据节点与操作节点的连接关系。主机101主要建立三个数据结构的关系,即数据节点、操作节点和神经网络,而神经网络由数据节点和操作节点连接而成。
由于神经网络中仅有数据节点和操作节点,为了简化流程,主机101 在创建神经网络时,只需确定操作节点,根据操作节点的前后链接即可找到数据节点。
在确定操作节点时,主机101接收操作节点的参数。同样以图4的例子来说,便是确定该神经网络结构具有卷积层401和缩放层402两个操作节点,并获得操作节点的参数:操作类型及参数、输入数据节点指针、输出数据节点指针等信息。
主机101根据这些参数的前后链接,识别数据节点。主机101基于操作节点的输入数据节点指针和输出数据节点指针,建立连接关系,便能识别出各数据节点。获得操作节点、数据节点以及其连接关系的信息后,神经网络基本框架便已搭建完成。
主机101接着为数据节点绑定常量数据。主机101将推理过程中用到的模型参数记录在数据节点里,等待后续编译网络阶段的数据打包器使用。具体做法是,主机101将保存常量数据的内存空间指针记录在数据节点中。
主机101根据连接关系,编译所述神经网络获得硬件指令。具体包括将神经网络编译为具体硬件的指令,以及将常量数据和记录各数据块空间大小的标签封装在一起,以形成数据包。至此完成硬件平台指令生成和常量数据打包的任务,对外提供编译网络接口。
主机101申请设备内存104的内存空间,以存储所述数据包,接着申请变量数据的设备内存空间。主机101为输入数据及输出数据分别申请设备内存104的输入数据及输出数据内存空间,设备内存104提供指针以指向这些内存空间。接着,主机101提取数据包,获取常量数据和标签。
在获取常量数据和标签后,主机101基于标签,依次拷贝多个输入数据至输入数据内存空间,设备102多次启动计算,以生成多个计算结果,再基于标签将计算结果存储至输出数据内存空间。主机101自输出数据内存空间依次拷贝多个计算结果至主机内存103。最后,主机101释放输入数据及输出数据内存空间,完成计算任务。
此实施例同样体现一次性绑定常量数据,拷贝多次变量数据,以完成多个样本计算的技术方案。
本发明的神经网络还包括了如图4所示的隐藏层数据406。本发明为了减轻编译负担,其方案不需要特别为隐藏层数据406申请设备内存空间,在前述实施例中,数据包会记录隐藏层数据406大小的标签,但无需保存其数据内容,因为它们也是变量,会随输入的更换而变化。
再者,不同神经网络的输入、输出数量不同,不一定是单输入单输出,它们的设备内存空间都会被申请,因此数据包不需要记录输出入数据的大小,但为了指令能正确寻址,前述实施例需要把输出入数据的地址记录在设备内存上。
前述实施例提及的数据包,其主体是常量数据,包含了指令和众多网络模型参数,也包括记录数据块大小的标签。在拷贝常量数据前,需要知道常量数据总大小来申请设备内存空间,因此前述实施例会把记录常量数据大小的标签也保存在数据包里。
应用于本发明的完整数据包结构分为标签区和常量数据区。以图4的神经网络为例,其数据包形式如图6所示。标签区用以记录常量数据大小、隐藏层数据大小及输出入地址区,为说明方便,在此假设图4的神经网络中,常量数据大小为4260字节,隐藏层数据大小为1024字节,输出入地址区为16字节,包括输入及输出数据,每个数据地址占8字节。常量数据区用以存储指令与各常量数据。
数据包可以由软件的数据打包器或是硬件的主机来生成,存储在主机内存中。当数据包被拷贝至设备内存以进行计算任务时,设备内存中的数据排布也需要对应着数据包做规划。图7是示出设备内存700中的数据排布示意图。本发明将设备内存700分为“数据段—数据块”两级逻辑结构。对应数据包中的三个标签,设备内存700中的数据段包括:常量数据段701、隐藏层数据段702、输出入地址段703。
每段包含若干数据块,以常量数据段701为例,其包括的数据块有指令数据块、卷积滤波器数据块、偏移量数据块、缩放参数数据块、贝塔参数数据块等。当数据包被拷贝至设备内存700时,指令及各常量数据被存储至常量数据段701的各相应数据块里。隐藏层数据段702用以存储隐藏层数据。输出入地址段703是由内存控制器或主机申请的,也分为输入数据块及输出数据块,用以分别存储输入数据及输出数据在设备内存中的地址。
设备内存700还包括段基址区704,用以记录三个数据段701、702、 703的起始地址,如图所示,第一段基址705记录常量数据段701的起始地址为1024,第二段基址706记录隐藏层数据段702的起始地址为7000,第三段基址707记录输出入地址段703的起始地址为9000。
本发明的另一个实施例是一种设备内存的指令寻址方法,更具体来说是根据图7的设备内存700所规划的指令寻址方法。通过图7所示的设备内存排布设计可以发现,常量数据和隐藏层数据通过段基址加段内偏移便可以找到相应的数据块,而输出入数据通过段基址加段内偏移只能取到一个地址,再根据该地址跳转到对应位置才能取到数据。对此,此实施例提出两种寻址方法:段直接寻址和段间接寻址,分别用来匹配这两种情况。
图8是示出段直接寻址的流程图,适用于在设备内存700中查找常量数据和隐藏层数据。在步骤801中,接收寻址指令,所述寻址指令包括数据名称及块内偏移量,例如现在需要取出卷积滤波器参数,则接收到数据名称为卷积滤波器,以及块内偏移量为第4字节。在步骤802中,根据数据名称,识别所属的同类数据段,由于数据名称为卷积滤波器,属于常量数据,故识别出同类数据段为常量数据段701。
接着执行步骤803,从基址区704读取同类数据段的段基址。如图7 所示,从基址区704中的第一段基址705读取常量数据段701的起始地址为1024。在步骤804中,从同类数据段读取所述数据名称的段内偏移量。如图7所示,从常量数据段701中,读取卷积滤波器的段内偏移量为2048。需特别说明的是,设备内存700的隐藏层数据层702并未再区分数据块,故段内偏移量为0。在步骤805中,根据所述段基址、所述段内偏移量及所述块内偏移量,获得目标地址。由于在步骤803取得段基址为1024,在步骤804取得段内偏移量为2048,在步骤801接收到块内偏移量为4,将这些数字相加,可以获得加总值为3076,此加总值即为目标地址。接着执行步骤806,读取目标地址里的所述数据。在设备内存700中,取出地址为3076的数据,该数据即为卷积滤波器参数。需提醒的是,在图5的步骤506中,所有的常量数据都是依此流程取值的。
最后执行步骤807,根据所述数据,执行人工神经网络计算。此步骤将所有的常量数据取出后,前述实施例便可依图5的步骤508至510循环执行批量的人工神经网络计算任务。
综上所述,“段直接寻址”的目标地址=段基址+段内偏移+块内偏移,此方法适用于常量数据和隐藏层数据的寻址。以前述卷积滤波器寻址的例子来说,在指令编译时,块内偏移4会被固化在指令中;段内偏移2048会在数据打包器封装数据包后才能确定,再回填到指令中;段基址1024是在计算网络阶段由常量拷贝函数动态申请的,再填入基址区。
相应的,本发明的另一个实施例是一种设备内存的计算装置,更具体来说是执行图8的段直接寻址方法。此实施例的计算装置如图1所示。
主机101接收寻址指令,所述寻址指令包括数据名称及块内偏移量,根据数据名称,主机101识别所属的同类数据段,并从基址区704读取同类数据段的段基址,再从同类数据段读取所述数据名称的段内偏移量。接着主机101根据所述段基址、所述段内偏移量及所述块内偏移量,相加获得目标地址,自在设备内存104中读取目标地址里的常量数据。
取出常量数据后,设备102便可以执行批量的人工神经网络计算。
本发明的另一个实施例是一种设备内存的指令寻址方法,同样是根据图7的设备内存700所规划的指令寻址方法,更具体来说是利用段间接寻址来取值。图9是示出段间接寻址的流程图,适用于在设备内存700中查找变量数据,特别是输入数据或输出数据。
在步骤901中,接收寻址指令,所述寻址指令包括数据名称及块内偏移量,例如现在需要取出输出数据,则此方法接收到数据名称为输出数据,假设块内偏移量为第6字节。在步骤902中,根据数据名称,识别所属的同类数据段,由于数据名称为输出数据,属于输出入数据,故识别出同类数据段为输出入数据段703。
接着执行步骤903,从基址区704读取同类数据段的段基址。如图7 所示,从基址区704中的第三段基址707读取输出入数据段703的起始地址为9000。在步骤904中,从同类数据段读取所述数据名称的段内偏移量。如图7所示,在输出入数据段703中,输入数据的段内偏移量为0,而输出数据的段内偏移量为8,故读取输出数据的段内偏移量为8。
段间接寻址与段直接寻址不同的地方在于,段直接寻址的步骤805为直接获得目标地址,段间接寻址则分为步骤905至907以间接获得目标地址。在步骤905中,将所述段基址与所述段内偏移量相加,以获得第一地址,在步骤903取得段基址为9000,在步骤904取得段内偏移量为8,将这些数字相加,获得第一地址为9008。接着执行步骤906,读取第一地址里的第二地址。在设备内存700中,取出地址为9008的数据,该数据即为第二地址,其值为10000。在步骤907中,将第二地址与块内偏移量相加,以获得输出入地址。第二地址为10000,块内偏移量为6,两者相加为10006,此即为输出地址,也就是目标地址。最后执行步骤908,读取目标地址里的数据。在设备内存700中,取出地址为10006的数据,该数据即为输出数据。
所取出的输出数据,对应至图5的实施例,是在步骤510中,自输出数据内存空间拷贝输出数据至主机内存的寻址取数的过程。在此实施例中,输入数据也是依前述流程取值的。如果取出的是输入数据,则是对应至图 5的步骤509,执行人工神经网络计算时对输入参数寻址取数的过程。
综上所述,“段间接寻址”的目标地址计算分两步,第一步是计算指针=段基址+段内偏移,从指针中取到块地址,第二步是计算目标地址=块地址+块内偏移。以前述输出数据寻址的例子来说,在指令编译时,块内偏移6会被固化在指令中;块地址10000是在计算网络阶段申请的,经参数化计算函数填入输出入地址区内;段内偏移8会在数据打包器封装数据包后才能确定,再回填到指令中;段基址9000是在计算网络阶段由常量拷贝函数动态申请的,再填入基址区。
本发明的另一个实施例是一种执行段间接寻址的计算装置,更具体来说是执行如图9所述的流程。此实施例的计算装置如图1所示。
首先主机101接收寻址指令,所述寻址指令包括数据名称及块内偏移量,根据数据名称,识别所属的同类数据段,再从设备内存104的基址区 704读取同类数据段的段基址,并从同类数据段读取所述数据名称的段内偏移量。主机101接着将所述段基址与所述段内偏移量相加,以获得第一地址,并读取设备内存104中第一地址里的数据,即第二地址,将第二地址与块内偏移量相加,以获得输出入地址。最后主机101读取目标地址里的数据。
本发明的另一个实施例是一种在人工神经网络计算中绑定多个常量数据的方法,更具体来说,此方法是在图3的步骤302中,利用软件数据打包器,将指令编译器生成的指令、用户绑定的常量数据和记录各数据段大小的标签有序组织在一起,并计算各数据块所在数据段内的偏移,再将段内偏移写入指令中,以形成如图6所示的数据包。图10是示出此实施例的流程图,图11则是示出此实施例打包数据包的示意图。
在步骤1001中,重排序多个常量数据。首先遍历计算模型中的全部数据节点,查找所有的常量数据,以图4的神经网络模型为例,其常量数据包括卷积滤波器参数404、偏移量参数405、缩放参数407及贝塔参数 408。接着根据特定顺序,组成常量数据段。此实施例按照先指令后数据的顺序组成数据包的常量数据区,即图11中的常量数据区1101。同时保存着各数据块大小的信息,便于后续使用,例如指令的数据量为2048字节、卷积滤波器参数的数据量为2048字节、偏移量参数的数据量为4字节、缩放参数的数据量为80字节及贝塔参数的数据量为80字节。再计算常量数据总大小,2048+2048+4+80+80=4260,将总数据量4260字节记录在标签的常量数据标签1105中。
接着找出所有隐藏层数据节点,记录每个隐藏层数据节点的数据量,根据隐藏层数据节点的数据量,计算所有隐藏层数据节点的总数据量,记录在标签区的隐藏层数据标签1106中,隐藏层数据标签1106包括所述所有隐藏层数据节点,在此实施例中为1024字节。
最后设定所有输出入节点的数据量,计算所述所有输出入节点的总数据量,其中所述输出入地址段包括所述所有输出入节点。此实施例按照每节点8字节计算输出入地址区所需大小,记录在标签区的输出入地址标签 1107中。在此实施例中,输入数据及输出数据的输出入地址区所需大小为 16字节。至此形成一个初级数据包。
在步骤1002中,计算同类数据段的段内偏移量,段内偏移记录在各数据节点中。三个数据段独立计算各数据块在自己段内的偏移,数据块大小累加即可。根据所有输出入节点的数据量,计算所述输出入地址段的段内偏移量,输出入地址区按8字节累加,输入数据地址在输出入地址区为开头数据块,故段内偏移量为0,由于每个地址的数据量为8字节,故输出数据地址的段内偏移量为8。同样地,根据隐藏层数据节点的数据量,计算隐藏层数据段的段内偏移量。如图11所示,隐藏层数据没有段内偏移量。指令是常量数据段1101的开头数据块,故段内偏移量为0;由于指令块的数据量为2048,故卷积滤波器参数的段内偏移量为2048;由于卷积滤波器参数块的数据量为2048,故偏移量参数的段内偏移量为4096;由于偏移量参数的数据量为4,故缩放参数的段内偏移量为4100;由于缩放参数的数据量为80,故贝塔参数的段内偏移量为4180。
在步骤1003中,在常量数据包中回填所述段内偏移量。指令编译器在编译过程中已将需要填入偏移量的指令位置记录在各数据节点中,因此本步骤根据节点记录的位置,在指令中填写上一步得出的偏移量即可。也就是,常量数据段的段内偏移量的指令位置记录在常量数据段的数据节点中,隐藏层数据段的段内偏移量的指令位置记录在隐藏层数据段的数据节点中,输出入地址段的段内偏移量的指令位置记录在输出入地址段的数据节点中。
至此一个完整的数据包1102就生成完毕,其包括标签区1103及常量数据区1104,该数据包1102存入神经网络的数据结构中。在图5的步骤 509中,数据包1102里的常量数据和标签被发送至设备,以执行批量的人工神经网络计算。
通过前述的三个步骤:重排序数据(reorder)、计算段内偏移(offset) 及回填段内偏移(fill back),数据包得以包装完成,故此方法称为REOFF 数据包装法。
本发明的另一个实施例为一种在人工神经网络计算中组成数据包的方法,特别经图10的REOFF数据包装法后,所组成如图11所示的数据包1102。
此方法包括两大程序:第一个程序为在数据包中建立标签区1103,所述标签区记录常量数据包、隐藏层数据及输出入地址的总数据量;第二个程序为在数据包中建立常量数据区1104,常量数据区1104记录指令及多个常量数据。如前述实施例中描述的,设备读取数据包里的指令及常量数据,以执行批量的人工神经网络计算。
图12是示出此实施例组成数据包的细部流程。建立标签区1103的步骤如下:在步骤1201中,建立常量数据标签1105,用以记录数据包中常量数据的总数据量;在步骤1202中,建立隐藏层数据标签1106,用以记录数据包中隐藏层数据的总数据量;在步骤1202中,建立输出入地址标签1107,用以记录数据包中输出入地址的总数据量。
建立常量数据区1104的步骤如下:在步骤1204中,建立指令段1108,用以记录指令;在步骤1205中,建立常量数据段1101,用以记录神经网络计算所需的多个常量数据,例如卷积滤波器参数数据块1109、偏移量参数数据块1110、缩放参数数据块1111及贝塔参数数据块1112;在步骤1206 中,计算常量数据段1101的段内偏移量,如前所述,卷积滤波器参数数据块1109的段内偏移量为2048,偏移量参数数据块1110的段内偏移量为 4096,缩放参数数据块1111的段内偏移量为4100,贝塔参数数据块的段内偏移量为4180;在步骤1207中,计算隐藏层数据标签1106的段内偏移量,在此实施例中隐藏层数据标签1106没有段内偏移量;在步骤1208中,计算输出入地址标签1107的段内偏移量,由于输出入地址标签1107是按8字节累加的,故输入数据地址数据块的段内偏移量为0,输出数据地址数据块的段内偏移量为8。
建立常量数据区1104的步骤还包括:在步骤1209中,根据常量数据段1101的段内偏移量,将需要填入偏移量的指令位置记录在常量数据段 1101的各数据节点中;在步骤1210中,根据隐藏层数据标签1106的段内偏移量,将需要填入偏移量的指令位置记录在所述隐藏层数据标签1106 的数据节点中;在步骤1211中,根据所述输出入地址标签1107的段内偏移量,将需要填入偏移量的指令位置记录在所述输出入地址标签1107的各数据节点中。
最后将记录在各数据节点的偏移量存储到指令段1108中,便实现数据包1102。
本发明的另一个实施例是基于前述数据包进行人工神经网络计算的方法,具体来说,此实施例主要是将数据包的常量数据和标签拷贝至设备内存的流程。图13是示出此实施例的流程图,图14是示出此实施例在拷贝数据时的示意图。
在步骤1301中,调用内存控制器,根据数据包1401中的常量数据标签1403所记录的数据段大小,在设备内存1402上申请常量数据存放空间 1404。在步骤1302中,调用内存控制器,根据数据包1401中的隐藏层数据标签1405所记录的数据段大小,在设备内存1402上申请隐藏层数据存放空间1406。在步骤1303中,调用内存控制器,根据数据包1401中的输出入地址标签1407所记录的数据段大小,在设备内存1402上申请输出入地址区存放空间1408。在步骤1304中,将数据包1401中的常量数据区 1409内的多个常量数据存储至常量数据存放空间1404中。在步骤1305 中,将常量数据存放空间1404的基址1024存储至段基址区1410中。在步骤1306中,将隐藏层数据存放空间1406的基址7000存储至段基址区 1410中。在步骤1307中,将输出入地址区存放空间1408的基址9000存储至段基址区1410中。将三个数据段的基址都填入段基址区1410后,此区域便相对固定,由内存控制器保证不会分配做其他用途,硬件处理器也会默认从此区域取段基址。
前述步骤执行完后,隐藏层数据段1406和输出入地址区1408还是空的,前者是在硬件计算过程中才会被写入和读出,后者则在神经网络计算函数中被填入。在步骤1308中,根据设备内存1402中的多个常量数据和标签,执行批量的人工神经网络计算。在步骤1309中,将人工神经网络计算所生成的隐藏层数据存储至隐藏层数据存放空间1406中。在步骤1310中,将人工神经网络计算相关的输出入数据存储至输出入地址区存放空间1408。
本发明的另一个实施例是实施图13及图14的计算装置,此计算装置具有如图1所述的架构,将数据包内的常量数据和标签拷贝至设备内存 104。
处理器101根据数据包104中的常量数据标签1403所记录的数据段大小,在设备内存104上申请常量数据存放空间1404,并根据数据包104 中的隐藏层数据标签1405所记录的数据段大小,在设备内存1402上申请隐藏层数据存放空间1406,再根据数据包104中的输出入地址标签1407 所记录的数据段大小,在设备内存1402上申请输出入地址区存放空间1408。
接着处理器101将数据包104中的常量数据区1409内的多个常量数据存储至常量数据存放空间1404中,将常量数据存放空间1404的基址 1024存储至段基址区1410中,将隐藏层数据存放空间1406的基址7000 存储至段基址区1410中,再将输出入地址区存放空间1408的基址9000 存储至段基址区1410中。
设备102根据设备内存104中的多个常量数据和标签,执行批量的人工神经网络计算。在计算期间,处理器101将人工神经网络计算所生成的隐藏层数据存储至隐藏层数据存放空间1406中,并将人工神经网络计算相关的输出入数据存储至输出入地址区存放空间1408。
本发明的另一个实施例提供一种参数化计算的方法。如前所述,参数化计算是一系列函数的统称,用以申请与释放设备内存空间、在主机内存与设备内存之间的双向数据拷贝、以及神经网络计算等。考量在计算神经网络时需要协调各种资源,本发明的参数化计算会先申请输入、输出数据的设备内存空间,再以“拷输入—计算—拷输出”的循环顺序计算神经网络,将输出结果拷出至主机内存,最后释放设备内存空间。图15是示出此实施例的流程图,图16是示出此实施例参数化计算的示意图。
在步骤1501中,调用内存控制器,在设备内存1601上申请常量数据存放空间1602,以存储常量数据。在步骤1502中,调用内存控制器,在设备内存1601上申请输入数据存放空间1603,以存储输入数据。在步骤 1503中,调用内存控制器,在设备内存1601上申请输出数据存放空间1604,以存储输出数据。
在步骤1504中,调用内存控制器,将输入数据存放空间1603的基址存储至输出入地址区1605中。在步骤1505中,调用内存控制器,将输出入数据存放空间1604的基址存储至所述输出入地址区1605中。在步骤 1506中,调用内存控制器,将常量数据一次性拷贝至常量数据存放空间 1602中。
在步骤1507中,调用内存控制器,将变量数据(即输入数据)1606 拷贝至输入数据存放空间1603。在步骤1508中,开始计算神经网络。在步骤1509中,响应计算神经网络,产生计算结果。在步骤1510中,调用内存控制器,将计算结果存储至输出数据存放空间1604。在步骤1511中,调用内存控制器,将计算结果1607(即输出数据)拷贝至主机内存1608。循环执行这些步骤,直到所有的输入数据完成计算。
在步骤1506中,一次性获取常量数据后,接下来在步骤1507至步骤 1511间,拷贝多个输入数据至输入数据内存空间1603,多次启动计算,以生成多个计算结果,自输出数据内存空间1604拷贝多个计算结果1607 至主机内存1608,以实现本发明的批量计算神经网络的方案。
在计算神经网络时,输入数据内存空间1603及输出数据存放空间1604 的地址的填入顺序需保持和图5的步骤507中创建网络时的输入、输出数据节点的顺序一致,才能保证寻址的正确性。此方法执行时先将接收到的地址填入输出入地址区,再使用设备控制器启动硬件计算,等待计算完成的中断返回。
本发明的另一个实施例提供一种参数化计算的计算装置,用以申请与释放设备内存空间、在主机内存与设备内存之间的双向数据拷贝、以及神经网络计算等,主要是实现图15及图16的参数化计算。此实施例的计算装置具有如图1所示的框架。
处理器101在设备内存104上申请常量数据存放空间1602,以存储常量数据,在设备内存104上申请输入数据存放空间1603,以存储输入数据,并在设备内存104上申请输出数据存放空间1604,以存储输出数据。
接着处理器101将输入数据存放空间1603的基址存储至输出入地址区1605中,也将输出数据存放空间1604的基址存储至所述输出入地址区 1605中,将常量数据一次性拷贝至常量数据存放空间1602中。
接着处理器101将变量数据1606拷贝至输入数据存放空间1603。之后设备102开始计算神经网络,并产生计算结果。设备102将计算结果存储至设备内存103的输出数据存放空间1604,处理器101将计算结果1607 拷贝至主机内存103。循环执行这些操作,直到所有的输入数据完成计算。
设备内存104一次性获取常量数据后,接下来处理器101拷贝多个输入数据至输入数据内存空间1603,设备102多次启动计算,以生成多个计算结果,处理器101最后将计算结果拷贝至主机内存103,以实现本发明的批量计算神经网络的方案。
在前述参数化计算的过程中,本发明可以利用多线程实现“拷输入—计算—拷输出”的流水线运作,从而将变量数据拷贝的时间“隐藏”在计算时间内,对于大数据量的推理计算而言,进一步压缩了总处理时间。
本发明的另一个实施例为多线程实现“拷输入—计算—拷输出”的流水线运作的方法,其示意图如图17所示。此实施例响应“拷输入—计算—拷输出”的三阶作业,从时间轴上将流水线分为固有时间1701和循环时间1702,并具有线程1、线程2及线程3,这3个线程可以独立作业。
在固有时间1701中,是神经网络计算的准备期间,例如编译网络1703 指的是图5的步骤504,根据神经网络中数据节点和操作节点的连接关系,指令编译器将神经网络编译为具体硬件的指令。常量拷贝1704指的是图5 的步骤505及506,内存控制器先申请设备内存的内存空间,以存储数据包,再提取数据包,获取常量数据和标签。申请设备内存1705指的是图5 的步骤507,内存控制器为输入数据及输出数据分别申请设备内存的输入数据及输出数据内存空间。
完成准备工作后,进入循环时间1702。在这阶段,三个线程发挥同步作用。为方便说明,假设此实施例的神经网络需要批量计算第一神经网络、第二神经网络及第三神经网络,分别需要第一输入数据、第二输入数据及第三输入数据,并生成第一输出数据、第二输出数据及第三输出数据。
在线程1中,先将第一输入数据拷贝至设备内存(线程块1706),再计算第一神经网络以生成第一输出数据(线程块1707),最后将第一输出数据拷贝回主机内存空间(线程块1708)。在线程2中,当线程1的线程块1707在执行计算任务的同时,便可将第二输入数据拷贝至设备内存(线程块1709),再计算第二神经网络以生成第二输出数据(线程块1710),最后将第二输出数据拷贝回主机内存空间(线程块1711)。在线程3中,当线程2的线程块1710在执行计算任务的同时,便可将第三输入数据拷贝至设备内存(线程块1712),再计算第三神经网络以生成第三输出数据 (线程块1713),最后将第三输出数据拷贝回主机内存空间(线程块1714)。
从每个线程的角度来看,是执行一个完整的计算过程,例如线程1计算第一神经网络、线程2计算第二神经网络、线程3计算第三神经网络。从同一个时间点的角度来看,各线程分别执行不同的任务,以线程块1708、线程块1710及线程块1712为例,线程块1708在执行将输出数据拷贝回主机内存空间,线程块1710在计算神经网络以生成输出数据的任务,线程块1712在执行将输入数据拷贝至设备内存的任务。
可以理解的是,线程1中接在线程块1708后面执行的可以是计算第四神经网络,线程2中接在线程块1711后面执行的可以是计算第五神经网络,线程3中接在线程块1714后面执行的可以是计算第六神经网络,以此类推。
此实施例通过三个线程来实现平行运算,提升了神经网络计算的速度。
图18是示出根据本发明实施例的一种集成电路装置1800的结构图。如图18所示,集成电路装置1800包括计算装置1802,该计算装置1802 即为前述多个实施例中的计算装置。另外,集成电路装置1800还包括通用互联接口1804和其他处理装置1806。
其他处理装置1806可以是主机、图形处理器、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器,其数目不做限制而是依实际需要来确定。其他处理装置1806作为计算装置1802与外部数据和控制的接口,执行包括但不限于数据搬运,完成对计算装置1802的开启、停止等的基本控制。其他处理装置1806也可以和计算装置1802协作共同完成运算任务。
通用互联接口1804可以用于在计算装置1802与其他处理装置1806 间传输数据和控制指令。例如,计算装置1802可以经由通用互联接口1804 从其他处理装置1806中获取所需的输入数据,写入计算装置1802片上的存储单元。进一步,计算装置1802可以经由通用互联接口1804从其他处理装置1806中获取控制指令,写入计算装置1802片上的控制缓存。替代地或可选地,通用互联接口1804也可以读取计算装置1802的存储模块中的数据并传输给其他处理装置1806。
集成电路装置1800还包括存储装置1808,其可以分别与计算装置 1802和其他处理装置1806连接。存储装置1808用于保存计算装置1802 和其他处理装置1806的数据,尤其适用于所需要运算的数据在计算装置 1802或其他处理装置1806的内部存储中无法全部保存的数据。
根据应用场景的不同,集成电路装置1800可以作为手机、机器人、无人机、视频采集等设备的片上系统(SOC),从而有效地降低控制部分的核心面积,提高处理速度并降低整体的功耗。在此情况时,集成电路装置1800的通用互联接口1804与设备的某些部件相连接。此处的某些部件可以例如是摄像头,显示器,鼠标,键盘,网卡或wifi接口。
本发明还揭露一种芯片或集成电路芯片,其包括了集成电路装置1800。本发明还揭露一种芯片封装结构,其包括了上述芯片。
本发明另一个实施例是一种板卡,其包括了上述芯片封装结构。参阅图19,板卡1900除了包括多个上述芯片1902以外,还可以包括其他的配套部件,该配套部件包括存储器件1904、接口装置1906和控制器件1908。
存储器件1904与芯片封装结构内的芯片1902通过总线1914连接,用于存储数据。存储器件1904可以包括多组存储单元1910。每一组存储单元1910可以是图6的片外存储单元616。
接口装置1906与所述芯片封装结构内的芯片1902电连接。所述接口装置1906用于实现芯片1902与外部设备1912(例如服务器或计算机)之间的数据传输。在此实施例中,接口装置1906为标准PCIe接口,待处理的数据由服务器通过标准PCIe接口传递至芯片1902,实现数据转移。芯片1902的计算结果亦由接口装置1906传送回外部设备1912。
控制器件1908与芯片1902电连接,以便对芯片1902的状态进行监控。具体地,芯片1902与控制器件1908可以通过SPI接口电连接。控制器件1908可以包括单片机(“MCU”,Micro Controller Unit)。
本发明的另一个实施例是一种电子设备或装置,其包括了上述板卡 1900。根据不同的应用场景,电子设备或装置可以包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
本发明另一个实施例为一种计算机可读存储介质,其上存储有在计算装置内计算神经网络的计算机程序代码,当所述计算机程序代码由处理器运行时,执行如前述实施例提及的方法或操作,特别是图3、图5、图8、图9、图10、图12、图13、图15及图17所描述的方法或操作。
本发明揭露了基于常变量异步拷贝的神经网络计算方案,解决了推理过程中常量数据的重复拷贝问题,不仅如此,本发明更定义了存储常量数据的数据包,提出了REOFF数据包装法,针对常量和变量的特点设计了“段直接寻址”和“段间接寻址”两种不同的寻址方式,并实现编译计算分离、常变量异步拷贝、流水计算等功能。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

Claims (26)

1.一种基于常量数据包进行人工神经网络计算的计算装置,所述常量数据包包括标签区及常量数据区,所述标签区包括常量数据标签,所述计算装置包括主机和设备,所述设备包括设备内存,其中:
主机,用以:
根据所述常量数据标签所记录的常量数据的大小,在所述设备内存上申请常量数据存放空间;其中,所述常量数据标签用于记录多个常量数据的空间大小;以及
将所述常量数据区内的多个常量数据一次性存储至所述常量数据存放空间;
将多个变量数据多次性拷贝至所述设备内存的输入数据存放空间;以及
设备,用以根据所述多个常量数据和所述变量数据,执行批量的人工神经网络计算;
其中,所述常量数据包括在神经网络计算过程中不会发生变化的神经网络模型参数和所述神经网络模型编译后获得的硬件指令,所述变量数据为在每次所述神经网络计算中不同的数据。
2.根据权利要求1所述的计算装置,其中所述主机还用于:
根据所述人工神经网络的数据节点与操作节点之间的连接关系,编译所述神经网络获得硬件指令。
3.根据权利要求1或2所述的计算装置,其中所述主机还用于:
封装所述常量数据和记录各常量数据的空间大小的标签,以形成常量数据包。
4.根据权利要求3所述的计算装置,其中所述主机还用于:
重排序所述多个常量数据;
根据所述多个常量数据的数据量,计算同类数据段的段内偏移量;
在所述常量数据包中回填所述段内偏移量;
其中,所述同类数据段为根据所述常量数据的名称确定的所述常量数据所属的数据段,所述数据段包括常量数据段、隐藏层数据段和输出入数据段。
5.根据权利要求4所述的计算装置,其中所述同类数据段包括常量数据段,所述主机在执行所述重排序步骤时,具体用以:
遍历计算模型中的全部数据节点,查找所述多个常量数据;以及
根据特定顺序,组成所述常量数据段,其中所述特定顺序为先指令后数据。
6.根据权利要求5所述的计算装置,其中所述常量数据包包括常量数据标签,所述主机在执行所述重排序步骤时,具体用以:
分别记录多个所述常量数据的数据量;以及
根据多个所述常量数据的数据量,计算所述多个常量数据的总数据量;
其中,所述常量数据标签包括所述多个常量数据的总数量。
7.根据权利要求5所述的计算装置,其中所述同类数据段还包括隐藏层数据段和/或输出入数据段,所述常量数据包包括隐藏层数据标签和/或输出入地址标签,所述主机执行所述重排序步骤时,还用以:
记录每个隐藏层数据节点的数据量,根据所述隐藏层数据节点的数据量,计算所有隐藏层数据节点的总数据量;其中,所述隐藏层数据标签包括所述所有隐藏层数据节点的总数据量;
设定所有输出入节点的数据量,计算所述所有输出入节点的总数据量;
其中,所述输出入地址标签包括所述所有输出入节点的总数据量。
8.根据权利要求4所述的计算装置,其中所述主机在执行计算步骤时,具体用以:
根据所述常量数据的数据量,计算所述常量数据段的段内偏移量。
9.根据权利要求4所述的计算装置,其中所述主机在执行所述回填步骤时,具体用以:
根据所述常量数据段的段内偏移量,将需要填入偏移量的指令位置记录在所述常量数据段的各数据节点中。
10.根据权利要求7所述的计算装置,其中所述主机执行所述计算步骤时,还用以:
根据所述隐藏层数据节点的数据量,计算所述隐藏层数据段的段内偏移量;
根据所有输出入节点的数据量,计算所述输出入地址段的段内偏移量。
11.根据权利要求7所述的计算装置,其中所述主机执行回填步骤时,还用以:
根据所述隐藏层数据段的段内偏移量,将需要填入偏移量的指令位置记录在所述隐藏层数据段的数据节点中;
根据所述输出入地址段的段内偏移量,将需要填入偏移量的指令位置记录在所述输出入地址段的各数据节点中。
12.根据权利要求1所述的计算装置,其中所述主机用以:
为输入数据及输出数据分别申请设备内存的输入数据及输出数据内存空间;
拷贝多个输入数据至所述输入数据内存空间;
所述设备用以:根据所述常量数据及所述多个输入数据,计算多个网络,以生成多个计算结果;以及
拷贝所述多个计算结果至所述输出数据内存空间。
13.根据权利要求12所述的计算装置,其中所述主机还用以将所述计算结果从设备内存拷贝至所述主机的主机内存,之后释放输入数据内存空间和输出数据内存空间。
14.根据权利要求4所述的计算装置,其中所述设备内存包括段基址区,所述主机用以将所述数据段的基址存储至所述段基址区中。
15.根据权利要求1所述的计算装置,其中所述标签区还包括隐藏层数据标签,所述主机还用以根据所述隐藏层数据标签所记录的数据段大小,在所述设备内存上申请隐藏层数据存放空间,所述隐藏层数据存放空间用以存储所述设备执行人工神经网络计算时所生成的隐藏层数据。
16.根据权利要求1所述的计算装置,其中所述标签区还包括输出入地址标签,所述主机根据所述输出入地址标签所记录的数据段大小,在所述设备内存上申请输出入地址区存放空间,所述输出入地址区存放空间用以存储所述设备执行人工神经网络计算时所生成的输出入数据。
17.一种基于常量数据包进行人工神经网络计算的方法,所述常量数据包包括标签区及常量数据区,所述标签区包括常量数据标签,所述方法包括:
根据所述常量数据标签所记录的常量数据的大小,在设备内存上申请常量数据存放空间;其中,所述常量数据标签用于记录多个常量数据的空间大小;
将所述常量数据区内的多个常量数据一次性存储至所述常量数据存放空间;
将多个变量数据多次性拷贝至所述设备内存的输入数据存放空间;以及
根据所述多个常量数据和所述变量数据,执行批量的人工神经网络计算;其中,所述常量数据包括在神经网络计算过程中不会发生变化的神经网络模型参数和所述神经网络模型编译后获得的硬件指令,所述变量数据为在每次所述神经网络计算中不同的数据。
18.一种常量数据包的生成方法,其中,所述常量数据包包括标签区及常量数据区,所述标签区包括用于记录多个常量数据的空间大小的常量数据标签,所述方法包括:
重排序所述多个常量数据,所述常量数据包括在神经网络计算过程中不会发生变化的神经网络模型参数和所述神经网络模型编译后获得的硬件指令;
根据所述多个常量数据的数据量,计算同类数据段的段内偏移量;其中,所述同类数据段为根据所述常量数据的名称确定的所述常量数据所属的数据段,所述数据段包括常量数据段、隐藏层数据段和输出入地址段;
在数据包中回填所述段内偏移量;
其中,所述常量数据包能够被一次性存储至设备内存,以实现所述常量数据的批量执行。
19.根据权利要求18所述的方法,其中所述同类数据段包括常量数据段,所述重排序步骤包括:
遍历计算模型中的全部数据节点,查找所述多个常量数据;以及
根据特定顺序,组成所述常量数据段;所述特定顺序为先指令后数据。
20.根据权利要求18或19所述的方法,其中所述数据包包括常量数据标签,所述重排序步骤还包括:
记录所述数据量;以及
根据所述数据量,计算所述多个常量数据的总数据量;
其中,所述常量数据标签记录所述多个常量数据的总数量。
21.根据权利要求18所述的方法,其中所述计算步骤包括:
根据所述数据量,计算所述常量数据段的段内偏移量。
22.根据权利要求18所述的方法,其中所述回填步骤包括:
根据所述常量数据段的段内偏移量,将需要填入偏移量的指令位置记录在所述常量数据段的各数据节点中。
23.根据权利要求18所述的方法,其中所述同类数据段包括隐藏层数据段和/或输出入地址段,所述数据包包括隐藏层数据标签和/或输出入地址标签;所述重排序步骤还包括:
记录每个隐藏层数据节点的数据量,根据所述隐藏层数据节点的数据量,计算所有隐藏层数据节点的总数据量;其中,所述隐藏层数据标签包括所述所有隐藏层数据节点的总数据量;
设定所有输出入节点的数据量,计算所述所有输出入节点的总数据量;其中,所述输出入地址标签包括所述所有输出入节点的总数据量。
24.根据权利要求23所述的方法,其中所述计算步骤还包括:
根据所述隐藏层数据节点的数据量,计算所述隐藏层数据段的段内偏移量;
根据所有输出入节点的数据量,计算所述输出入地址段的段内偏移量。
25.根据权利要求23所述的方法,其中所述回填步骤包括:
根据所述隐藏层数据段的段内偏移量,将需要填入偏移量的指令位置记录在所述隐藏层数据段的数据节点中;
根据所述输出入地址段的段内偏移量,将需要填入偏移量的指令位置记录在所述输出入地址段的各数据节点中。
26.一种计算机可读存储介质,其上存储有在人工神经网络计算中绑定多个常量数据的计算机程序代码,当所述计算机程序代码由处理器运行时,执行权利要求18-25的任意一项所述的方法。
CN202010246216.1A 2020-03-31 2020-03-31 基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质 Active CN111461314B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010246216.1A CN111461314B (zh) 2020-03-31 2020-03-31 基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010246216.1A CN111461314B (zh) 2020-03-31 2020-03-31 基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN111461314A CN111461314A (zh) 2020-07-28
CN111461314B true CN111461314B (zh) 2022-12-20

Family

ID=71682383

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010246216.1A Active CN111461314B (zh) 2020-03-31 2020-03-31 基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN111461314B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11474798B2 (en) * 2020-08-24 2022-10-18 Huawei Technologies Co., Ltd. Method and system for optimizing access to constant memory

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014203042A1 (en) * 2013-06-21 2014-12-24 Aselsan Elektronik Sanayi Ve Ticaret Anonim Sirketi Method for pseudo-recurrent processing of data using a feedforward neural network architecture
WO2018121118A1 (zh) * 2016-12-26 2018-07-05 上海寒武纪信息科技有限公司 计算装置和方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474950B2 (en) * 2015-06-29 2019-11-12 Microsoft Technology Licensing, Llc Training and operation of computational models
US11072067B2 (en) * 2015-11-16 2021-07-27 Kindred Systems Inc. Systems, devices, and methods for distributed artificial neural network computation
US11106974B2 (en) * 2017-07-05 2021-08-31 International Business Machines Corporation Pre-training of neural network by parameter decomposition
US11429848B2 (en) * 2017-10-17 2022-08-30 Xilinx, Inc. Host-directed multi-layer neural network processing via per-layer work requests

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014203042A1 (en) * 2013-06-21 2014-12-24 Aselsan Elektronik Sanayi Ve Ticaret Anonim Sirketi Method for pseudo-recurrent processing of data using a feedforward neural network architecture
WO2018121118A1 (zh) * 2016-12-26 2018-07-05 上海寒武纪信息科技有限公司 计算装置和方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
人工神经网络变量选取与隐藏单元数的确定;谢远涛;《统计与信息论坛》;20071110(第06期);全文 *
神经网同步并行计算机;罗四维;《高技术通讯》;19950128(第01期);全文 *

Also Published As

Publication number Publication date
CN111461314A (zh) 2020-07-28

Similar Documents

Publication Publication Date Title
JPH05205005A (ja) ロジック・シミュレーション・マシン用ホスト・インタフェース
US20210150325A1 (en) Data processing method and apparatus, and related product
JP7239547B2 (ja) データ処理方法、装置、及び関連製品
CN111461314B (zh) 基于常量数据包进行人工神经网络计算的方法、装置及计算机可读存储介质
US20240111536A1 (en) Data processing apparatus and related products
US7685397B2 (en) Apparatus and method for managing stacks in virtual machine
CN111461326B (zh) 一种基于设备内存的指令寻址方法及计算机可读存储介质
US20240004650A1 (en) Data processing method and apparatus, and related product
CN110458285B (zh) 数据处理方法、装置、计算机设备和存储介质
CN111461316A (zh) 计算神经网络的方法、装置、板卡及计算机可读存储介质
CN111461315A (zh) 计算神经网络的方法、装置、板卡及计算机可读存储介质
CN112052040A (zh) 处理方法、装置、计算机设备和存储介质
CN111966399B (zh) 指令处理方法、装置及相关产品
CN111782274B (zh) 数据处理装置及相关产品
WO2021239056A1 (zh) 计算程序中数据依赖关系的方法及计算机可读存储介质
CN111966398B (zh) 指令处理方法、装置及相关产品
WO2021254123A1 (zh) 基于控制流图推导地址的方法、装置及可读存储介质
CN111783992A (zh) 数据处理装置及相关产品
WO2020192587A1 (zh) 人工智能计算装置及相关产品
CN111026440B (zh) 运算方法、装置、计算机设备和存储介质
CN111831331B (zh) 用于分形智能处理器的分形可重配指令集
WO2021000638A1 (zh) 深度学习算法的编译方法、装置及相关产品
CN111079914B (zh) 运算方法、系统及相关产品
CN117075902A (zh) 基于张量的编译方法、设备及其计算机可读存储介质
CN113867686A (zh) 运算方法、装置及相关产品

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