获取算子数据和离线模型操作的设备及方法与流程

文档序号:29565596发布日期:2022-04-09 02:21阅读:117来源:国知局
获取算子数据和离线模型操作的设备及方法与流程

1.本发明一般地涉及神经网络领域。更具体地,本发明涉及获取算子数据和离线模型操作的装置、板卡、方法及可读存储介质。


背景技术:

2.作为让人工智能技术更快、更好运行的基础硬件设施,人工智能芯片会是未来智能化时代的一种趋势。在当前的人工智能芯片技术中,经常使用开发者给定的神经网络模型,通过对其进行编译而生成离线模型,并利用人工智能芯片运行该离线模型以执行推理计算。一般地,人工智能芯片会将计算产生的最终数据以及某些中间结果数据存储到诸如ddr(double data rate sdram,双倍速率同步动态随机存储器)的片外内存上,并支持将片外内存上的数据转储到文件。当离线模型的计算结果与使用神经网络运算框架计算的结果有偏差时,可以将片外内存上的计算结果数据输出,并与框架执行的结果对比,以快速侦错并调试。
3.但是,当前的人工智能芯片只能将计算产生的最终数据以及某些中间结果数据存储到片外内存上,而在对神经网络片段进行了融合的情况下,被融合的算子的计算结果数据在执行离线模型时无法被导出,以至于难以优化融合算子。
4.为了更好地定位融合算子内部的精度问题,一种将融合算子的中间结果转储到片外的方案是迫切需要的。


技术实现要素:

