CN110377288A - 神经网络压缩编译器及其编译压缩方法 - Google Patents
神经网络压缩编译器及其编译压缩方法 Download PDFInfo
- Publication number
- CN110377288A CN110377288A CN201810333784.8A CN201810333784A CN110377288A CN 110377288 A CN110377288 A CN 110377288A CN 201810333784 A CN201810333784 A CN 201810333784A CN 110377288 A CN110377288 A CN 110377288A
- Authority
- CN
- China
- Prior art keywords
- neural network
- code
- compression
- algorithm
- compressed
- 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
Classifications
-
- 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
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Neurology (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种神经网络压缩编译器及其编译压缩方法。该神经网络压缩编译器可以包括:编译前端,用于对输入的神经网络算法进行分析,所述算法包括神经网络算法的拓扑结构和神经网络算法的参数;优化器,用于对所述算法和/或所述分析生成的中间表示进行优化;以及指令压缩生成器,用于生成计算平台执行神经网络计算所需的、经压缩的二进制指令码。其中,指令压缩生成器可以直接生成二进制指令码并进行压缩,也可生成压缩的汇编代码并将其转换成压缩的二进制码,例如DPU压缩指令码。由此,通过针对神经网络创造性地提出的压缩编译方法,可有效解决神经网络算法编译时间长、存储空间占用过大的问题。
Description
技术领域
本发明涉及深度学习领域,尤其涉及一种用于神经网络算法的压缩编译器及其相关编译压缩方法。
背景技术
人工智能近年得到迅速发展,在图像分类、检测、视频和语音处理等领域取得良好的应用效果,并且依然具备极大的发展前景。神经网络是人工智能应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。为了将训练之后的深度神经网络进行部署,需要将神经网络算法编译成计算平台所能执行的二进制指令码。
对于使用如C++或Java等的高级语言开发的应用程序,诸如GCC、LLVM的常规编译器在数秒内即可快速完成编译和优化,生成面向各种CPU平台的可执行代码,占用的存储空间通常在数K至数M字节。然而对于计算量密集和参数量巨大的深度神经网络算法,现有编译处理需要消耗数分钟甚至更长的时间,并且编译生成的指令代码可达数十至数百M字节。这对于神经网络的高效便捷部署带来困难。随着移动端人工智能计算的流行和普及,在资源受限的嵌入式端平台上述问题将变得更加严重。
因此,需要一种针对神经网络的优化编译方案。
发明内容
为了解决上述至少一个问题,本发明提出了一种压缩编译方案,通过对编译生成的代码进行压缩,大幅降低编译后代码所需占用的存储空间,并可显著降低编译时间,从而为深度学习应用向嵌入式移动设备的推广铺平了道路。
根据本发明的一个方面,提出了一种用于神经网络的压缩编译方法,包括:获取神经网络算法,所述神经网络算法包括神经网络算法的拓扑结构和神经网络算法的参数;基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码。由此,通过编译压缩,降低代码占用空间。
在一个实施例中,基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码可以包括:基于所述神经网络算法生成用于计算平台执行神经网络计算的二进制指令码;以及根据预定的无损数据压缩算法,压缩所述二进制指令码。相应地,根据预定的无损数据压缩算法,压缩所述二进制指令码可以包括如下至少一项:针对生成的全部二进制指令码进行整体压缩;以及针对二进制指令码进行与所述神经网络算法分层相对应的逐层压缩。
由此,通过直接将源代码编译成二进制指令码再进行压缩,能够减少编译操作所需人工介入。另外,逐层压缩能够进一步降低压缩对编译时间的影响。
在另一个实施例中,基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码可以包括:基于所述神经网络算法生成汇编代码;根据预定的无损数据压缩算法,压缩所述汇编代码以生成所述经压缩的汇编代码;以及将经压缩的汇编代码转换成所述经压缩的二进制指令码。相应地,根据预定的无损数据压缩算法,压缩所述汇编代码可以包括如下至少一项:针对生成的全部汇编代码进行整体压缩;以及针对汇编代码进行与所述神经网络算法分层相对应的逐层压缩。
由此,通过直接将源代码编译成汇编码进行压缩,再将压缩的汇编码转换成压缩的二进制码,能够极大地解决由于参数量巨大而导致的二进制码转换的耗时问题,同时由于汇编代码的可读性这还有利于对编译器生成代码准确性进行分析和定位。另外,逐层压缩能够进一步降低压缩对编译时间的影响。
所述预定的无损数据压缩算法可以包括如下的至少一种:Huffman编码算法、Lempel-Ziv编码算法、Arithmetic编码算法、Shannon-Fano编码算法、RLE编码算法和Dictionary编码算法。
所述经压缩的二进制指令码包括如下之一:仅对应的所述神经网络参数或其部分被压缩的二进制指令码;对应的所述神经网络参数和所述神经网络算法指令都被压缩的二进制指令码。
神经网络可以是稀疏化神经网络,并且在所述经压缩的二进制指令码中所述神经网络参数所包含的大量的零值参数能够被压缩掉。
神经网络参数可以使用整型数值表示(例如,8比特),以通过增大数据重复概率提升所述神经网络参数的压缩率。
根据本发明的另一个方面,提供了一种神经网络压缩编译器,包括:编译前端,用于对输入的神经网络算法进行分析,所述源代码包括神经网络算法的拓扑结构和神经网络算法的参数;优化器,用于对所述神经网络算法和/或所述分析生成的中间表示进行优化;以及指令压缩生成器,用于生成计算平台执行神经网络计算所需的、经压缩的二进制指令码。
在一个实施例中,指令压缩生成器可以包括:代码生成器,用于基于优化后的神经网络算法和/或中间表示生成计算平台执行神经网络计算所需的二进制指令码;以及代码压缩器,用于根据预定的无损数据压缩算法,压缩所述二进制指令码以生成所述经压缩的二进制指令码。
在一个实施例中,指令压缩生成器可以包括:代码生成器,用于基于优化优化后的神经网络算法和/或中间表示生成汇编代码;代码压缩器,用于根据预定的无损数据压缩算法,压缩所述汇编代码以生成所述经压缩的汇编代码;以及压缩汇编器,用于将经压缩的汇编代码转换成经压缩的二进制指令码。
代码压缩器使用的预定的无损数据压缩算法可以包括如下的至少一种:Huffman编码算法、Lempel-Ziv编码算法、Arithmetic编码算法、Shannon-Fano编码算法、RLE编码算法和Dictionary编码算法。
针对所述代码生成器生成的代码,代码压缩器可以进行整体压缩或与所述神经网络算法分层相对应的逐层压缩。
神经网络可以是稀疏化神经网络,并且所述代码压缩器能够压缩所述神经网络参数所包含的大量的零值参数。神经网络参数可以使用整型数值表示,以通过增大数据重复概率提升所述代码压缩器对所述神经网络参数的压缩率。
根据本发明的一个方面,提出了一种神经网络的代码执行方法,包括:获取如上述方法和/或经由上述压缩编译器编译压缩的二进制指令码;以及解压缩所述二进制指令码用于在计算平台上的执行。
根据本发明的另一个方面,提出了一种神经网络代码解压器,用于对如上述神经网络压缩编译器所编译压缩的二进制指令码进行解压。神经网络代码解压器可以在运行时引擎中实现。经解压的二进制指令码可以在至少部分由GPU、FPGA或ASIC实现的计算平台上运行。
根据本发明的一个方面,提出了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上任一项所述的方法。
根据本发明的另一个方面,提出了一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如上任一项所述的方法。
本发明面向神经网络创造性地提出的压缩编译方案,可有效解决神经网络算法编译时间长、存储空间占用过大的问题。通过重复利用神经网络参数的稀疏性和整型表示,能将流行的深度神经网络编译时间从数分钟缩短为数秒、将编译生成的DPU二进制指令码所需的存储空间减少数倍甚至数十倍,可有效提高深度学习应用程序编译开发的效率,同时也有效解决了深度神经网络对系统存储空间占用过大的问题,对于深度学习应用向嵌入式移动端设备的推广意义深远。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了现有神经网络编译器的编译示意图。
图2示出了根据本发明一个实施例的神经网络压缩编译器的编译示意图。
图3A和3B示出了根据本发明不同实施例的指令压缩生成器的不同构造例。
图4示出了根据本发明一个实施例的用于神经网络的压缩编译方法。
图5示出了根据本发明一个实施例的神经网络代码执行方法的流程图。
图6示出了根据本发明一个实施例可用于实现上述压缩编译方法的数据处理的计算设备的结构示意图。
图7示出了可用于实现本发明所涉及神经网络计算的SoC的一个例子。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
人工智能近年得到迅速发展,在图像分类、检测、视频和语音处理等领域取得良好的应用效果,并且依然具备极大的发展前景。神经网络是人工智能应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。神经网络的工作负载特征是计算和数据密集。神经网络计算所需的乘加操作通常为G数量级,例如目标检测类神经网络SSD的计算量为120G操作次数。而计算所需参数则通常为M至数百M字节数量级,例如分类神经网络VGG的参数为480M字节。
为了将训练之后的深度神经网络进行部署,需要使用编译器将神经网络算法编译成计算平台所能执行的二进制指令流。不同于使用如C++或Java等的高级语言开发的应用程序,神经网络算法有着自己独特的语法和结构。有鉴于此,业已出现了专用于神经网络计算的高性能计算平台以及相应的神经网络编译器。例如,一种深度神经网络编译器DNNC(Deep Neural Network Compiler)可将神经网络算法编译成为DPU(Deep LearningProcessor Unit,深度学习专用处理器)平台的优化指令流。通过解析神经网络的拓扑结构来构建与之对等的编译器内部计算图中间表示IR(Intermediate Representation)以及IR中的控制流和数据流信息,神经网络编译器基于IR施加各种编译优化和变换技术,在提高DPU计算性能的同时有效降低系统访存带宽和功耗需求。图1示出了现有神经网络编译器的编译示意图。如图1所示,可以将专门的神经网络算法(例如,针对经剪枝处理的CNN)送入包括编译前端、优化器和指令生成器的神经网络编译器,并生成用于神经网络计算平台(例如,DPU)的二进制指令码。
在此,“编译”指的是利用编译器从一种高级的形式化方法描述的表示产生低级的面向计算平台上执行的目标代码的过程。由于硬件计算平台处理的只涉及二进制指令码,因此需要编译器将人们熟悉的高级语言描述转换成计算机可读的低级二进制代码。不同于使用C/C++等高级编程语言描述的源程序代码,神经网络需要通过描述神经网络算法的专用模型进行表示。神经网络算法包括神经网络算法的拓扑结构以及神经网络算法的参数。相比之下,神经网络拓扑结构的形式化描述所需的存储空间要远小于体量巨大的神经网络算法参数所需的存储空间。
神经网络编译器如图1所示通常包括编译前端、优化器和指令生成器。神经网络编译前端用于对输入的神经网络算法进行分析。所述分析可以包括网络拓扑结构的解析和重构。优化器用于对神经网络算法和/或在前分析生成的中间表示进行优化,优化器优化的对象是与神经网络算法对等的计算图表示。优化操作可以对上述计算图进行语义上等价的各种变换,以便后续更加有效地生成目标代码。最后,指令生成器可以基于优化后的计算图生成高效的目标代码。
虽然神经网络编译器具有与现有针对高级语言(如C++,Java等)的编译器相类似的结构,但是不同于使用高级语言开发的应用程序能在数秒内即可快速完成编译和优化,且生成的可执行代码占用空间通常仅为数K至数M字节,对于计算量密集和参数量巨大的深度神经网络,现有编译处理需要消耗数分钟甚至更长的时间,并且编译生成的指令代码可达数十至数百M字节。这对于神经网络的高效便捷部署带来困难。随着移动端人工智能计算的流行和普及,在资源受限的嵌入式端平台上述问题将变得更加严重。
有鉴于此,本发明提出了一种新的神经网络编译器及其相应方法,其可以通过创造性地对神经网络代码进行压缩操作,大幅降低编译后代码所需的存储空间,并能在一定程度上提升神经网络的编译时间,使之更加适用于资源受限的嵌入式端平台。
图2示出了根据本发明一个实施例的神经网络压缩编译器的编译示意图。图中的DPU压缩指令码指代用于在神经网络计算平台(例如,DPU)上执行的二进制指令码。
如图2所示,神经网络压缩编译器200可以包括编译前端210、优化器220、指令压缩生成器230。
编译前端210可以对输入的神经网络算法进行分析。在此,神经网络算法包括神经网络算法的拓扑结构和神经网络算法的参数。
优化器220可以用于对神经网络算法和/或中间表示IR进行优化使之生成更优的目标代码。在此,进行优化的对象可以是与神经网络算法对等的计算图。
指令压缩生成器230用于生成计算平台执行神经网络计算所需的、经压缩的二进制指令码。由此,可以通过对代码进行压缩操作,大幅降低编译后代码所需的存储空间。
根据不同的实现方式,对二进制指令码的压缩可以在不同阶段进行。
在本发明的一个实施例中,可以扩展神经网络编译器后端的指令生成器,直接从神经网络算法中编译出适用于神经网络计算平台(例如,DPU)执行的二进制指令码。在本发明的另一个实施例中,则可首先编译出汇编代码,再将汇编代码转换成二进制指令码。图3A和3B示出了根据本发明不同实施例的指令压缩生成器的不同构造例。
如图3A所示,指令压缩生成器330可以包括代码生成器和代码压缩器332。代码生成器可以基于优化代码生成计算平台执行神经网络计算所需的二进制指令码。代码压缩器332则可根据预定的无损数据压缩算法,压缩编译出的二进制指令码以生成经压缩的二进制指令码。在此,“无损数据压缩(Lossless Compression)”是指数据经过压缩后,信息不受损失,还能通过解压完全恢复到压缩前的原样。“数据压缩”通常利用数据的统计冗余进行。在此,“无损”一词是相对于有损数据压缩,通常用于严格要求经过压缩、解压缩的数据必须与原始数据一致的场合。尤其适用于本发明中涉及的代码压缩。
相应地,如图3B所示指令压缩生成器330’可以包括代码生成器331’、代码压缩器332’和压缩汇编器333’。在此例中,代码生成器331’可以基于优化代码生成生成汇编代码。代码压缩器332’可以根据预定的无损数据压缩算法,压缩所述汇编代码以生成所述经压缩的汇编代码。而压缩汇编器333’用于将经压缩的汇编代码转换成经压缩的二进制指令码。
在图3A所示实施例中,例如可以利用已有框架实现从神经网络源代码到神经网络计算平台可读的二进制代码的之间转换,中间不涉及汇编代码的生成,对于生成的二进制代码,直接根据预定无损数据压缩算法进行压缩,由此在几乎无需增加外部操作的情况下降低编译后代码所需的存储空间。
在图3B所示的实施例中,指令压缩生成器330’实际上包括了用于从汇编代码生成二进制指令码的汇编器的功能。在此,本发明的“编译”指代广义上的编译,可以是从源代码到汇编代码的编译,也可以进一步包括汇编代码到二进制代码的汇编器功能。由于所述压缩针对汇编代码进行,因此大幅缩短了从汇编代码到二进制代码转换所需的时间,因此在降低编译后代码所需的存储空间的同时,还大幅缩短了编译时间。另外,由于本方案会生成可读的经压缩的汇编代码(例如,可读的文本格式的DPU压缩汇编指令),因此可方便地对神经网络压缩编译器生成的DPU压缩汇编代码进行查看,更容易帮助开发人员定位编译器输入结果的正确性。
随着深度学习算法的不断演进,出现了越来越多更加复杂的神经网络模型,模型的层数变得更深(几十层甚至上百层)、参数的规模变得越来越大(几十M甚至上百M字节)。随着网络规模的扩大,模型中冗余的信息变得越来越多,由此可以采用模型剪枝(pruning)技术来删除模型中的冗余信息以优化模型的运行速度。在保持算法精度前提下模型中可剪除的参数量比例可达20%~80%,剪枝后模型中大量的参数变为零值、成为稀疏化的神经网络。由于神经网络是包含大量零值参数的稀疏化神经网络,由此为本发明的压缩编译方案带来更大的压缩空间。由此,使用编译器后端的“指令压缩生成器”,可以将具有大量冗余信息的稀疏化神经网络编码成更加精简的经压缩目标代码,例如DPU压缩指令码或DPU压缩汇编代码。
具体地,图3A和3B中所示的代码压缩器可以使用诸如Huffman编码算法、Lempel-Ziv编码算法、Arithmetic编码算法、Shannon-Fano编码算法、RLE编码算法、和Dictionary编码算法作为预定的无损数据压缩算法,从将经压缩的二进制指令码中神经网络参数所包含的大量的零值参数被压缩掉。
在此,以Huffman(霍夫曼)编码算法为例,描述对本发明的代码进行无损压缩的原理。霍夫曼编码使用变长编码表对源符号进行编码,其中变长编码表通过一种评估来源符号出现机率的方法得到,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。因此,对于压缩后稀疏化后、存在大量零值参数的神经网络,霍夫曼编码可以取得数倍至数十倍的压缩效果。
进一步地,由于深度神经网络算法对计算结果的精度具有较好的容错性,对于剪枝处理后的大量模型参数可采用量化后的整型数值来代替原来的浮点数值,例如使用8位整型来替代32位的浮点数值。通过使用整型数值表示神经网络参数,使得数据的重复概率提升,从而进一步提升神经网络参数的压缩率。
针对神经网络的特性,还可以进一步对本发明的编译压缩方案进行优化。
如上所述,神经网络算法包括神经网络算法的拓扑结构和神经网络算法的参数。相比于用于表示拓扑结构的形式化描述,神经网络算法的参数所需的存储量级要大得多。因此,仅对应的神经网络算法的参数或其部分进行压缩,就能够大幅降低对系统存储空间的占用,并能够进一步简化压缩指令生成器的构造。当然,在其他的实施例中,也可以一并对神经网络算法的参数和神经网络算法的拓扑结构都进行压缩。
另外,由于神经网络的分层特性,除了对编译好的代码进行整体压缩之外,代码压缩器针对代码生成器生成的代码,还可以进行与神经网络算法分层(例如,神经网络计算图的分层)相对应的逐层压缩。由此,降低由压缩所带来的时间消耗。
上述神经网络压缩编译器所编译压缩的二进制指令码(例如,DPU压缩指令码),在神经网络计算平台(例如,DPU)上启动运行之前需要首先对其进行解压缩。所述神经网络代码解压器可以在运行时(Runtime)引擎中实现。例如,DPU压缩指令的解压缩功能可以在DPU运行时引擎中实现支持。DPU应用程序的解压缩在加载过程中只需一次性进行,运行过程中不再需要其它任何操作,由此最小化对DPU应用程序运行过程中带来的额外时间开销影响。解压器可以使用与代码压缩器相应的无损解压算法来实现对二进制指令码的解压。
在此,“运行时引擎”对二进制指令码的解压缩可以通过软件实现,例如,在计算平台上或平台外的CPU上执行。在本发明的其他实施例中,对上述二进制指令码的解压缩也可以通过硬件逻辑结构实现,例如利用FPGA实现。
为了适用于神经网络应用中大量的并行计算,用于执行二进制指令码的计算平台可以至少部分由GPU、FPGA或ASIC实现。在一个优选实施例中,适用于CNN计算的DPU的卷积计算核由FPGA实现。
如上参考图2-3描述了根据本发明的压缩编译器以及对应的解压缩器。如下将参考图4描述根据本发明的压缩编译方法。
图4示出了根据本发明一个实施例的用于神经网络的压缩编译方法。该方法可由上述压缩编译器实现。
在步骤S410,获取神经网络算法,所述神经网络算法包括神经网络算法的拓扑结构和神经网络算法的参数。
在步骤S420,基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码。
在一个实施例中,步骤S420可以包括:基于所述神经网络算法生成用于计算平台执行神经网络计算的二进制指令码;以及根据预定的无损数据压缩算法,压缩所述二进制指令码。对二进制指令码的压缩可以是针对生成的全部二进制指令码进行整体压缩,也可以是针对二进制指令码进行与所述神经网络算法分层相对应的逐层压缩。例如,可以是二进制指令码完全编译生完成后的逐层压缩,也可以是伴随二进制指令码逐层生成过程中的逐层对应压缩。
在另一个实施例中,步骤S420可以包括:基于所述神经网络算法生成汇编代码;根据预定的无损数据压缩算法,压缩所述汇编代码以生成所述经压缩的汇编代码;以及将经压缩的汇编代码转换成所述经压缩的二进制指令码。同样地,对汇编代码压缩可以是针对生成的全部汇编代码进行整体压缩,也可以是针对汇编代码进行与所述神经网络算法分层相对应的逐层压缩。例如,可以是汇编代码完全编译完成后的逐层压缩,也可以是伴随汇编代码逐层生成过程中的逐层对应压缩。
经压缩的二进制指令码包括如下之一:仅对应的所述神经网络算法的参数或其部分被压缩的二进制指令码;以及对应的所述神经网络算法的参数和所述神经网络算法的拓扑结构都被压缩的二进制指令码。换句话说,基于具体应用,压缩可以仅针对参数,也可以针对参数和拓扑结构两者。
神经网络可以是进行了计算优化的神经网络。例如,神经网络可以是稀疏化神经网络,由此在经压缩的二进制指令码中神经网络参数所包含的大量的零值参数可以被压缩掉。进一步地,神经网络参数使用整型数值表示,以通过增大数据重复概率提升所述神经网络参数的压缩率。
用于进行代码压缩的预定的无损数据压缩算法可以包括如下的至少一种:Huffman编码算法、Lempel-Ziv编码算法、Arithmetic编码算法、Shannon-Fano编码算法、RLE编码算法和Dictionary编码算法。本发明在此不做具体限制。在一个实施例中,优选使用能够更好地适用于神经网络参数的稀疏性和/或由整型表示带来的高重复性的压缩算法。
相应地,为了执行上述经压缩编译的二进制指令码,本发明还涉及一种神经网络的代码执行方法。图5示出了根据本发明一个实施例的神经网络代码执行方法的流程图。该方法可以在神经网络计算平台(例如,DPU)上实现,例如由上述DPU运行时引擎实现支持。
在步骤S510,获取如上方法编译压缩的二进制指令码;以及
在步骤S520,解压缩所述二进制指令码用于在计算平台上的执行。
图6示出了根据本发明一个实施例可用于实现上述压缩编译方法的数据处理的计算设备的结构示意图。
参见图6,计算设备600包括存储器610和处理器620。
处理器620可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器1020可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器1020可以使用定制的电路实现,例如特定用途集成电路(ASIC,Application Specific Integrated Circuit)或者现场可编程逻辑门阵列(FPGA,Field Programmable Gate Arrays)。
存储器610可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器1020或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器1010可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器1010可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器610上存储有可处理代码,当可处理代码被处理器620处理时,可以使处理器1020执行上文述及的压缩编译方法。在一个实施例中,上文述及的压缩编译器可以实现为压缩编译程序,同样可由存储器610存储,并由处理器620执行。
在实际使用中,上述计算设备600可以是包括大容量存储装置610和CPU 620的通用计算设备。该通用计算设备可以与专用于执行神经网络计算且至少部分由数字电路实现的计算平台相结合,以实现高效的神经网络计算。在一个实施例中,本发明的神经网络计算系统可以在包括通用处理器、存储器和数字电路的片上系统(SoC)实现。图7示出了可用于实现本发明所涉及神经网络计算的SoC的一个例子。
在一个实施例中,可由SoC上的数字电路部分(例如,FPGA)来实现本系统所需的深度学习网络,例如卷积神经网络。例如,使用FPGA或主要由FPGA组成的DPU来实现根据本发明所获得的二进制代码的具体执行部。由于CNN进行的是并行计算,因此通过逻辑硬件,尤其是FPGA来实现神经网络计算功能具有天然优势,并且相比于软件执行,能够实现更低的功耗。
在一个实施例中,可以将通过在前训练得到的有关CNN的全部参数都存储在片上系统的存储器(例如,主存储器)中,在随后进行神经网络计算或推理(例如,目标检测)时,首先从主存储器中读取CNN各层的参数并结合CNN拓扑结构来进行根据本发明原理的编译压缩。随后将压缩的二进制指令码经运行时引擎解压缩之后,再由图7所示的可编程逻辑模块(例如,实现为DPU)进行执行。由此通过缩短编译时间并减小二进制指令码所占据的空间来提升计算系统的整体运行效率。应该理解的是,还可以使用图7所示以外的其他架构来实现通用计算系统与异构计算系统(例如,DPU)的高效结合,这些架构都能够实现本发明的编译压缩以及对解压代码的高效执行。
上文中已经参考附图详细描述了根据本发明的压缩编译方案。本发明面向深度神经外网络创造性地提出的压缩编译方法,可有效解决深度神经网络算法编译时间长、存储空间占用过大的问题,能将流行的深度神经网络编译时间从数分钟缩短为数秒、将编译生成的DPU二进制指令码所需的存储空间减少数倍甚至数十倍,可有效提高深度学习应用程序编译开发的效率,同时也有效解决了深度神经网络对系统存储空间占用过大的问题,对于深度学习应用向嵌入式移动端设备的推广意义深远。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (22)
1.一种用于神经网络的编译压缩方法,包括:
获取神经网络算法,所述神经网络算法包括神经网络算法的拓扑结构和神经网络算法的参数;
基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码。
2.如权利要求1所述的方法,其中,基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码包括:
基于所述神经网络算法生成用于计算平台执行神经网络计算的二进制指令码;以及
根据预定的无损数据压缩算法,压缩所述二进制指令码。
3.如权利要求2所述的方法,其中,根据预定的无损数据压缩算法,压缩所述二进制指令码包括如下至少一项:
针对生成的全部二进制指令码进行整体压缩;以及
针对二进制指令码进行与所述神经网络算法分层相对应的逐层压缩。
4.如权利要求1所述的方法,其中,基于所述神经网络算法生成用于计算平台执行神经网络计算的、经压缩的二进制指令码包括:
基于所述神经网络算法生成汇编代码;
根据预定的无损数据压缩算法,压缩所述汇编代码以生成所述经压缩的汇编代码;以及
将经压缩的汇编代码转换成所述经压缩的二进制指令码。
5.如权利要求4所述的方法,其中,根据预定的无损数据压缩算法,压缩所述汇编代码包括如下至少一项:
针对生成的全部汇编代码进行整体压缩;以及
针对汇编代码进行与所述神经网络算法分层相对应的逐层压缩。
6.如权利要求2-5中任一项所述的方法,其中,所述预定的无损数据压缩算法包括如下的至少一种:
Huffman编码算法、Lempel-Ziv编码算法、Arithmetic编码算法、Shannon-Fano编码算法、RLE编码算法、和Dictionary编码算法。
7.如权利要求1所述的方法,其中,并且所述经压缩的二进制指令码包括如下之一:
仅对应的所述神经网络算法的参数或其部分被压缩的二进制指令码;
对应的所述神经网络算法的参数和所述神经网络算法相对应的指令都被压缩的二进制指令码。
8.如权利要求1所述的方法,其中,所述神经网络是稀疏化神经网络,并且在所述经压缩的二进制指令码中所述神经网络参数所包含的大量的零值参数被压缩。
9.如权利要求1所述的方法,其中,所述神经网络参数使用整型数值表示,以通过增大数据重复概率提升所述神经网络参数的压缩率。
10.一种神经网络压缩编译器,包括:
编译前端,用于对输入的神经网络算法进行分析,所述神经网络算法包括神经网络算法的拓扑结构和神经网络算法的参数;
优化器,用于对所述神经网络算法和/或所述分析生成的中间表示进行优化;
指令压缩生成器,用于生成计算平台执行神经网络计算所需的、经压缩的二进制指令码。
11.如权利要求10所述的压缩编译器,其中,所述指令压缩生成器还包括:
代码生成器,用于基于优化后的所述神经网络算法和/或中间表示生成计算平台执行神经网络计算所需的二进制指令码;以及
代码压缩器,用于根据预定的无损数据压缩算法,压缩所述二进制指令码以生成所述经压缩的二进制指令码。
12.如权利要求10所述的压缩编译器,其中,所述指令压缩生成器还包括:
代码生成器,用于基于优化后的所述神经网络算法和/或中间表示生成汇编代码;
代码压缩器,用于根据预定的无损数据压缩算法,压缩所述汇编代码以生成所述经压缩的汇编代码;以及
压缩汇编器,用于将经压缩的汇编代码转换成经压缩的二进制指令码。
13.如权利要求11或12所述的压缩编译器,其中,所述代码压缩器使用的预定的无损数据压缩算法包括如下的至少一种:
Huffman编码算法、Lempel-Ziv编码算法、Arithmetic编码算法、Shannon-Fano编码算法、RLE编码算法、和Dictionary编码算法。
14.如权利要求11或12所述的压缩编译器,其中,所述代码压缩器针对所述代码生成器生成的代码,进行整体压缩或与所述神经网络算法分层相对应的逐层压缩。
15.如权利要求11或12所述的压缩编译器,其中,所述神经网络是稀疏化神经网络,并且所述代码压缩器能够压缩所述神经网络参数所包含的大量的零值参数。
16.如权利要求10所述的压缩编译器,其中,所述神经网络参数使用整型数值表示,以通过增大数据重复概率提升所述代码压缩器对所述神经网络参数的压缩率。
17.一种神经网络的代码执行方法,包括:
获取如权利要求1-9中任一项所述方法和/或如权利要求10-16任一项所述神经网络压缩编译器编译压缩的二进制指令码;以及
解压缩所述二进制指令码用于在计算平台上的执行。
18.一种神经网络代码解压器,用于对权利要求1-9中任一项所述方法和/或如权利要求10-16中任一项所述神经网络压缩编译器所编译压缩的二进制指令码进行解压。
19.如权利要求19所述的神经网络代码解压器,其中,所述神经网络代码解压器在运行时引擎中实现。
20.如权利要求19所述的神经网络代码解压器,其中,经解压的二进制指令码在至少部分由GPU、FPGA或ASIC实现的计算平台上运行。
21.一种计算设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1-9或17中任何一项所述的方法。
22.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1-9或17中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810333784.8A CN110377288A (zh) | 2018-04-13 | 2018-04-13 | 神经网络压缩编译器及其编译压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810333784.8A CN110377288A (zh) | 2018-04-13 | 2018-04-13 | 神经网络压缩编译器及其编译压缩方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110377288A true CN110377288A (zh) | 2019-10-25 |
Family
ID=68243737
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810333784.8A Pending CN110377288A (zh) | 2018-04-13 | 2018-04-13 | 神经网络压缩编译器及其编译压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110377288A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110908667A (zh) * | 2019-11-18 | 2020-03-24 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN111431540A (zh) * | 2020-04-01 | 2020-07-17 | 西安交通大学 | 一种基于神经网络模型的fpga配置文件算术压缩与解压方法 |
CN112261023A (zh) * | 2020-10-15 | 2021-01-22 | 苏州浪潮智能科技有限公司 | 一种卷积神经网络的数据传输方法和装置 |
CN112328227A (zh) * | 2020-11-03 | 2021-02-05 | 清华大学 | 编译方法、装置、计算设备和介质 |
CN112529175A (zh) * | 2020-11-05 | 2021-03-19 | 上海交通大学 | 神经网络的编译方法、系统、计算机存储介质及编译设备 |
CN112784625A (zh) * | 2019-11-04 | 2021-05-11 | 广东毓秀科技有限公司 | 一种行人重识别模型的加速与压缩的方法 |
WO2021109696A1 (zh) * | 2019-12-03 | 2021-06-10 | 嘉楠明芯(北京)科技有限公司 | 数据压缩、解压缩以及基于数据压缩和解压缩的处理方法及装置 |
WO2021139633A1 (zh) * | 2020-01-07 | 2021-07-15 | 深圳鲲云信息科技有限公司 | 深度学习模型的转化方法、装置、服务器及存储介质 |
US20210279570A1 (en) * | 2020-03-03 | 2021-09-09 | Hrl Laboratories, Llc | Method for proving or identifying counter-examples in neural network systems that process point cloud data |
CN113759884A (zh) * | 2021-11-08 | 2021-12-07 | 西安热工研究院有限公司 | 一种分散控制系统输入输出点产物文件生成方法和系统 |
CN113918163A (zh) * | 2021-10-08 | 2022-01-11 | 苏州浪潮智能科技有限公司 | 一种神经网络模型的编译方法、系统、设备及存储介质 |
WO2022121724A1 (zh) * | 2020-12-07 | 2022-06-16 | 华为技术有限公司 | 一种数据处理装置及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104156990A (zh) * | 2014-07-03 | 2014-11-19 | 华南理工大学 | 一种支持特大型数据窗口的无损压缩编码方法及系统 |
CN105868641A (zh) * | 2016-04-01 | 2016-08-17 | 北京理工大学 | 基于虚函数表劫持的防御方法 |
CN107092961A (zh) * | 2017-03-23 | 2017-08-25 | 中国科学院计算技术研究所 | 一种基于模式频率统计编码的神经网络处理器及设计方法 |
CN107395209A (zh) * | 2017-07-03 | 2017-11-24 | 北京京东尚科信息技术有限公司 | 数据压缩方法、数据解压缩方法及其设备 |
-
2018
- 2018-04-13 CN CN201810333784.8A patent/CN110377288A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104156990A (zh) * | 2014-07-03 | 2014-11-19 | 华南理工大学 | 一种支持特大型数据窗口的无损压缩编码方法及系统 |
CN105868641A (zh) * | 2016-04-01 | 2016-08-17 | 北京理工大学 | 基于虚函数表劫持的防御方法 |
CN107092961A (zh) * | 2017-03-23 | 2017-08-25 | 中国科学院计算技术研究所 | 一种基于模式频率统计编码的神经网络处理器及设计方法 |
CN107395209A (zh) * | 2017-07-03 | 2017-11-24 | 北京京东尚科信息技术有限公司 | 数据压缩方法、数据解压缩方法及其设备 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112784625A (zh) * | 2019-11-04 | 2021-05-11 | 广东毓秀科技有限公司 | 一种行人重识别模型的加速与压缩的方法 |
CN110908667B (zh) * | 2019-11-18 | 2021-11-16 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
CN110908667A (zh) * | 2019-11-18 | 2020-03-24 | 北京迈格威科技有限公司 | 神经网络联合编译的方法、装置和电子设备 |
WO2021109696A1 (zh) * | 2019-12-03 | 2021-06-10 | 嘉楠明芯(北京)科技有限公司 | 数据压缩、解压缩以及基于数据压缩和解压缩的处理方法及装置 |
WO2021139633A1 (zh) * | 2020-01-07 | 2021-07-15 | 深圳鲲云信息科技有限公司 | 深度学习模型的转化方法、装置、服务器及存储介质 |
US20210279570A1 (en) * | 2020-03-03 | 2021-09-09 | Hrl Laboratories, Llc | Method for proving or identifying counter-examples in neural network systems that process point cloud data |
CN111431540A (zh) * | 2020-04-01 | 2020-07-17 | 西安交通大学 | 一种基于神经网络模型的fpga配置文件算术压缩与解压方法 |
CN111431540B (zh) * | 2020-04-01 | 2021-10-08 | 西安交通大学 | 一种基于神经网络模型的fpga配置文件算术压缩与解压方法 |
CN112261023A (zh) * | 2020-10-15 | 2021-01-22 | 苏州浪潮智能科技有限公司 | 一种卷积神经网络的数据传输方法和装置 |
CN112328227A (zh) * | 2020-11-03 | 2021-02-05 | 清华大学 | 编译方法、装置、计算设备和介质 |
CN112529175A (zh) * | 2020-11-05 | 2021-03-19 | 上海交通大学 | 神经网络的编译方法、系统、计算机存储介质及编译设备 |
CN112529175B (zh) * | 2020-11-05 | 2022-03-18 | 上海交通大学 | 神经网络的编译方法、系统、计算机存储介质及编译设备 |
WO2022121724A1 (zh) * | 2020-12-07 | 2022-06-16 | 华为技术有限公司 | 一种数据处理装置及方法 |
CN113918163A (zh) * | 2021-10-08 | 2022-01-11 | 苏州浪潮智能科技有限公司 | 一种神经网络模型的编译方法、系统、设备及存储介质 |
CN113759884A (zh) * | 2021-11-08 | 2021-12-07 | 西安热工研究院有限公司 | 一种分散控制系统输入输出点产物文件生成方法和系统 |
CN113759884B (zh) * | 2021-11-08 | 2022-02-01 | 西安热工研究院有限公司 | 一种分散控制系统输入输出点产物文件生成方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110377288A (zh) | 神经网络压缩编译器及其编译压缩方法 | |
Gopinath et al. | Compiling KB-sized machine learning models to tiny IoT devices | |
Beszédes et al. | Survey of code-size reduction methods | |
Liao et al. | An empirical study of the impact of hyperparameter tuning and model optimization on the performance properties of deep neural networks | |
US20200349467A1 (en) | Preparing Structured Data Sets for Machine Learning | |
US9337863B1 (en) | Methods and apparatus for rational compression and decompression of numbers | |
Andrzejewski et al. | GPU-WAH: Applying GPUs to compressing bitmap indexes with word aligned hybrid | |
Li et al. | Optimizing deep neural networks on intelligent edge accelerators via flexible-rate filter pruning | |
Zheng et al. | {SparTA}:{Deep-Learning} Model Sparsity via {Tensor-with-Sparsity-Attribute} | |
CN103915092A (zh) | 语音识别方法和装置 | |
CN111444513B (zh) | 一种电网嵌入式终端的固件编译优化选项识别方法及装置 | |
CN112764738A (zh) | 基于多视图程序特征的代码自动生成方法及系统 | |
CN114676830B (zh) | 一种基于神经网络编译器的仿真实现方法 | |
US8515882B2 (en) | Efficient storage of individuals for optimization simulation | |
CN105302915B (zh) | 基于内存计算的高性能数据处理系统 | |
Ahmad et al. | Leveraging parallel data processing frameworks with verified lifting | |
CN102270262A (zh) | 集成电路仿真模拟波形压缩和解压缩方法及装置 | |
CN114611697B (zh) | 神经网络量化及部署方法、系统、电子设备及存储介质 | |
Cowan et al. | Automating generation of low precision deep learning operators | |
CN113885845A (zh) | 深度学习编译器的计算图的生成方法、系统、设备及介质 | |
CN109412604A (zh) | 一种基于语言模型的数据压缩方法 | |
Hu et al. | Smart-DNN: Efficiently reducing the memory requirements of running deep neural networks on resource-constrained platforms | |
JP4754909B2 (ja) | コンパイラ装置、コンパイル方法、コンパイラプログラム | |
CN113592701A (zh) | 将梯度压缩算法开发注册到深度学习框架中的方法及系统 | |
CN111797984A (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 |