CN110766147B - 神经网络编译器架构及编译方法 - Google Patents
神经网络编译器架构及编译方法 Download PDFInfo
- Publication number
- CN110766147B CN110766147B CN201810829009.1A CN201810829009A CN110766147B CN 110766147 B CN110766147 B CN 110766147B CN 201810829009 A CN201810829009 A CN 201810829009A CN 110766147 B CN110766147 B CN 110766147B
- Authority
- CN
- China
- Prior art keywords
- intermediate representation
- graph
- module
- neural network
- compiler
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本公开提出了一种神经网络编译器架构和方法,该编译器架构包括:计算图构建模块,用于基于输入的不同类型的模型文件构建通用的第一中间表示,其中所述第一中间表示具有图形式;计算图优化模块,用于针对所述第一中间表示进行图优化,以获得具有图形式的第二中间表示;指令生成模块,用于对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示,以及基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码。通过上述编译器架构内的模块与不同粒度和属性的多种中间表示相配合,能够以极高的可扩展性和兼容性应对各类深度学习框架和后端硬件平台,并且提供高效准确的代码优化能力。
Description
技术领域
本发明涉及深度学习领域,尤其涉及一种神经网络编译器架构及编译方法。
背景技术
神经网络(Neural Network)近年来成为图像识别领域的研究热点。经过训练后的神经网络模型,可以用于图像分类、物体识别与显著性检测等诸多领域。近年来神经网络模型呈现计算规模增加、复杂度提升的趋势,利用传统的CPU平台,已无法满足其实用性需求。因此,利用FPGA、GPU等异构计算平台进行神经网络加速器设计成为新的研究热点。其中,相较GPU平台,FPGA能够实现更高的计算能效比,同时FPGA可以快速迭代、可进行硬件重构的特性也更适应算法高速发展的要求。
将来自前端不同深度学习框架的神经网络算法转化为通用的计算图,对计算图进行优化和重构,再将优化后的计算图映射为后端硬件平台可执行的指令和机器码,便完成了算法针对硬件平台的编译。众多深度学习框架在使用的底层计算库、计算图形式、代码风格等的不同而导致其在运算结果的精度和运算速度上都存在着巨大的差异,并且除了通用处理器之外,涌现出了越来越多的异构硬件平台。若需要对M种前端深度学习框架分别进行优化,映射到N种后端硬件平台上,那么将面临着O(M*N)的工作量,有着组合爆炸的风险。
为此,需要一种能够应对灵活兼容各类前端后端的高性能神经网络编译器框架。
发明内容
为了解决上述至少一个问题,本发明提出了一种编译器架构方案,通过其内的模块与不同粒度和属性的多种中间表示相配合,能够以极高的可扩展性和兼容性应对各类深度学习框架和后端硬件平台,并且提供高效的代码优化能力。
根据本发明的一个方面,提出了一种神经网络编译器架构,包括:计算图构建模块,用于基于输入的不同类型的模型文件构建通用的第一中间表示,其中所述第一中间表示具有图形式;计算图优化模块,用于针对所述第一中间表示进行图优化,以获得具有图形式的第二中间表示;指令生成模块,用于对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示,以及基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码。
由此,通过粗粒度的第一和第二IR实现与后端硬件无关(或几乎无关)的图优化,随后通过引入细粒度的第三IR实现针对硬件的优化并方便其到最终指令码的编译。在这其中,第一IR用于与各类深度计算平台解耦,第二IR用于进行表征粗粒度图优化的结果,第三IR用于针对硬件的细粒度优化,指令码(也可称为第四IR)用于最终的硬件平台执行。
计算图构建模块可以包括:模型文件解析模块,包括各自对应于一种类型的模型文件的解析子模块,每个解析子模块用于解析对应类型的模型文件;以及计算图生成模块,基于对应解析子模块的解析结果生成所述第一中间表示。由此,能够灵活应对各类深度学习框架。
第一中间表示可以被生成为节点表示特征图,边表示为计算操作的计算图。其中,所述节点的属性可以包括如下至少一项:所述特征图的维度信息和长宽通道信息;所述边表示的计算操作可以包括如下至少一项:卷积、池化、维度变换、点加(eltwise)、反卷积、重排、非线性、批量归一化(BatchNorm)、定标(scale);所述边的属性可以包括所述计算操作的参数,并且可以包括如下至少一项:卷积核尺寸、扩充边缘(pad)、步长(stride)、分组、扩张(dilation)。采用本发明特殊构造的第一IR,有利于后续的内存优化,尤其适用于数据存取所需时钟周期远大于数据执行的神经网络并行计算平台。
计算图优化模块可以包括如下至少一个优化模块:剪枝模块,用于去除不需要的或对计算结果无影响的操作;融合模块,用于进行计算操作融合,以减少所述指令码在执行时所述硬件平台与所述外部存储器数据交互次数;以及分解模块,用于进行计算操作分解,以将分解的计算操作与前后的计算操作相融合或实现对分解的计算操作的处理。由此,能够从计算图的全局进行图优化。
第二中间表示可以是节点表示特征图,边可以表示多种计算操作合并的超图。第二中间表示可由基于scheme语言设计的领域专用语言(DSL,Domain-Specific Language)表示。
优选地,计算图优化模块进一步用于设置能够进行层融合的子图模板,获取针对所述第一中间表示的计算图的至少一种子图匹配方案,并基于子图匹配方案将所述计算图重构成经融合的第二中间表示。子图模板可以是基于上述硬件平台获得的。针对多种计算操作合并方式,为所述第一中间表示的各个计算操作合并方式对应的输入和输出节点之间添加对应于该计算操作合并方案执行代价的边,并且基于节点间的最短路径问题求取最优计算操作合并方案。由此,能够以较小的计算代价实现高效准确的图优化。
指令生成模块可基于所述硬件平台进行调度优化,以确定如下至少一项:针对特征图和/或权重的分块执行方案;以及执行指令间的指令依赖关系。其中,第三中间表示可以由将每个计算操作编写为多重循环的语言表示。指令生成模块将所述分块执行方案和/或所述指令依赖关系经由所述第三中间表示映射到所述指令码。由此,通过引入第三中间表示实现针对调度的高效优化,上述优化能够充分考虑实施硬件的属性,从而进一步提升指令执行效率。
优选地,本发明的编译器架构还可以包括:神经网络前传模块,用于为所述硬件平台执行指令码的结果提供进行比对的标准答案。神经网络前传模块可以利用所述模型文件所针对的深度学习框架的至少一部分来求取所述标准答案。具体地,神经网络前传模块可以基于硬件平台对所利用的所述深度学习框架的至少一部分进行修改,以获取所述模型文件在所述硬件平台上执行的标准答案。由此,能够高效可靠为本发明的编译器架构提供的所需的参考。
硬件平台可以包括如下至少一种:基于FPGA或ASIC实现的神经网络专用计算平台;基于GPU实现的神经网络专用计算平台;以及通用计算平台。
根据本发明的另一个方面,提出了一种神经网络编译方法,包括:基于输入的不同类型的模型文件构建通用的第一中间表示,其中所述第一中间表示具有图形式;针对所述第一中间表示进行图优化,以获得具有图形式的第二中间表示;对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示;以及基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码。
优选地,第一中间表示可被生成为节点表示特征图,边表示为计算操作的计算图。节点的属性可以包括如下至少一项:所述特征图的维度信息和长宽通道信息;边表示的计算操作可以包括如下至少一项:卷积、池化、维度变换、点加(eltwise)、反卷积、重排、非线性、批量归一化(BatchNorm)、定标(scale);边的属性可以包括所述计算操作的参数,并且可以包括如下至少一项:卷积核尺寸、扩充边缘(pad)、步长(stride)、分组、扩张(dilation)。
针对所述第一中间表示进行图优化可以包括如下至少一项:去除不需要的或对计算结果无影响的操作;对计算操作进行融合,以减少所述指令码在执行时所述硬件平台与所述外部存储器数据交互次数;以及对计算操作进行分解,以将分解的计算操作与前后的计算操作相融合或实现对分解的计算操作的处理。
第二中间表示可以是节点表示特征图,边可以表示多种计算操作合并的超图。第二中间表示可由基于scheme语言设计的领域专用语言(DSL,Domain-Specific Language)表示。
计算图的优化进一步可以包括:设置用于进行层融合的子图模板;获取针对所述计算图的至少一种子图匹配方案;以及基于子图匹配方案将所述计算图重构成经层融合的第二中间表示。子图模板可以是基于所述硬件平台获得的。
计算图的优化还可以包括:在具有多个子图匹配方案的情况下,为所述第二中间表示的各节点之间添加对应于子图匹配方案执行代价的连线;以及基于节点间的最短路径问题求取最优子图匹配方案。
调度优化可以包括:基于所述硬件平台进行调度优化,以确定如下至少一项:针对特征图和/或权重的分块执行方案;以及执行指令间的指令依赖关系。第三中间表示可由将每个计算操作编写为多重循环的语言表示。相应地,指令生成步骤可以包括:将所述分块执行方案和/或所述指令依赖关系经由所述第三中间表示映射到所述指令码。
另外,本发明的编译方法也可以包括前传步骤,即,可以包括:为所述硬件平台执行指令码的结果提供进行比对的标准答案。优选地,可以利用所述模型文件所针对的深度学习框架的至少一部分来求取所述标准答案。进一步地,可以基于所述硬件平台对所利用的所述深度学习框架的至少一部分进行修改,以获取所述模型文件在所述硬件平台上执行的标准答案。
根据本发明的又一个方面,提出了一种用于神经网络的计算平台,包括:并行处理模块,用于对输入数据执行预定的并行计算处理,并产生输出数据;数据存储模块,用于缓存数据处理模块所需的输入数据或数据处理模块输出的中间数据;以及控制模块,基于按照如上任一项得到的指令码对所述数据处理模块和所述数据存储模块进行控制以执行所述神经网络计算。
根据本发明的再一个方面,提出了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上中任一项所述的方法。
根据本发明的一个方面,提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如上任何一项所述的方法。
本发明的编译器架构广义上也可被认为是编译器本身,针对编译的不同阶段,使用了粒度不一、形式不同的IR对算法进行转化和描述。第一IR能够实现与深度学习框架的解耦,并且通过节点表示特征图,边表示计算操作的特殊结构方便后续的内存优化。第二IR具有超图形式,能够通过子图模板和代价函数边的引入大幅提升图优化的效率、准确性以及硬件针对性。第三IR优选使用多重循环语言实现,能够大幅提升调度优化效率并充分考虑后端硬件特性。上述IR彼此配合,使得本发明的编译器架构能够方便地适用于各类前端框架和后端硬件实现,并且能够对指令做出高效且准确的优化。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了组成典型CNN的一系列有序运行的层。
图2示出了现有神经网络编译器的编译示意图。
图3A-3B示出了现有CNN网络的典型网络计算图结构。
图4示出了根据本发明一个实施例的神经网络编译器架构的示意图。
图5示出了根据本发明另一个实施例的神经网络编译器架构的示意图。
图6示出了图6示出了常规计算图转变为本发明的第一IR的一个例子。
图7示出了根据本发明一个实施例的神经网络编译方法的流程示意图。
图8示出了可用于实现神经网络推理的SoC的一个例子。
图9示出了根据本发明一个实施例的用于神经网络的计算平台。
图10示出了根据本发明一个实施例可用于实现上述神经网络编译方法的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
人工智能近年得到迅速发展,在图像分类、检测、视频和语音处理等领域取得良好的应用效果,并且依然具备极大的发展前景。神经网络是人工智能应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。神经网络的工作负载特征是计算和数据密集。神经网络计算所需的乘加操作通常为G数量级,例如目标检测类神经网络SSD的计算量为120G操作次数。而计算所需参数则通常为M至数百M字节数量级,例如分类神经网络VGG的参数为480M字节。
常见的人工神经网络(ANN)包括深度神经网络(DNN)、循环神经网络(RNN)与卷积神经网络(CNN)。CNN是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。以下将结合附图尤其对卷积神经网络进行一定程度的背景说明。
CNN基本概念
如图1所示,典型的CNN由一系列有序运行的层组成。
CNN模型的参数被称为“权重”(weights)。CNN的第一层读取输入图,并输出一系列的特征图(FeatureMap)。下面的层读取由上一层产生的特征图,并输出新的特征图。最后一个分类器(classifier)输出输入图可能属于某一类别的概率。CONV层(卷积层)和FC层(全连层)是CNN中两种基本层类型。CONV层后,通常有池化层(Pooling layers)。
对于CONV层,nin和nout分别代表输入和输出特征图的数量。
对于FC层,nin和nout分别代表输入和输出特征向量的长度。
CONV层(Convolutional layers,卷积层)的定义:CONV层以一系列特征图作为输入,并以卷积内核卷积获得输出特征图。
通常与CONV层相连的非线性层,即,非线性激励函数,被施加到输出特征图中的每个元素。使用的激励函数一般为ReLU函数,该层也通常称为ReLU层。
CONV层可以用表达式1表示:
其中gi,j是应用到第j个输入特征图和第i个输出特征图的卷积内核。FC层(Fully-Connected layers,全连层)的定义:FC层应用于输入特征向上的一个线性变换:
fout=Wfin+b (2)
W是一个nout×nin变换矩阵,b是偏置项。值得注意,对于FC层,输入的不是几个二维特征图的组合,而是一个特征向。因此,在表达式2中,参数nin和nout实际上对应于输入和输出特征向量的长度。
池化(pooling)层:通常与CONV层相连,用于输出每个特征图中的每个分区(subarea)的最大值或平均值。Pooling最大值可以由表达式3表示:
其中p是池化内核的大小。这种非线性的“降采样”不仅为下一层降低了特征图的大小和计算,还提供了一种平移不变性。CNN可用于前向推理过程中进行图像分类。
深度学习框架
深度学习框架通过高级编程接口为神经网络的设计、训练和验证提供了构建模块。换句话说,深度学习框架为神经网络具体算法(例如,图1所示神经网络构造)的实现提供了途径。
随着深度学习、神经网络算法的发展,出现了许多面向研究人员和开发者的顶层深度学习框架,例如Caffe、TensorFlow、MxNet和PyTorch等。开发者可以使用这些框架的DSL和API设计不同的计算图模型,实现特定的任务,例如人脸识别、图像检测、语音识别等。
在众多深度学习框架之间存在着巨大的差异,包括他们使用的底层计算库、计算图形式、代码风格等,导致他们在运算结果的精度和运算速度上都存在着巨大的差异。
例如,TensorFlow、MxNet等在框架中都以计算图的形式来表示神经网络,Caffe虽然没有使用图的形式,但是也搭建出了各个计算操作以及blob之间的依赖关系。然而这些深度学习框架使用了不同粒度的IR表示,例如,TensorFlow将卷积拆分为Padding、Dot、BiasAdd几个节点,还有Pad、Weights、Bias几个常数节点,而Caffe中仅仅是一个卷积节点。
无论使用何种深度学习框架训练得到的神经网络指令与参数,都需要经由编译器编译成后端的硬件处理器可以执行的机器码。倘若对M种前端深度学习框架分别进行优化,映射到N种后端硬件平台上,则将面临着O(M*N)的工作量,有着组合爆炸的风险。于是编译器需要抽象出一个与框架无关的中间表征方式(Intermediate Representation,即IR),既能够表示算法的所有信息,也便于后续编译器对其进行优化。换句话说,为了与深度学习计算框架解耦,需要构建出与神经网络处理器相对应的计算图结构。将来自不同深度学习平台的神经网络算法转化为通用的计算图,对计算图进行优化和重构,再将优化后的计算图映射为硬件平台的指令和机器码,便完成了算法在硬件平台的编译部分。
神经网络的编译
为了将训练之后的深度神经网络进行部署,需要使用编译器将神经网络算法编译成计算平台所能执行的二进制指令流。不同于使用如C++或Java等的高级语言开发的应用程序,神经网络算法有着自己独特的语法和结构。有鉴于此,业已出现了专用于神经网络计算的高性能计算平台以及相应的神经网络编译器。例如,一种深度神经网络编译器DNNC(Deep Neural Network Compiler)可将神经网络算法编译成为DPU(Deep LearningProcessor Unit,深度学习专用处理器)平台的优化指令流。通过解析神经网络的拓扑结构来构建与之对等的编译器内部计算图中间表示IR以及IR中的控制流和数据流信息,神经网络编译器基于IR施加各种编译优化和变换技术,在提高DPU计算性能的同时有效降低系统访存带宽和功耗需求。图2示出了现有神经网络编译器的编译示意图。如图2所示,可以将专门的神经网络算法(例如,针对经剪枝处理的CNN)送入包括编译前端、优化器和指令生成器的神经网络编译器,并生成用于神经网络计算平台(例如,DPU)的二进制指令码。
在此,“编译”指代利用编译器从一种高级的形式化方法描述的表示产生低级的面向计算平台上执行的目标代码的过程。由于硬件计算平台处理的只涉及二进制指令码,因此需要编译器将人们熟悉的高级语言描述转换成计算机可读的低级二进制代码。不同于使用C/C++等高级编程语言描述的源程序代码,神经网络需要通过描述神经网络算法的专用模型进行表示。神经网络算法包括神经网络算法的拓扑结构以及神经网络算法的参数。相比之下,神经网络拓扑结构的形式化描述所需的存储空间要远小于体量巨大的神经网络算法参数所需的存储空间。
神经网络编译器如图2所示通常包括编译前端、优化器和指令生成器。神经网络编译前端用于对输入的神经网络算法进行分析。所述分析可以包括网络拓扑结构的解析和重构。优化器用于对神经网络算法和/或在前分析生成的中间表示进行优化,优化器优化的对象是与神经网络算法对等的计算图表示。优化操作可以对上述计算图进行语义上等价的各种变换,以便后续更加有效地生成目标代码。最后,指令生成器可以基于优化后的计算图生成高效的目标代码。目标代码随后可被输入后端,尤其是如下所述的神经网络处理器,以进行对应的神经网络推理计算。
神经网络处理器的基本概念
由于卷积神经网络巨大的参数规模、庞大的计算量的特点,以及对于硬件平台稳定性和高计算能耗比的要求,常规的CPU已经无法满足神经网络的计算需求,利用FPGA、GPU、ASIC等异构计算平台,进行加速器设计成为新的研究热点。相较GPU平台,FPGA由于其低功耗特点能够获得更高的能量效率,同时FPGA可以快速迭代、可进行硬件重构的特性也更适应算法高速发展的要求。进一步地,AI芯片由定制的ASIC芯片实现,作为专为深度学习设计的处理器芯片,在运算速度、功耗、成本等方面针对深度神经网络进行了深度定制和优化,相比FPGA和GPU又有了进一步的提升。
本发明的编译器架构虽然可用于通用计算平台(即只有主机或CPU的计算平台),但更加适用于为了执行神经网络计算而被专门设计的神经网络专用处理器。本领域技术人员应当理解,本申请中所使用的术语“神经网络专用处理器”,也可简称为“神经网络处理器”或“NN处理器”。由于深度学习是神经网络技术中目前最为流行的一个技术分类,因此神经网络专用处理器可以被实现为深度学习专用处理器或深度学习处理器。但是,本领域技术人员应该明白,神经网络有各种技术分支,例如DNN和CNN(其中,DNN从深度角度,CNN从卷积角度命名,二者并不互斥),因此神经网络专用处理器也可以被实现为深度神经网络专用处理器或深度神经网络处理器(DNN处理器或CNN处理器)。也就是说,有关“深度学习处理器”或“深度神经网络处理器”在异构计算平台中的神经网络计算实现技术也在本发明的范围之内。
DPU(Deep-learning Processing Unit)是一款针对人工智能中神经网络算法的通用加速平台,其利用FPGA高并行度和低功耗的特点,实现基于卷积神经网络(以下简称CNN)进行推理。在这里,DPU可以认为是上文“深度学习处理器”或“深度神经网络处理器”或“神经网络处理器”的一个具体实现。经由本发明的编译器架构编译得到的二进制指令码可由FPGA实现的DPU执行,但本领域技术人员应该理解的是,本发明的编译器架构可以可扩展地适用于各种后端实现,诸如利用GPU的硬件结构针对其他神经网络进行推理的神经网络处理器,以及针对神经网络计算进行了深度定制和优化的ASIC芯片,例如专用的AI芯片。
网络计算图的基本概念
为了与深度学习计算框架解耦,需要构建出与神经网络处理器相对应的计算图结构。将来自不同深度学习平台的神经网络算法转化为通用的计算图,对计算图进行优化和重构,再将优化后的计算图映射为硬件平台的指令和机器码,便完成了算法在硬件平台的编译部分。由于受到不同硬件平台片上存储资源、带宽、计算资源和硬件设计等以及指令集位宽的限制,还受制于不同深度学习平台多样化的计算操作、维度变换、计算操作时参数的变化等因素,在算法到指令映射过程中,如何找到执行计算图最优的方式,换句话说,如何使得算法编译出的指令能够在硬件平台上等到高效执行,是计算平台实现需要解决的重大问题。
图3A-3B示出了现有CNN网络的典型网络计算图结构。图3A示出了Vgg网络中的基本结构。如图3A所示,无分支的网络计算图在执行最为基础的CONV(卷积操作)、ReLU(非线性操作,使用的激励函数一般为ReLU函数)和POOL(池化操作)时,由于其所需载入的特征图通常大于片上缓存的缓存能力,因此硬件执行时需要在DDR和片上缓存(例如,实现为BRAM,即,块RAM)之间反复的数据搬运。图3B示出了ResNet网络中的基本结构。如图3B所示,有分支的网络计算图还引入了用于将多个卷积层相加合并的eltwise层以及用于将各输入层的数据按照通道级联而成新的一层的CONCAT(级联)层。同样地,图中的网络计算图在后端硬件实现时仍然需要DDR和BRAM之间的反复数据搬运。应该理解的是,上文列举的“Vgg”和“ResNet”都是现有技术中流行的CNN架构,用于对本发明原理的说明而非限制。
本发明的编译器架构
现有的编译器用于将各自针对框架的计算图映射为通用处理器的硬件指令,例如CUDA用于GPU,LLVM用于CPU等。指令的映射过程中,对于不同的前端深度学习框架,不同的后端硬件都存在着不同层次的优化方式,包括面向计算图的粗粒度优化、面向运算符(operations)的细粒度优化、内存管理优化等。
众多深度学习框架之间存在着巨大的差异,包括他们使用的底层计算库、计算图形式、代码风格等,导致他们在运算结果的精度和运算速度上都存在着巨大的差异。倘若对M种前端深度学习框架分别进行优化,映射到N种后端硬件平台上,那么将面临着O(M*N)的工作量,有着组合爆炸的风险。为了兼容多种前端和后端,神经网络编译器需要抽象出一个与框架无关的中间表征方式(即IR),既能够表示算法的所有信息,也便于后续编译器对其进行优化。
谷歌的XLA是一个针对TensorFlow的后端编译器框架;DMLC团队的NNVM和TVM编译器,分别进行了图层面的优化,采用了AOT(Ahead Of Time)的编译方式,借鉴了Halide的IR和调度方式,支持市面上大部分的前端深度学习框架;伊利诺伊大学香槟分校的DLVM采用了更传统的编译器优化方式,使用Swift语言作为其DSL表示,带有完整的控制流,是一种“没有副作用”的表示方法。这些编译器框架或多或少的支持了不同的前端深度学习框架,创建了自己的IR,在这些IR上进行优化后,转换为LLVM的IR,或者使用OpenCL、CUDA等库,映射为不同的硬件指令。然而,这些编译器框架都面向通用处理器。对于FPGA或者ASIC实现来说,硬件资源及设计差异巨大,优化方式也大相径庭。通过借鉴面向通用处理器的编译器设计及优化方法,本发明可以反过来将FPGA的硬件设计和优化难度转移到编译器层面。
为此,本发明提出了一种新的编译器架构,其通过在编译过程的不同阶段,使用具有不同粒度和属性的IR来兼容多种前端深度学习框架,并且能够获取面向由FPGA或ASIC实现的专用神经网络处理器(例如,DPU)的指令码,也能够方便地兼容其他的硬件平台,例如CPU和GPU通用处理器。
图4示出了根据本发明一个实施例的编译器架构的示意图。如图4所示,编译器架构400用于将深度学习框架(前端)与硬件平台(后端)解耦,并且可以包括计算图构建模块410、计算图优化模块420和指令生成模块430。
计算图构建模块410基于输入的不同类型的模型文件构建通用的第一中间表示(IR),并且第一IR具有图形式。计算图优化模块420则对第一IR进行图优化,以获得同样具有图形式的第二IR。指令生成模块430对第二IR进行调度优化,以获取细粒度的第三IR。随后,该指令生成模块430可以基于具体的硬件平台将第三IR编译为在该硬件平台上执行的指令码。
由此,通过粗粒度的第一和第二IR实现与后端硬件无关(或几乎无关)的图优化,随后通过引入细粒度的第三IR实现针对硬件的优化并方便其到最终指令码的编译。在这其中,第一IR用于与各类深度计算平台解耦,第二IR用于进行表征粗粒度图优化的结果,第三IR用于针对硬件的细粒度优化,指令码(也可称为第四IR)用于最终的硬件平台执行。
为了兼容各类深度学习框架,并与其解耦,计算图构建模块410可以进一步包括用于解析模型文件和生成第一IR的模块。图5示出了根据本发明另一个实施例的编译器架构的示意图。应该理解的是,虽然图5示出了细化描述的各个模块,但可以将图5的示例看作是多个优选实施例的叠加,在不同的实施例中,这些优选方案可以分开或部分结合的执行。
与图4所示类似,编译器架构500同样可以包括计算图构建模块510、计算图优化模块520和指令生成模块530。进一步地,计算图构建模块510可以包括模型文件解析模块511和计算图生成模块512。模型文件解析模块511可以包括各自对应于一种类型的模型文件的解析子模块,每个解析子模块用于解析对应类型的模型文件。如图所示,模型文件解析模块511可以包括Caffe解析器和TensorFlow解析器,以分别用于解析经由Caffe和TensorFlow深度学习框架获取的模型文件。模型文件解析模块511还可以包括用于其他深度学习框架的解析器(图中以“其他”示出)。在后续的应用中,倘若需要增加针对新的深度学习框架的支持,则只需增加一个针对该模型的解析器即可,后续的优化方式大部分将是框架无关的,由此提升了本发明编译器框架的可扩展性与兼容性。
经由模型文件解析模块511,可以将在不同深度学习框架上开发的神经网络模型解析为框架无关的IR,即本发明中的第一IR。由此,在编译器框架的第一个中间表示处便完全实现了框架和编译器优化方法的解耦,将各类深度学习框架粒度不一的计算图形式统一转化为本发明中固定粒度的计算图形式(即,第一IR)。利用python脚本语言的特性,可以方便实现模型的解析与IR的转化。由此,计算图生成模块512可以基于对应解析子模块的解析结果方便地生成第一IR。
在本发明中,第一IR可以被生成为节点表示特征图,边表示为计算操作的计算图,并且节点和边各自包括属性特征。节点的属性可以包括特征图的维度信息和/或长宽通道信息。边表示的计算操作包括如下至少一项:卷积、池化、维度变换、点加(eltwise)、反卷积、重排、非线性、批量归一化(BatchNorm)、定标(scale)。边的属性则包括计算操作的参数,并且包括如下至少一项:卷积核尺寸、扩充边缘(pad)、步长(stride)、分组、扩张(dilation)。
图6示出了常规计算图转变为本发明的第一IR的一个例子。相比于图左侧的常规计算图,图右侧示出的第一IR是图形式的IR,图的每个节点表示FeatureMap(特征图),也可以理解为一个多维的Tensor(张量),图的每条边表示一种运算符,包括但不限于卷积、池化、维度变换、点加、反卷积、归一化、非线性等。这是一种粗粒度的IR表示,每条边都可看作是对一个多维Tensor进行一个多重循环形式的计算操作。例如对于Tensorflow下粒度较细的计算图,可以将与Conv2D(二维卷积)相邻的Pad或者BiasAdd(加偏置)都融合到该Conv2D所代表的边中;将所有的常数节点都融合到相应运算符对应的边的属性当中去,由此构建出一个有向无环图。在通常的深度学习框架与编译器中,将计算操作设置为计算图的结点,而计算图的边表示操作之间的依赖关系。但是,本发明的第一IR将结点设置为FeatureMap,记录下它的维度信息及维度顺序,更有利于编译器在后续进行内存优化(例如,基于第三IR),包括内存的复用以及All-Bank优化,即FeatureMap较小时,不同的计算操作之间的中间结果可以全部存在片上存储中,而不需要反复的和外部存储进行交互。
在构造出第一IR之后,可以可选地将该第一IR文件(即,图5中的“计算图文件”)从计算图生成模块512导出。随后,第一IR(即,图5中的“计算图”)被送至计算图优化模块520,后者可对其进行优化以获取第二IR。计算图的优化方式有很多种。在一个实施例中,计算图用户模块520如图5所示可以包括剪枝模块521、分解模块522和融合模块523。
剪枝模块521可以用于去除不需要的或对计算结果无影响的操作。
融合模块522可以对计算操作进行融合。例如,融合模块522可以将计算操作融入前后的存取操作和/或计算操作中。一种是维度变换可以融合至这一操作前后的载入或存储过程中。另一种是可以通过运算上的变换天然融入在前的计算操作中。例如,FLATTEN层的操作是对单个卷积后的特征图进行“拍平”,即一维化的处理。而在有分支的网络(例如GoogLeNet)中,对于多层的级联操作,上层有多个层的输出接入到CONCAT的输入。CONCAT层的操作就是指将各输入层的数据按照通道级联而成新的一层,再输出给下一层。FLATTEN和CONCAT层的操作都是专门的数据重排和维度变换操作,可以通过数据的存入和/或读取方式的特定规定来省略。另外,BatchNorm(BN)和Scale可以直接将操作和参数并入在前的卷积层中。另外,上述融合还以减少所述指令码在执行时所述硬件平台与所述外部存储器数据交互次数。这种融合可以是point-wise的融合(即,针对单一计算结果的融合)。例如,针对卷积操作后的激活层ReLU、Leaky ReLU等,point-wise的融合意义在于,大量的输入参数计算出的一个卷积的结果,原本需要全部先存进DDR中,再启动ReLU的内核,计算所有的ReLU结果,而融合能够节省内核启动的时间。除了point-wise的融合,还可以通过启发式算法的设计,尽可能的将非point-wise的操作进行融合,例如Conv+Pool,Conv+Eltwise等,由此能够省去数据在片上和片外的交互过程,减少带宽压力,还能将Pool或Eltwise计算的过程隐藏于数据的载入或存储的过程中,提高计算效率。在一个实施例中,为了针对输入的特征图完成CONV、ReLU和POOL操作,可以通过操作融合将CONV操作后存入片上缓存(例如,BRAM)的数据直接进行ReLU操作,进行必要的片上缓存后在直接进行POOL操作,由此相比于CONV、ReLU和POOL操作各自完成后的数据片外存储和读取,能够大大提高整体处理效率。
分解模块523可以对计算操作进行分解,以将分解的计算操作与前后的计算操作相融合或实现对分解的计算操作的处理。换句话说,分解的目的之一是为了更有效地进行融合。可以将某一操作分解至各个分支,以进行单一分支的融合。例如,级联(concat)之后的池化操作等效于池化之后再进行级联操作。因此可以将池化操作分解并合并到级联前的卷积操作中。另一方面,对于某些原本无法进行处理的计算操作,可以通过分解来实现对计算操作的处理。例如,带group的卷积,可以被分解为多个可被处理的卷积。
在后续进行针对第一IR的上述优化时,必然有某些计算操作合并方案相比于另一些合并方案可以获得更优的计算效率。
上述合并会受到硬件平台的存储资源、带宽、计算资源的限制,并非总是合并优于分别执行的,换句话说,希望找到一种通用规则,来决定是否需要进行计算操作的合并。
在一个实施例中,可以引入子图模板的概念。计算图优化模块510于是可以进一步用于设置能够进行层融合的子图模板,获取针对第一IR计算图的至少一种子图匹配方案,并基于子图匹配方案将所述计算图重构成经融合的第二IR。子图模板是基于硬件平台获得的。具体地,可以通过子图同构匹配的方式,先设置可以融合的子图模板,之后在计算图中找出所有可能的融合方案,并通过代价拟合公式或仿真器得出各种融合方式的执行时间,从而确定哪种融合方式更为优选。
在一个实施例中,可以通过在第一IR的计算图中引入代价边来实现对最优融合方式的求取。例如,可以在每个潜在的合并方式的输入和输出的FeatureMap节点之间增加一条边,根据拟合模型计算出合并的代价,并分别计算出不合并的代价,这个代价主要包含计算时间、功耗等信息,代价可以作为边的属性之一。于是可以将粗粒度的编译优化问题转化为一个找出整个神经网络从输入到输出的最短路径的图优化问题。
回到图6,如图6左侧所示,虚线框1-4分别对应于四种潜在合并方式在常规计算图中的表示。在转换为图6右侧所示本发明的第一IR形式的计算图之后,上述合并方式可以转化为对应的4条连线1-4。由此,可以通过找出从输入到输出的最短路径来实现对最优合并方案的选取。
应该理解的是,上述子图模板和代价边的实现优选可以结合使用,例如,首先使用子图模板确定候选合并方式,再利用代价边的引入简化对最优方案的求取。
本发明的第一IR在经过上述优化后,可以得到第二IR。第二IR是节点表示特征图,边表示多种计算操作合并的超图。这些合并的计算操作来自于前面针对第一IR的粗粒度优化的结果,因此第二IR也可以理解为一种更粗粒度的IR。合并的计算操作,来自于包括All-Bank的优化、计算操作的横向纵向合并、硬件有关的启发式合并办法、维度变换的合并、例如Conv+BN+Scale的等价变换的合并等。
在一个实施例中,第二IR由基于scheme语言设计的领域专用语言(DSL,Domain-Specific Language)表示。例如,可以使用Lisp的一种方言Scheme设计了用来表示这一层面的IR的DSL,由此可以充分发挥了Scheme的极简性,并使用其中各种强力的语言工具(语法糖)来拓展IR表示和解析。
使用DSL进行超图IR表示大大方便了后续基于第三IR的调度优化。首先,无需拘泥于具体的网络结构、计算参数、计算规模;其次,可以利用此种DSL完成硬件平台的测试;再次,使用此种DSL意味着不需要对应的网络结构就可直接生成任务,以进行代价计算,从而拟合图优化过程中的代价函数。
整个计算图层次的优化大部分是硬件无关的。一个硬件有关的方面是子图模板的设置,其可以根据底层硬件计算模块的设计及指令映射策略的改变而调整,另一个硬件有关的方面在于测算融合方式所带来的代价时,融合代价会根据实际测量或者拟合方法的变化而发生改变。
在完成了图形式的优化之后,可选地将第二IR文件(即,图5中的“优化的计算图文件”)从计算图优化模块520导出。随后,第二IR(即,图5中的“优化的计算图”)被送入指令生成模块530,以完成将优化后的第二IR映射到硬件平台(例如,DPU)指令的过程。至此,编译器的IR(第二IR)仍然是一个粗粒度的超图形式的IR,计算过程为一个多维度的Tensor,进行一个多重循环的计算操作。
多重循环操作无论是对于通用处理器,或是专用加速器,都有很大的优化空间,包括计算速度、占用内存等。受搭载DPU的不同硬件平台的片上存储资源、计算资源、带宽,以及不同的DPU指令集的位宽,和不同的神经网络拓扑结构、计算参数、参数规模等种种限制,在对多重循环的计算操作进行切分的过程中必须要满足上述的要求,例如在映射到LOAD指令时,LOAD的数的个数不能超过片上给它分配的buffer的大小等。在充分满足这些限制条件后,还需解决指令之间的依赖问题。依赖问题涉及若干种依赖方式,例如在计算操作执行前,需要所有计算所需要的数都被载入到片上;在向片上缓存的某个地址写数据时,需要这个地址上本来存在的数不被其他还未执行的指令所依赖。
由此,指令生成模块530针对第三IR的优化是基于所述硬件平台进行的调度优化,以确定针对特征图和/或权重的分块执行方案,和/或执行指令间的指令依赖关系。
优选地,第三IR由将每个计算操作编写为多重循环的语言表示。采用类似于Halide的IR表示方法,可以将每种计算操作写为多重循环,以便在进行调度优化的过程中,确定使得多重循环能够占用最少的内存及最优的计算效率的分块。上述分块需要充分考虑了片上计算资源、存储资源、带宽的影响,并结合具体神经网络结构的参数来确定。在一个优选实施例中,利用第三IR可以基于自动化的调度策略的生成并达到和手写指令一样的执行效率。
随后,指令生成模块510将上述分块执行方案和/或指令依赖关系经由针对第三IR的编码映射到硬件平台的指令码。
指令码(在本发明种也可称为第四IR)是用于硬件平台的具体指令,并且包括进行调度优化时所找出的最优分块方式的IR映射到具体的指令时的表示方法。本发明的后端主要是针对DPU的FPGA和ASIC设计,以及ARM等嵌入式CPU。在一个实施例中,本发明的编译器架构所适用的硬件平台包括如下至少一种:基于FPGA或ASIC实现的神经网络专用计算平台;基于GPU实现的神经网络专用计算平台;以及通用计算平台,例如嵌入式CPU计算平台。
在此,DPU使用的指令集可以是一种粗粒度的指令集,但相比于在前三种IR,也是最细粒度的IR。该指令集可直接作用于各种数值,包括DDR、片上Ram、寄存器等。指令集大致可分为内存管理、计算控制、逻辑控制等,例如LOAD指令负责从DDR往片上搬运数据;SAVE指令从片上向DDR中存储数据;CONV指令负责将片上的数据送到各个卷积计算单元中进行计算,并随后进行一些point-wise的计算例如加偏置及ReLU操作,由此大大减少片上和DDR之间的带宽压力;END指令负责将结束信号发送到某个寄存器中,指示DPU工作结束,可以继续进行后续的计算操作等。至此,进行过优化调度后的策略可以很快的映射到DPU指令集的各个指令,并被翻译成可以直接在硬件上执行的机器码,至此整个编译流程完成。
指令生成模块530还可以包括功能上分开的模块,例如用于针对第二IR进行调度优化以生成第三IR的调度优化模块,以及用于从第三IR生成硬件平台指令码的指令码生成模块。
在一个实施例中,本发明的编译器架构还可以包括神经网络前传模块,用于为硬件平台执行指令码的结果提供进行比对的标准答案。优选地,神经网络前传模块可以利用模型文件所针对的深度学习框架的至少一部分来求取所述标准答案。例如,直接使用进行神经网络训练的深度学习框架进行软件的计算并得到用于进行比对的标准答案。但由于神经网络算法在输入硬件平台后会因为定点等引入差异,因此神经网络前传模块可以基于所述硬件平台对所利用的所述深度学习框架的至少一部分进行修改,以获取所述模型文件在所述硬件平台上执行的标准答案。
对于每种深度学习框架来说,由于采用了不同的底层浮点数运算库,浮点数的运算结果本身也会因为运算顺序、不同截位方法等因素而有所不同。因此即便是相同的网络结构,不同深度学习框架间浮点数结果也差异巨大;对于定点数运算来说,上述差异会变小,但仍然存在。另外,不同的深度学习框架的计算参数也存在差异,例如对Pad的处理,数据的排列顺序,均值池化的计算方式,Reorg等变换的方式等。前传模块作为提供标准答案的模块,需要消除这些框架之间的差异性。或者更保守地,可以在前传模块中包含主流深度学习框架的运算符实现,并进行了一定程度的修改,使得计算操作和后端硬件的行为完全一致,包括移位的操作以及边界扩充规则等。
本发明的编译器架构也可被认为是广义上的编译器,对于编译的不同阶段,使用了粒度不一、形式不同的IR对算法进行转化和描述。这些IR的主要目的在于尽量简化编译器开发者的优化难度,生成效率最高的指令;以及尽量减少使用者的使用难度,使其无需关注算法的实现细节,真正实现端到端的算法设计到硬件部署的开发流程。
如上已经结合图4-6描述了根据本发明的编译器架构及其优选实施例。本发明的方案还可以实现为一种神经网络编译方法。图7示出了根据本发明一个实施例的神经网络编译方法的流程示意图。该方法700例如可以在图4-5所示的神经网络编译器框架内执行。
在步骤S710,基于输入的不同类型的模型文件构建通用的第一中间表示,其中所述第一中间表示具有图形式。优选地,步骤S710可以进一步包括使用对应类型的解析子模块解析所述模块文件;以及基于解析结果生成所述第一中间表示。
在步骤S720,针对所述第一中间表示进行图优化,以获得具有图形式的第二中间表示。
在步骤S730,对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示。
在步骤S740,基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码。
优选地,第一中间表示可被生成为节点表示特征图,边表示为计算操作的计算图。节点的属性可以包括如下至少一项:所述特征图的维度信息和长宽通道信息;边表示的计算操作可以包括如下至少一项:卷积、池化、维度变换、点加(eltwise)、反卷积、重排、非线性、批量归一化(BatchNorm)、定标(scale);边的属性可以包括所述计算操作的参数,并且可以包括如下至少一项:卷积核尺寸、扩充边缘(pad)、步长(stride)、分组、扩张(dilation)。
步骤S720中针对所述第一中间表示进行图优化包括如下至少一项:去除不需要的或对计算结果无影响的操作;对计算操作进行融合,以减少所述指令码在执行时所述硬件平台与所述外部存储器数据交互次数;以及对计算操作进行分解,以将分解的计算操作与前后的计算操作相融合或实现对分解的计算操作的处理。
第二中间表示可以是节点表示特征图,边可以表示多种计算操作合并的超图。第二中间表示可由基于scheme语言设计的领域专用语言(DSL,Domain-Specific Language)表示。
步骤S720中的优化进一步可以包括:设置用于进行层融合的子图模板;获取针对所述计算图的至少一种子图匹配方案;以及基于子图匹配方案将所述计算图重构成经层融合的第二中间表示。子图模板可以是基于所述硬件平台获得的。
步骤S720中的优化还可以包括:在具有多个子图匹配方案的情况下,为所述第二中间表示的各节点之间添加对应于子图匹配方案执行代价的连线;以及基于节点间的最短路径问题求取最优子图匹配方案。
步骤S730中的调度优化可以包括:基于所述硬件平台进行调度优化,以确定如下至少一项:针对特征图和/或权重的分块执行方案;以及执行指令间的指令依赖关系。第三中间表示可由将每个计算操作编写为多重循环的语言表示。相应地,步骤S740可以包括:将所述分块执行方案和/或所述指令依赖关系经由所述第三中间表示映射到所述指令码。
另外,本发明的编译方法也可以包括前传步骤,即,可以包括:为所述硬件平台执行指令码的结果提供进行比对的标准答案。优选地,可以利用所述模型文件所针对的深度学习框架的至少一部分来求取所述标准答案。进一步地,可以基于所述硬件平台对所利用的所述深度学习框架的至少一部分进行修改,以获取所述模型文件在所述硬件平台上执行的标准答案。
在一个实施例中,经由本发明的上述编译器架构和编译方法编译得到的指令码可以在在包括通用处理器、存储器和数字电路的片上系统(SoC)实现。图8示出了可用于实现神经网络推理的SoC的一个例子。
在一个实施例中,可由SoC上的数字电路部分(例如,FPGA、GPU或ASIC)来实现执行指令码的执行,其中的计算执行装置可以是基于FPGA或ASIC的高并行计算装置。由于CNN进行的是并行计算,因此通过逻辑硬件,尤其是FPGA和ASIC来实现卷积神经网络计算功能具有天然的计算优势,并且相比于软件执行,能够实现更低的功耗。
图9示出了根据本发明的一种用于神经网络的计算平台。该计算平台900可以包括并行处理模块910、数据存储模块920和控制模块930。
并行处理模块910可以用于对输入数据执行预定的并行计算处理,并产生输出数据。数据存储模块920可以用于缓存数据处理模块所需的输入数据或数据处理模块输出的中间数据。控制模块930可以基于根据前述编译器框架得到的指令码对所述并行处理模块和所述数据存储模块进行控制以执行所述神经网络计算。在一个实施例中,应用本发明指令码的计算平台的具体架构可由例如图8所示的可编程逻辑模块实现,其中并行处理模块810对应于执行CNN推理操作的复杂计算核,数据存储模块820对应于输入输出缓冲,控制模块830对应于图中的控制器。在其他实施例中,应用本发明指令码的计算平台可以是专用AI芯片,例如深度定制的ASIC芯片。
图10示出了根据本发明一个实施例可用于实现上述神经网络编译方法的计算设备的结构示意图。
参见图10,计算设备1000包括存储器1010和处理器1020。
处理器1020可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器1020可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。存储器1010可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器1020或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器1010可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器1010可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器1010上存储有可执行代码,当可执行代码被处理器1020处理时,可以使处理器1020执行上文述及的神经网络编译方法。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (32)
1.一种神经网络编译器,包括:
计算图构建模块,用于基于输入的不同类型的模型文件构建通用的第一中间表示,其中所述第一中间表示具有图形式;
计算图优化模块,用于针对所述第一中间表示进行图优化,以获得具有图形式的第二中间表示;
指令生成模块,用于对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示,以及基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码,
其中,所述第一中间表示被生成为:节点表示为特征图,边表示为计算操作的计算图,
其中,所述节点的属性包括如下至少一项:所述特征图的维度信息和长宽通道信息。
2.如权利要求1所述的编译器,其中,所述计算图构建模块包括:
模型文件解析模块,包括各自对应于一种类型的模型文件的解析子模块,每个解析子模块用于解析对应类型的模型文件;以及
计算图生成模块,基于对应解析子模块的解析结果生成所述第一中间表示。
3.如权利要求1所述的编译器,其中,所述边表示的计算操作包括如下至少一项:
卷积、池化、维度变换、点加(eltwise)、反卷积、重排、非线性、批量归一化(BatchNorm)、定标(scale);
所述边的属性包括所述计算操作的参数,并且包括如下至少一项:
卷积核尺寸、扩充边缘(pad)、步长(stride)、分组、扩张(dilation)。
4.如权利要求1所述的编译器,其中,计算图优化模块包括如下至少一个优化模块:
剪枝模块,用于去除不需要的或对计算结果无影响的操作;
融合模块,用于进行计算操作融合,以减少所述指令码在执行时所述硬件平台与所述外部存储器数据交互次数;以及
分解模块,用于进行计算操作分解,以将分解的计算操作与前后的计算操作相融合或实现对分解的计算操作的处理。
5.如权利要求1所述的编译器,其中,所述第二中间表示是节点表示特征图,边表示多种计算操作合并的超图。
6.如权利要求5所述的编译器,其中,所述第二中间表示由基于scheme语言设计的领域专用语言(DSL,Domain-SpecificLanguage)表示。
7.如权利要求5所述的编译器,其中,所述计算图优化模块进一步用于设置能够进行层融合的子图模板,获取针对所述第一中间表示的计算图的至少一种子图匹配方案,并基于子图匹配方案将所述计算图重构成经融合的第二中间表示。
8.如权利要求7所述的编译器,其中,所述子图模板是基于所述硬件平台获得的。
9.如权利要求5所述的编译器,其中,针对多种计算操作合并方式,为所述第一中间表示的各个计算操作合并方式对应的输入和输出节点之间添加对应于该计算操作合并方案执行代价的边,并且基于节点间的最短路径问题求取最优计算操作合并方案。
10.如权利要求1所述的编译器,其中,所述指令生成模块基于所述硬件平台进行调度优化,以确定如下至少一项:
针对特征图和/或权重的分块执行方案;以及
执行指令间的指令依赖关系。
11.如权利要求10所述的编译器,其中,所述第三中间表示由将每个计算操作编写为多重循环的语言表示。
12.如权利要求10所述的编译器,其中,所述指令生成模块将所述分块执行方案和/或所述指令依赖关系经由所述第三中间表示映射到所述指令码。
13.如权利要求1所述的编译器,还包括:
神经网络前传模块,用于为所述硬件平台执行指令码的结果提供进行比对的标准答案。
14.如权利要求13所述的编译器,其中,所述神经网络前传模块利用所述模型文件所针对的深度学习框架的至少一部分来求取所述标准答案。
15.如权利要求14所述的编译器,其中,所述神经网络前传模块基于所述硬件平台对所利用的所述深度学习框架的至少一部分进行修改,以获取所述模型文件在所述硬件平台上执行的标准答案。
16.如权利要求1所述的编译器,其中所述硬件平台包括如下至少一种:
基于FPGA或ASIC实现的神经网络专用计算平台;
基于GPU实现的神经网络专用计算平台;以及
通用计算平台。
17.一种神经网络编译方法,包括:
基于输入的不同类型的模型文件构建通用的第一中间表示,其中所述第一中间表示具有图形式;
针对所述第一中间表示进行图优化,以获得具有图形式的第二中间表示;
对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示;以及
基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码,
其中,所述第一中间表示被生成为:节点表示为特征图,边表示为计算操作的计算图,
其中,所述节点的属性包括如下至少一项:所述特征图的维度信息和长宽通道信息。
18.如权利要求17所述的方法,其中,基于输入的不同类型的模型文件构建通用的第一中间表示包括:
使用对应类型的解析子模块解析所述模块文件;以及
基于解析结果生成所述第一中间表示。
19.如权利要求17所述的方法,其中,所述边表示的计算操作包括如下至少一项:
卷积、池化、维度变换、点加(eltwise)、反卷积、重排、非线性、批量归一化(BatchNorm)、定标(scale);
所述边的属性包括所述计算操作的参数,并且包括如下至少一项:
卷积核尺寸、扩充边缘(pad)、步长(stride)、分组、扩张(dilation)。
20.如权利要求17所述的方法,其中,针对所述第一中间表示进行图优化包括如下至少一项:
去除不需要的或对计算结果无影响的操作;
对计算操作进行融合,以减少所述指令码在执行时所述硬件平台与所述外部存储器数据交互次数;以及
对计算操作进行分解,以将分解的计算操作与前后的计算操作相融合或实现对分解的计算操作的处理。
21.如权利要求17所述的方法,其中,所述第二中间表示是节点表示特征图,边表示多种计算操作合并的超图。
22.如权利要求21所述的方法,其中,所述第二中间表示由基于scheme语言设计的领域专用语言(DSL,Domain-SpecificLanguage)表示。
23.如权利要求21所述的方法,其中,针对所述第一中间表示进行图优化包括:
设置用于进行层融合的子图模板;
获取针对所述计算图的至少一种子图匹配方案;以及
基于子图匹配方案将所述计算图重构成经层融合的第二中间表示。
24.如权利要求23所述的方法,其中,所述子图模板是基于所述硬件平台获得的。
25.如权利要求23所述的方法,其中,针对所述第一中间表示进行图优化包括:
在具有多个子图匹配方案的情况下,为所述第二中间表示的各节点之间添加对应于子图匹配方案执行代价的连线;以及
基于节点间的最短路径问题求取最优子图匹配方案。
26.如权利要求17所述的方法,其中,对所述第二中间表示进行调度优化,以获取细粒度的第三中间表示包括:
基于所述硬件平台进行调度优化,以确定如下至少一项:
针对特征图和/或权重的分块执行方案;以及
执行指令间的指令依赖关系。
27.如权利要求26所述的方法,其中,所述第三中间表示由将每个计算操作编写为多重循环的语言表示。
28.如权利要求26所述的方法,其中,基于硬件平台将所述第三中间表示编译为在所述硬件平台上执行的指令码包括:
将所述分块执行方案和/或所述指令依赖关系经由所述第三中间表示映射到所述指令码。
29.如权利要求17所述的方法,还包括:
为所述硬件平台执行指令码的结果提供进行比对的标准答案。
30.如权利要求29所述的方法,其中,为所述硬件平台执行指令码的结果提供进行比对的标准答案包括:
利用所述模型文件所针对的深度学习框架的至少一部分来求取所述标准答案。
31.如权利要求30所述的方法,其中,利用所述模型文件所针对的深度学习框架的至少一部分来求取所述标准答案包括:
基于所述硬件平台对所利用的所述深度学习框架的至少一部分进行修改,以获取所述模型文件在所述硬件平台上执行的标准答案。
32.一种用于神经网络的计算系统,包括:
并行处理模块,用于对输入数据执行预定的并行计算处理,并产生输出数据;
数据存储模块,用于缓存数据处理模块所需的输入数据或数据处理模块输出的中间数据;以及
控制模块,基于按照权利要求1-16中任一项得到的指令码对所述数据处理模块和所述数据存储模块进行控制以执行所述神经网络计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810829009.1A CN110766147B (zh) | 2018-07-25 | 2018-07-25 | 神经网络编译器架构及编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810829009.1A CN110766147B (zh) | 2018-07-25 | 2018-07-25 | 神经网络编译器架构及编译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110766147A CN110766147A (zh) | 2020-02-07 |
CN110766147B true CN110766147B (zh) | 2022-10-11 |
Family
ID=69328180
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810829009.1A Active CN110766147B (zh) | 2018-07-25 | 2018-07-25 | 神经网络编译器架构及编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110766147B (zh) |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326942A (zh) * | 2020-02-28 | 2021-08-31 | 上海商汤智能科技有限公司 | 模型推理方法及装置、电子设备和存储介质 |
CN111580828B (zh) * | 2020-04-30 | 2021-08-27 | 腾讯科技(深圳)有限公司 | 机器学习模型的编译优化方法和装置 |
CN111753983A (zh) * | 2020-06-22 | 2020-10-09 | 深圳鲲云信息科技有限公司 | 神经网络模型的定制化方法、系统、设备和存储介质 |
CN111860816A (zh) * | 2020-07-08 | 2020-10-30 | Oppo广东移动通信有限公司 | 神经网络模型的编译方法、装置、设备及存储介质 |
CN112070202B (zh) * | 2020-07-09 | 2021-09-03 | 安徽寒武纪信息科技有限公司 | 一种融合图的生成方法、生成装置和计算机可读存储介质 |
CN111915016B (zh) * | 2020-07-10 | 2022-03-25 | 深圳云天励飞技术股份有限公司 | 一种基于tvm编译器的异构平台的部署方法及装置 |
CN111880807A (zh) * | 2020-07-31 | 2020-11-03 | Oppo广东移动通信有限公司 | 深度学习编译方法、装置、设备及存储介质 |
WO2022041015A1 (zh) * | 2020-08-26 | 2022-03-03 | 华为技术有限公司 | 神经网络模型优化方法及装置 |
CN112257843B (zh) * | 2020-09-23 | 2022-06-28 | 浙江大学 | 一种基于MobileNetV1网络推理任务的扩展指令集的系统 |
WO2022087788A1 (zh) * | 2020-10-26 | 2022-05-05 | 华为技术有限公司 | 一种神经网络编译优化方法和相关装置 |
CN112328227B (zh) * | 2020-11-03 | 2022-02-25 | 清华大学 | 编译方法、装置、计算设备和介质 |
CN112529175B (zh) * | 2020-11-05 | 2022-03-18 | 上海交通大学 | 神经网络的编译方法、系统、计算机存储介质及编译设备 |
CN112465108B (zh) * | 2020-11-11 | 2022-07-22 | 上海交通大学 | 一种面向存算一体平台的神经网络编译方法 |
CN114594988A (zh) * | 2020-12-07 | 2022-06-07 | 华为技术有限公司 | 一种数据处理装置及方法 |
CN112650503B (zh) * | 2020-12-18 | 2022-06-17 | 广东高云半导体科技股份有限公司 | 一种软件编译方法及片上系统 |
CN114881223B (zh) * | 2020-12-18 | 2023-04-18 | 北京百度网讯科技有限公司 | 深度学习模型的转换方法、装置、电子设备和存储介质 |
CN112527272B (zh) * | 2020-12-25 | 2023-11-17 | 深圳云天励飞技术股份有限公司 | 对接tvm的方法及相关设备 |
CN112711422B (zh) * | 2020-12-31 | 2024-01-19 | 北京清微智能科技有限公司 | 一种神经网络编译的优化方法及系统 |
CN112734011B (zh) * | 2021-01-04 | 2021-12-28 | 北京大学 | 一种基于增量综合的深度神经网络加速器协同设计方法 |
CN112862109A (zh) * | 2021-02-09 | 2021-05-28 | 上海商汤智能科技有限公司 | 深度学习模型的执行方法、装置、电子设备及存储介质 |
CN112884123B (zh) * | 2021-02-23 | 2024-03-01 | 杭州海康威视数字技术股份有限公司 | 神经网络优化方法、装置、电子设备及可读存储介质 |
CN112947935A (zh) * | 2021-02-26 | 2021-06-11 | 上海商汤智能科技有限公司 | 运算方法及装置、电子设备和存储介质 |
CN112579063B (zh) * | 2021-03-01 | 2021-06-08 | 之江实验室 | 一种用于深度学习编译器中探索优化空间的加速方法 |
CN113590193B (zh) * | 2021-07-12 | 2024-03-22 | 苏州仰思坪半导体有限公司 | 一种运算装置、方法、介质及计算设备 |
CN113961267B (zh) * | 2021-10-15 | 2023-08-25 | 杭州海康威视数字技术股份有限公司 | 一种业务处理方法、装置及设备 |
CN113835695B (zh) * | 2021-11-25 | 2022-02-18 | 之江实验室 | 基于统一后端引擎的深度学习框架与硬件设备适配方法 |
CN114186678B (zh) * | 2021-12-10 | 2023-04-07 | 北京百度网讯科技有限公司 | 基于深度学习的硬件适配装置和方法 |
CN114492737B (zh) * | 2021-12-31 | 2022-12-09 | 北京百度网讯科技有限公司 | 数据处理方法、装置及电子设备、存储介质及程序产品 |
CN114282641B (zh) * | 2022-03-07 | 2022-07-05 | 麒麟软件有限公司 | 一种通用异构加速框架的构建方法 |
CN114428616A (zh) * | 2022-04-01 | 2022-05-03 | 北京清微智能信息技术有限公司 | 一种神经网络编译阶段优化置换代价的方法 |
CN115269016A (zh) * | 2022-09-27 | 2022-11-01 | 之江实验室 | 一种用于图计算的指令执行方法及装置 |
CN115268936B (zh) * | 2022-09-27 | 2022-12-27 | 之江实验室 | 一种用于计算图编译的优化方法及装置 |
CN115495095B (zh) * | 2022-11-18 | 2023-03-21 | 上海燧原科技有限公司 | 张量程序的整程序编译方法、装置、设备、介质及集群 |
CN115796284B (zh) * | 2023-02-08 | 2023-05-09 | 苏州浪潮智能科技有限公司 | 基于tvm编译器的推理方法、装置、存储介质及设备 |
CN116185426B (zh) * | 2023-04-17 | 2023-09-19 | 北京大学 | 一种基于代码融合的编译优化方法、系统及电子设备 |
CN116301903B (zh) * | 2023-05-11 | 2023-08-08 | 杭州登临瀚海科技有限公司 | 一种编译器、ai网络编译方法、处理方法、执行系统 |
CN116974580B (zh) * | 2023-09-25 | 2024-01-09 | 之江实验室 | 多模态网络编译方法、系统和存储介质 |
CN117331541A (zh) * | 2023-10-27 | 2024-01-02 | 北京智源人工智能研究院 | 面向动态图框架和异构芯片的编译与运行方法和装置 |
CN117170686B (zh) * | 2023-11-03 | 2024-03-12 | 深圳鲲云信息科技有限公司 | 用于神经网络编译优化的方法及计算设备 |
CN117492766A (zh) * | 2023-12-27 | 2024-02-02 | 深圳市九天睿芯科技有限公司 | 编译方法、编译器、神经网络加速器、芯片及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1627251A (zh) * | 2003-12-09 | 2005-06-15 | 微软公司 | 使用图形处理单元加速并优化机器学习技术的处理 |
GB201013074D0 (en) * | 2009-08-14 | 2010-09-15 | Logined Bv | Executing a utility in a distributed computing system based on an integrated model |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7441237B2 (en) * | 2003-03-25 | 2008-10-21 | Microsoft Corporation | System and method for extending a compiler through a composer |
JP6636630B2 (ja) * | 2015-10-28 | 2020-01-29 | グーグル エルエルシー | 計算グラフの修正 |
US20170124497A1 (en) * | 2015-10-28 | 2017-05-04 | Fractal Industries, Inc. | System for automated capture and analysis of business information for reliable business venture outcome prediction |
-
2018
- 2018-07-25 CN CN201810829009.1A patent/CN110766147B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1627251A (zh) * | 2003-12-09 | 2005-06-15 | 微软公司 | 使用图形处理单元加速并优化机器学习技术的处理 |
GB201013074D0 (en) * | 2009-08-14 | 2010-09-15 | Logined Bv | Executing a utility in a distributed computing system based on an integrated model |
Non-Patent Citations (2)
Title |
---|
"NNVM Compiler: Open Compiler for AI Frameworks;Paul. G. Allen;《http://tvmlang.org/2017/10/06/nnvm-compiler-announcement.html》;20171006;1-2 * |
TVM: An Automated End-to-End Optimizing Compiler for Deep Learning;陈天奇;《https://arxiv.org/abs/1802.04799》;20180520;1-15 * |
Also Published As
Publication number | Publication date |
---|---|
CN110766147A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110766147B (zh) | 神经网络编译器架构及编译方法 | |
CN110764744B (zh) | 用于神经网络计算的中间表示生成方法和装置 | |
US11514324B2 (en) | Methods of optimization of computational graphs of neural networks | |
Gschwend | Zynqnet: An fpga-accelerated embedded convolutional neural network | |
US11093225B2 (en) | High parallelism computing system and instruction scheduling method thereof | |
US8776030B2 (en) | Partitioning CUDA code for execution by a general purpose processor | |
US8572588B2 (en) | Thread-local memory reference promotion for translating CUDA code for execution by a general purpose processor | |
US20190278593A1 (en) | Accelerating linear algebra kernels for any processor architecture | |
CN111104120B (zh) | 神经网络编译方法、系统及相应异构计算平台 | |
US20100088490A1 (en) | Methods and systems for managing computations on a hybrid computing platform including a parallel accelerator | |
Orchard et al. | Ypnos: declarative, parallel structured grid programming | |
CN113748399B (zh) | 在异构计算资源上调度计算图的方法、装置及可读介质 | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
CN110659069B (zh) | 用于执行神经网络计算的指令调度方法及相应计算系统 | |
US11461662B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
US20210125033A1 (en) | Apparatus and method for neural network processing | |
US11016775B2 (en) | Neural network operation reordering for parallel execution | |
KR101118321B1 (ko) | 리타게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행 | |
CN115437637A (zh) | 一种编译方法及相关装置 | |
US11809849B1 (en) | Global modulo allocation in neural network compilation | |
Gómez-Hernández et al. | Using PHAST to port Caffe library: First experiences and lessons learned | |
Lotrič et al. | Parallel implementations of recurrent neural network learning | |
US11809981B1 (en) | Performing hardware operator fusion | |
US11782706B1 (en) | Reconfigurable neural network processing based on subgraph recognition | |
Chang et al. | Deep neural networks compiler for a trace-based accelerator |
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 |