5.为了至少部分地解决背景技术中提到的技术问题,本发明提供了一种获取算子数据和离线模型操作的装置、板卡、方法及可读存储介质。
6.在一方面中,本发明揭露一种获取算子数据的方法,包括:对神经网络中的网络片段进行融合优化,以获得融合算子,其中网络片段包括被融合算子;配置输出操作,使得融合算子的中间结果暂存至片上内存时,将中间结果从片上内存转载至片外,其中,中间结果为被融合算子的计算结果的至少一部分;对配置输出操作后的神经网络进行编译,以获得二进制指令;以及对所述二进制指令序列化,以获得离线模型文件。
7.在另一方面中,本发明揭露一种离线模型操作方法,包括:对根据前述的方法所获取的离线模型文件进行反序列化,并确定输出操作,以获得推理模型;于运行时启动推理模型中的子进程,其中,子进程用于运算推理模型中的融合算子;当融合算子的中间结果暂存至片上内存时,将中间结果从片上内存转载至片外,其中,中间结果为被融合算子的计算结果的至少一部分。
8.在另一方面中,本发明揭露一种计算机可读存储介质,其上存储有获取算子数据及离线模型操作的计算机程序代码,当所述计算机程序代码由处理装置运行时,执行如前述的方法。本发明还揭露一种计算机程序产品,包括获取算子数据及离线模型操作的计算机程序,其特征在于,计算机程序被处理器执行时实现前述的方法的步骤。本发明还揭露一
种计算机装置,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现前述的方法的步骤。
9.在另一方面中,本发明揭露一种获取算子数据的处理装置,包括:融合模块、输出模块、编译模块及序列化模块。融合模块用以对神经网络中的网络片段进行融合优化,以获得融合算子,其中网络片段包括被融合算子;输出模块用以配置输出操作,使得所述融合算子的中间结果暂存至片上内存时,将中间结果从片上内存转载至片外,其中,中间结果为被融合算子的计算结果的至少一部分;编译模块用以对配置输出操作后的神经网络进行编译,以获得二进制指令;以及序列化模块用以对二进制指令序列化,以获得离线模型文件。
10.在另一方面中,本发明揭露一种操作离线模型的计算装置,包括:反序列化模块、运算模块及转载模块。反序列化模块用以对前述的处理装置所生成的离线模型文件进行反序列化,并确定输出操作,以获得推理模型;运算模块用以于运行时启动推理模型中的子进程,其中,子进程用于运算推理模型中的融合算子;转载模块用以当融合算子的中间结果暂存至片上内存时,将中间结果从片上内存转载至片外,其中,中间结果为被融合算子的计算结果的至少一部分。
11.在另一方面中,本发明揭露一种集成电路装置,包括前述的处理装置及计算装置。本发明还揭露一种板卡,包括前述的集成电路装置。
12.本发明在编译阶段配置输出操作,使得运行时被融合算子的中间结果可以从片上内存转载至片外,让获取被融合算子的中间结果成为可能,方便开发者参考被融合算子的中间结果来优化系统。
附图说明
13.通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分。其中:
14.图1是示出本发明实施例的板卡的结构图;
15.图2是示出本发明实施例的集成电路装置的结构图;
16.图3是示出本发明实施例的计算装置的内部结构示意图;
17.图4是示出本发明实施例的处理器核的内部结构示意图;
18.图5是示出本发明实施例在编译期获取算子数据的流程图;
19.图6是示出本发明另一实施例在运行时离线模型操作的流程图;
20.图7是示出本发明另一实施例的子进程声明周期的流程图;
21.图8是示出本发明另一实施例的处理装置的示意图;以及
22.图9是示出本发明另一实施例的计算装置的示意图。
具体实施方式
23.下面将结合此实施例中的附图,对此实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
24.应当理解,本发明的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本发明的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
25.还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本发明。如在本发明说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
26.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
27.下面结合附图来详细描述本发明各实施例的具体实施方式。
28.图1示出此实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(system on chip,soc),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
29.芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如pcie接口等。
30.板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(micro controller unit,mcu)。
31.图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和片外内存204。
32.计算装置201配置成执行开发者指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成开发者指定的操作。
33.接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
34.处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201
的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就此实施例的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
35.片外内存204用以存储待处理的数据,为ddr内存,大小通常为16g或更大,用于保存计算装置201和/或处理装置203的数据。片外内存204上的数据可通过诸如tensor dump(张量转储)的工具被导出并转储成文件,以供后续使用。
36.图3示出了计算装置201的内部结构示意图。计算装置201用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,图中的计算装置201采用多核分层结构设计,计算装置201作为一个片上系统,其包括多个集群(cluster),每个集群又包括多个处理器核,换言之,计算装置201是以片上系统-集群-处理器核的层次所构成的。
37.以片上系统的层级来看,如图3所示,计算装置201包括外部存储控制器301、外设通信模块302、片上互联模块303、同步模块304以及多个集群305。
38.外部存储控制器301可以有多个,在图中示例性地展示2个,其用以响应处理器核发出的访问请求,访问外部存储设备,例如图2中的片外内存204,从而自片外读取数据或是将数据写入。外设通信模块302用以通过接口装置202接收来自处理装置203的控制信号,启动计算装置201执行任务。片上互联模块303将外部存储控制器301、外设通信模块302及多个集群305连接起来,用以在各个模块间传输数据和控制信号。同步模块304是一种全局同步屏障控制器(global barrier controller,gbc),用以协调各集群的工作进度,确保信息的同步。多个集群305是计算装置201的计算核心,在图中示例性地展示4个,随着硬件的发展,此实施例的计算装置201还可以包括8个、16个、64个、甚至更多的集群305。集群305用以高效地执行深度学习算法。
39.以集群的层级来看,如图3所示,每个集群305包括多个处理器核(ipu core)306及一个存储核(mem core)307。
40.处理器核306在图中示例性地展示4个,本发明不限制处理器核306的数量。其内部架构如图4所示。每个处理器核306包括三大模块:控制模块41、运算模块42及存储模块43。
41.控制模块41用以协调并控制运算模块42和存储模块43的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,ifu)411及指令译码单元(instruction decode unit,idu)412。取指单元411用以获取来自处理装置203的指令,指令译码单元412则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块42和存储模块43。
42.运算模块42包括向量运算单元421及矩阵运算单元422。向量运算单元421用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元422负责深度学习算法的核心计算,即矩阵乘及卷积。
43.存储模块43用来存储或搬运相关数据,包括神经元存储单元(neuron ram,nram)
431、权值存储单元(weight ram,wram)432、输入/输出直接内存访问模块(input/output direct memory access,iodma)433、搬运直接内存访问模块(move direct memory access,mvdma)434。nram431用以存储供处理器核306计算的特征图及计算后的中间结果;wram432则用以存储深度学习网络的权值;iodma 433通过广播总线309控制nram 431/wram 432与片外内存204的访存;mvdma 434则用以控制nram 431/wram 432与sram 308的访存。
44.回到图3,存储核307主要用以存储和通信,即存储处理器核306间的共享数据或中间结果、以及执行集群305与片外内存204之间的通信、集群305间彼此的通信、处理器核306间彼此的通信等。在其他实施例中,存储核307具有标量运算的能力,用以执行标量运算。
45.存储核307包括共享存储单元(sram)308、广播总线309、集群直接内存访问模块(cluster direct memory access,cdma)310及全局直接内存访问模块(global direct memory access,gdma)311。sram 308承担高性能数据中转站的角色,在同一个集群305内不同处理器核306之间所复用的数据不需要通过处理器核306各自向片外内存204获得,而是经sram 308在处理器核306间中转,存储核307只需要将复用的数据从sram 308迅速分发给多个处理器核306即可,以提高核间通讯效率,亦大大减少片上片外的输入/输出访问。
46.广播总线309、cdma 310及gdma 311则分别用来执行处理器核306间的通信、集群305间的通信和集群305与片外内存204的数据传输。以下将分别说明。
47.广播总线309用以完成集群305内各处理器核306间的高速通信,此实施例的广播总线309支持核间通信方式包括单播、多播与广播。单播是指点对点(即单一处理器核至单一处理器核)的数据传输,多播是将一份数据从sram 308传输到特定几个处理器核306的通信方式,而广播则是将一份数据从sram 308传输到所有处理器核306的通信方式,属于多播的一种特例。
48.cdma 310用以控制在同一个计算装置201内不同集群305间的sram 308的访存。
49.gdma 311与外部存储控制器301协同,用以控制集群305的sram 308到片外内存204的访存,或是将数据自片外内存204读取至sram 308中。从前述可知,片外内存204与nram 431或wram 432间的通信可以经由2个渠道来实现。第一个渠道是通过iodam 433直接联系片外内存204与nram 431或wram 432;第二个渠道是先经由gdma 311使得数据在片外内存204与sram 308间传输,再经过mvdma 434使得数据在sram 308与nram 431或wram 432间传输。虽然表面上看来第二个渠道需要更多的元件参与,数据流较长,但实际上在部分实施例中,第二个渠道的带宽远大于第一个渠道,因此片外内存204与nram 431或wram 432间的通信通过第二个渠道可能更有效率。本发明的实施例可根据本身硬件条件选择数据传输渠道。
50.在其他实施例中,gdma 311的功能和iodma 433的功能可以整合在同一部件中。此实施例为了方便描述,将gdma 311和iodma 433视为不同部件,对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与此实施例类似,即属于本发明的保护范围。进一步地,gdma 311的功能、iodma 433的功能、cdma 310的功能、mvdma 434的功能亦可以由同一部件来实现。
51.在当前的人工智能芯片技术中,在对神经网络进行融合优化的情况下,有时候融合算子会采用完全不同于被融合算子的执行方式来实现被融合算子的功能,这种情况是不会生成被融合算子的计算结果的,但有时候融合算子仍然逐一被执行被融合算子,不过全
是片上作业,不涉及片外内存204的读写操作,在这种情况下的被融合算子会生成计算结果(即融合算子的中间结果),这些中间结果只被放在计算装置201的nram 431上缓存,随即被后续生成的数据所覆写。
52.当开发者利用神经网络模型来解决问题时,通常会分为两个阶段:离线和线上。离线指的是模型未部署到实际环境之前,线上是指模型部署到实际环境之后。在离线阶段,需要先训练模型,并对训练好的模型进行离线评估来了解或调试模型的性能。在确认模型的性能符合预期后,才会进入到线上阶段,在实际环境里运作。
53.此实施例在对神经网络进行编译以生成离线模型文件期间对输出操作进行配置,将融合算子的中间结果从nram 431转载至片外内存204成为可能,从而使得运行离线模型文件时融合算子的中间结果得以转储出来。
54.图5示出了此实施例获取算子数据的流程图,此方法可以通过处理装置203来执行。更详细来说,图5的流程是在编译期中执行,编译主要是基于开发者的计算图进行图优化、融合优化、生成指令、得到离线模型文件等处理。
55.在步骤501中,对神经网络中的网络片段进行融合优化,以获得融合算子。在此实施例中,前述的网络片段包括多个算子,算子融合是对多个算子进行优化以加速计算,具体来说是将输入数据载入计算装置201后,只要前述网络片段的这些算子满足融合的条件,通过算子融合程序,一次执行多个被融合算子,减少了数据的搬移,节省了计算时间。这些被融合掉的算子称为被融合算子,最后生成融合算子。被融合算子的运行结果与融合算子的运行结果为等效。
56.在步骤502中,配置输出操作,当融合算子的中间结果暂存至nram431时,将中间结果从nram 431转载至片外,而中间结果即为被融合算子的计算结果的至少一部分。
57.示例性地,可使用json配置文件使得生成的离线模型具备转储被融合网络的片上结果数据的能力。json(javascript object notation,js对象简谱)文件是一种轻量级的数据交换格式,它基于ecmascript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。json文件可以将编程语言对象中表示的一组数据转换为字符串,以便于在网络或者程序间简易地传递这个字符串,并在需要的时候将其还原为各编程语言所支持的数据格式。以下为一种配置选项:
58.59.其中,参数fusion_dump_level定义转储模式/输出模式,上面示例中其值为0,示例性地表示将指定张量的对应片上数据转储。参数fusion_dump_tensor定义指定张量是哪些,示例性地指定张量是名称分别为"name1"和"name2"的两个张量。在运行时,开发者使用推理加速引擎(例如中科寒武纪科技股份有限公司开发的magicmind)调用上述接口解析字符串即可。
60.在步骤503中,对配置输出操作后的神经网络进行编译,以获得二进制指令。根据上述配置选项/文件,利用编译器执行词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成等阶段,以生成执行神经网络的二进制指令,此二进制指令在融合算子的中间结果暂存至nram 431时插入了打印指令,用来将融合算子的中间结果(被融合算子的计算结果)自nram 431转载或输出到片外。
61.在步骤504中,对二进制指令序列化,以获得离线模型文件。序列化是将二进制指令的状态信息转换为可以存储或传输的形式的过程。在序列化期间,二进制指令将其当前状态写入到临时或持久性存储区,方便其他代码查看或修改那些不序列化便无法访问的对象数据。
62.在将所有二进制指令序列化后,便可以得到离线模型文件,供在运行期执行。
63.在此实施例中,通过在编译阶段配置输出操作,使得在运行时于计算装置201上缓存的被融合算子的计算结果输出到片外成为可能,开发者得以将这些数据与基准数据进行比较,估计其偏差,以帮助开发者快速定位网络精度问题。
64.本发明的另一个实施例是在神经网络的运行时,控制上述的离线模型文件将片上数据输出到片外。图6示出了此实施例的离线模型操作的流程图。同样地,该方法可以由图1至图4的结构来实现。
65.在步骤601中,对所获取的离线模型文件进行反序列化,并确定输出操作,以获得推理模型。离线模型文件可以是前述实施例所生成的可执行离线模型文件。反序列化是与序列化相对的过程,处理装置203将字节序列恢复为编程语言对象的过程,其最重要的作用在于,根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。在此步骤中,除了对离线模型文件进行反序列化,处理装置203还确定输出操作。
66.此步骤的配置输出操作可以通过设置输出接口来实现,此输出接口定义多种输出模式,供运行时开发者可以选择中间结果的输出模式。在此实施例中,输出接口可以接受如下的输出模式。
67.输出模式1:关闭输出融合算子的中间结果,即不输出融合算子的中间结果。
68.输出模式2:中间结果为被融合算子的计算结果的特定部分,即输出的是被融合算子的计算结果的一些特定部分,而非全部。
69.或输出模式3:中间结果为计算结果的全部,即输出的是被融合算子的计算结果的全部。
70.输出接口可使用诸如c语言的高级编程语言或其他种类的编程语言来设计。示例性地,接口设计可以包括icontext类下的contextdumpinfo结构体,其包括多个变量或参数作为输出操作的配置选项,这些变量或参数有转储模式、转储文件的路径、张量名和转储文件的格式等。
71.转储模式的数值用以表示对应的转储模式或转储级别,即输出模式。当该参数的
值为-1时,表示关闭输出,即前述的输出模式1;当该参数的值为0时,表示将指定张量对应的片上数据转储,需配合张量名选项一起使用,即前述的输出模式2;当该参数的值为1时,表示将全部张量(全部中间数据)转储,即转储所有中间数据,即前述的输出模式3;当该参数的值为2时,表示将所有操作(还包括被融合算子以外的操作)的输出张量对应的片上数据转储。转储文件的路径用以表示存放待输出张量的路径。张量名用以设定输出张量的张量名称,其可经由输出接口接收开发者输入的张量名。转储文件的格式的参数值为0时表示生成二进制格式的转储文件,为1时表示生成文本格式的转储文件。可以理解的是,上述配置选项只是示例,并非限制。
72.更详细来说,开发者可以通过输出接口设置配置选项的值来选择输出操作。例如,可将转储模式的值设为0,即,将指定张量对应的片上数据转储,并将张量名设置为name1和name2,以将这两个张量作为指定张量。还可以通过设置转储文件的路径和/或格式来进一步确定输出操作。在此步骤中,在编译期已经过配置选项声明过的数据块均可进行转储。
73.在步骤602中,于运行时启动推理模型中的子进程,其中,所述子进程用于运算推理模型中的融合算子,也就是专用于融合网络片段数据的进程。
74.推理模型的一个进程可能下属多个子进程,但最多只能有1个父进程,而若某一进程没有父进程,则该进程是由内核直接生成。子进程继承了对应的父进程的大部分属性,在一般情况下,子进程为父进程的副本。
75.在计算装置201为多核结构的情况下,对于开发者输入的计算图中的一个算子(例如卷积)的任务可能会拆分给多个处理器核306并行计算,融合算子的处理同样会被拆分至多个不同的核上运行,每个处理器核306处理部分数据,因此每个处理器核306计算出的中间结果间可能存在交叠,运行时需要进行数据的去重、重组以获得正确的计算结果,并以固定的格式存储至文件,以方便进行对比工作。
76.此步骤还包括建立运行融合算子所需的数据至该子进程的管道。一般来说,管道包括写端及读端,写端用以将融合算子的中间结果写入至nram 431,读端用以进行数据解析、去重、重组及写入转储文件中。
77.在步骤603中,当融合算子的中间结果暂存至nram 431时,将中间结果从nram 431转载至片外,其中,中间结果为被融合算子的计算结果的至少一部分。这可以通过计算装置201执行推理模型所包含的多个指令来实现,具体来说,计算装置201在调用内核时执行实现融合算子的多个指令,这些多个指令其中之一就是用来控制并执行此步骤;在调用内核后插入同步指令,以确保这些多个指令执行完毕,并在获得完整的数据之后才会进行中间结果数据的转载,也就是计算装置201在执行了同步指令之后,才执行片上数据输出指令,将中间结果从nram 431转载至片外,例如显示在开发者的显示屏上;当推理模型执行完毕后,开发者可以选择将转载的中间结果存档,具体来说是将被转载至片外的中间结果写入json文件中,并存储该json文档。至此实现将被融合算子的计算结果转储的任务。
78.图7示出此实施例执行上述子进程声明周期的流程图。
79.在步骤701中,在调用融合算子生成的计算装置201的内核之前启动子进程,以创建片上数据至子进程的管道,此管道负责数据的传输。该管道的写端用以将融合算子的中间结果写入至nram 431,读端用以进行数据解析、去重、重组及写入转储文件中。
80.在步骤702中,调用内核以执行指令,指令用以执行子进程的任务,包括计算指令、
输入输出指令等。
81.在步骤703中,调用内核后插入同步指令,并执行片上数据输出指令,以将融合算子的中间结果数据从nram 431转载至片外。由于调用内核为异步行为,需要使用同步指令确保此内核相关的指令已执行完毕,才能够获得完整的数据,即获得被融合算子完整的计算结果。在获得完整数据并以预先配置的文件格式转储至片外(例如写入json文件)后,回收子进程及相关资源。
82.在步骤704中,判断离线模型文件是否已执行完毕,如果未执行完毕,则回到步骤701循环调用下一个子进程,如果已执行完毕,则结束。
83.通过此实施例所提供的离线模型操作方法,开发者可以设定输出操作并在运行离线模型时将所需的融合算子的中间结果从片上转储至片外,以验证融合算子中各操作的精度。
84.本发明的另一个实施例还提供一种获取算子数据的处理装置,图8示出了这样的处理装置的示意图。如图8所示,该处理装置包括:融合模块801、输出模块802、编译模块803及序列化模块804。
85.融合模块801用以对神经网络中的网络片段进行融合优化,获得融合算子,其中所述网络片段包括被融合算子。具体地,在将输入数据载入后,只要网络片段的算子满足融合的条件,融合模块801就通过算子融合程序,一次执行多个被融合算子,以减少数据的搬移,节省计算时间。
86.输出模块802用以配置输出操作,使得融合算子的中间结果暂存至片上内存时,将中间结果从片上内存转载至片外,其中,所述中间结果为被融合算子的计算结果的至少一部分。示例性地,输出模块802可通过json配置文件使得生成的离线模型具备转储被融合网络的片上结果数据的能力。例如,在json配置文件中使用参数fusion_dump_level定义转储模式/输出模式,即转储/输出哪些数据,使用参数fusion_dump_tensor定义指定张量是哪些,使得在运行时,开发者使用推理加速引擎调用上述接口解析字符串。
87.编译模块803用以对配置输出操作后的神经网络进行编译,以获得二进制指令。示例性地,编译模块803根据上述配置选项/文件,利用编译器执行词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成等,以生成执行神经网络的二进制指令,此二进制指令在融合算子的中间结果暂存至片上内存的位置插入了打印指令,用来将融合算子的中间结果(被融合算子的计算结果)自片上内存转载或输出到片外。
88.序列化模块804用以对所述二进制指令序列化,以获得离线模型文件。序列化模块804在将所有二进制指令序列化后,便可以得到离线模型文件,供在运行期执行。
89.本发明的另一个实施例还提供一种操作离线模型的计算装置,图9示出了这样的计算装置的示意图,计算装置包括:反序列化模块901、运算模块902及转载模块903。
90.反序列化模块901用以对前一个实施例的处理装置所生成的离线模型文件进行反序列化,并确定输出操作,以获得推理模型。反序列化模块901可以通过设置输出接口来实现输出操作,此输出接口定义多种输出模式,供运行时开发者可以选择中间结果的输出模式。输出接口可使用诸如c语言的高级编程语言或其他种类的编程语言来设计。示例性地,接口设计可以包括icontext类下的contextdumpinfo结构体,其包括多个变量或参数作为输出操作的配置选项,这些变量或参数有转储模式、转储文件的路径、张量名和转储文件的
格式等,各变量或参数的定义如前述实施例所示,不再赘述。
91.运算模块902用以于运行时启动推理模型中的子进程,其中子进程用于运算推理模型中的融合算子。运算模块902还用以建立运行融合算子所需的数据至该子进程的管道。一般来说,管道包括写端及读端,写端用以将融合算子的中间结果写入至片上内存,读端用以进行数据解析、去重、重组及写入转储文件中。
92.转载模块903用以当融合算子的中间结果暂存至片上内存时,将中间结果从片上内存转载至片外,其中中间结果为被融合算子的计算结果的至少一部分。转载模块903可以通过执行推理模型所包含的多个指令来实现该转载,具体来说,转载模块903在调用内核时执行实现融合算子的多个指令,这些多个指令其中之一就是用来控制并执行该转载;转载模块903在调用内核后插入同步指令,以确保这多个指令执行完毕,并在获得完整的数据之后才会进行中间结果数据的转载。也就是说,转载模块903在执行了同步指令之后,才执行片上数据输出指令,将中间结果从片上转载至片外;当推理模型执行完毕后,开发者可以选择将转载的中间结果存档,具体来说是将被转载至片外的中间结果写入json文件中,并存储该json文档。至此实现将被融合算子的计算结果转储的任务。
93.需要说明的是,上述处理装置或计算装置及其各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见前述实施例,此处不再赘述。
94.本发明的另一个实施例还提供一种计算机装置,其包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现如前所述各实施例的获取算子数据的方法或离线模型操作方法的步骤。
95.本发明的另一个实施例还提供一种计算机可读存储介质,其上存储有用于获取算子数据或操作离线模型的计算机程序代码,当所述计算机程序代码由处理器运行时,执行如前所述各实施例的获取算子数据的方法或离线模型操作方法。
96.本发明的另一个实施例还提供一种计算机程序产品,其包括获取算子数据及离线模型操作的计算机程序,所述计算机程序被处理器执行时实现如前所述各实施例的获取算子数据的方法或离线模型操作方法的步骤。
97.在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当此实施例的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行此实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
98.本发明通过在对神经网络进行编译以生成离线模型文件期间对输出操作进行配置,使得将被融合算子的计算结果从片上内存转载至片外成为可能,从而在执行离线模型文件期间开发者能够根据需要将被融合算子的计算结果转储出来以供查看、比对,可提高神经网络的精度。
99.根据不同的应用场景,此实施例的电子设备或装置可以包括服务器、云端服务器、
服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。此实施例的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,此实施例的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据此实施例方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
100.需要说明的是,为了简明的目的,此实施例将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解此实施例的方案并不受所描述的动作的顺序限制。因此,依据本发明的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本发明所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于此实施例某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本发明对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本发明某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
101.在具体实现方面,基于此实施例的公开和教导,本领域技术人员可以理解本发明所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
102.在此实施例中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现此实施例所述方案的目的。另外,在一些场景中,此实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
103.在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中
央处理器、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
104.依据以下条款可更好地理解前述内容:
105.条款a1、一种获取算子数据的方法,包括:对神经网络中的网络片段进行融合优化,以获得融合算子,其中所述网络片段包括被融合算子;配置输出操作,使得所述融合算子的中间结果暂存至片上内存时,将所述中间结果从所述片上内存转载至片外,其中,所述中间结果为所述被融合算子的计算结果的至少一部分;对配置输出操作后的神经网络进行编译,以获得二进制指令;以及对所述二进制指令序列化,以获得离线模型文件。
106.条款a2、根据条款a1所述的方法,其中所述配置输出操作的步骤包括:设置输出接口;其中,所述输出接口用于设置输出模式。
107.条款a3、根据条款a2所述的方法,其中所述输出模式为关闭输出所述中间结果、所述中间结果为所述计算结果的特定部分或所述中间结果为所述计算结果的全部。
108.条款a4、一种离线模型操作方法,包括:对根据条款a1至a3任一条款所述的方法所获取的离线模型文件进行反序列化,并确定输出操作,以获得推理模型;于运行时启动所述推理模型中的子进程,其中,所述子进程用于运算所述推理模型中的融合算子;当所述融合算子的中间结果暂存至片上内存时,将所述中间结果从所述片上内存转载至片外,其中,所述中间结果为被融合算子的计算结果的至少一部分。
109.条款a5、如条款a4所述的离线模型操作方法,其中所述启动所述推理模型中的子进程的步骤包括:建立运行所述融合算子所需数据至所述子进程的管道。
110.条款a6、根据条款a5所述的离线模型操作方法,其中所述管道的写端用以将所述中间结果写入至所述片上内存。
111.条款a7、如条款a4所述的离线模型操作方法,还包括:在调用内核时执行所述融合算子的多个指令;其中,所述多个指令其中之一控制所述转载步骤。
112.条款a8、如条款a7所述的离线模型操作方法,还包括:在调用内核后插入同步指令,以确保所述多个指令执行完毕。
113.条款a9、如条款a5所述的离线模型操作方法,还包括:当所述推理模型执行完毕时,将转载的中间结果写入文件中。
114.条款a10、根据条款a9所述的离线模型操作方法,其中所述管道的读端用以进行数据解析、去重、重组及写入所述文件中。
115.条款a11、一种计算机可读存储介质,其上存储有获取算子数据及离线模型操作的计算机程序代码,当所述计算机程序代码由处理装置运行时,执行条款a1至a10任一项所述的方法。
116.条款a12、一种计算机程序产品,包括获取算子数据及离线模型操作的计算机程序,其特征在于,所述计算机程序被处理器执行时实现条款a1至a10任一项所述方法的步
骤。
117.条款a13、一种计算机装置,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现条款a1至a10任一项所述方法的步骤。
118.条款a14、一种获取算子数据的处理装置,包括:融合模块,用以对神经网络中的网络片段进行融合优化,以获得融合算子,其中所述网络片段包括被融合算子;输出模块,用以配置输出操作,使得所述融合算子的中间结果暂存至片上内存时,将所述中间结果从所述片上内存转载至片外,其中,所述中间结果为所述被融合算子的计算结果的至少一部分;编译模块,用以对配置输出操作后的神经网络进行编译,以获得二进制指令;以及序列化模块,用以对所述二进制指令序列化,以获得离线模型文件。
119.条款a15、一种操作离线模型的计算装置,包括:反序列化模块,用以对条款a14所述的处理装置所生成的离线模型文件进行反序列化,并确定输出操作,以获得推理模型;运算模块,用以于运行时启动所述推理模型中的子进程,其中,所述子进程用于运算所述推理模型中的融合算子;转载模块,用以当所述融合算子的中间结果暂存至片上内存时,将所述中间结果从所述片上内存转载至片外,其中,所述中间结果为被融合算子的计算结果的至少一部分。
120.条款a16、一种集成电路装置,包括根据条款a14所述的处理装置及根据条款a15所述的计算装置。
121.条款a17、一种板卡,包括根据条款a16所述的集成电路装置。
122.以上对此实施例进行了详细介绍,本文中应用了具体个例对此实施例的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1