CN113705800A - 处理单元、相关装置和方法 - Google Patents
处理单元、相关装置和方法 Download PDFInfo
- Publication number
- CN113705800A CN113705800A CN202010437888.0A CN202010437888A CN113705800A CN 113705800 A CN113705800 A CN 113705800A CN 202010437888 A CN202010437888 A CN 202010437888A CN 113705800 A CN113705800 A CN 113705800A
- Authority
- CN
- China
- Prior art keywords
- quantized
- quantization
- operator
- maximum
- 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)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本公开提出一种处理单元、相关装置和方法。该处理单元包括:取指令单元;指令译码单元;指令执行单元,用于:基于深度学习模型的静态图,确定待量化算子;如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点;如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针;根据插入了量化节点、或所述复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化。本公开实施例减少了量化时的深度学习模型的静态图复杂度,从而有利于后续优化、编译,且避免了在静态图中直接将复合算子分解成的原子操作不受框架支持的问题。
Description
技术领域
本公开涉及芯片领域,更具体而言,涉及一种处理单元、相关装置和方法。
背景技术
在深度学习(deep learning)领域,推理(Inference)是指将一个预先训练好的深度学习模型推送到实际应用场景中使用。关于推理性能,除了硬件层面的优化,在算法层面,模型量化(Quantized Model)是提升推理性能的重要手段之一。模型量化是指,将深度学习模型中的节点的权重数据和输入数据,从高精度的量化级转换为低精度的量化级,例如从32位单精度浮点数(FP32)转化为8位整型数据(INT8)。这样做虽然精度降低了,但有助于降低对数据吞吐量和存储空间的要求。
现有技术中,一般通过在深度学习模型的静态图中确定待量化算子,并在前面加入量化节点来实现量化。静态图是指根据深度学习模型的结构在编写代码前预先生成的、表示深度学习模型中的各操作节点和各操作节点之间的关系的图。每个操作节点在静态图中表示成算子。量化节点即用于执行量化的程序。有些算子比较简单,仅包括一两种运算;而有些算子比较复杂,例如长短期记忆模型(LSTM)、门控循环单元(GRU),其包括多个矩阵乘及张量间的点加、点乘、循环等操作。对于这种比较复杂的算子,仅在算子级别前加入量化节点来量化,无法精准定位到真正需要量化的操作,量化准确性差。因此,现有技术中,对于这种比较复杂的复合算子,可以先将其在静态图上分解成小粒度的算子,例如将上述GRU算子中包含的多个矩阵乘及张量间的点加、点乘、循环等都作为小算子体现在静态图中,再以上述插入量化节点的方式在算子级别进行量化。但是,这会引入很多与控制、循环相关的节点,整个静态图变得复杂,不利于后续优化、编译等过程,而且一些分解出的原子操作并不存在于框架支持的算子列表中,还需要重写它们的实现,增加算子重写开销。
发明内容
有鉴于此,本公开旨在减少量化时的深度学习模型的静态图复杂度,从而有利于后续优化、编译,且避免在静态图中直接将复合算子分解成的原子操作不受框架支持的问题。
根据本公开的一方面,提供了一种处理单元,包括:
取指令单元,用于从所述处理单元外部的存储器取回计算机指令;
指令译码单元,用于对取回的计算机指令进行译码;
指令执行单元,用于执行译码后的所述计算机指令,以实现:
基于深度学习模型的静态图,确定待量化算子;
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针;
根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化。
可选地,所述基于深度学习模型的静态图,确定待量化算子,包括:将特定格式的深度学习模型的静态图转换成通用中间表达的静态图;在所述通用中间表达的静态图上确定待量化算子;所述根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化,包括:将所述插入了量化节点、或复合算子中插入了量化探针的静态图转换回所述特定格式进行量化,成为量化后模型。
可选地,在确定待量化算子之后,指令执行单元还用于执行译码后的所述计算机指令,以实现:
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入最大值最小值收集节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入最大值最小值收集探针;
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值;
其中,所述量化节点是根据所述待量化非复合算子的输入的最大值、最小值确定的,所述量化探针是根据所述待量化原子操作的输入的最大值、最小值确定的。
可选地,所述在所述通用中间表达的静态图上确定待量化算子,包括:在所述通用中间表达的静态图的算子中,根据量化前精度、量化后精度和第一规则,确定待量化算子。
可选地,所述在所述复合算子内部确定待量化原子操作,包括:在所述复合算子内部,根据量化前精度、量化后精度和第二规则,确定待量化原子操作。
可选地,所述量化节点通过如下方式确定:根据所述待量化非复合算子的输入的最大值、最小值,确定待量化非复合算子量化因素;根据所述待量化非复合算子量化因素,生成量化节点。
可选地,所述量化探针通过如下方式确定:根据所述待量化原子操作的输入的最大值、最小值,确定待量化原子操作量化因素;根据所述待量化原子操作量化因素,生成量化探针。
可选地,所述将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值,包括:
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式的深度学习模型;
接收校准数据集,以便利用推理脚本将所述校准数据集应用于转换回的特定格式的深度学习模型,其中,所述最大最小值收集节点得到所述待量化非复合算子的输入的最大值、最小值,所述最大值最小值收集探针得到所述待量化原子操作的输入的最大值、最小值。
可选地,在根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化之后,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:将量化后模型按照加速单元支持的指令集,转换成加速单元模型,发送给所述加速单元。
根据本公开的一方面,提供了一种计算装置,包括:如上所述的处理单元;存储器,用于存储所述计算机指令;加速单元,用于运行部署的深度学习模型。
根据本公开的一方面,提供了一种片上系统,包括用于运行深度学习模型的加速单元,所述深度学习模型由如上所述的处理单元量化后部署在所述加速单元上。
根据本公开的一方面,提供了一种数据中心,包括如上所述的计算装置。
根据本公开的一方面,提供了一种深度学习模型量化方法,包括:
基于深度学习模型的静态图,确定待量化算子;
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针;
根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化。
可选地,所述基于深度学习模型的静态图,确定待量化算子,包括:将特定格式的深度学习模型的静态图转换成通用中间表达的静态图;在所述通用中间表达的静态图上确定待量化算子;所述根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化,包括:将所述插入了量化节点、或复合算子中插入了量化探针的静态图转换回所述特定格式进行量化,成为量化后模型。
可选地,在确定待量化算子之后,所述方法还包括:
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入最大值最小值收集节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入最大值最小值收集探针;
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值;
其中,所述量化节点是根据所述待量化非复合算子的输入的最大值、最小值确定的,所述量化探针是根据所述待量化原子操作的输入的最大值、最小值确定的。
可选地,所述在所述通用中间表达的静态图上确定待量化算子,包括:在所述通用中间表达的静态图的算子中,根据量化前精度、量化后精度和第一规则,确定待量化算子。
可选地,所述在所述复合算子内部确定待量化原子操作,包括:在所述复合算子内部,根据量化前精度、量化后精度和第二规则,确定待量化原子操作。
可选地,所述量化节点通过如下方式确定:根据所述待量化非复合算子的输入的最大值、最小值,确定待量化非复合算子量化因素;根据所述待量化非复合算子量化因素,生成量化节点。
可选地,所述量化探针通过如下方式确定:根据所述待量化原子操作的输入的最大值、最小值,确定待量化原子操作量化因素;根据所述待量化原子操作量化因素,生成量化探针。
可选地,所述将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值,包括:
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式的深度学习模型;
接收校准数据集,以便利用推理脚本将所述校准数据集应用于转换回的特定格式的深度学习模型,其中,所述最大最小值收集节点得到所述待量化非复合算子的输入的最大值、最小值,所述最大值最小值收集探针得到所述待量化原子操作的输入的最大值、最小值。
本公开实施例中,对于待量化的非复合算子,采用与现有技术一样的在其前面加入量化节点的方法进行量化。对于待量化的复合算子,不是象现有技术那样在静态图中将其展开为小粒度的算子,而是在复合算子内部进一步确定待量化原子操作,并在其前面加入量化探针,然后,根据插入量化节点、或复合算子内部插入了量化探针的静态图,进行所述深度学习模型的量化。这样,有效地省掉在静态图中将复合算子拆分为多个原子操作的复杂流程,保持了静态图的基本拓扑结构,减少了静态图复杂度,从而有利于后续优化、编译等过程。另外,由于不在静态图中分解原子操作,克服了分解出的原子操作并不存在于框架支持的算子列表中因而需要重写算子的问题。
附图说明
通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本公开一个实施例所应用的数据中心的结构图;
图2是本公开一个实施例的数据中心中一个服务器的内部结构图;
图3是根据本公开一个实施例服务器内部的处理单元和加速单元的内部结构图;
图4是根据本公开一个实施例的加速单元核的内部结构图;
图5是一个示例性的深度学习模型运行所需要的软件环境的层级架构图;
图6示出了本公开实施例中深度学习模型为了能够在加速单元上部署执行而经过的总体过程图;
图7示出了本公开实施例提供的深度学习模型不同阶段的模型状态;
图8示出了根据本公开一个实施例在深度学习模型的静态图中插入量化节点的示意图;
图9示出了根据本公开一个实施例在复合算子内部插入量化探针的示意图;
图10示出了根据本公开一个实施例的深度学习模型量化方法的流程图。
具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在本文中使用以下术语。
深度学习模型:深度学习是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI)。深度学习能够学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习采用的模型即深度学习模型。深度学习模型根据所依赖的模型框架(framework)不同,其格式也不同,可以分为不同类型的格式,如tensorflow、pytorch、mxnet等。
加速单元:针对传统处理单元在一些专门用途的领域(例如,处理图像、处理深度学习模型的各种运算,等等)效率不高的情况,为了提高在这些专门用途领域中的数据处理速度而设计的处理单元。加速单元也称为人工智能(AI)处理单元,包括中央处理器(CPU)、图形处理器(GPU)、通用图形处理器(GPGPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及专用智能加速硬件(例如,神经网络处理器NPU)。
处理单元:在数据中心的服务器中进行传统处理(非用于上述加速单元负责的处理)的单元。处理单元除了进行这些传统处理之外,还承担着对加速单元的调度职能,向加速单元分配加速单元需要承担的任务。处理单元可以采用处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
量化:将深度学习模型中的操作节点的输入、以及操作节点的权重参数和其它参数由高精度数据类型(例如32位浮点数)转换为低精度数据类型(例如8位整型数),从而降低对数据吞吐量和存储空间的要求的行为。
下面结合一个量化的具体例子简单介绍量化的过程。
在量化时,为了将节点的模型参数和输入参数转换为低精度数据类型的数据,首先需要知道模型参数和输入参数的取值范围,例如最大值为100,最小值为-100,如果转换为二进制8位整型数的话,让28-1,即11111111对应于最大值100,让0,即00000000对应于最小值-100。这时,相当于将-100到100之间共200的区间长度平均分成(28-1)个小区间,每个小区间的长度为200/(28-1)=0.784。这样,对于-100和100之间任意一个数值,就可以确定出它所在的小区间。将小区间的左端点或右端点数值作为量化后的数值。例如,对于50来说,[50-(-100)]/0.784=191.3,相当于第191个小区间,左端点为191,即10111111,量化后的数值为10111111。
在线性量化的情况下,可以通过如下的公式来进行量化。δ是缩放系数,相当于每单位的量化后数值代表着量化前的数值差。δ是由待量化输入的最大值xmax、最小值xmin决定的。它将【xmin,xmax】内的待量化输入量化为0到n-1之间(包括0和n-1)的任意一个整数。设q(x)是待量化输入x量化成的数值,有公式:
其中,clamp为限值函数,公式1表示将round((x-xmin)/δ)限制在0到n-1之间。如果round((x-xmin)/δ)大于n-1,则公式1的值为n-1;如果round((x-xmin)/δ)小于0,则公式1的值为0;如果round((x-xmin)/δ)在0和n-1之间,则公式1的值为round((x-xmin)/δ)。
缩放系数δ如下计算:
δ=[max(xmax)-min(xmin)]/(n-1) 公式2
考虑到零点问题(浮点数为0的无误差表示),需要为量化方法增加一个偏移量,即zq。δ和zq是由待量化输入的最大值xmax、最小值xmin决定的。
考虑到零点问题后的缩放系数δ如下计算:
由于考虑到零点问题,不能单纯根据(x/δ)的数值来确定将其量化为0到n-1中的哪一个,要考虑偏移量zq。该偏移量zq如下计算:
考虑该偏移量zq后,按照如下公式根据量化前数值x确定量化后数值q(x):
量化节点:在静态图中插入的用于执行上述的量化过程的程序和相关数据。该程序运行后执行上述量化过程。
动态图:目前深度学习模型框架分为静态图框架和动态图框架。深度学习模型包括多个层,每个层有多个操作节点。操作节点是深度学习模型中根据输入进行运算得到传递给下一层的输出的基本运算单元。每一层的操作节点输出的结果传送到下一层的操作节点,作为下一层操作节点接收的输入。深度学习模型的图是将深度学习模型中的各操作节点表示为算子,将各操作节点之间的关系表示为算子之间的输入输出关系的图形表示,其分为动态图和静态图。动态图是指随着实际编写的命令顺序而变化的图。它意味着每次编写的命令不同,随之产生的动态图不同。根据每次编写的命令,确定其中需要的操作节点、以及操作节点之间的执行关系,从而形成不同的动态图。这种机制使得调试更加容易,也使得将大脑中的想法转换成实际代码更加容易。这是因为,动态图是代码编写后根据代码形成的,在编写代码时不用受到动态图的限制。在PyTorch神经网络框架中,采用动态图。
静态图:它是根据深度学习模型的结构在编写代码前预先生成的、表示深度学习模型中的各操作节点和各操作节点之间的关系的图。各操作节点表示为静态图中的算子,各操作节点之间的关系表示为各算子的输入输出关系。先通过静态图定义好深度学习模型。之后每次运行该深度学习模型时不需要重新构建图,所以采用静态图时深度学习模型的运行速度比动态图快。从理论上讲,静态图这样的机制允许编译器进行更大程度的优化,但是这也意味着所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果静态图的结构出现问题,可能只有在代码执行到相应操作的时候才能发现它)。图8左边的包含串联的卷积算子620、批归一化算子630、激活函数算子640、门控循环单元(GRU)算子650、全连接算子670的图形结构就是一个深度学习模型的静态图。
算子:它是深度学习模型中的操作节点在静态图中的表示。如图8所示,深度学习模型的静态图可以包括卷积算子620、批归一化算子630、激活函数算子640、GRU算子650、全连接算子670。算子之间的箭头表示算子的输入输出关系。
待量化算子:静态图中待在前面插入量化节点的算子。量化是为了降低对数据吞吐量和存储空间的要求,但并非每个算子都对数据吞吐量和存储空间产生很大影响。例如,有些算子不存储数据,因此,不对存储空间产生影响,对其量化没有必要。是否将一个算子作为待量化节点还与量化的具体精度要求有关。例如,如果量化需要将精度较高的数据类型降低到精度稍微差一点的数据类型,某些算子可能不需要参与量化,只需要量化那些对精度影响大的算子就可以了。但是,如果量化需要将精度很高的数据类型降低到精度很低的数据类型,只量化那些对精度影响大的算子可能就不足以达到这样的要求,对精度影响不那么大的算子可能也需要量化。
复合算子:需要多条指令才能完成的算子,例如,长短期记忆模型(LSTM)算子、门控循环单元(GRU)算子,其各自包括多个矩阵乘及张量间的点加、点乘、循环等操作,因此都需要多条指令才能完成。
非复合算子:需要一条底层指令即可完成的算子,例如两个张量的点乘,如图8的卷积算子620、全连接算子670。
原子操作:复合算子中包含的一条指令对应的动作。由于复合算子需要多条指令才能完成,每条指令完成的动作可以看成一个原子操作。
待量化原子操作:复合算子内部待在前面插入量化探针的原子操作。量化是为了降低对数据吞吐量和存储空间的要求,但并非复合节点中的每个原子操作都对数据吞吐量和存储空间产生很大影响。例如,有些原子操作不存储数据,因此,不对存储空间产生影响,对其量化没有必要。是否将一个原子操作作为待量化原子操作还与量化的具体精度要求有关。例如,如果量化需要将精度较高的数据类型降低到精度稍微差一点的数据类型,某些原子操作可能不需要参与量化,只需要量化那些对精度影响大的原子操作就可以了。但是,如果量化需要将精度很高的数据类型降低到精度很低的数据类型,只量化那些对精度影响大的原子操作可能就不足以达到这样的要求,对精度影响不那么大的原子操作可能也需要量化。
量化探针:在复合算子内部插入的用于执行上述的量化过程的程序和相关数据。该程序运行后执行上述量化过程。它与量化节点本质上并无太大区别,只是它本身不作为一个节点,不破坏原有静态图结构,从程序语句和相关数据上看,是类似的。
通用中间表达:由于深度学习模型根据所依赖的模型框架(framework)不同,格式也不同,可以分为不同格式,如tensorflow、pytorch、mxnet等,这些深度学习模型的代码表达也是不同的。这给深度学习模型量化的通用性带来很大困难。通用中间表达就是将各种不同格式的深度学习模型代码表达转换成的一种通用格式。它解析深度学习模型中每个代码语句的含义,按照代码语句的含义将语句翻译成通用的表达形式,使得不同深度学习模型中同样含义的代码语句在通用中间表达中的表达都一样。目前,有不同深度学习模型的表达转换成通用中间表达的工具产品。
量化后模型:深度学习模型经上述量化后产生的模型。
校准:如上述量化的例子中,量化时首先要确定深度学习模型中操作节点的输入的取值范围,只有确定了待量化的输入的最大值、最小值,才能将待量化的输入的最大值、最小值映射到量化后的最大值、最小值,从而完成待量化的输入的量化。校准即确定待量化的输入的最大值、最小值的过程。
最大值最小值收集节点:安插在深度学习模型的静态图的特定位置,用于收集深度学习模型运行时该特定位置产生的值的最大值和最小值的程序和相关数据。它包括收集该特定位置产生的各个值并确定最大值和最小值的程序代码、以及在这个过程中需要使用的数据。该特定位置一般是在待量化算子的前面。在待量化算子的前面插入这个节点,就能够收集输入该待量化算子的各种输入值,得到最大值和最小值。
最大值最小值收集探针:安插在复合算子内部的特定位置,用于收集深度学习模型运行时该特定位置产生的值的最大值和最小值的程序和相关数据。它包括收集该特定位置产生的各个值并确定最大值和最小值的程序代码、以及在这个过程中需要使用的数据。该特定位置一般是在待量化原子操作的前面。在待量化原子操作的前面插入这个节点,就能够收集输入该待量化原子操作的各种输入值,得到最大值和最小值。它在程序代码上与最大值最小值收集节点并无本质区别,只不过它不插入静态图,不破坏静态图的基本结构。
量化前精度:静态图中相应算子或复合算子内部的相应原子操作的权重参数、其它参数和输入数据在量化前的精度。例如,在将32位浮点数变为8位整型数的量化中,量化前精度为32位浮点数。
量化后精度:静态图中相应算子或复合算子内部相应原子操作的权重参数、其它参数和输入数据在量化后的精度。例如,在将32位浮点数变为8位整型数的量化中,量化后精度为8位整型数。
量化因素:在选定了一种量化方法时,该量化方法通常具有一些因子,在量化过程中要用到这些因子。这些因子就叫做量化因素。例如,在线性量化方法的情况下,缩放系数和偏移量为量化因素。
校准数据集:在校准过程中应用于深度学习模型的数据集。将该数据集中的数据输入深度学习模型后,检测深度学习模型中的某个位置处的输入的最大值和最小值,就可以完成校准。
推理脚本:用于运行深度学习模型,将其用于实际推理的代码段及相关数据。
加速单元模型:深度学习模型转换成的、加速单元的指令集能够支持的模型。深度学习模型转换成加速单元模型后,才能被加速单元运行。
本公开的应用环境
本公开实施例提出了一种深度学习模型量化方案。整个量化方案相对较为通用。在处理单元上完成量化后的模型,可以用于各种执行该模型的硬件设备,例如,用于数据中心、用于AI处理单元,用于能执行深度学习模型的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)。处理单元是对加速单元进行调度、向各加速单元分配要执行的待执行指令序列的处理单元,它可以采用处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
传统的处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有效,而在大规模并行计算方面则效率不够。因此,开发出了各种专门的加速单元,用来针对不同功能和不同领域的计算进行更有效的提高运算速度的处理。本公开提出的加速单元是专用于加速深度学习模型的运算处理速度的处理单元,它是采用数据驱动并行计算的架构,用于处理各深度学习模型节点的大量运算(例如卷积、池化等)的处理单元。由于各深度学习模型节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧密联系,会被经常用到,用现有的处理单元构架,由于处理单元的核内的内存容量很小,因此要大量频繁访问核外存储器,造成处理的低效。采用这种专用于加速深度学习模型的运算处理速度的加速单元,由于其每个核中具有适于深度学习模型计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大提高处理效率,提高计算性能。
加速单元230要接受处理单元220的调度。如图2所示,存储器210中存储有各种深度学习模型,包括这些模型的节点和节点的权重数据等。这些深度学习模型当需要时被图2中的一个处理单元220部署到一个加速单元230。即,处理单元220可以通过指令的形式向加速单元230发送模型中的参数(如各节点的权重)在存储器210中的地址。加速单元230在实际使用该深度学习模型进行计算时,就会根据这些参数(例如权重)在存储器210中的地址,直接在存储器210中寻址这些参数,将其暂存在其片上内存中。加速单元230在实际使用该深度学习模型进行计算时,处理单元220还会将模型的输入通过指令的形式发送给加速单元230,暂存在加速单元230的片上内存中。这样,加速单元230就可以根据这些输入和模型中的参数(例如权重)进行推理计算。本公开实施例主要着眼于处理单元220将深度学习模型向加速单元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执行。
图3示出的加速单元30不限于NPU,还可以是GPGPU。GPGPU即通用图形处理器,是一种利用处理图形任务来计算原本由中央处理器处理的通用计算任务的图形处理器。这些通用计算常常与图形处理没有任何关系。由于现代图形处理器强大的并行处理能力和可编程流水线,令流处理器可以处理非图形数据。特别在面对单指令流多数据流(SIMD),且数据处理的运算量远大于数据调度和传输的需要时,通用图形处理器在性能上大大超越了传统的中央处理器应用程序,因此能够起到加速的作用,与NPU一样属于加速单元30。另外,加速单元30还可以包括CPU、GPU、FPGA、ASIC等。
加速单元30的通用结构如图3,其内部包括多个核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示出了深度学习模型运行所依赖的软件架构。参见图上所示,从上往下,该架构包括应用层401,框架层402,功能层403。
应用层401是深度学习模型在特定场景下的应用,例如视觉405,自然语言406,推荐407等方面的应用。这些应用使用本架构构建,也可以在应用中调用架构提供运行接口,以在应用中获得推理能力。
框架层402整合TensorFlow408,MXNet 409,Caffe 410等开源平台,并且提供算子库和工具,使得可以继续对各种算法进行优化和改进。TensorFlow408是一个基于数据流编程的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现。MXNet409是亚马逊(Amazon)选择的深度学习库。Caffe 410,全称ConvolutionalArchitecture for Fast Feature Embedding,是一个兼具表达性、速度和思维模块化的深度学习框架。
功能层403包括编译栈403和运行栈404。编译栈403用于对各种模型进行转换(converter)411、量化(quantization)412、优化(optimization)413和编译(compile)414。转换411是提供模型的内部数据转化为通用中间表达(IR)格式。量化412是将深度学习模型中的权重等参数以及给深度学习模型的输入从高精度数据类型转换为低精度数据类型。优化413是对模型内部的算子进行融合,多模型优化链接等操作。编译414是根据硬件(例如神经网络处理器)对模型进行优化,生成硬件能够识别的二进制模型。运行栈404包括运行API415、执行管理器416、用户模式驱动器417和内核模式驱动器418。执行管理器416执行的资源分配,批量调度。优化运行API 415用于提供各种运行时可以调用的接口。用户模式驱动器417和用于提供内核模式下的硬件命令,资源调度。内核模式驱动器418用于提供内核模式下的任务调度和硬件控制等。
本文所指的量化操作即上面提到的量化412,主要包括将深度学习模型中的权重等参数以及给深度学习模型的输入从高精度数据类型转换为低精度数据类型。下面以卷积神经网络为例对此进行解释。卷积神经网络包括多个层(卷积层、池化层等),每一层具有多个操作节点。操作节点是深度学习模型中根据输入进行运算得到传递给下一层的输出的最小计算单位。每一卷积层的节点输出的特征传送到下一卷积层的节点,作为下一卷积层接收的输入。每一层通过卷积核进行矩阵相乘再求和计算得到特征图,卷积核为二维矩阵,二维矩阵中的每个数值都可视为一个权重参数,由于卷积神经网络有多个层,每一层的卷积核中有多个权重参数,因此权重参数数量庞大。与权重参数相应地,与所述卷积核相乘的输入矩阵中的输入参数的数量也是巨大的。在模型训练阶段,权重参数一般采用32位浮点数存储和计算,量化操作就是将权重参数从32位浮点数转换到更低精度的数据类型进行存储和计算,例如转换为8位整型(有符号整型或者无符号整型)或16位浮点型进行存储和计算。量化操作可以只转换一部分权重参数,例如只转换一部分卷积层的卷积核,其余部分卷积层的卷积核保持不变。与权重参数对应地,量化操作也将实际输入矩阵中的每个参数转换到更低精度的数据类型进行存储和计算。处理单元220通常在完成量化操作后,才将量化后的深度学习模型通过指令的形式部署给加速单元230。即,处理单元220将存储在存储器210的深度学习模型的各权重从高精度数据类型转换为低精度数据类型,从而提高数据吞吐量和节省存储空间。然后,处理单元220通过指令的形式向加速单元230发送这些量化后的权重在存储器210中的地址。加速单元230在实际运行深度学习模型进行推理时,就可以按照这些地址直接从存储器210中取出,放到加速单元230的片上内核360中运行。同时,在深度学习模型实际运行时,处理单元220也将量化后的模型实际输入从高精度数据类型转换为低精度数据类型,通过指令的形式向加速单元230通知它们在存储器210中的地址,便于加速单元230利用这些输入和权重参数运行模型,提高数据吞吐量和节省存储空间。
图6示出了本公开实施例中深度学习模型为了能够在加速单元上部署执行而经过的总体过程图。
由于深度学习模型是在不同框架下编写的,例如TensorFlow408,MXNet 409,Caffe 410等。对这些不同框架或格式,其量化时需要进行分别的适应于这些不同格式的量化。为了统一后续量化等过程,采取了转换411的过程,即即由TensorFlow408,MXNet 409,Caffe 410等各种框架格式转化成通用中间表达,该通用中间表达不依赖于任何框架或格式。在通用中间表达的基础上进行量化,之后再转换回原框架或格式,就达到了在不同的框架下统一量化的效果。
然后,对转换后的深度学习模型进行量化412,将深度学习模型中的权重参数以及向深度学习模型的输入参数等从高精度数据类型转换为低精度数据类型,从而降低模型需要的存储空间,提高模型运行效率。量化的具体过程大致如下:在上述转换过程411转换出的通用中间表达中确定待量化节点和待量化原子操作4121,其中,在通用中间表达的静态图中确定待量化复合节点和非复合节点,对于待量化复合节点,由于其内部由多个原子操作组成,还要精确确定出需要进行量化的待量化原子操作;在确定的待量化节点和待量化原子操作之前分别插入用于收集待量化输入的最大值、最小值的最大最小值收集节点和最大最小值收集探针,将插入了所述最大最小值收集节点和探针的通用中间表达转换回转换411之前的特定格式(如TensorFlow 408等)进行校准4122,得到所述待量化输入的最大值、最小值;根据得到的待量化输入的最大值、最小值,在所述通用中间表达中的待量化非复合节点前插入量化节点,在复合节点的待量化原子操作前插入量化探针,将插入了量化节点、量化探针的通用中间表达转换回转换411之前的特定格式,进行量化4123,得到量化后模型。步骤4121-4123的详细过程是本公开实施例主要着重于的过程,会在下文中更具体地描述。
最后,将量化后的深度学习模型进行编译414,编译成加速单元230能够识别的加速单元模型。即,处理单元220将量化后模型按照加速单元230支持的指令集,转换成加速单元模型,发送给所述加速单元230。
需要注意的是,上述转换411、量化412、编译414的过程都是在处理单元220执行的。上述过程产生了加速单元模型。在处理单元220将加速单元模型部署在加速单元230后,实际推理过程是由加速单元230执行的。即,加速单元230将加速单元模型中的权重参数加载到核236的片上内存360,将接收到的推理指令中的输入参数也加载到核236的片上内存360,由核236根据权重参数和输入参数进行运算,最终得到深度学习模型的运行结果。
图7示出了本公开实施例提供的深度学习模型不同阶段的模型状态。参见图7所示,原始模型501为一个预先训练好的高精度深度学习模型,量化模型502为原始模型501经过量化操作后得到的深度学习模型。量化操作可以按照上述步骤4121-4123执行,得到量化模型502。原始模型501是高精度模型,量化模型502是低精度模型。然后将量化模型502转化为加速单元模型503。加速单元模型503还是低精度模型。但是加速单元模型503可以由加速单元230的指令集识别从而可以在加速单元230上执行,而原始模型501和量化模型502只能由处理单元220的指令集识别从而可以在处理单元220上执行。
应该指出的是,图7只用于示意上述模型的执行情况,而不能用于示意上述模型的存储情况,实际上原始模型501、量化模型502和加速单元模型503都是存储在存储器210上,只有执行时,才会加载到处理单元220或加速单元230中。
还应该指出的是,通常说法的模型实际上包含实现相应算法的代码和数据样本。代码存在多种形式,例如源代码(例如Java、Python实现)和可执行代码(二级制代码)。源代码经由编译得到可执行代码之后,才能够被处理器识别和执行,因此上述的将量化模型502转化为加速单元模型503,从而由加速单元230的指令集识别,是指修改量化模型的部分源代码并将其编译为可执行代码,然后可执行代码可以被加速单元230的指令集识别,以此类推。但是为了简化描述,在本文中不会每个步骤中都进行这样严格的描述。
本公开实施例的量化方式
现有技术在量化时,一般通过在深度学习模型的静态图中确定待量化算子,并在前面加入量化节点来实现量化。静态图是指根据深度学习模型的结构在编写代码前预先生成的、表示深度学习模型中的各操作节点和各操作节点之间的关系的图,如图8左侧所示。每个操作节点在静态图中表示成算子,如图8的卷积算子620、批归一化算子630、激活函数算子640、GRU算子650、全连接算子670。有些算子比较简单,仅包括一两种运算,即非复合算子,如卷积算子620、全连接算子670,而有些算子比较复杂,即复合算子,例如GRU算子650,其包括多个矩阵乘及张量间的点加、点乘、循环等原子操作。对于复合算子,由于其含有多种原子操作,需要精确地确定应针对哪些原子操作进行量化。现有技术中,为了精确找到量化位置,将复合算子在静态图中分解成原子操作,每个原子操作成为新的小算子(例如,将上述GRU算子中包含的多个矩阵乘及张量间的点加、点乘、循环等都作为小算子体现在静态图中),这样,就可以在细化的静态图上准确找到量化位置。但是,这会引入很多与控制、循环相关的节点,整个静态图变得复杂,不利于后续优化、编译等过程,而且一些分解出的原子操作并不存在于框架支持的算子列表中,还需要重写它们的实现,增加算子重写开销。
本公开实施例对于待量化的非复合算子,仍然采用与现有技术一样的在其前面加入量化节点的方法进行量化。对于待量化的复合算子,不是象现有技术那样在静态图中将其展开为小粒度的算子,而是不破坏静态图的基本结构,在复合算子内部进一步确定待量化原子操作,并在其前面加入量化探针,然后,根据在待量化非复合算子前插入了量化节点、或待量化复合算子内部的待量化原子操作前插入了量化探针的静态图,进行所述深度学习模型的量化。这样,保持了静态图的基本拓扑结构,减少了静态图复杂度,从而有利于后续优化、编译等过程。另外,由于不在静态图中分解原子操作,减少了分解出的原子操作并不存在于框架支持的算子列表中因而需要重写算子的开销。
本公开实施例中,处理单元220首先基于深度学习模型的静态图,确定待量化算子。静态图包括与深度学习模型的操作节点对应的算子。如图8所示,静态图600包括与卷积操作节点对应的卷积算子620、与批归一化操作节点对应的批归一化算子630、与激活函数操作节点对应的激活函数算子640、与GRU操作节点对应的GRU算子650、与全连接操作节点对应的全连接算子670。算子之间的箭头表示相应操作节点的输入输出关系。箭头指向的算子为输入数据的算子,箭头引出的算子是输出数据的算子。例如,从卷积算子620指向批归一化算子630的箭头表示卷积算子620的输出作为批归一化算子630的输入。
在基于深度学习模型的静态图,确定待量化算子时,可以先将特定格式的深度学习模型的静态图转换成通用中间表达的静态图,然后在所述通用中间表达的静态图上确定待量化算子。转换成通用中间表达是因为:如上所述,深度学习模型是在不同框架下编写的,例如TensorFlow408,MXNet 409,Caffe 410等,具有不同的格式,其量化时需要进行分别的适应于这些不同格式的量化。为了统一量化等过程,将各种框架格式转化成通用中间表达,在通用中间表达的基础上进行量化,之后再转换回原框架或格式,就达到了在不同的框架下统一量化的效果。这个过程即图5和6中的转换411,可以采取已知转换方法实现。
如上所述,是否将一个算子作为待量化节点与量化的具体精度要求有关。例如,如果量化需要将精度较高的数据类型降低到精度稍微差一点的数据类型,某些算子可能不需要参与量化,只需要量化那些对精度影响大的算子就可以了。但是,如果量化需要将精度很高的数据类型降低到精度很低的数据类型,只量化那些对精度影响大的算子可能就不足以达到这样的要求,对精度影响不那么大的算子可能也需要量化。因此,在一个实施例中,在所述通用中间表达的静态图的算子中,根据量化前精度、量化后精度和第一规则,确定待量化算子。第一规则给出了量化前精度、量化后精度和各种待量化算子的映射关系。它明确给出了在各种量化前精度和量化后精度的不同组合下,有哪些类型的算子需要量化。实际使用时,就可以根据需要达到的量化前精度和量化后精度查找该映射关系,得到该量化前精度和该量化后精度的组合下的待量化算子类型。在所述通用中间表达的静态图的所有算子中查找符合该待量化算子类型的算子,即待量化算子。假设量化前精度为32位浮点数,量化后精度为8位整型数,映射关系中32位浮点数和8位整型数的组合对应的待量化算子类型包括卷积、池化、LSTM、GRU、全连接算子。在图8中符合这些类型的算子有卷积算子620、GRU算子650和全连接算子670,这些算子作为待量化算子。
接着,确定这些待量化算子分别是复合算子还是非复合算子。这可以通过查找复合算子类型库确定。在复合算子类型库中包含所有复合算子的类型。如果待量化算子的类型属于复合算子类型库,则认为该待量化算子是复合算子。反之,则认为是非复合算子。如图8所示,待量化节点中,卷积算子620和全连接算子670是非复合算子,GRU算子650是复合算子。
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点。量化节点是在静态图中插入的用于执行量化过程的程序和相关数据。该程序运行后执行量化过程。如图8所示,在卷积算子620前面插入量化节点610,在全连接算子670前面插入全连接算子。
对于复合算子,由于其包含多种原子操作,需要在其中找到这些原子操作中真正需要量化的原子操作,因此,需要在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针。
是否将一个原子操作作为待量化原子操作与量化的具体精度要求有关。例如,如果量化需要将精度较高的数据类型降低到精度稍微差一点的数据类型,某些原子操作可能不需要参与量化,只需要量化那些对精度影响大的原子操作就可以了。但是,如果量化需要将精度很高的数据类型降低到精度很低的数据类型,只量化那些对精度影响大的原子操作可能就不足以达到这样的要求,对精度影响不那么大的原子操作可能也需要量化。因此,在一个实施例中,在所述复合算子内部的原子操作中,根据量化前精度、量化后精度和第二规则,确定待量化原子操作。
对于复合算子,需要多条指令才能完成,每条指令完成的动作可以看成一个原子操作如图9中,GRU算子650可以表示为串联的原子操作1-4,其中,原子操作1的输出供给原子操作2作为输入,原子操作2的输出供给原子操作3作为输入,等等。
第二规则给出了量化前精度、量化后精度和各种待量化原子操作类型的映射关系。它明确给出了在各种量化前精度和量化后精度的不同组合下,有哪些类型的原子操作需要量化。实际使用时,就可以根据需要达到的量化前精度和量化后精度查找该映射关系,得到该量化前精度和该量化后精度的组合下的待量化原子操作类型。在所述通用中间表达的静态图的所有算子中查找符合该待量化原子操作类型的算子,即待量化原子操作。如图9所示,符合查找到的类型的原子操作有原子操作1和3,这些算子作为待量化算子,原子操作2和4不作为待量化算子。
然后,在确定的待量化原子操作的前面插入量化探针。量化探针是指在待量化复合算子内部插入的用于执行上述量化的程序和相关数据。该程序运行后执行上述量化过程。它与量化节点本质上并无太大区别,只是它本身不作为一个节点,不破坏原有静态图结构,从程序语句和相关数据上看,是类似的。如图9所示,在原子操作1和3前面插入量化探针653,这样,图8中的GRU算子650变成量化后GRU算子651。
上面的实施例只是笼统地介绍了在非复合算子的前面插入量化节点,和在待量化原子操作的前面插入量化探针,但实际上如上面结合图6所示,这种量化实际上是分成校准4122和基于校准得到的最大值最小值进行量化4123两步完成的。
在校准4122中,如果所述待量化算子是非复合算子,在所述非复合算子的前面插入最大值最小值收集节点。以图8为例,可以在卷积算子620和全连接端子670的前面插入最大值最小值收集节点,其类似于图8的量化节点610和660插入的位置。如果所述待量化算子是复合算子,在确定的待量化原子操作的前面插入最大值最小值收集探针。以图9为例,可以在原子操作1和3的前面分别插入最大值最小值收集探针,其类似于图9的量化探针653插入的位置。
最大值最小值收集节点是安插在深度学习模型的静态图的特定位置,用于收集深度学习模型运行时该特定位置产生的值的最大值和最小值的程序和相关数据。最大值最小值收集探针是安插在复合算子内部的特定位置,用于收集深度学习模型运行时该特定位置产生的值的最大值和最小值的程序和相关数据。它在程序代码上与最大值最小值收集节点并无本质区别,只不过它不插入静态图,不破坏静态图的基本结构。
插入最大最小值收集节点和最大最小值收集探针后,将插入了所述最大最小值收集节点、和复合算子内插入了所述最大最小值收集探针的通用中间表达的静态图,转换回所述特定格式(即深度学习模型原有的框架下的格式)进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值。转换回原有格式进行校准,是因为校准采用的校准数据集都是原框架下的数据集,推理脚本也是原框架下的脚本,其并不支持通用中间格式。因此,虽然在通用中间格式中插入最大最小值收集节点和最大最小值收集探针,还要转换回原有格式进行校准,即收集最大最小值。
将插入了所述最大最小值收集节点、和在待量化复合算子内插入了所述最大最小值收集探针的通用中间表达的静态图,转换回所述特定格式的深度学习模型之后,接收校准数据集,以便利用推理脚本将所述校准数据集应用于转换回的特定格式的深度学习模型。校准数据集是在校准过程中应用于深度学习模型的数据集。将该数据集中的数据输入深度学习模型后,检测深度学习模型中的某个位置处的输入的最大值和最小值,就可以完成校准。推理脚本是用于运行深度学习模型,将其用于实际推理的代码段及相关数据。推理脚本实际上包含该深度学习模型的程序代码。接收校准数据集后,经该推理脚本执行,得到深度学习模型对于校准数据集的推理结果。但在校准过程中,不关心模型结果输出,关心的是最大最小值收集节点位置得到的值的最大值和最小值、以及最大最小值收集探针位置得到的值的最大值和最小值,其分别表示待量化非复合算子的输入的最大值、最小值、以及待量化原子操作的输入的最大值、最小值。只有知道了该最大值、最小值,才能进行待量化非复合算子的量化、和待量化原子操作的量化,即生成插入到待量化非复合算子前的量化算子、和插入到待量化原子操作前的量化探针。
所述量化节点是根据所述待量化非复合算子的输入的最大值、最小值生成的。具体地,可以根据所述待量化非复合算子的输入的最大值、最小值,确定待量化非复合算子量化因素。然后,根据所述待量化非复合算子量化因素,生成量化节点。
量化因素是在量化过程中用到的因子。也就是说,如何进行量化,取决于这些因子,而这些因子是校准得到的输入最大值、最小值决定的。在前面的描述中,介绍了在线性量化的情况下的缩放系数和偏移量,它们就是两个量化因素。在量化时,主要靠这两个因子来控制量化过程。但在其它量化的情况下,量化因素可能就是其它因子。
量化节点是用于执行上述的量化操作的程序和相关数据。一旦量化因素确定了,实际上相关程序和数据就确定了,因此,可以根据量化因素生成量化节点。
所述量化探针是根据所述待量化原子操作的输入的最大值、最小值生成的。具体地,可以根据所述待量化原子操作的输入的最大值、最小值,确定待量化原子操作量化因素。然后,根据所述待量化原子操作量化因素,生成量化探针。
根据待量化原子操作的输入的最大值、最小值,确定待量化原子操作量化因素,并根据所述待量化原子操作量化因素,生成量化探针的过程,与根据待量化非复合算子的输入的最大值、最小值,确定待量化非复合算子量化因素,并根据所述待量化非复合算子量化因素,生成量化节点的过程类似,故不赘述。
在上述过程中,已经在通用中间表达的静态图中插入量化节点,在待量化复合算子内部插入量化探针。但是,量化需要适应于深度学习模型的原有的框架,因此,将插入量化节点、或在待量化复合算子内部插入了量化探针的通用中间表达的静态图转换回所述深度学习模型原有框架的格式进行量化,成为量化后模型。接着,将量化后模型按照加速单元支持的指令集,转换成加速单元模型503(即图5-6中的编译414),发送给所述加速单元230。
如上所述,本公开实施例对于待量化的复合算子,不是象现有技术那样在静态图中将其展开为小粒度的算子,而是在复合算子内部进一步确定待量化原子操作,并在其前面加入量化探针,然后,根据插入量化节点、或在待量化复合算子内部插入量化探针的静态图,进行所述深度学习模型的量化。通过这种方式,保持了静态图的基本拓扑结构,减少了静态图复杂度,从而有利于后续优化、编译等过程,同时减少了分解出的原子操作并不存在于框架支持的算子列表中因而需要重写算子的风险。
如图10所示,本公开实施例还提供了一种深度学习模型量化方法,其由处理单元220执行。该方法包括:
步骤710、基于深度学习模型的静态图,确定待量化算子;
步骤720、如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点;
步骤730、如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针;
步骤740、根据插入了量化节点、或所述复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化。
由于该方法的具体实现过程已经在前面的装置实施例的描述中涉及,为节约篇幅,故不赘述。
本公开实施例的商业价值
本公开实施例由于省略了在静态图中将复合算子拆分为多个原子操作的复杂流程,使静态图的复杂度大大减小,实验证明,其相比于现有技术的在静态图中将复合算子拆分为多个原子操作的方案,优化、编译速度快几倍,且消除了由于分解出的原子操作不存在于框架支持的算子列表中的可能性,模型的部署效率提高几倍,具有良好的市场前景。
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述得比较简单,相关之处参见其他实施例的部分说明即可。
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
Claims (20)
1.一种处理单元,包括:
取指令单元,用于从所述处理单元外部的存储器取回计算机指令;
指令译码单元,用于对取回的计算机指令进行译码;
指令执行单元,用于执行译码后的所述计算机指令,以实现:
基于深度学习模型的静态图,确定待量化算子;
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针;
根据插入了量化节点、或所述复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化。
2.根据权利要求1所述的处理单元,其中,所述基于深度学习模型的静态图,确定待量化算子,包括:
将特定格式的深度学习模型的静态图转换成通用中间表达的静态图;
在所述通用中间表达的静态图上确定待量化算子;
所述根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化,包括:将所述插入了量化节点、或复合算子中插入了量化探针的静态图转换回所述特定格式进行量化,成为量化后模型。
3.根据权利要求2所述的处理单元,其中,在确定待量化算子之后,指令执行单元还用于执行译码后的所述计算机指令,以实现:
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入最大值最小值收集节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入最大值最小值收集探针;
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值;
其中,所述量化节点是根据所述待量化非复合算子的输入的最大值、最小值确定的,所述量化探针是根据所述待量化原子操作的输入的最大值、最小值确定的。
4.根据权利要求2所述的处理单元,其中,所述在所述通用中间表达的静态图上确定待量化算子,包括:
在所述通用中间表达的静态图的算子中,根据量化前精度、量化后精度和第一规则,确定待量化算子。
5.根据权利要求1所述的处理单元,其中,所述在所述复合算子内部确定待量化原子操作,包括:
在所述复合算子内部,根据量化前精度、量化后精度和第二规则,确定待量化原子操作。
6.根据权利要求3所述的处理单元,其中,所述量化节点通过如下方式确定:
根据所述待量化非复合算子的输入的最大值、最小值,确定待量化非复合算子量化因素;
根据所述待量化非复合算子量化因素,生成量化节点。
7.根据权利要求3所述的处理单元,其中,所述量化探针通过如下方式确定:
根据所述待量化原子操作的输入的最大值、最小值,确定待量化原子操作量化因素;
根据所述待量化原子操作量化因素,生成量化探针。
8.根据权利要求3所述的处理单元,其中,所述将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值,包括:
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式的深度学习模型;
接收校准数据集,以便利用推理脚本将所述校准数据集应用于转换回的特定格式的深度学习模型,其中,所述最大最小值收集节点得到所述待量化非复合算子的输入的最大值、最小值,所述最大值最小值收集探针得到所述待量化原子操作的输入的最大值、最小值。
9.根据权利要求1所述的处理单元,其中,在根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化之后,所述指令执行单元还用于执行译码后的所述计算机指令,以实现:将量化后模型按照加速单元支持的指令集,转换成加速单元模型,发送给所述加速单元。
10.一种计算装置,包括:
根据权利要求1-9中任一个所述的处理单元;
存储器,用于存储所述计算机指令;
加速单元,用于运行部署的深度学习模型。
11.一种片上系统,包括用于运行深度学习模型的加速单元,所述深度学习模型由根据权利要求1-9中任一个所述的处理单元量化后部署在所述加速单元上。
12.一种数据中心,包括根据权利要求10所述的计算装置。
13.一种深度学习模型量化方法,包括:
基于深度学习模型的静态图,确定待量化算子;
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入量化节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入量化探针;
根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化。
14.根据权利要求13所述的方法,其中,所述基于深度学习模型的静态图,确定待量化算子,包括:
将特定格式的深度学习模型的静态图转换成通用中间表达的静态图;
在所述通用中间表达的静态图上确定待量化算子;
所述根据插入了量化节点、或复合算子中插入了量化探针的静态图,进行所述深度学习模型的量化,包括:将所述插入了量化节点、或复合算子中插入了量化探针的静态图转换回所述特定格式进行量化,成为量化后模型。
15.根据权利要求14所述的方法,其中,在确定待量化算子之后,所述方法还包括:
如果所述待量化算子是非复合算子,在所述非复合算子的前面插入最大值最小值收集节点;
如果所述待量化算子是复合算子,在所述复合算子内部确定待量化原子操作,并在确定的待量化原子操作的前面插入最大值最小值收集探针;
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值;
其中,所述量化节点是根据所述待量化非复合算子的输入的最大值、最小值确定的,所述量化探针是根据所述待量化原子操作的输入的最大值、最小值确定的。
16.根据权利要求14所述的方法,其中,所述在所述通用中间表达的静态图上确定待量化算子,包括:
在所述通用中间表达的静态图的算子中,根据量化前精度、量化后精度和第一规则,确定待量化算子。
17.根据权利要求13所述的方法,其中,所述在所述复合算子内部确定待量化原子操作,包括:
在所述复合算子内部,根据量化前精度、量化后精度和第二规则,确定待量化原子操作。
18.根据权利要求15所述的方法,其中,所述量化节点通过如下方式确定:
根据所述待量化非复合算子的输入的最大值、最小值,确定待量化非复合算子量化因素;
根据所述待量化非复合算子量化因素,生成量化节点。
19.根据权利要求15所述的方法,其中,所述量化探针通过如下方式确定:
根据所述待量化原子操作的输入的最大值、最小值,确定待量化原子操作量化因素;
根据所述待量化原子操作量化因素,生成量化探针。
20.根据权利要求15所述的方法,其中,所述将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式进行校准,分别得到所述待量化非复合算子、所述待量化原子操作的输入的最大值、最小值,包括:
将插入了所述最大最小值收集节点、所述复合算子中插入了所述最大值最小值收集探针的通用中间表达的静态图,转换回所述特定格式的深度学习模型;
接收校准数据集,以便利用推理脚本将所述校准数据集应用于转换回的特定格式的深度学习模型,其中,所述最大最小值收集节点得到所述待量化非复合算子的输入的最大值、最小值,所述最大值最小值收集探针得到所述待量化原子操作的输入的最大值、最小值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010437888.0A CN113705800A (zh) | 2020-05-21 | 2020-05-21 | 处理单元、相关装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010437888.0A CN113705800A (zh) | 2020-05-21 | 2020-05-21 | 处理单元、相关装置和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113705800A true CN113705800A (zh) | 2021-11-26 |
Family
ID=78646229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010437888.0A Pending CN113705800A (zh) | 2020-05-21 | 2020-05-21 | 处理单元、相关装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113705800A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116579400A (zh) * | 2023-05-19 | 2023-08-11 | 北京百度网讯科技有限公司 | 深度学习模型的量化方法、数据处理方法和装置 |
-
2020
- 2020-05-21 CN CN202010437888.0A patent/CN113705800A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116579400A (zh) * | 2023-05-19 | 2023-08-11 | 北京百度网讯科技有限公司 | 深度学习模型的量化方法、数据处理方法和装置 |
CN116579400B (zh) * | 2023-05-19 | 2024-02-23 | 北京百度网讯科技有限公司 | 深度学习模型的量化方法、数据处理方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10872290B2 (en) | Neural network processor with direct memory access and hardware acceleration circuits | |
US10970623B2 (en) | System and method for training artificial intelligence systems using a sima based processor | |
US20180260700A1 (en) | Method and system for implementing reinforcement learning agent using reinforcement learning processor | |
CN111105023B (zh) | 数据流重构方法及可重构数据流处理器 | |
US11669443B2 (en) | Data layout optimization on processing in memory architecture for executing neural network model | |
Song et al. | Bridging the semantic gaps of GPU acceleration for scale-out CNN-based big data processing: Think big, see small | |
Zhang et al. | Predicting HPC parallel program performance based on LLVM compiler | |
Lin et al. | Accelerating large sparse neural network inference using GPU task graph parallelism | |
CN113688982A (zh) | 处理单元、相关装置和方法 | |
Lin et al. | Hyscale-gnn: A scalable hybrid gnn training system on single-node heterogeneous architecture | |
CN114337920A (zh) | 编码解析方法、装置及电子设备 | |
US20220172044A1 (en) | Method, electronic device, and computer program product for deploying machine learning model | |
CN113705800A (zh) | 处理单元、相关装置和方法 | |
CN112051981B (zh) | 一种数据流水线计算路径结构及单线程数据流水线系统 | |
CN112434785A (zh) | 一种面向超级计算机的分布式并行深度神经网络性能评测方法 | |
Janssen et al. | A specification invariant technique for regularity improvement between flow-graph clusters | |
Anthony et al. | Efficient training of semantic image segmentation on summit using horovod and mvapich2-gdr | |
Medhat et al. | Managing the performance/error tradeoff of floating-point intensive applications | |
CN111275194B (zh) | 一种基于fpga的nlp推理加速系统 | |
CN113313242A (zh) | 处理单元、相关装置和方法 | |
CN110333857B (zh) | 一种基于约束规划的自定义指令自动识别方法 | |
Zeng et al. | Toward a high-performance emulation platformfor brain-inspired intelligent systemsexploring dataflow-based execution model and beyond | |
US20210150311A1 (en) | Data layout conscious processing in memory architecture for executing neural network model | |
Vieira et al. | Processing convolutional neural networks on cache | |
CN114996647A (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 |