CN113688982A - 处理单元、相关装置和方法 - Google Patents
处理单元、相关装置和方法 Download PDFInfo
- Publication number
- CN113688982A CN113688982A CN202010427312.6A CN202010427312A CN113688982A CN 113688982 A CN113688982 A CN 113688982A CN 202010427312 A CN202010427312 A CN 202010427312A CN 113688982 A CN113688982 A CN 113688982A
- Authority
- CN
- China
- Prior art keywords
- constant
- node
- nodes
- subgraph
- deep learning
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种处理单元、相关装置和方法。该处理单元,包括:取指令单元;指令译码单元;指令执行单元,用于:在深度学习模型的静态图中提取常量子图,其中,所述常量子图是在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点组成的连通子图;将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量;以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型。本公开实施例进一步减少了深度学习模型运行时在处理单元和加速单元之间传输的数据量,提高了深度学习模型的执行效率。
Description
技术领域
本公开涉及芯片领域,更具体而言,涉及一种处理单元、相关装置和方法。
背景技术
传统的处理单元(如CPU,中央处理器)在一些专门用途的领域(例如深度学习模型)的计算时,往往效率不高。为了提高在专门用途的领域(例如深度学习)中的处理效率,采用专门的加速单元,如神经网络处理单元(NPU)等。这种加速单元在处理单元的调度下执行专门的深度学习处理(如神经网络处理)。由于加速单元内部具有片上内存,减少了在神经网络计算时处理单元和加速单元之间大量频繁传递数据的开销。
目前,将深度学习模型部署到加速单元上主要基于深度学习模型的静态图来进行。静态图即预先定义的反映深度学习模型的各种计算节点及各种计算节点之间的关系的图。实际运行时编制的模型代码完全根据该静态图编制。由于其是先定义后运行,之后每次运行时就不再需要构建新的计算图,运行的速度较快。这样,基于该静态图,可以进行深度学习模型的转换(即由特定格式或框架转变为通用格式表达),在静态图的具体节点位置前插入量化节点进行量化,并对量化后的深度学习模型进行编译,编译成加速单元能够识别的加速单元模型,部署到加速单元上执行。
在深度学习模型的静态图中,有一部分节点是常量节点,其输出永远是常量。静态图中的某些区域中,这些常量节点还互相连通,形成常量子图。这些常量节点的运算很难被专用于进行深度学习模型处理的加速单元所加速。它们的存在会导致模型运行时大量常量在处理单元和加速单元之间传输,降低深度学习模型的执行效率。实际上,由于常量和常量之间的运算仍然是常量,实际上不需要将这些常量节点一一部署到加速单元,只需要把这一片互相连通的常量节点在该区域中最后的常量运算结果作为一个节点部署到加速单元。用一个统一的结果常量节点取代一片相互连通的常量节点,会减少实际模型执行时处理单元和加速单元之间传输的数据量,提高模型执行效率。这种方法叫做常量折叠。但该技术仅仅对于连通的常量节点进行折叠,折叠效率仍然有优化空间,模型执行效率有待进一步提高。
发明内容
有鉴于此,本公开旨在进一步减少深度学习模型运行时在处理单元和加速单元之间传输的数据量,提高深度学习模型的执行效率。
根据本公开的一方面,提供了一种处理单元,包括:
取指令单元,用于从所述处理单元外部的存储器取回计算机指令;
指令译码单元,用于对取回的计算机指令进行译码;
指令执行单元,用于执行译码后的所述计算机指令,以实现:在深度学习模型的静态图中提取常量子图,其中,所述常量子图是在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点组成的连通子图;将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,所述出口节点是指所述常量子图中的、输出端指向所述常量子图的外部节点且输入端为所述常量子图的内部节点的节点;以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型。
可选地,所述在深度学习模型的静态图中提取常量子图,包括:
在所述静态图中标出常量节点、以及只与所述深度学习模型的输入张量的形状有关的形状关联节点;
基于标出的常量节点和形状关联节点,提取所述常量子图。
可选地,所述基于标出的常量节点和形状关联节点,提取所述常量子图,包括:
重复执行将所述静态图中、输入端皆为已标出节点的节点标出,直到输入端皆为已标出节点的节点都被标出;
将标出的节点中相互连通的节点划分到一个常量子图中。
可选地,所述将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,包括:
构造满足所述固定形状的张量;
将构造的张量作为输入张量输入所述静态图;
获取所述常量子图的出口节点输出的常量。
可选地,所述以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型,包括:
删除所述常量子图;
以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点。
可选地,所述删除所述常量子图,包括:
将所述出口节点、与所述出口节点的输出端所指向的外部节点之间的指向关系删除;
重复执行删除所述静态图中出度为0的节点,直到出度为0的节点的节点不存在,其中,所述出度为节点的输出端指向的节点数。
可选地,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:在形成第二深度学习模型后,将第二深度学习模型转换成通用中间表达。
可选地,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:在将第二深度学习模型转换成通用中间表达后,在所述通用中间表达中插入最大最小值收集节点,用于收集待量化输入的最大值、最小值;将插入了所述最大最小值收集节点的通用中间表达转换回所述特定格式进行校准,得到所述待量化输入的最大值、最小值;根据得到的待量化输入的最大值、最小值,在所述通用中间表达中插入量化和反量化节点;将插入了量化节点和反量化节点的通用中间表达转换回特定格式,得到量化后模型。
可选地,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:在得到量化后模型后,将所述量化后模型按照加速单元支持的指令集,转换成加速单元模型,发送给所述加速单元。
根据本公开的一方面,提供了一种计算装置,包括:
如上所述的处理单元;
存储器,用于存储所述计算机指令;
所述加速单元,用于运行所述深度学习模型。
根据本公开的一方面,提供了一种片上系统,包括用于运行所述深度学习模型的加速单元,所述深度学习模型由如上所述的处理单元处理后部署在所述加速单元上。
根据本公开的一方面,提供了一种数据中心,包括如上所述的计算装置。
根据本公开的一方面,提供了一种处理方法,包括:
在深度学习模型的静态图中提取常量子图,其中,所述常量子图是在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点组成的连通子图;
将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,所述出口节点是指所述常量子图中的、输出端指向所述常量子图的外部节点且输入端为所述常量子图的内部节点的节点;
以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型。
可选地,所述在深度学习模型的静态图中提取常量子图,包括:
在所述静态图中标出常量节点、以及只与所述深度学习模型的输入张量的形状有关的形状关联节点;
基于标出的常量节点和形状关联节点,提取所述常量子图。
可选地,所述基于标出的常量节点和形状关联节点,提取所述常量子图,包括:
重复执行将所述静态图中、输入端皆为已标出节点的节点标出,直到输入端皆为已标出节点的节点都被标出;
将标出的节点中相互连通的节点划分到一个常量子图中。
可选地,所述将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,包括:
构造满足所述固定形状的张量;
将构造的张量作为输入张量输入所述静态图;
获取所述常量子图的出口节点输出的常量。
可选地,所述以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型,包括:
删除所述常量子图;
以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点。
可选地,所述删除所述常量子图,包括:
将所述出口节点、与所述出口节点的输出端所指向的外部节点之间的指向关系删除;
重复执行删除所述静态图中出度为0的节点,直到出度为0的节点的节点不存在,其中,所述出度为节点的输出端指向的节点数。
深度学习模型中,除了常量节点输出永远是常量外,还有大量非常量节点,但它们是输出仅与深度学习模型的输入张量的形状有关的节点。由于大多数情况下,深度学习模型的输入张量都是固定形状,因此,在大多数情况下可以认为这些节点的输出也是固定的。本公开实施例在确定静态图中的常量子图时,不但考虑常量节点,还将这些只与深度学习模型的输入张量的形状有关的节点也考虑进去,而且还考虑到这两种节点对下游节点的影响,将那些由于这两种节点的影响输出也变得固定的节点也考虑进去,基于所有这些输出固定的节点一起确定常量子图,用常量子图的结果输出常量构造一个常量节点,取代所述常量子图,进一步减少了深度学习模型运行时在处理单元和加速单元之间传输的数据量,提高了深度学习模型的执行效率。
附图说明
通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本公开一个实施例所应用的数据中心的结构图;
图2是本公开一个实施例的数据中心中一个服务器的内部结构图;
图3是根据本公开一个实施例服务器内部的处理单元和加速单元的内部结构图;
图4是根据本公开一个实施例的加速单元核的内部结构图;
图5是一个示例性的用于深度学习模型运行平台的层级架构图;
图6是本公开实施例中将深度学习模型部署到加速单元的整个过程的流程图;
图7是根据本公开一个实施例的将深度学习模型进行常量折叠的示例图;
图8是根据本公开一个实施例的处理单元进行常量折叠的处理方法的流程图。
具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在本文中使用以下术语。
深度学习模型:深度学习是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI)。深度学习学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习采用的模型即深度学习模型。深度学习模型根据所依赖的模型框架(framework)不同,其格式也不同,可以分为不同类型的格式,如tensorflow、pytorch、mxnet等。
加速单元:针对传统处理单元在一些专门用途的领域(例如,处理图像、处理深度学习模型的各种运算,等等)效率不高的情况,为了提高在这些专门用途领域中的数据处理速度而设计的处理单元。加速单元也称为人工智能(AI)处理单元,包括中央处理器(CPU)、图形处理器(GPU)、通用图形处理器(GPGPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及专用智能加速硬件(例如,神经网络处理器NPU)。本公开适用于NPU场景,但本公开实施例采用通用编译自定义接口,加速单元硬件实现上可以采用上述CPU、GPU、GPGPU等。
处理单元:在数据中心的服务器中进行传统处理(非用于图像处理和各种深度学习模型等复杂运算的处理)的单元。处理单元除了进行这些非图像处理和各种深度学习模型等复杂运算处理之外,还承担着对加速单元的调度职能,向加速单元分配加速单元需要承担的任务。处理单元可以采用处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
动态图:目前深度学习模型框架分为静态图框架和动态图框架。深度学习模型包括多个层,每个层有多个操作节点。操作节点是深度学习模型中根据输入进行运算得到传递给下一层的输出的基本运算单元,如图7中的卷积602、提取输入张量形状603等分别是一个操作节点。每一层的操作节点输出的结果传送到下一层的操作节点,作为下一层操作节点接收的输入。深度学习模型的图是指深度学习模型中的各操作节点和各操作节点之间的关系的图形表示,其分为动态图和静态图。动态图是指随着实际编写的命令顺序而变化的图。它意味着每次编写的命令不同,随之产生的动态图不同。根据每次编写的命令,确定其中需要的操作节点、以及操作节点之间的执行关系,从而形成不同的动态图。这种机制使得调试更加容易,也使得将大脑中的想法转换成实际代码更加容易。这是因为,动态图是代码编写后根据代码形成的,在编写代码时不用受到动态图的限制。在PyTorch神经网络框架中,采用动态图。
静态图:它是根据深度学习模型的结构在编写代码前预先生成的、表示深度学习模型中的各操作节点和各操作节点之间的关系的图。也就是说,先通过静态图定义好深度学习模型。之后每次运行该深度学习模型时不需要重新构建图,所以采用静态图时深度学习模型的运行速度比动态图快。从理论上讲,静态图这样的机制允许编译器进行更大程度的优化,但是这也意味着所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果静态图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它)。
常量子图:它是静态图中若干连通节点组成的子图,这些连通节点是在假定深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点。这些节点有几种情况:第一种情况是,该节点本身就是一个常量节点,如图7的节点606;第二种情况是,该节点本身不是常量节点,但是一个只与深度学习模型的输入张量的形状有关的节点,由于深度学习模型的输入张量的形状大部分情况下是固定的,所以该节点的输出大部分情况下也是固定的,如图7的提取输入张量形状的节点603;第三种情况是,本身不属于第一种情况的节点和第二种情况的节点,但由于第一种情况的节点和第二种情况的节点导致其输出在大多数情况下固定的节点,如图7的分片节点605,由于其输入来自提取输入张量形状节点603提取的张量形状,而提取输入张量形状节点603提取的张量形状在大多数情况下是固定的,导致分片节点605的输出在大多数情况下固定。另外,图7的和节点607的输入来自分片节点605和常量节点606,由于分片节点605的输出和常量节点606的输出在大多数情况下是固定的,和节点607的输出在大多数情况下也是固定的。在图7中,提取输入张量形状节点603、分片节点605、常量节点606以及和节点607是连通的,组成常量子图。
输入张量:由若干坐标系改变时满足一定坐标转化关系的有序数组成的集合为张量。通俗地讲,它是基于向量和矩阵的推广。将标量视为0阶张量,将向量视为1阶张量,将矩阵视为2阶张量,但是,当横竖两个空间的维度都不足以表示输入的量时,3阶以上张量就产生了。有了张量,可以表示任意维度空间的输入的量。深度学习模型的特点就是能够接收任意维度空间的输入量。无论多少维度的输入量,可以表示为输入张量,该张量输入深度学习模型的第一个层的节点。第一个层的节点具有同样维度空间的权重张量。由于输入张量的维度空间与权重张量的维度空间相同,就可以在同一维度空间内进行输入张量与权重张量的运算,例如点乘、卷积等,产生的输出仍然是相同维度空间的输出。前一个层的节点的输出张量输入到后一个层的节点作为输入,与后一个层的节点的权重张量在同一维度空间再进行张量运算,例如点乘、卷积等,如此不断进行,直到得到最后一层的节点的输出张量,作为整个深度学习模型的输出张量。
输入张量的形状:它是指输入张量的各个维度空间中的维度数。如上所述,输入张量具有不定的维度空间,例如向量属于一维维度空间,矩阵属于二维维度空间。每个维度空间中,输入张量的维度又不同。例如,对于4×5矩阵来说,它具有2个维度空间。在第一个维度空间中,它具有4个维度。在第二个维度空间中,它具有5个维度。因此,4×5矩阵这个输入张量的形状为(4,5)。如果一个输入张量有3个维度空间,其中,第一个维度空间中有6个维度,第二个维度空间中有2个维度,第三个维度空间中有8个维度,则这个输入张量的形状为(6,2,8)。它与输入张量的每个维度空间中的每个维度的具体值无关。
连通子图:它是图的一部分,如果对于该部分中任一个节点,都能在该部分中找到至少一个其它节点与其具有输入输出关系(该至少一个其它节点的输入端或输出端为该节点),这个部分就是图的连通子图。
出口节点:常量子图中的、输出端指向常量子图的外部节点且输入端为常量子图的内部节点的节点。由于常量子图的节点在假定所述深度学习模型的输入张量具有固定形状的前提下输出值都为常量,该出口节点是将这些节点在常量子图中的运算结果最后输出到常量子图的外部的节点。它的输入都来自于常量子图内部节点输出的常量,因此输出也是常量,这个常量是常量子图内部节点输出的常量的运算结果,其输出给常量子图外部的节点,作为常量子图的输出。如图7的和节点607,其输入端为分片节点605和常量节点606这两个常量子图内部节点,其输出端为重新合成形状节点608这个常量子图外部节点。
常量节点:设定常量值的节点,该节点本身不具有运算功能,其输出端指向的节点利用该常量值进行运算。如图7的常量节点606,其本身不提供运算,但该常量节点606设定的常量与分片节点605产生的值在和节点607进行和运算。
常量折叠:将常量子图用构造出的常量节点替代的过程。由于常量子图中每个节点在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量,因此在部署加速单元模型时,实际上不需要将这些常量节点一一部署到加速单元,只需要把这一片互相连通的常量节点在该区域中最后的常量运算结果作为一个节点部署到加速单元。用一个统一的结果常量节点取代一片相互连通的常量节点,会减少实际模型执行时处理单元和加速单元之间传输的数据量,提高模型执行效率。
形状关联节点:输出值仅与所述深度学习模型的输入张量的形状有关的节点。即,所述深度学习模型的输入张量的形状固定后,形状关联节点的输出值也固定了,如图7的提取输入张量形状节点603。
指向关系:静态图中由一个节点向另一个节点的有向箭头表示的关系,其中,发出箭头的节点的输出量发送给箭头指向的节点作为输入量。
出度:出度为节点的输出端指向的节点数。在静态图中,如果节点的输出端没有指向任何节点的指向关系,则该节点的出度为0;如果节点的输出端有一个箭头指向一个其它节点,则该节点的出度为1;如果节点的输出端有两个箭头分别指向两个其它节点,则该节点的出度为2;以此类推。
量化:将深度学习模型的输入张量、以及节点的权重张量和其它参数由高精度数据类型转换为低精度数据类型,从而降低对数据吞吐量和存储空间的要求的行为,例如将32位浮点数量化为8位整型数,虽然模型的精度会由此降低,但模型的执行效率会大大提高,且降低对数据吞吐量和存储空间的要求。
反量化:量化的相反过程,即将将深度学习模型的输入张量、以及节点的权重张量和其它参数由低精度数据类型转换为高精度数据类型的过程。反量化的实现过程是上述量化的实现过程的相反过程。
转换:深度学习模型根据所依赖的模型框架(framework)不同,格式也不同,可以分为不同格式,如tensorflow、pytorch、mxnet等,这些深度学习模型的代码表达也是不同的。这给深度学习模型后续量化、编译等造成了困难,因此要将不同模型框架或格式的深度学习模型变换成统一框架或格式,这一过程叫做转换。它解析深度学习模型中每个代码语句的含义,按照代码语句的含义将语句翻译成通用的表达形式,使得不同深度学习模型中同样含义的代码语句在通用的表达形式中的表达都一样。目前,有不同深度学习模型的表达转换成通用的表达形式的工具产品。
通用中间表达:上述转换过程将不同模型框架或格式的深度学习模型变换成的上述通用的表达形式。
校准:如上述量化的例子中,量化时首先要确定深度学习模型中操作节点的输入的取值范围,只有确定了待量化的输入的最大值、最小值,才能将待量化的输入的最大值、最小值映射到量化后的最大值、最小值,从而完成待量化的输入的量化。校准即确定待量化的输入的最大值、最小值的过程。
最大值最小值收集节点:安插在程序中的特定位置,用于收集程序运行时该特定位置产生的值的最大值和最小值的程序和相关数据。它包括收集该特定位置产生的各个值并确定最大值和最小值的程序代码、以及在这个过程中需要使用的数据。
量化和反量化节点:安插在程序中的特定位置,分别用于执行上述的量化和反量化操作的程序和相关数据。这样,当深度学习模型运行到量化节点时,执行量化操作;运行到反量化节点时,执行反量化操作。
量化后模型:上述深度学习模型经上述量化后产生的模型。
编译:深度学习模型仅能被处理单元的指令集支持,并不能被加速单元的指令集支持,从而直接在加速单元上执行。为了能够使深度学习模型能够被加速单元的指令集支持并在加速单元上执行,需要进行编译,即将深度学习模型转化成能够被加速单元的指令集支持的模型。
加速单元模型:深度学习模型经上述编译过程转化成的能够被加速单元的指令集支持的模型。
本公开的应用环境
本公开实施例提出了一种通用的、适合各种深度学习模型的量化方案。整个编译优化的方案相对较为通用。在处理单元上完成量化后的模型,可以用于各种执行该模型的硬件设备,例如,用于数据中心、用于AI(人工智能)加速单元,用于GPU(图形处理单元),用于能执行深度学习模型的IOT(物联网)设备,嵌入式设备等。该编译优化方法与模型最终部署在的硬件无关。但为了示例性描述,下文中将主要以数据中心为应用场景进行描述。本领域技术人员应当理解,本公开实施例还可以适用于其它的应用场景。
数据中心
数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而深度学习作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。
在传统的大型数据中心,网络结构通常如图1所示,即互连网络模型(hierarchical inter-networking model)。这个模型包含了以下部分:
服务器140:各服务器140是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器140完成的。
接入交换机130:接入交换机130是用来让服务器140接入到数据中心中的交换机。一台接入交换机130接入多台服务器140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(Top of Rack)交换机,它们物理连接服务器。
汇聚交换机120:每台汇聚交换机120连接多台接入交换机130,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。
核心交换机110:核心交换机110为进出数据中心的包提供高速的转发,为汇聚交换机120提供连接性。整个数据中心的网络分为L3层路由网络和L2层路由网络,核心交换机110为通常为整个数据中心的网络提供一个弹性的L3层路由网络。
通常情况下,汇聚交换机120是L2和L3层路由网络的分界点,汇聚交换机120以下的是L2网络,以上是L3网络。每组汇聚交换机管理一个传送点(POD,Point Of Delivery),每个POD内都是独立的VLAN网络。服务器在POD内迁移不必修改IP地址和默认网关,因为一个POD对应一个L2广播域。
汇聚交换机120和接入交换机130之间通常使用生成树协议(STP,Spanning TreeProtocol)。STP使得对于一个VLAN网络只有一个汇聚层交换机120可用,其他的汇聚交换机120在出现故障时才被使用(上图中的虚线)。也就是说,在汇聚交换机120的层面,做不到水平扩展,因为就算加入多个汇聚交换机120,仍然只有一个在工作。
服务器
由于服务器140才是数据中心真实的处理设备,图2示出了一个服务器140内部的结构框图。服务器140包括有总线连接的存储器210、处理单元集群270和加速单元集群280。处理单元集群270包括多个处理单元220。加速单元集群280包括多个加速单元230。加速单元230即为了提高在专门用途领域中的数据处理速度而设计的处理单元。加速单元也称为人工智能(AI)处理单元,包括中央处理器(CPU)、图形处理器(GPU)、通用图形处理器(GPGPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及专用智能加速硬件(例如,神经网络处理器NPU)。本公开实施例适用于NPU场景,但由于采用通用编译自定义接口,硬件下也可以使用CPU、GPU、GPGPU等。处理单元是对加速单元进行调度、向各加速单元分配要执行的待执行指令序列的处理单元,它可以采用处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
传统的处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有效,而在大规模并行计算方面则效率不够。因此,开发出了各种专门的加速单元,用来针对不同功能和不同领域的计算进行更有效的提高运算速度的处理。本发明提出的加速单元是专用于加速深度学习模型的运算处理速度的处理单元。它是采用数据驱动并行计算的架构,用于处理各深度学习模型节点的大量运算(例如卷积、池化等)的处理单元。由于各深度学习模型节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧密联系,会被经常用到,用现有的处理单元构架,由于处理单元的核内的内存容量很小,因此要大量频繁访问核外存储器,造成处理的低效。采用这种专用于加速深度学习模型的运算处理速度的加速单元,由于其每个核中具有适于深度学习模型计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大提高处理效率,提高计算性能。
加速单元230要接受处理单元220的调度。如图2所示,存储器210中存储有各种深度学习模型,包括这些模型的节点和节点的权重张量等。这些深度学习模型当需要时被图2中的一个处理单元220部署到一个加速单元230。即,处理单元220可以通过指令的形式向加速单元230发送模型中的参数(如各节点的权重张量)在存储器210中的地址。加速单元230在实际使用该深度学习模型进行计算时,就会根据这些参数(例如权重张量)在存储器210中的地址,直接在存储器210中寻址这些参数,将其暂存在其片上内存中。加速单元230在实际使用该深度学习模型进行计算时,处理单元220还会将模型的输入张量通过指令的形式发送给加速单元230,暂存在加速单元230的片上内存中。这样,加速单元230就可以根据这些输入张量和模型中的参数(例如权重张量)进行推理计算。
处理单元和加速单元的内部结构
下面结合图3的处理单元220与加速单元230的内部结构图,具体说明处理单元220是如何调度加速单元230进行工作的。
如图3所示,处理单元220内包含多个处理器核222和被多个处理器核222共享的高速缓存221。每个处理器核222包括取指令单元203、指令译码单元224、指令发射单元225、指令执行单元226。
取指令单元223用于将要执行的指令从存储器210中搬运到指令寄存器(可以是图3示出的寄存器堆229中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
取出指令后,处理单元220进入指令译码阶段,指令译码单元224按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元225的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
指令发射单元225位于指令译码单元224与指令执行单元226之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元226,使得多个指令的并行操作成为可能。
指令发射单元225将指令发射到指令执行单元226后,指令执行单元226开始执行指令。但如果该指令执行单元226判断该指令应该是加速单元执行的,则将其转发到相应的加速单元执行。例如,如果该指令是一条深度学习模型推理(inference)的指令,指令执行单元226不再执行该指令,而是将该指令通过总线发送到加速单元230,由加速单元230执行。
本公开实施例虽然用于NPU场景,由于采用通用编译自定义接口,图3示出的加速单元230不限于NPU,还可以是GPGPU。GPGPU即通用图形处理器,是一种利用处理图形任务来计算原本由中央处理器处理的通用计算任务的图形处理器。这些通用计算常常与图形处理没有任何关系。由于现代图形处理器强大的并行处理能力和可编程流水线,令流处理器可以处理非图形数据。特别在面对单指令流多数据流(SIMD),且数据处理的运算量远大于数据调度和传输的需要时,通用图形处理器在性能上大大超越了传统的中央处理器应用程序,因此能够起到加速的作用,与NPU一样属于加速单元30。即使执行NPU场景的计算,其同样也能够发挥作用。另外,加速单元30还可以是CPU、GPU、FPGA、ASIC等。
加速单元230内部包括多个核236(图3中示出了4个核,但本领域技术人员应当理解,加速单元230中也可以包含其它数目的核236)、命令处理器237、直接存储访问机制235、和总线通道231。
总线通道231是指令从总线进出加速单元230的通道。
直接内存访问(DMA,Direct Memory Access)机制235是一些计算机总线架构提供的功能,它能使数据从附加设备直接写入计算机主板的存储器上。这种方式相比于设备之间所有的数据传输都要通过处理单元的方式,大大提高了数据访问的效率。正是因为有这样的机制,加速单元230的核可以直接访问存储器210,读取深度学习模型中的参数(例如各节点的权重张量)等,大大提高了数据访问效率。
命令处理器237将由处理单元220发送至加速单元230的指令分配给核236执行。指令执行单元226将需要加速单元230执行的待执行指令序列发送给加速单元230。该待执行指令序列从总线通道231进入后,缓存在命令处理器237,由命令处理器237选择核236,将指令序列分配给其执行。另外,命令处理器237还负责核236之间的同步操作。
加速单元核
图4是根据本公开一个实施例的加速单元核的内部结构图。
在一个实施例中,如图4所示,加速单元核236包括张量引擎310、池化引擎320、存储器拷贝引擎330、定序器350、指令缓存器340、片上内存360、常数缓冲器370。
命令处理器237分配给加速单元核236的指令序列首先进入指令缓存器340缓存。然后,定序器350从指令缓存器340中按照先进先出的顺序取指令,根据指令的性质分配给张量引擎310或池化引擎320执行。张量引擎310负责处理深度学习模型中的卷积和矩阵乘法等相关操作。池化引擎320负责处理深度学习模型中的池化操作。存储器拷贝引擎330是专门处理数据拷贝的单元,这里的数据拷贝包括由于片上内存360可能会溢出而将一些数据由片上内存360拷贝到各核236共享的存储器,或者其它核236的片上内存360。定序器350根据取出的指令是卷积、矩阵乘法、池化、还是数据拷贝等操作性质,决定将指令分配给张量引擎310、池化引擎320、或者存储器拷贝引擎330。
片上内存360是存储深度学习模型中的权重张量、以及深度学习模型实际使用时的输入张量和各种中间结果的核内存储器。常数缓冲器370是存储深度学习模型中除权重张量之外的其它常量参数(例如,神经网络模型中的超参)的缓冲器。如上所述,在处理单元220将深度学习模型预先配置在加速单元230的过程中,处理单元220通过指令的形式向加速单元230发送模型中的参数在存储器210中的地址。这些参数包括节点的权重张量和其它参数(例如超参)。对于权重张量,加速单元230在实际的深度学习模型运算时,将它从存储器210相应的位置取出,放在片上内存360中。对于其它参数,加速单元230在实际的深度学习模型运算时,从存储器210相应的位置取出,放在常数缓冲器370中。另外,当实际开始推理(inference)的指令由命令处理器237分配给核236执行后,指令中的输入张量(给深度学习模型的输入)也存储在片上内存360。另外,当张量引擎310和池化引擎320进行卷积或池化运算后,得到的各种中间结果也存放在片上内存360中。
深度学习模型运行的软件体系架构
图1-4从大到小描述了深度学习模型运行所依赖的硬件结构,下面结合图5描述深度学习模型运行所依赖的软件体系构架,即深度学习模型运行平台的层级架构。参见图5所示,从上往下,架构图包括应用层401,框架层402,功能层403。
应用层401是深度学习模型在特定场景下的应用,例如视觉405,自然语言406,推荐407等方面的应用。这些应用使用本架构构建,也可以在应用中调用架构提供运行接口,以在应用中获得推理能力。
框架层402整合TensorFlow408,MXNet 409,Caffe 410等开源框架,并且提供算子库和工具,使得可以继续对各种算法进行优化和改进。在每个框架中,深度学习模型的表达采用的格式不同。TensorFlow408是一个基于数据流编程的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现。MXNet409是亚马逊(Amazon)选择的深度学习库。Caffe 410,全称Convolutional Architecture for Fast Feature Embedding,是一个兼具表达性、速度和思维模块化的深度学习框架。
功能层403包括编译栈403和运行栈404。编译栈403用于对各种模型进行转换(converter)411、量化(quantization)412、优化(optimization)413和编译(compile)414。转换411是提供模型的内部数据转化为通用中间表达(IR)格式。即,框架层420有TensorFlow408、MXNet409、Caffe 410等多种框架,不同框架具有不同的格式,转换411即将不同的格式转换为统一的中间表达格式。量化412是将深度学习模型中的权重张量以及向深度学习模型的输入张量从高精度数据类型转换为低精度数据类型。优化413是对模型内部的算子进行融合,多模型优化链接等操作。编译414是根据加速单元能够支持的指令集对深度学习变化模型进行转化,转化成加速单元能够识别的加速单元模型。常量折叠409是本公开实施例在图5中增加的模块,是本公开实施例改进的部分,它是将深度学习模型的静态图中的常量子图用构造出的常量节点替代的过程。由于常量子图中每个节点在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量,因此在部署加速单元模型时,实际上不需要将这些常量节点一一部署到加速单元,只需要把这一片互相连通的常量节点在该区域中最后的常量运算结果作为一个节点部署到加速单元,即常量折叠。运行栈404包括运行API 415、执行管理器416、用户模式驱动器417和内核模式驱动器418。执行管理器416执行的资源分配,批量调度。优化运行API 415用于提供各种运行时可以调用的接口。用户模式驱动器417用于提供内核模式下的硬件命令,资源调度。内核模式驱动器418用于提供内核模式下的任务调度和硬件控制等。
本公开实施例的深度学习模型运行全过程
图5示出了编译栈403包括转换411、量化412、优化413和编译414、常量折叠409等功能,这些功能实际运行的顺序如图6所示。图6示出了产生加速单元230能够识别的加速单元模型的过程。
深度学习模型首先经过本公开实施例的常量折叠409,将其静态图中的常量子图用构造出的常量节点替代,从而大大减少模型实际运行时在处理单元220和加速单元230之间传输的数据量。其具体过程在下面参照图8详细描述。
然后,对常量折叠409后的深度学习模型进行转换411,即由TensorFlow408,MXNet409,Caffe 410等各种框架格式转化成通用中间表达。
然后,对转换后的深度学习模型进行量化412,将深度学习模型中的权重张量以及向深度学习模型的输入张量从高精度数据类型转换为低精度数据类型,从而降低模型需要的存储空间,提高模型运行效率。量化的具体过程大致如下:在上述转换过程411转换出的通用中间表达中插入最大最小值收集节点(在上文的术语解释中详细描述),用于收集待量化输入的最大值、最小值;将插入了所述最大最小值收集节点的通用中间表达转换回转换411之前的特定格式(如TensorFlow 408等)进行校准,得到所述待量化输入的最大值、最小值;根据得到的待量化输入的最大值、最小值,在所述通用中间表达中插入量化和反量化节点(在上文的术语解释中详细描述);将插入了量化节点和反量化节点的通用中间表达转换回转换411之前的特定格式,得到量化后模型。
最后,将量化后的深度学习模型进行编译414,编译成加速单元230能够识别的加速单元模型。即,处理单元220将所述量化后模型按照加速单元230支持的指令集,转换成加速单元模型,发送给所述加速单元230。
需要注意的是,上述常量折叠409、转换411、量化412、编译414的过程都是在处理单元220执行的。上述过程产生了加速单元模型。在处理单元220将加速单元模型部署在加速单元230后,实际推理过程是由加速单元230执行的。即,加速单元230将加速单元模型中的权重张量加载到核236的片上内存360,将接收到的推理指令中的输入张量也加载到核236的片上内存360,由核236根据权重张量和输入张量进行运算,最终得到深度学习模型的运行结果。
本公开实施例的深度学习模型常量折叠具体过程
深度学习模型具有静态图。静态图即预先定义的反映深度学习模型的各种计算节点及各种计算节点之间的关系的图。静态图与深度学习模型具有一一对应性。在确定是否能够简化深度学习模型的执行时,通常结合静态图考虑。在深度学习模型的静态图中,有一部分节点是常量节点,其输出永远是常量。静态图中的某些区域中,这些常量节点还互相连通,形成常量子图。这些常量节点的运算很难被专用于进行深度学习模型处理的加速单元所加速。它们的存在会导致模型运行时大量常量在处理单元和加速单元之间传输,降低深度学习模型的执行效率。实际上,由于常量和常量之间的运算仍然是常量,实际上只需要把这一片互相连通的常量节点在该区域中最后的常量运算结果作为一个节点部署到加速单元,就能够既不影响深度学习模型正确运行,又减少实际模型执行时处理单元和加速单元之间传输的数据量,提高模型执行效率。现有技术仅仅对于连通的常量节点进行折叠,折叠效率仍然有优化空间,模型执行效率有待进一步提高。
本公开的发明人发现,深度学习模型中有大量只与深度学习模型的输入张量的形状有关的节点,如图7中的提取输入张量形状节点603。输入张量的形状是指输入张量的各个维度空间中的维度数。输入张量具有不定的维度空间,例如向量属于一维维度空间,矩阵属于二维维度空间。每个维度空间中,输入张量的维度又不同。例如,对于4×5矩阵来说,它具有2个维度空间。在第一个维度空间中,它具有4个维度。在第二个维度空间中,它具有5个维度。因此,4×5矩阵这个输入张量的形状为(4,5)。如果一个输入张量有3个维度空间,其中,第一个维度空间中有6个维度,第二个维度空间中有2个维度,第三个维度空间中有8个维度,则这个输入张量的形状为(6,2,8)。深度学习模型的输入张量的形状在大多数情况下是固定的,因此,除了常量节点之外,这些只与深度学习模型的输入张量的形状有关的节点的输出在大多数情况下也是固定的。如果在提取常量子图时,将这部分节点一并考虑进去,将会大大增加连通子图的覆盖范围,进一步优化折叠效率,提高模型执行效率。
本公开实施例中,处理单元220先在深度学习模型的静态图中标出常量节点、以及只与所述深度学习模型的输入张量的形状有关的形状关联节点。常量节点是本身为常量值的节点,该节点本身不具有运算功能,其输出端指向的节点利用该常量值进行运算。如图7的常量节点606,其本身不具有运算功能,但该常量节点606设定的常量与分片节点605产生的值在和节点607进行和运算。形状关联节点是只与所述深度学习模型的输入张量的形状有关的节点,如图7中的提取输入张量形状节点603。
标出了常量节点和形状关联节点后,实际上静态图中并不是只有这两种节点的输出值为常量。这两种节点的下游节点(这两种节点的输出端指向的节点)中,有一些下游节点的输入端接收的完全是这两种节点的输出,这样,根据常量值进行运算得到的仍然是常量值。因此,这样的节点也可以划分到常量子图中。但如果下游节点的输入端有多个,其中有不是常量的输入端,就不能认为其输出值一定为常量,不能纳入常量子图。因此,在标出常量节点和形状关联节点后,将所述静态图中输入端皆为已标出节点的节点标出(这些节点的输入都是常量,输出也一定是常量),并不断重复这一过程(使得接收这些节点的常量输出并据此进行进一步运算以输出常量的节点也被标出),直到输入端皆为已标出节点的节点都被标出。然后,将标出的节点中相互连通的节点划分到一个常量子图中。连通是指,如果对于这些节点中的任一个节点,都能在这些节点中找到至少一个其它节点与其具有输入输出关系(该至少一个其它节点的输入端或输出端为该节点)。如图7所示,分片节点605的唯一输入来自于提取输入张量形状节点603的输出端,而提取输入张量形状节点603在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量,这样,在同样的前提下,分片节点605的输出端输出的值也为常量。另外,和节点607的输入来自分片节点605的输出端和常量节点606的输出端,而这两个节点在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量,这样,在同样的前提下,和节点606的输出端输出的值也为常量。将这些节点标出。标出的提取输入张量形状节点603、分片节点605、常量节点606、和节点607是连通的,因此,它们构成一个连通子图,如图7的虚线椭圆中示出。
由于形状关联节点的输出仅与深度学习模型的输入张量的形状有关,与输入张量每个维度空间中每个具体的维度值没有关系,因此,可以任意构造一个满足所述固定形状的张量,作为输入张量输入静态图,所述常量子图的出口节点输出的常量应该都是一样的。例如,对于4×5矩阵来说,提取输入张量形状节点603只是提取矩阵的形状,即(4,5),表示每一行中有4个元素,每一列中有5个元素。无论这4×5=20个元素是什么,提取输入张量形状节点603输出的都是(4,5),分片节点605仅输出4,加上常量节点606输出的值,作为出口节点,即和节点606输出的值,该值与输入矩阵中4×5=20个元素的具体值完全无关。因此,利用满足所述固定形状的任一张量,就可以得到出口节点输出的常量。
出口节点是指常量子图中的、输出端指向常量子图的外部节点且输入端为常量子图的内部节点的节点。如图7的和节点607,其输入端为分片节点605和常量节点606这两个常量子图内部节点,其输出端为重新合成形状节点608这个常量子图外部节点。因此,它就是一个出口节点。一个常量子图的出口节点可以是多个。
接着,就可以删除所述常量子图,并以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点,从而取代该常量子图。
删除所述常量子图时,可以先将所述出口节点、与所述出口节点的输出端所指向的外部节点之间的指向关系删除。如图7所示的出口节点是和节点607,其指向的外部节点是重新合成形状节点606。和节点607有箭头指向重新合成形状节点606,表示和节点607的输出作为重新合成形状节点606的输入。现在,将这两个节点之间的箭头,即指向关系去除。
然后,重复执行删除所述静态图中出度为0的节点,直到出度为0的节点的节点不存在。所述出度为节点的输出端指向的节点数。图7中,由于和节点607与重新合成形状节点606之间的指向关系删除,和节点607的输出端不再指向任何节点,因此,出度变成0,将和节点607删除。和节点607删除后,分片节点605与常量节点606也不再指向任何节点,出度也都变成0,将这两个节点也删除。分片节点605删除后,提取输入张量形状节点603也不再指向任何节点,出度数变成0,将该节点删除。提取输入张量形状节点603删除后,输入张量节点601的输出端还指向卷积节点602,出度不为0,不能删除。此时认为常量子图已被删除。这时,以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点,从而取代该常量子图。如图7所示,用获取的常量构造常量节点609,指向常量子图的出口节点(和节点607)指向的重新合成形状节点608,而常量子图此时相当于用常量节点609取代。这样,就实现了以获取的常量构造常量节点,并用所述常量节点取代所述深度学习模型中的所述常量子图。将深度学习模型中的常量子图用常量节点替换后的简化模型叫做第二深度学习模型,即常量折叠后的第二深度学习模型。
常量子图的出口节点输出的值实际上是常量子图中各节点在假定所述深度学习模型的输入张量具有固定形状的前提下一起作用最后使得整个常量子图输出的值,该仍然是常量,因此,用已确定的该常量构造一个常量节点,该常量节点就综合反映了常量子图中所有节点的整体作用,就其取代深度学习模型中的常量子图,完全不影响深度学习模型的运行,还能进一步减少深度学习模型运行时在处理单元和加速单元之间传输的数据量,提高深度学习模型的执行效率。
常量折叠的方法流程
如图8所示,根据本公开的一个实施例的常量折叠包括由处理单元220执行的如下步骤:
步骤710、在深度学习模型的静态图中提取常量子图,其中,所述常量子图是在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点组成的连通子图;
步骤720、将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,所述出口节点是指所述常量子图中的、输出端指向所述常量子图的外部节点且输入端为所述常量子图的内部节点的节点;
步骤730、以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型。
可选地,步骤710包括:
在所述静态图中标出常量节点、以及只与所述深度学习模型的输入张量的形状有关的形状关联节点;
基于标出的常量节点和形状关联节点,提取所述常量子图。
可选地,所述基于标出的常量节点和形状关联节点,提取所述常量子图,包括:重复执行将所述静态图中、输入端皆为已标出节点的节点标出,直到输入端皆为已标出节点的节点都被标出;将标出的节点中相互连通的节点划分到一个常量子图中。
可选地,步骤720包括:
构造满足所述固定形状的张量;
将构造的张量作为输入张量输入所述静态图;
获取所述常量子图的出口节点输出的常量。
可选地,步骤730包括:
删除所述常量子图;
以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点。
可选地,所述删除所述常量子图,包括:
将所述出口节点、与所述出口节点的输出端所指向的外部节点之间的指向关系删除;
重复执行删除所述静态图中出度为0的节点,直到出度为0的节点的节点不存在,其中,所述出度为节点的输出端指向的节点数。
由于上述过程的实现细节已在前述装置实施例的描述中详细介绍,故不赘述。
本公开实施例的商业价值
本公开实施例经试验验证,其深度学习模型运行时在处理单元和加速单元之间传输的数据量仅为现有技术中仅折叠常量节点的方案的60%,大大减少了模型执行时传输的数据量,提高了深度学习模型的执行效率,具有良好的市场前景。
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
Claims (18)
1.一种处理单元,包括:
取指令单元,用于从所述处理单元外部的存储器取回计算机指令;
指令译码单元,用于对取回的计算机指令进行译码;
指令执行单元,用于执行译码后的所述计算机指令,以实现:
在深度学习模型的静态图中提取常量子图,其中,所述常量子图是在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点组成的连通子图;
将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,所述出口节点是指所述常量子图中的、输出端指向所述常量子图的外部节点且输入端为所述常量子图的内部节点的节点;
以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型。
2.根据权利要求1所述的处理单元,其中,所述在深度学习模型的静态图中提取常量子图,包括:
在所述静态图中标出常量节点、以及只与所述深度学习模型的输入张量的形状有关的形状关联节点;
基于标出的常量节点和形状关联节点,提取所述常量子图。
3.根据权利要求2所述的处理单元,其中,所述基于标出的常量节点和形状关联节点,提取所述常量子图,包括:
重复执行将所述静态图中、输入端皆为已标出节点的节点标出,直到输入端皆为已标出节点的节点都被标出;
将标出的节点中相互连通的节点划分到一个常量子图中。
4.根据权利要求1所述的处理单元,其中,所述将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,包括:
构造满足所述固定形状的张量;
将构造的张量作为输入张量输入所述静态图;
获取所述常量子图的出口节点输出的常量。
5.根据权利要求1所述的处理单元,其中,所述以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型,包括:
删除所述常量子图;
以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点。
6.根据权利要求5所述的处理单元,其中,所述删除所述常量子图,包括:
将所述出口节点、与所述出口节点的输出端所指向的外部节点之间的指向关系删除;
重复执行删除所述静态图中出度为0的节点,直到出度为0的节点的节点不存在,其中,所述出度为节点的输出端指向的节点数。
7.根据权利要求1所述的处理单元,其中,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:在形成第二深度学习模型后,将第二深度学习模型转换成通用中间表达。
8.根据权利要求7所述的处理单元,其中,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:在将第二深度学习模型转换成通用中间表达后,在所述通用中间表达中插入最大最小值收集节点,用于收集待量化输入的最大值、最小值;将插入了所述最大最小值收集节点的通用中间表达转换回所述特定格式进行校准,得到所述待量化输入的最大值、最小值;根据得到的待量化输入的最大值、最小值,在所述通用中间表达中插入量化和反量化节点;将插入了量化节点和反量化节点的通用中间表达转换回特定格式,得到量化后模型。
9.根据权利要求8所述的处理单元,其中,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:在得到量化后模型后,将所述量化后模型按照加速单元支持的指令集,转换成加速单元模型,发送给所述加速单元。
10.一种计算装置,包括:
根据权利要求1-9中任一个所述的处理单元;
存储器,用于存储所述计算机指令;
所述加速单元,用于运行所述深度学习模型。
11.一种片上系统,包括用于运行所述深度学习模型的加速单元,所述深度学习模型由根据权利要求1-9中任一个所述的处理单元处理后部署在所述加速单元上。
12.一种数据中心,包括根据权利要求10所述的计算装置。
13.一种处理方法,包括:
在深度学习模型的静态图中提取常量子图,其中,所述常量子图是在假定所述深度学习模型的输入张量具有固定形状的前提下输出值为常量的节点组成的连通子图;
将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,所述出口节点是指所述常量子图中的、输出端指向所述常量子图的外部节点且输入端为所述常量子图的内部节点的节点;
以获取的常量构造常量节点,用所述常量节点取代所述深度学习模型中的所述常量子图,形成第二深度学习模型。
14.根据权利要求13所述的处理方法,其中,所述在深度学习模型的静态图中提取常量子图,包括:
在所述静态图中标出常量节点、以及只与所述深度学习模型的输入张量的形状有关的形状关联节点;
基于标出的常量节点和形状关联节点,提取所述常量子图。
15.根据权利要求14所述的处理单元,其中,所述基于标出的常量节点和形状关联节点,提取所述常量子图,包括:
重复执行将所述静态图中、输入端皆为已标出节点的节点标出,直到输入端皆为已标出节点的节点都被标出;
将标出的节点中相互连通的节点划分到一个常量子图中。
16.根据权利要求13所述的处理方法,其中,所述将满足所述固定形状的任一张量,作为输入张量输入所述静态图,获取所述常量子图的出口节点输出的常量,包括:
构造满足所述固定形状的张量;
将构造的张量作为输入张量输入所述静态图;
获取所述常量子图的出口节点输出的常量。
17.根据权利要求13所述的处理方法,其中,所述以获取的常量构造常量节点,用所述常量节点取代所述所述深度学习模型中的常量子图,形成第二深度学习模型,包括:
删除所述常量子图;
以获取的常量构造常量节点,该构造的常量节点指向删除的常量子图的出口节点的输出端所指向的外部节点。
18.根据权利要求17所述的处理方法,其中,所述删除所述常量子图,包括:
将所述出口节点、与所述出口节点的输出端所指向的外部节点之间的指向关系删除;
重复执行删除所述静态图中出度为0的节点,直到出度为0的节点的节点不存在,其中,所述出度为节点的输出端指向的节点数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010427312.6A CN113688982A (zh) | 2020-05-19 | 2020-05-19 | 处理单元、相关装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010427312.6A CN113688982A (zh) | 2020-05-19 | 2020-05-19 | 处理单元、相关装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113688982A true CN113688982A (zh) | 2021-11-23 |
Family
ID=78576005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010427312.6A Pending CN113688982A (zh) | 2020-05-19 | 2020-05-19 | 处理单元、相关装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113688982A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114201242A (zh) * | 2021-12-10 | 2022-03-18 | 北京百度网讯科技有限公司 | 用于处理数据的方法、装置、设备以及存储介质 |
CN116821019A (zh) * | 2023-08-30 | 2023-09-29 | 腾讯科技(深圳)有限公司 | 数据处理方法、计算机设备及芯片 |
-
2020
- 2020-05-19 CN CN202010427312.6A patent/CN113688982A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114201242A (zh) * | 2021-12-10 | 2022-03-18 | 北京百度网讯科技有限公司 | 用于处理数据的方法、装置、设备以及存储介质 |
CN114201242B (zh) * | 2021-12-10 | 2023-01-31 | 北京百度网讯科技有限公司 | 用于处理数据的方法、装置、设备以及存储介质 |
CN116821019A (zh) * | 2023-08-30 | 2023-09-29 | 腾讯科技(深圳)有限公司 | 数据处理方法、计算机设备及芯片 |
CN116821019B (zh) * | 2023-08-30 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 数据处理方法、计算机设备及芯片 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230251861A1 (en) | Accelerating linear algebra kernels for any processor architecture | |
CN111104120B (zh) | 神经网络编译方法、系统及相应异构计算平台 | |
CN110941789B (zh) | 张量运算方法和装置 | |
KR101842307B1 (ko) | 데이터 병렬 코드에서의 맵 변환 | |
Amiri et al. | FPGA-based soft-core processors for image processing applications | |
CN113313241A (zh) | 确定深度学习模型的张量信息的方法和计算装置 | |
Jacob et al. | CUDACL: A tool for CUDA and OpenCL programmers | |
CN113688982A (zh) | 处理单元、相关装置和方法 | |
Sérot et al. | High-level dataflow programming for real-time image processing on smart cameras | |
Bai et al. | AutoGTCO: Graph and tensor co-Optimize for image recognition with transformers on GPU | |
US20220172044A1 (en) | Method, electronic device, and computer program product for deploying machine learning model | |
Falch et al. | ImageCL: An image processing language for performance portability on heterogeneous systems | |
CN113705798A (zh) | 处理单元、计算装置及深度学习模型的计算图优化方法 | |
Kyo et al. | An integrated memory array processor for embedded image recognition systems | |
Janssen et al. | A specification invariant technique for regularity improvement between flow-graph clusters | |
CN113705800A (zh) | 处理单元、相关装置和方法 | |
Roh et al. | An Evaluation of Optimized Threaded Code Generation. | |
US20030126589A1 (en) | Providing parallel computing reduction operations | |
Daily et al. | Using the Global Arrays Toolkit to Reimplement NumPy for Distributed Computation. | |
Ye et al. | HIDA: A Hierarchical Dataflow Compiler for High-Level Synthesis | |
Kessler et al. | Skeleton Programming for Portable Many‐Core Computing | |
Goli | Visioncpp: A sycl-based computer vision framework | |
US11714992B1 (en) | Neural network processing based on subgraph recognition | |
CN115437637A (zh) | 一种编译方法及相关装置 | |
CN113313242A (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 |