CN115840894A - 一种用于处理多维张量数据的方法及其相关产品 - Google Patents
一种用于处理多维张量数据的方法及其相关产品 Download PDFInfo
- Publication number
- CN115840894A CN115840894A CN202111033876.2A CN202111033876A CN115840894A CN 115840894 A CN115840894 A CN 115840894A CN 202111033876 A CN202111033876 A CN 202111033876A CN 115840894 A CN115840894 A CN 115840894A
- Authority
- CN
- China
- Prior art keywords
- abstract syntax
- syntax tree
- dimension
- root node
- tensor data
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本公开涉及一种用于处理多维张量数据的方法及其相关产品,其中本公开的计算设备以包括在组合处理装置中的计算处理装置来体现,该组合处理装置还可以包括通用互联接口和其他处理装置。所述计算处理装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算处理装置和其他处理装置连接,用于存储该计算处理装置和其他处理装置的数据。本披露的方案可以提升数据拷贝时的效率。
Description
技术领域
本公开一般地涉及数据处理领域。更具体地,本公开涉及一种用于处理多维张量数据的方法、设备、计算机可读存储介质、集成电路装置和板卡。
背景技术
当前,“张量数据”被广泛应用于各类应用场景中,特别是包括深度机器学习的人工智能领域的计算场景中。具体来说,张量可以用于表达一个变化量或常量,其可以具有零个或多个维度。例如,零维张量是纯量(如数值),即常量;一维张量是数值和方向组合的向量;二维张量是向量的组合(即矩阵);三维张量是数据立方体(即矩阵的组合);而四维张量可以是数据立方体的组合,以此类推。对于多维(例如大于或等于二维)张量数据来说,其维度值可以是变量,即该张量数据可以是变化量,其维度设置和基于维度设置的数据“摆放”将对数据的存储方式和读取方式产生重要的影响,并且由此显著影响计算效率和计算平台的整体性能。鉴于此,如何对多维张量数据进行维度处理以实现数据的高效读取成为亟需解决的技术问题。
发明内容
鉴于上述背景技术部分所提及的技术问题,本公开提供了一种利用处理器来处理多维张量数据的方案。通过本公开的方案,可以判断大于或等于二维的多维张量数据是否能够在某些维度上进行维度折叠。基于此,当对某些维度进行折叠后,本公开的方案可以实现对多维张量数据的降维操作,从而简化数据的读取操作并且显著提升计算平台(例如片上系统)的计算性能。基于此,本公开在如下的多个方面中提供用于处理多维张量数据的方案。
在第一方面中,本公开提供了一种用于处理多维张量数据的方法,该方法由处理器执行,并且包括获取与所述多维张量数据中的第一维度关联的第一表达式;获取与所述多维张量数据中的第二维度关联的第二表达式,其中所述第一维度和第二维度是多维张量数据的相邻维度;以及判断第一表达式与第二表达式是否相等,以便确定所述第一维度和所述第二维度是否能够进行维度折叠。
在第二方面中,本公开提供了一种用于处理多维张量数据的电子设备,包括:处理器;以及存储器,其存储有用于处理多维张量数据的程序指令,当所述程序指令由所述处理器执行时,实现上述以及下文多个实施例中所讨论的方法。
在第三方面中,本公开提供了一种计算机可读存储介质,其存储有用于处理多维张量数据的程序指令,当所述程序指令由处理器执行时,实现上述以及下文多个实施例中所讨论的方法。
在第四方面中,本公开提供了一种集成电路装置,包括:处理器,其用于执行与神经网络模型关联的计算任务;以及存储器,其存储有对与神经网络模型关联的程序指令进行编译后所获得的二进制程序指令,其中所述神经网络模型经由根据上述以及下文多个实施例中所讨论的方法进行优化,其中当所述二进制程序指令由所述处理器运行时,执行与所述神经网络模型关联的所述计算任务。
通过利用本公开上述多个方面中所公开的技术方案,可以对多维张量数据在维度方面进行处理,从而可以实现多维张量数据的维度折叠。通过这样的维度折叠,本公开的方案可以实现对多维张量数据的“降维”操作,从而可以方便在例如硬件平台的片上与片外之间的数据搬运或迁移,最大程度地发挥数据传输的带宽。由此,可以显著提升数据传输带宽的利用率,并且因而提升硬件平台运算时的整体性能。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1是示出根据本公开实施例的板卡的结构图;
图2是示出根据本公开实施例的集成电路装置的结构图;
图3是示出根据本公开实施例的单核计算装置的内部结构示意图;
图4是示出根据本公开实施例的多核计算装置的内部结构示意图;
图5是示出根据本公开实施例的处理器核的内部结构示意图;
图6是示出根据本公开实施例的软硬件架构的结构图;
图7是示出根据本公开实施例的用于处理多维张量数据的方法的流程图;
图8是示出根据本公开实施例的对多维张量数据执行维度折叠操作的示意图;
图9是示出根据本公开方案转换抽象语法树的一个实施例的示意图;
图10是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;
图11是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;
图12是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;
图13是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;
图14是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;
图15是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;
图16是示出根据本公开方案转换抽象语法树的又一个实施例的示意图;以及
图17是示出根据本公开方案的相同抽象语法树的实施例的示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例,并且所描述的多个实施例可以根据场景进行适当的组合以实现不同的应用。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
应当理解,本披露的权利要求、说明书及附图中使用的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合附图来详细描述本公开的具体实施方式。
图1示出根据本公开实施例的一种板卡10的结构示意图。可以理解的是图1所示结构和组成仅仅是一种示例,其并不用于在任何方面对本公开的方案进行限制。
如图1所示,板卡10包括芯片101,其可以是一种系统级芯片(System on Chip,SoC),也即本公开上下文中所描述的片上系统。在一个实施场景中,其可以集成有一个或多个组合处理装置。前述组合处理装置可以是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求,特别是深度学习技术大量应用在云端智能领域。云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,而本实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
进一步如图中所示,芯片101通过对外接口装置102与外部设备103相连接。根据不同的应用场景,外部设备103例如可以是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或WI-FI接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还可以包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106可以配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(Micro Controller Unit,MCU)。
图2是示出根据上述实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20可以包括计算装置201、接口装置202、处理装置203和动态随机存取存储器(Dynamic Random Access Memory,DRAM)DRAM 204。
计算装置201可以配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器。在一些操作中,其可以用于执行深度学习或机器学习方面的计算,并且还可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。在一个实施场景中,此处的计算装置可以配置成执行本公开上下文中的卷积操作或矩阵乘操作。
接口装置202可以用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据(例如本公开上下文中与神经网络运算相关的各种类型数据,包括经折叠后的张量数据),写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本公开的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。在一些实施场景中,此处的异构多核结构中的处理装置203可以对体现神经网络模型的指令代码进行编译,以形成可以由计算装置201可执行的二进制指令序列。
DRAM 204用以存储待处理的数据,并且在一个实现场景中可以是DDR内存,其大小通常可以为16G或更大,用于保存计算装置201和/或处理装置203的数据。
图3示出了计算装置201为单核的内部结构示意图。单核计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,单核计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。
控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(Instruction Fetch Unit,IFU)311及指令译码单元(InstructionDecode Unit,IDU)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。当执行本公开的具体方案时,这里的指令可以是用于执行矩阵乘或卷积运算的通用卷积指令。
运算模块32包括向量运算单元321和矩阵运算单元322。向量运算单元321可以用于执行向量运算,并且可支持向量乘、加、非线性变换等相对复杂的运算。相对而言,矩阵运算单元322负责深度学习算法的核心计算,即本公开上下文中所提到的矩阵乘和卷积运算。存储模块33可以用于存储或搬运相关数据,包括神经元存储单元(Neuron RAM,NRAM)331、参数存储单元(Weight RAM,WRAM)332、直接内存访问模块(Direct Memory Access,DMA)333。NRAM 331用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 332则用以存储深度学习网络的卷积核,即权值;DMA 333通过总线34连接DRAM 204,负责单核计算装置301与DRAM 204间的数据搬运。
图4示出了计算装置201为多核的内部结构示意图。多核计算装置41可以采用分层结构设计并且可以作为一个片上系统来运行,其可以包括至少一个集群(cluster),每个集群又包括多个处理器核。换言之,多核计算装置41是以片上系统-集群-处理器核的层次所构成的。以片上系统的层级来看,如图4所示,多核计算装置41包括外部存储控制器401、外设通信模块402、片上互联模块403、同步模块404以及多个集群405。
外部存储控制器401可以有多个(如图中示例性地示出2个),其用以响应处理器核发出的访问请求,访问外部存储设备,也即本公开上下文中的片外存储器(例如图2中的DRAM 204),从而自片外读取数据或是将数据写入。外设通信模块402用以通过接口装置202接收来自处理装置203的控制信号,启动计算装置201执行任务。片上互联模块403将外部存储控制器401、外设通信模块402及多个集群405连接起来,用以在各个模块间传输数据和控制信号。同步模块404是一种全局同步屏障控制器(Global Barrier Controller,GBC),用以协调各集群的工作进度,确保信息的同步。本公开的多个集群405是多核计算装置41的计算核心。尽管在图4中示例性地示出4个集群,然而,随着硬件的发展,本公开的多核计算装置41还可以包括8个、16个、64个、甚至更多的集群405。在一个应用场景中,集群405可以用于高效地执行深度学习算法。
以集群的层级来看,如图4所示,每个集群405可以包括多个处理器核(IPU core)406及一个存储核(MEM core)407。
处理器核406在图中示例性地示出为4个,本公开不限制处理器核406的数量,并且其内部架构如图5所示。每个处理器核406类似于图3的单核计算装置301,并且同样可以包括三个模块:控制模块51、运算模块52和存储模块53。控制模块51、运算模块52及存储模块53的功用及结构大致与控制模块31、运算模块32及存储模块33相同,此处不再赘述。需特别说明的是,存储模块53可以包括输入/输出直接内存访问模块(Input/Output DirectMemory Access,IODMA)533、搬运直接内存访问模块(Move Direct Memory Access,MVDMA)534。IODMA 533通过广播总线409控制NRAM 531/WRAM 532与DRAM 204的访存;MVDMA534则用以控制NRAM 531/WRAM 532与存储单元(SRAM)408的访存。
回到图4,存储核407主要用以存储和通信,即存储处理器核406间的共享数据或中间结果、执行集群405与DRAM 204之间的通信、集群405间彼此的通信以及处理器核406间彼此的通信等。在其他实施例中,存储核407可以具有标量运算的能力,用以执行标量运算。
存储核407可以包括静态随机存取存储器(Static Random-Access Memory,SRAM)408、广播总线409、集群直接内存访问模块(Cluster Direct Memory Access,CDMA)410及全局直接内存访问模块(Global Direct Memory Access,GDMA)411。在一个实施场景中,SRAM 408可以承担高性能数据中转站的角色。由此,在同一个集群405内不同处理器核406之间所复用的数据不需要通过处理器核406各自向DRAM 204获得,而是经SRAM 408在处理器核406间中转。进一步,存储核407仅需要将复用的数据从SRAM 408迅速分发给多个处理器核406即可,从而可以提高核间通信效率,并显著减少片上片外的输入/输出访问。
广播总线409、CDMA 410及GDMA 411则分别用来执行处理器核406间的通信、集群405间的通信和集群405与DRAM 204的数据传输。以下将分别说明。
广播总线409用以完成集群405内各处理器核406间的高速通信,此实施例的广播总线409支持核间通信方式包括单播、多播与广播。单播是指点对点(例如单一处理器核至单一处理器核)的数据传输,多播是将一份数据从SRAM 408传输到特定几个处理器核406的通信方式,而广播则是将一份数据从SRAM 408传输到所有处理器核406的通信方式,属于多播的一种特例。
CDMA 410用以控制在同一个计算装置201内不同集群405间的SRAM 408的访存。GDMA 411与外部存储控制器401协同,用以控制集群405的SRAM 408到DRAM 204的访存,或是将数据自DRAM 204读取至SRAM 408中。从前述可知,DRAM 204与NRAM 531或WRAM 532间的通信可以经由2种方式来实现。第一种方式是通过IODAM 533直接和DRAM 204与NRAM 531或WRAM 532通信;第二种方式是先经由GDMA 411使得数据在DRAM 204与SRAM 408间传输,再经过MVDMA534使得数据在SRAM 408与NRAM 531或WRAM 532间传输。尽管第二种方式可能需要更多的元件参与且数据流较长,但实际上在部分实施例中,第二种方式的带宽远大于第一种方式,因此通过第二种方式来执行DRAM 204与NRAM 531或WRAM 532间的通信可能更为有效。可以理解的是,这里所描述的数据传输方式仅仅是示例性的,并且本领域技术人员根据本公开的教导,也可以根据硬件的具体布置来灵活地选择和适用各种数据传输方式。
在其他的实施例中,GDMA 411的功能和IODMA 533的功能可以整合在同一部件中。尽管本公开为了方便描述,将GDMA 411和IODMA 533视为不同的部件,然而对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与本公开类似,即属于本公开的保护范围。进一步地,GDMA 411的功能、IODMA 533的功能、CDMA 410的功能、MVDMA 534的功能也可以由同一部件来实现。
图6示出本公开一实施例中数据流编程的软硬件架构的设计图。从图中所示可以看出,此实施例中的软硬件架构可以包括人工智能(“AI”)处理器601、驱动及操作系统602、编译器及编译语言603、库604、框架层605和应用层606。
具体来说,AI处理器601在硬件设计上同时考虑运算优化和数据搬运优化。为此,其采用定制化的运算单元来加速运算,并且使用片上存储来加速数据搬运,从而获得极高的性能和能效比。另外,为了支持各种算法优化,AI处理器601可以具有定制化的运算单元和指令集,其中指令集可以提供不同粒度的运算指令(标量、向量和/或矩阵)。进一步,当考虑算法访存特征、硬件成本、验证难度等多方面的因素,则可以采用片上存储的方式,并且优化数据搬运。在实际操作中,本公开的AI处理器可以实现超出主流GPU(图形处理单元)几十倍以上的速度。
驱动及操作系统602主要负责实现任务在AI处理器601上的调度。该调度操作可以涉及分配、释放设备内存、根据任务优先级进行调度、多设备之间的通信及同步等。对于编译后的程序,其可以通过操作系统和驱动实现待实施的任务在特定处理器上的调度执行,包括但不限于如下的操作:分配、释放设备内存、实现设备之间数据传输、维护任务队列,以及根据优先级调度任务,实现多设备间的同步和协作。
编译器及编译语言603可以是针对AI处理器601的指令集研发的一套汇编语言。在应用中,其可以将面向AI处理器601开发的深度学习算子翻译成处理器指令组合,以便于调用AI处理器601,从而高效地使用该AI处理器601。
库604可以包括运行时库614和机器学习库624。在一个实施场景中,前述库604可以使用AI处理器601的指令集并根据AI处理器601的指令集进行部分优化,以提高算子的运行速度。运行时库614可以是针对AI处理器601专门开发的一套高性能算子库,并且其可以用于完成通用处理器和人工智能处理器之间的交互。进一步,该运行时库614还可以提供一套面向人工智能处理器的接口。对于机器学习库624,其可以用于在人工智能处理器上加速各种机器学习或者深度学习算法。具体地,该机器学习库624可以提供一套高效、通用、灵活且可扩展的编程接口,其上层的机器学习应用可以直接采用各种编程框架(例如TensorFlow、Caffe、MXNet等)的编程接口,也可以使用机器学习库624提供的接口来直接编程。另外,本公开的机器学习库624可以方便硬件平台的调用,而运行时库614可以实现一些基础的常用算子,如卷积、池化等各种操作。
框架层605可以增加对面向AI处理器开发的算子的封装,并且主要是对运行时库614的算子的封装。除此之外,框架层605还可以修改相关的任务调度或内存管理等部分。应用层606可以是深度学习算法开发者提供的应用平台,并且基于原生的框架层605拓展了模型运行时对AI处理器601调用的支持。在实际应用场景中,框架层605可以实现对运行时库614中高性能算子库里算子的封装与支持,并且其主要是利用数据流图根据图优化机制构建起深度学习模型的计算过程。
以上结合图1-图6示例性地对本公开的硬件架构、软件架构以及二者的结合及其内部结构进行了详细的描述。可以理解的是上述描述仅仅是示例性的而非限制性的,并且根据不同的应用场景和硬件规格,本领域技术人员也可以对本公开前述的板卡及其内部结构进行改变,而这些改变依然落入本公开的保护范围内。基于前述的软硬件架构,下面将结合图7-图17来描述本公开所提出的维度处理方案。通过利用本公开的维度处理方案,可以提升多维张量数据的处理效率,特别是提升本公开前述软硬件架构在执行数据拷贝时的运行效率。
图7是示出根据本公开实施例的用于处理多维张量数据的方法700的流程图。结合前文的描述,本领域技术人员可以理解本公开的方法700可以适用于利用多维张量数据进行运算的场景。特别地,方法700可以应用于人工智能领域(例如深度机器学习)中对于多维张量数据的处理。在实施方面,此处的方法700可以由处理器来执行,例如在针对于神经网络模型的程序代码的编译阶段来执行,即采用图6中的编译器603来执行。
如图7所示,在步骤S702处,获取与多维张量数据中的第一维度关联的第一表达式。如前所述,这里的多维张量数据可以是二维或二维以上的张量数据,并且维度的排列可以具有一定的顺序。在一个实施例中,本公开此处的多维张量数据可以是三维或四维张量数据。例如,在四维张量数据的情形中,该张量数据可以具有NHWC的数据格式,其中N表示批处理数(Batch size),H表示张量数据的高度,W表示张量数据的宽度,而C表示张量数据的通道数,如图8中所示出的数据立方体。这里,N维度可以认为是最高维度,而C维度可以认为是最低维度,而H维度和W维度是处于最高维度和最低维度之间的中间维度,并且H维度要高于W维度。
接着,在步骤S704处,获取与多维张量数据中的第二维度关联的第二表达式。在一个实施方式中,这里的第二维度和上述的第一维度是相邻维度。仍以如图8中NHWC数据摆放格式的四维张量数据为例,其中N和H互为相邻维度,其中N维度为第一维度而H维度为第二维度。类似地,H维度和W维度互为相邻维度,其中H维度为第一维度而W维度为第二维度。同样地,W维度和C维度为相邻维度,其中W维度为第一维度而C维度为第二维度。就与各个维度关联的表达式而言,在一个实施方式中,上述的第一表达式可以是基于多维张量数据的第一维度的跨度(“stride”)所构建的表达式。对应地,上述的第二表达式可以是基于多维张量数据的第二维度的跨度(“stride”)和尺寸(“size”)所构建的表达式。
在获取第一表达式和第二表达式后,在步骤S706处,判断第一表达式和第二表达式是否相等,以便确定第一维度和第二维度是否能够进行维度折叠。举例而言,假设第一维度为W维度而第二维度为C维度,并且第一表达式基于W维度的跨度而第二表达式基于C维度的跨度和尺寸,则此处的相等可以表达为等式:Wstride=Cstride×Csize,其中Wstride表示W维度的跨度而Cstride和Csize分别表示C维度的跨度和尺寸。
以图8中进一步标示出C0~C4、W0~W4和H0-H4的张量数据(其示出为一个大的立方体,其中所包含的每个小立方体代表具有最小粒度的数据块)来说,当试图将中间维度的W维度和最低维度的C维度进行维度折叠时,可以通过等式Wstride=Cstride×Csize来确定,如上文所描述的。由于图中张量数据的Wstride=4,Cstride=1并且Csize=4,即满足前述等式,因此可以判断C维度的数据在W维度上是连续的,因此可以执行折叠操作。通过对张量数据执行W维度和C维度的折叠操作,可以令张量数据具有图8的右部801所示出的数据形状(也即“降维”后的形状),从而方便后续的数据读取,显著减小代码实现过程中的嵌套循环操作(下文将详述)。具体地,第1数据块可以对应于坐标H0 W0C0,第2数据块可以对应于坐标H0 W0C1,以此类推,第四数据块可对应于坐标H0 W0C4,即第1~第4数据块对应于张量数据中左上角沿C维度排列的四个数据块。接着,第5数据块对应于坐标H0 W1C0,第6数据块对应于坐标H0W1C1,第7数据块对应于坐标H0 W1C2,第8数据块对应于坐标H0 W1C3。以此类推,直至得到如图中所示出的沿H0、H1、H2、和H3的H维度所排列的四行数据。可以看出,此时W和C维度已经折叠成同一维数据,以便于数据的拷贝操作和运算操作。
关于上述的拷贝操作,以图8所示出的一个数据立方体(即“HWC”三维数据)为例来说。当执行数据拷贝时,从代码实现的角度来说,通常做法是执行多重嵌套循环来读取完所有的数据,其中H维度的大小确定外层的循环次数,而W维度的大小确定内层的循环次数,即构成两层嵌套循环,而C维度的大小确定每次循环所读取的数据块数目。鉴于此,图8所示的一个数据立方体通常需要执行4×4=16次的读取操作,每次读取C维度上的4个数据块。
然而,通过本公开的折叠操作,数据将以降维后的形式(或者说形状)被读写和运算,如801处示出的方式。由此,在执行数据拷贝和运算时的读取过程中,将仅执行一层循环,即仅执行最高维度(即H维度)的4次循环,而每次循环将读取折叠后的“WC”维度上16个数据块。显然,由于将两层嵌套循环转变成一次循环,本公开维度折叠后的数据读取和运算的粒度增大(从4变为16),从而令数据读取和运算更为高效,由此显著提升数据的访存性能和运算性能。进一步,由于减小了嵌套循环,因此也缩减了代码中的控制流开销。
进一步地,本公开的方案可以根据维度折叠后的张量数据生成针对所述张量数据的操作指令,该操作指令包括但不限于访存指令和运算指令,该操作指令可以是上述芯片或板卡能够运行的指令。继续回到前文,本公开维度折叠后的数据读取和运算的粒度增大(从4变为16),芯片或板卡执行该基于该维度折叠优化后的代码所生成的输入/输出(“I/O”)访存指令,可以显著降低I/O访存的次数并且由此大幅降低在I/O方面的开销。同时,芯片或板卡执行基于该维度折叠优化后的代码所生成的运算指令,可以显著地提高硬件的运算效率。
可以理解的是,经过上述针对W维度和C维度的折叠操作,可以将图中的张量立方体“降维”成一个如801处所示出的二维矩阵,以加速数据的读取并减小如上所述的嵌套循环操作,其中该矩阵的高度仍以H维度构成,而宽度则由C维度和W维度折叠后的新维度构成。根据本公开的折叠方案,仍可以判断是否对H维度和该新维度进行折叠操作。具体地,由于H维度的跨度为16,而所述新维度的跨度为1且尺寸为16,因此仍满足本公开所设定的等式要求,即H维度的数据在折叠后的“WC”维度上是连续的。鉴于此,接着对前述得到的二维矩阵进行维度折叠,从而可以得到如802处示出的一组数组形式(或形状)的张量数据,也即沿H维度排列的从数据1~数据64的数组。通过对H维度和“WC”维度的维度折叠使数据立方体以一维形式呈现,可以在数据拷贝时实现将图8中的一个数据立方体整体进行读取,即不需要嵌套循环操作。由此,就编译阶段而言,可以进一步优化代码,减小控制流方面的开销。另外,由于多维张量数据经折叠后降低了维度,也便于张量数据之间的各类运算,例如对于两个张量数据之间的加法运算,降维后的加法运算将更为简便和快速。
上面结合图8对维度折叠操作及其效果进行了描述。应当清楚的是,上文只以折叠张量数据的其中两个维度进行了说明,但本公开方案的张量维度折叠并不限于两个维度的折叠方案。在其他实施例中,若张量数据在两个以上的维度均连续,则可以在更高维度上进行折叠操作。例如,在确定图8中的W维度和C维度连续之后,可以继续判断该折叠后的(WC)维度与H维度是否连续,如果连续,则可将三维的张量数据折叠为一维数据,并基于该折叠操作生成芯片或板卡能够执行的操作指令,从而提高芯片或板卡对该张量数据的访存和运算效率。其中,折叠后的(WC)维度与H维度的是否连续的判断方法与上述W维度和C维度的判断方法一致,此处不再赘述。
回到图7,当应用于人工智能领域的深度机器学习场景时,图7所示方法可以应用在对神经网络模型进行编译操作所生成的中间表达上,其中编译操作可以通过编译器来执行。关于编译阶段的中间表达,如本领域技术人员所知,编译器通常可以分为前端和后端。在编译过程中,前端会对所输入的程序代码进行例如包括词法分析、语法分析或语义分析等各类分析,并且接着生成类似于数据结构的中间表达IR(IntermediateRepresentation)。
此后,由编译器的后端对“IR”进行优化,然后生成目标代码。在深度机器学习的场景中,这里的编译器可以是神经网络编译器,如“TVM”等。该神经网络编译器可以从神经网络编程框架(如Tensorflow、pytorch或caffe等)接收神经网络模型。接着,由编译前端首先对神经网络进行解析和重构,从而获得计算图。然后,可以利用编译器中的优化器对生成的计算图进行融合(例如多个算子的融合)或剪枝(例如去除计算图中与最终输出节点无关的边和算子)等优化操作,从而获得图形式的中间表达,也即前述的“IR”。接着,可以将该图形式的中间表达转换为与硬件相适配的中间表达。最后,可以根据该硬件相适配的中间表达来生成该硬件上能够执行的代码,也即可以由例如前述结合图6描述的AI处理器所执行的二进制指令序列。
通过利用上述神经网络模型的中间表达,方法700还可以获取根据第一表达式所构建的第一抽象语法树和根据第二表达式所构建的第二抽象语法树。如本领域技术人员所知,抽象语法树包括多个节点,并且大致可以分为根节点,其位于抽象语法树的最上层;叶子节点,其位于抽象语法树的最下层;以及子节点,其位于根节点和叶子节点之间的中间层。基于此,构建抽象语法树的过程即是先构建抽象语法树的根节点,然后向下依次构建各个子节点(如果需要的话),直到叶子节点。
通过利用中间表达来构建抽象语法树,本公开的方案可以将判断第一表达式与第二表达式是否相等转换为判断第一抽象语法树和第二抽象语法树是否相等(或者说等价)。由此,当第一抽象语法树和第二抽象语法树相等时,则可以确定第一表达式与第二表达式相等,由此可以确定前述的第一维度和第二维度能够进行维度折叠。相较而言,当第一抽象语法树和第二抽象语法树不相等时,则可以确定第一表达式与第二表达式不相等,由此可以确定第一维度和第二维度不能进行维度折叠。如前所述,当在编译阶段执行本申请的维度折叠操作时,可以减小多重嵌套循环操作,从而减小控制流的开销。进一步,由于进行了维度折叠的降维操作,针对于该降维后的张量数据所生成的I/O指令在执行数据访存时将明显提升访存效率,从而降低I/O方面的开销。
当第一表达式涉及第一维度的跨度时,在利用神经网络模型的中间表达来获取第一抽象语法树的具体实现中,本公开提出沿中间表达向前追溯获取所述第一维度的跨度的计算过程(其也是一个表达式)。在向前追溯期间,可以基于计算过程来构建第一抽象语法树的根节点以及前述根节点下的叶子节点或者根节点下的子节点和叶子节点。类似地,当第二表达式涉及第二维度的跨度和尺寸时,获取第二抽象语法树可以包括沿所述神经网络模型的中间表达向前追溯获取第二维度的跨度和尺寸的计算过程。同样地,在向前追溯期间,可以基于计算过程来构建第二抽象语法树的根节点以及根节点下的叶子节点或者根节点下的子节点和叶子节点。如本领域技术人员所知,抽象语法树中的每个节点可以用于表示程序代码中的常量或变量。前述变量可以是静态单赋值(“Static Single Assignment”,SSA)的。在此基础上,具体到本公开的方案,根节点和子节点可以表示各自关联的SSA值和获得该SSA值所需要执行的运算,则叶子节点表示追溯到停止时的SSA值。对于具有子节点的节点来说,子节点进一步可以表示执行运算所需要的操作数。本公开的方案中,语法树中常量或变量可以具有一个预先设定的系数(“coefficient”),该系数用于表示当前节点参与其父节点计算时所需乘以的系数。
在一些实施场景中,为了加快追溯过程和建立抽象语法树,本公开提出在一些情形发生时则停止追溯过程。例如,当沿中间表达追溯至内核函数(“kernel”)的入口参数时或者沿中间表达追溯至特定的运算时。就内核函数而言,在不同的场景中,其可以表示神经网络模型的计算过程或算子(例如卷积算子)的计算过程,而入口参数可以是计算过程所需输入的参数。就特定的运算而言,假设本公开的方案仅支持计算过程中所涉及的例如加、减和乘运算时,则当追溯到例如针对维度或步长的具体运算,则此时可以停止追溯,并且将停止追溯时的变量用叶子节点来表示,也即得到抽象语法树的最低层节点。
当停止追溯时,抽象语法树的构建也即完成。此后,可以将得到的第一抽象语法树和第二抽象语法树进行比较,以判断二者是否相同。如前所述,第一抽象语法树或第二抽象语法树可以是由节点构成的分层结构,因此判断第一抽象语法树和第二抽象语法树是否相同可以是逐层地判断第一抽象语法树和第二抽象语法树是否相同。附加地或替代地,还可以通过判断第一抽象语法树和第二抽象语法树的前预定数目的层是否相同来确定二者是否相同。例如,当前述的两棵抽象语法树由于追溯的特别深从而导致抽象语法树的层数较多时,此时对这样的两棵抽象语法树进行判断将造成明显的时间成本。为此,除了对两棵抽象语法树进行预处理(例如转换,稍后将结合附图描述)以外,本公开提出只对两棵抽象语法树的前若干个层(例如前两层或前三层)进行比对和判断,从而简化两棵抽象语法树的比对操作。
就具体的判断操作而言,在一个实施例中,判断第一抽象语法树和第二抽象语法树是否相同可以包括判断第一抽象语法树的第一根节点和所述第二抽象语法树的第二根节点是否具有相同的运算类型。当二者具有相同的运算类型时,则还需要判断第一根节点下的所有子节点和叶子节点与第二根节点下的所有子节点和叶子节点是否彼此相同或者等价。如上文所述,抽象语法树可以呈分层的结构,因此在比较第一抽象语法树和第二抽象语法树时,可以逐层地判断各个子节点和位于最低层的叶子节点是否相同或者等价。当第一抽象语法树和第二抽象语法树的所有节点都相同或者等价时,则可以认定第一抽象语法树和第二抽象语法树是相同的抽象语法树,并且由此确定第一维度和第二维度可以进行维度折叠,即将第一维度和第二维度上的数据摆放在同一个维度上。对于层数不同的两个抽象语法树或者经本公开下文的转换操作处理后层数仍不同的两个抽象语法树,则可以认定第一表达式和第二表达式是不同的,从而由此确定第一维度和第二维度并不能进行维度折叠。进一步,由于无法维度折叠,张量数据也将无法以“降维”后的形式来表达、读写和运算。
以上结合图7对本公开的维度折叠方案进行了详细的描述。可以理解的是,当通过判断第一抽象语法树和第二抽象语法树是否相同来确定是否执行第一维度和第二维度的折叠时,对于抽象语法树的进一步处理就显得尤为重要。为此,本公开提出对构建得到的第一抽象语法树和第二抽象语法树进行各种类型的转换,以便对基于转换后的、具有最简形式的抽象语法树来进行判断。在本公开的上下文中,最简形式的抽象语法树通常最多具有从上到下排列的三层,即树根层-中间层(包括表示加法或乘法运算的子节点)-叶子节点层。在一些场景中,转换后的抽象语法树仅有两层,即没有处于中间层的子节点。可以理解的是,本公开的如下转换操作仅仅是示例性的和可选择性的,本公开的折叠操作并不受其限制。例如,对于构建的、初始即具有前述最简形式的抽象语法树,则可以不进行如下的转换操作。又例如,对于经构建后无法比较的两个抽象语法树(如层数不同且无法进行如下转换操作进行化简的),则本公开可以直接认定第一表达式和第二表达式并不相同。由此,可以直接判断第一维度和第二维度不具有可折叠性,也即无法折叠和如前所述的连续读取,即仍需循环嵌套读取。下面将结合图9-图16来描述本公开对获取的抽象语法树进行转换操作的不同实施例。
图9是示出在转换抽象语法树的过程中,将减法运算转换为加法运算,并且将乘法运算下移而将加法运算上移的场景。为了实现将减法运算转换为加法运算,可以令节点的系数为-1(默认为1),这里系数可以表示当前节点参与父节点计算时所要乘的值。在该情形下,抽象语法树中将仅存在加法和乘法运算,从而有利于后续的判断操作。具体来说,在仅存在加法和乘法运算的两个表达式中,如果两个表达式是相等的,则将其转换成加法形式后(例如通过将乘法结合律展开),两个表达式的各个项将能对应上,由此方便对两个表达式是否相同进行判断。
以图9中左部所示出的抽象语法树为例,其表示“(a+b)×(c+d)”的表达式。通过将乘法结合律进行展开,可以得到“ac+ad+bc+bd”的表达式,而与之对应的抽象语法树可以如图9右部所示。可以看出,通过转换操作,可以将表达乘法运算(如图9左部的根节点所示)的抽象语法树转换成表达加法运算(如图9右部的根节点所示)的抽象语法树。概括来说,图9所示转换操作即是将乘法运算对应的根节点或子节点向抽象语法树(如本公开的第一抽象语法树和/或第二抽象语法树)的下层方向移动,并且将加法运算对应的子节点和/或叶子节点向抽象语法树的上层方向移动。
图10和图11是示出在转换抽象语法树的过程中,将具有相同运算类型的父节点和子节点进行合并的场景。
如图10左部所示,该抽象语法树具有表示加法运算的根节点以及两个执行加法运算的子节点。鉴于运算类型相同,因此可以将该根节点和两个子节点进行合并,从而得到图10右部所示出的抽象语法树。从抽象语法树所表示的表达式来看,图中所示例子的转换操作也即是将表达式“(a+b)+(c+d)”转换成表达式“a+b+c+d”。
如图11左部所示,该抽象语法树具有表示加法运算的根节点和分别表示加法运算和乘法运算的两个子节点。与图10类似,鉴于根节点和左子节点表示相同的加法运算,因此可以将该左子节点和根节点进行合并,从而将叶子节点所表示的变量a和b向上层移动;由此,得到如图11的右部所示出的抽象语法树。从抽象语法树所表示的表达式来看,图中所示例子的转换操作也即是将表达式“(a+b)+(c×d)”转换成表达式“a+b+(c×d)”。
通过上述的示例性合并操作,转换后的抽象语法树通常最多具有从上到下排列的三层,即树根层-中间层(包括表示加法或乘法运算的子节点)-叶子节点层。在一些场景中,转换后的抽象语法树仅有两层,即没有处于中间层的子节点。在该场景中,抽象语法树中的根节点直接和叶子节点相连。概括来说,图10和图11所示转换操作即是确定抽象语法树中是否存在运算类型相同的根节点和子节点,以及响应于存在运算类型相同的根节点和子节点,将根节点和子节点进行合并。
在一个场景中,本公开还提出对抽象语法树执行化简操作,具体为同类项的化简操作。这里,同类项可以是抽象语法树中表示立即数、立即数乘以变量和/或变量形式的节点。例如,图12示出了对表示立即数的节点的化简操作,也即将图12左部抽象语法树中表示7、4和2的叶子节点化简变成图12右部抽象语法树中表示立即数13的节点,从而将抽象语法树进行化简。类似地,图13示出了对表示立即数乘以变量的节点的化简操作。具体地,通过将图13左部抽象语法树中的表示“a×3”的节点与表示变量“a”的节点进行化简,可以得到图13右部包括表示“4a”的节点与根节点连接的抽象语法树。进一步,图14示出了对表示变量的节点进行化简操作,即将图14左部抽象语法树中的表示a、b和-a的节点进行合并,从而得到如图14右部所示出的抽象语法树,其中表示“b”的叶子节点直接与根节点相连。
在一些场景中,如果子节点的数目相对较多,则为了找到上述的同类项进行合并,可以针对抽象语法树中的节点来生成基于特征的哈希值,并且根据生成的哈希值来进行排序。当出现相同的哈希值时,则可以认为节点具有相同的同类项,从而可以通过合并来简化抽象语法树。以图13为例,对图13中的节点执行基于特征的哈希运算,由于不考虑系数,因此“3a”和“a”这两个变量具有相同的哈希值。由此判断两个节点是同类项,可以通过合并来化简,从而得到表示“4a”的节点。
通过上述的化简操作,可以将所有表示立即数的节点化简为最简单的形式,并且还可以将所有的同类项进行合并,从而可以得到最多只有三层的抽象语法树。在一些场景中,对抽象语法树的转换还可以包括将其中的分支进行消除,下面将结合图15和图16来此情形进行描述。
图15左部的抽象语法树示出了表示“x”和“y”变量的节点通过根节点的加法运算相连。当“y”节点的系数为0时,则表示该分支经过化简后完全被消除了,因此可以得到如图15右部所示出的抽象语法树。图16左部的抽象语法树示出了表示“c”变量的叶子节点通过乘法运算的子节点与根节点相连。由于对于表示乘法运算的子节点来说,表示“c”变量的叶子节点是其唯一的子节点,因此可以将该分支消除,从而得到如图16右部所示出的抽象语法树。
以上结合图9-图16对本公开就抽象语法树执行的转换操作进行了描述。在一些场景中,可以基于转换化的第一抽象语法树和第二抽象语法树来进行比对判断,以便通过二者的相同与否来确定第一维度和第二维度是否可以进行折叠。下面将结合图17对本公开关于如何判断两个抽象语法树为相同的抽象语法树进行描述。
假定图17上部是本公开上下文中的第一抽象语法树,其可以是沿神经网络模型的中间表达向前追溯获取第一维度(例如前述的W维度)的跨度的计算过程期间所构建的。相对应地,图17下部是本公开上下文的第二抽象语法树,其可以是沿神经网络模型的中间表达向前追溯获取第二维度(例如前述的C维度)的跨度和尺寸的计算过程期间所构建的。通过判断图17中的第一抽象语法树和第二抽象语法树相同,即可以推断出产前述的等式Wstride=Cstride×Csize成立,从而判断出第一维度和第二维度是连续的,二者可以执行维度折叠操作以转换到一个维度上。
从图17中所示可以看出,第一抽象语法树可以代表“(a×b)+(c×d)+(e×f×g)+(-h)”的表达式(其例如等价于Wstride),而第二抽象语法树可以代表“(-h)(b×a)+(c×d)+(e×f×g)”(其例如等价于“Cstride×Csize”)的表达式。由于第一抽象语法树和第二抽象语法树在第二层和第三层上还存在差异,在一个实施场景中,如前所述,本公开提出利用基于指纹的哈希运算来确定第一根节点下的所有子节点和第二根节点下的所有子节点是否彼此等价。具体来说,可以对第一根节点和第二根节点下的所有子节点所表示的变量分别执行基于指纹的哈希运算。接着,可以对哈希运算的运算结果进行排序。最后,可以将排序后第一根节点和第二根节点下具有相同运算结果的子节点判断为彼此等价。对于基于指纹的哈希运算来说,抽象语法树中的某个节点的哈希值就等于与其相连的所有子节点的哈希值与各自系数乘积后的和。对于是常量的子节点,其哈希值就是其本身,而对于叶子节点来说,其哈希值是其保存的操作数的指针值。就如图17所示例子来说,当第一抽象树和第二抽象树中连接根节点并代表“(a×b)”、“(c×d)”、“(e×f×g)”和“-h”的四个子树的哈希值都相同时,则可以判断两棵抽象语法树相同。由此,可以确定与两棵抽象语法树关联的第一维度和第二维度是可以折叠的。
上述实施例描述了单个张量数据的维度折叠过程,在本公开的一种实施方式中,该张量数据可以是某一操作涉及的数据。在本公开折叠方案的一个应用场景中,当参与操作(“op”)的数据涉及两个以上的多维张量数据,且两个以上的多维张量数据具有各自对应维度是可折叠时,则为了操作的正确执行,两个以上多维张量数据的折叠方式相同。其中,该操作包括但不限于运算操作(如加减乘除等四则运算操作、卷积操作、激活操作、全连接操作等等)和访存操作(如拷贝操作)。同一操作中每个多维张量数据是否能够进行维度折叠可以参照上述实施例。
例如,当操作是加法运算(即add算子),且加法运算具有两个操作数,两个操作数分别为A和B两个张量数据,A和B两个张量数据都具有HWC的数据格式,则当将A张量数据折叠为H*(WC)的形状时,则B张量数据也必须折叠成H*(WC)的形状,以便执行加法运算。否则,当仅对A张量数据进行维度折叠而B张量数据未进行维度折叠,则由于加法运算的输入数据发生变化(此例中的A张量数据的形状变化造成的数据读取变化)而造成计算无法进行或发生错误。之后,在对上述两个操作数进行相同的维度折叠之后,可以生成该操作对应的操作指令。该操作指令可以是人工智能处理器能够直接执行的操作指令,在人工智能处理器执行该操作指令时,可以以折叠后的张量数据为粒度对张量数据进行读取和运算,从而提高了该张量数据的处理效率。
再例如,当操作是拷贝操作(即copy算子)时,为了实现正确的拷贝操作,源数据和拷贝操作得到的目标数据也需要具有相同的折叠方式。假设该拷贝操作用于将A张量数据从片外存储空间DDR拷贝至片上存储空间。其中,A张量数据是存储在DDR上的源数据且具有4*3*2(对应于HWC维度)的数据形状,当将其拷贝至片上存储空间时,则执行copy(4*3*2->4*3*2),其中“->”用于指示数据拷贝的方向,“->”左侧的“4*3*2”代表位于DDR上的源数据,“->”右侧的“4*3*2”代表位于片上的目标数据。当源数据“4*3*2”折叠为“4*6”的数据形状时,则目标数据也同样需要折叠为“4*6”的数据形状,由此使得DDR上的源数据和片上的目标数据解析数据的方式一致,从而实现数据拷贝操作。进一步可以生成该拷贝操作对应的访存指令,在人工智能处理器执行该操作指令时,可以以折叠后的张量数据为粒度对张量数据进行读取,从而提高了该张量数据的访存效率。
以上结合附图对本公开的方案进行了详细的描述。根据不同的应用场景,本披露的电子设备或集成电路装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或集成电路装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或集成电路装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或集成电路装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或集成电路装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于U盘、闪存盘、只读存储器(“Read Only Memory”,简写为ROM)、随机存取存储器(“Random Access Memory”,简写为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如CPU、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(“Resistive Random Access Memory”,简写为RRAM)、动态随机存取存储器(“DynamicRandom Access Memory”,简写为DRAM)、静态随机存取存储器(“Static Random AccessMemory”,简写为SRAM)、增强动态随机存取存储器(“Enhanced Dynamic Random AccessMemory”,简写为“EDRAM”)、高带宽存储器(“High Bandwidth Memory”,简写为“HBM”)、混合存储器立方体(“Hybrid Memory Cube”,简写为“HMC”)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款A1.一种用于处理多维张量数据的方法,该方法由处理器执行,并且包括:
获取与所述多维张量数据中的第一维度关联的第一表达式;
获取与所述多维张量数据中的第二维度关联的第二表达式,其中所述第一维度和第二维度是多维张量数据的相邻维度;以及
判断所述第一表达式与所述第二表达式是否相等,以便确定所述第一维度和所述第二维度是否能够进行维度折叠。
条款A2.根据条款A1所述的方法,还包括:
获取根据所述第一表达式构建的包含节点的第一抽象语法树;
获取根据所述第二表达式构建的包含节点的第二抽象语法树;以及
通过判断所述第一抽象语法树和第二抽象语法树是否相同来判断所述第一表达式与所述第二表达式是否相等。
条款A3.根据条款A2所述的方法,其中所述第一表达式基于神经网络模型中的多维张量数据的第一维度的跨度,而所述第二表达式基于所述神经网络模型中的多维张量数据的第二维度的跨度和尺寸。
条款A4.根据条款A3所述的方法,其中获取所述第一抽象语法树包括:
沿所述神经网络模型的中间表达向前追溯获取所述第一维度的跨度的计算过程;以及
在所述向前追溯期间,基于所述计算过程构建:
所述第一抽象语法树的根节点;以及
所述根节点下的叶子节点或者所述根节点下的子节点和叶子节点。
条款A5.根据条款A3所述的方法,其中获取所述第二抽象语法树包括:
沿所述神经网络模型的中间表达向前追溯获取所述第二维度的跨度和尺寸的计算过程;以及
在所述向前追溯期间,基于所述计算过程来构建:
所述第二抽象语法树的根节点;以及
所述根节点下的叶子节点或者所述根节点下的子节点和叶子节点。
条款A6.根据条款A4或A5所述的方法,还包括响应于追溯至发生如下情形之一时,停止所述向前追溯:
沿所述中间表达追溯至内核函数的入口参数时;或者
沿所述中间表达追溯至特定的运算时。
条款A7.根据条款A4或A5所述的方法,其中在判断所述第一抽象语法树和第二抽象语法树是否相同前,所述方法还包括:
对所述第一抽象语法树或第二抽象语法树进行转换,以便转换后的第一抽象语法树和第二抽象语法树适于所述判断。
条款A8.根据条款A7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换包括:
将乘法运算对应的根节点或子节点向所述第一抽象语法树或第二抽象语法树的下层方向移动;以及
将加法运算对应的子节点和/或叶子节点向所述第一抽象语法树或第二抽象语法树的上层方向移动。
条款A9.根据条款A7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换包括:
确定所述第一抽象语法树或第二抽象语法树中是否存在运算类型相同的根节点和子节点;以及
响应于存在运算类型相同的根节点和子节点,将所述根节点和子节点进行合并。
条款A10.根据条款A7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换还包括对所述第一抽象语法树或第二抽象语法树执行化简操作。
条款A11.根据条款A10所述的方法,其中所述化简操作包括对第一抽象语法树或第二抽象语法树执行以下之一的化简操作:
对表示立即数的多个节点执行合并;
对表示立即数乘以变量和所述变量的多个节点执行合并;以及
对表示多个相同变量的多个节点进行合并。
条款A12.根据条款A11所述的方法,其中在执行合并中,所述方法包括:
对所述第一抽象语法树或第二抽象语法树中的节点所表示的变量执行基于特征的哈希运算;
对所述哈希运算的运算结果进行排序;以及
对排序后具有相同运算结果的节点进行合并。
条款A13.根据条款A7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换还包括:
消除所述第一抽象语法树或第二抽象语法树中系数为0的分支;和/或
消除所述第一抽象语法树或第二抽象语法树中仅有一个节点的单分支。
条款A14.根据条款A8-A13的任意一项所述的方法,其中所述第一抽象语法树或第二抽象语法树是由节点构成的分层结构,其中判断所述第一抽象语法树和第二抽象语法树是否相同包括针对于转换后的第一抽象语法树和/或第二抽象语法树:
逐层地判断所述第一抽象语法树和第二抽象语法树是否相同;或者
判断所述第一抽象语法树和第二抽象语法树的前预定数目的层是否相同。
条款A15.根据条款A14所述的方法,其中判断所述第一抽象语法树和第二抽象语法树是否相同包括:
判断所述第一抽象语法树的第一根节点和所述第二抽象语法树的第二根节点是否具有相同的运算类型;以及
判断所述第一根节点下的所有子节点和叶子节点与所述第二根节点下的对应所有子节点和叶子节点是否彼此相同或等价。
条款A16.根据条款A15所述的方法,其中判断所述第一根节点下的所有子节点与所述第二根节点下的所有子节点是否彼此等价包括:
对所述第一根节点和第二根节点下的所有子节点所表示的变量分别执行基于指纹的哈希运算;
对所述哈希运算的运算结果进行排序;以及
将排序后第一根节点和第二根节点下具有相同运算结果的子节点判断为彼此等价。
条款A17.根据条款A14所述的方法,还包括:
响应于判断所述第一表达式和所述第二表达式相等,确定所述第一维度和所述第二维度能够进行维度折叠;
对所述多维张量数据的所述第一维度和第二维度执行维度折叠;以及
生成输入/输出指令,所述输入/输出指令用于对维度折叠后所获得的张量数据执行输入/输出操作。
条款A18.一种用于处理多维张量数据的设备,包括:
处理器;以及
存储器,其存储有用于处理多维张量数据的程序指令,当所述程序指令由所述处理器执行时,实现根据条款A1-A17的任意一项所述的方法。
条款A19.一种计算机可读存储介质,其存储有用于处理多维张量数据的程序指令,当所述程序指令由处理器执行时,实现根据条款A1-A17的任意一项所述的方法。
条款A20.一种集成电路装置,包括:
处理器,其用于执行与神经网络模型关联的计算任务;以及
存储器,其存储有对与神经网络模型关联的程序指令进行编译后所获得的二进制程序指令,其中所述神经网络模型经由根据条款A1-A17的任意一项所述的方法进行优化,
其中当所述二进制程序指令由所述处理器运行时,执行与所述神经网络模型关联的所述计算任务。
条款A21.一种板卡,包括根据条款A20所述的集成电路装置。
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
Claims (21)
1.一种用于处理多维张量数据的方法,该方法由处理器执行,并且包括:
获取与所述多维张量数据中的第一维度关联的第一表达式;
获取与所述多维张量数据中的第二维度关联的第二表达式,其中所述第一维度和第二维度是多维张量数据的相邻维度;以及
判断所述第一表达式与所述第二表达式是否相等,以便确定所述第一维度和所述第二维度是否能够进行维度折叠。
2.根据权利要求1所述的方法,还包括:
获取根据所述第一表达式构建的包含节点的第一抽象语法树;
获取根据所述第二表达式构建的包含节点的第二抽象语法树;以及
通过判断所述第一抽象语法树和第二抽象语法树是否相同来判断所述第一表达式与所述第二表达式是否相等。
3.根据权利要求2所述的方法,其中所述第一表达式基于神经网络模型中的多维张量数据的第一维度的跨度,而所述第二表达式基于所述神经网络模型中的多维张量数据的第二维度的跨度和尺寸。
4.根据权利要求3所述的方法,其中获取所述第一抽象语法树包括:
沿所述神经网络模型的中间表达向前追溯获取所述第一维度的跨度的计算过程;以及
在所述向前追溯期间,基于所述计算过程构建:
所述第一抽象语法树的根节点;以及
所述根节点下的叶子节点或者所述根节点下的子节点和叶子节点。
5.根据权利要求3所述的方法,其中获取所述第二抽象语法树包括:
沿所述神经网络模型的中间表达向前追溯获取所述第二维度的跨度和尺寸的计算过程;以及
在所述向前追溯期间,基于所述计算过程来构建:
所述第二抽象语法树的根节点;以及
所述根节点下的叶子节点或者所述根节点下的子节点和叶子节点。
6.根据权利要求4或5所述的方法,还包括响应于追溯至发生如下情形之一时,停止所述向前追溯:
沿所述中间表达追溯至内核函数的入口参数时;或者
沿所述中间表达追溯至特定的运算时。
7.根据权利要求4或5所述的方法,其中在判断所述第一抽象语法树和第二抽象语法树是否相同前,所述方法还包括:
对所述第一抽象语法树或第二抽象语法树进行转换,以便转换后的第一抽象语法树和第二抽象语法树适于所述判断。
8.根据权利要求7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换包括:
将乘法运算对应的根节点或子节点向所述第一抽象语法树或第二抽象语法树的下层方向移动;以及
将加法运算对应的子节点和/或叶子节点向所述第一抽象语法树或第二抽象语法树的上层方向移动。
9.根据权利要求7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换包括:
确定所述第一抽象语法树或第二抽象语法树中是否存在运算类型相同的根节点和子节点;以及
响应于存在运算类型相同的根节点和子节点,将所述根节点和子节点进行合并。
10.根据权利要求7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换还包括对所述第一抽象语法树或第二抽象语法树执行化简操作。
11.根据权利要求10所述的方法,其中所述化简操作包括对第一抽象语法树或第二抽象语法树执行以下之一的化简操作:
对表示立即数的多个节点执行合并;
对表示立即数乘以变量和所述变量的多个节点执行合并;以及
对表示多个相同变量的多个节点进行合并。
12.根据权利要求11所述的方法,其中在执行合并中,所述方法包括:
对所述第一抽象语法树或第二抽象语法树中的节点所表示的变量执行基于特征的哈希运算;
对所述哈希运算的运算结果进行排序;以及
对排序后具有相同运算结果的节点进行合并。
13.根据权利要求7所述的方法,其中对所述第一抽象语法树或第二抽象语法树进行转换还包括:
消除所述第一抽象语法树或第二抽象语法树中系数为0的分支;和/或
消除所述第一抽象语法树或第二抽象语法树中仅有一个节点的单分支。
14.根据权利要求8-13的任意一项所述的方法,其中所述第一抽象语法树或第二抽象语法树是由节点构成的分层结构,其中判断所述第一抽象语法树和第二抽象语法树是否相同包括针对于转换后的第一抽象语法树和/或第二抽象语法树:
逐层地判断所述第一抽象语法树和第二抽象语法树是否相同;或者
判断所述第一抽象语法树和第二抽象语法树的前预定数目的层是否相同。
15.根据权利要求14所述的方法,其中判断所述第一抽象语法树和第二抽象语法树是否相同包括:
判断所述第一抽象语法树的第一根节点和所述第二抽象语法树的第二根节点是否具有相同的运算类型;以及
判断所述第一根节点下的所有子节点和叶子节点与所述第二根节点下的对应所有子节点和叶子节点是否彼此相同或等价。
16.根据权利要求15所述的方法,其中判断所述第一根节点下的所有子节点与所述第二根节点下的所有子节点是否彼此等价包括:
对所述第一根节点和第二根节点下的所有子节点所表示的变量分别执行基于指纹的哈希运算;
对所述哈希运算的运算结果进行排序;以及
将排序后第一根节点和第二根节点下具有相同运算结果的子节点判断为彼此等价。
17.根据权利要求14所述的方法,还包括:
响应于判断所述第一表达式和所述第二表达式相等,确定所述第一维度和所述第二维度能够进行维度折叠;
对所述多维张量数据的所述第一维度和第二维度执行维度折叠;以及
根据所述维度折叠后的张量数据生成针对所述张量数据的操作指令。
18.一种用于处理多维张量数据的电子设备,包括:
处理器;以及
存储器,其存储有用于处理多维张量数据的程序指令,当所述程序指令由所述处理器执行时,实现根据权利要求1-17的任意一项所述的方法。
19.一种计算机可读存储介质,其存储有用于处理多维张量数据的程序指令,当所述程序指令由处理器执行时,实现根据权利要求1-17的任意一项所述的方法。
20.一种集成电路装置,包括:
处理器,其用于执行任务,所述任务涉及多维张量数据;以及
存储器,其存储有编译后所获得的二进制程序指令,其中所述二进制程序指令基于权利要求1-17的任意一项所述的方法对张量数据进行优化后获得,当所述二进制程序指令由所述处理器运行时,执行与所述任务。
21.一种板卡,包括根据权利要求20所述的集成电路装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111033876.2A CN115840894A (zh) | 2021-09-03 | 2021-09-03 | 一种用于处理多维张量数据的方法及其相关产品 |
PCT/CN2022/116879 WO2023030507A1 (zh) | 2021-09-03 | 2022-09-02 | 编译优化方法、装置、计算机设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111033876.2A CN115840894A (zh) | 2021-09-03 | 2021-09-03 | 一种用于处理多维张量数据的方法及其相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115840894A true CN115840894A (zh) | 2023-03-24 |
Family
ID=85575103
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111033876.2A Pending CN115840894A (zh) | 2021-09-03 | 2021-09-03 | 一种用于处理多维张量数据的方法及其相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115840894A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116737763A (zh) * | 2023-08-16 | 2023-09-12 | 腾讯科技(深圳)有限公司 | 结构化查询语句执行方法、装置、计算机设备、存储介质 |
-
2021
- 2021-09-03 CN CN202111033876.2A patent/CN115840894A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116737763A (zh) * | 2023-08-16 | 2023-09-12 | 腾讯科技(深圳)有限公司 | 结构化查询语句执行方法、装置、计算机设备、存储介质 |
CN116737763B (zh) * | 2023-08-16 | 2023-11-21 | 腾讯科技(深圳)有限公司 | 结构化查询语句执行方法、装置、计算机设备、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12026606B2 (en) | Fractal calculating device and method, integrated circuit and board card | |
CN110717584A (zh) | 神经网络编译方法、编译器、计算机设备及可读存储介质 | |
WO2023071238A1 (zh) | 计算图的编译、调度方法及相关产品 | |
CN112070202B (zh) | 一种融合图的生成方法、生成装置和计算机可读存储介质 | |
CN112463159B (zh) | 编译方法、装置、电子设备和存储介质 | |
CN112465133B (zh) | 控制流多核并行方法、计算机设备和存储介质 | |
WO2024149112A1 (zh) | 卷积算子的编译方法及相关产品 | |
WO2023030507A1 (zh) | 编译优化方法、装置、计算机设备以及存储介质 | |
CN113469336A (zh) | 优化神经网络模型的编译方法、执行方法及相关产品 | |
CN115840894A (zh) | 一种用于处理多维张量数据的方法及其相关产品 | |
CN114385867A (zh) | 一种对多维数据进行处理的设备、方法和计算机程序产品 | |
CN113469337B (zh) | 用于优化神经网络模型的编译方法及其相关产品 | |
CN111831333B (zh) | 用于智能处理器的指令分解方法、装置及电子设备 | |
CN116185377A (zh) | 计算图的优化方法、计算装置及相关产品 | |
CN113469326A (zh) | 在神经网络模型中执行剪枝优化的集成电路装置及板卡 | |
CN114281561A (zh) | 处理单元、用于处理单元的同步方法及相应产品 | |
CN115329923A (zh) | 用于神经网络模型的编译方法和相关产品 | |
CN115756722A (zh) | 编译优化方法、装置、计算机设备以及存储介质 | |
CN113469365B (zh) | 基于神经网络模型的推理和编译方法及其相关产品 | |
CN115543328A (zh) | 对运行于人工智能芯片上的神经网络模型进行转换的编译方法及其相关产品 | |
WO2022135599A1 (zh) | 融合分支结构的装置、板卡、方法及可读存储介质 | |
WO2022063183A1 (zh) | 执行神经网络计算的装置、板卡、方法及可读存储介质 | |
CN115545180A (zh) | 对运行于人工智能芯片上的神经网络模型进行优化的编译方法及其相关产品 | |
CN114648437A (zh) | 对图片数据进行卷积的方法、装置、存储介质以及板卡 | |
CN114298292A (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 |