深度学习模型的量化方法和相关装置与流程

文档序号:28631850发布日期:2022-01-26 15:28阅读:164来源:国知局
深度学习模型的量化方法和相关装置与流程

1.本公开涉及深度学习领域,更具体而言,涉及一种深度学习模型的量化方法和相关装置。


背景技术:

2.深度学习模型已经广泛应用于各种领域。在生成深度学习模型后,要将深度学习模型部署本地芯片执行或部署到云端执行。在部署过程中的性能直接影响到之后使用深度学习模型进行推理(inference)时的性能和体验。量化是部署过程中非常关键的一个步骤。
3.量化是指,将深度学习模型中的每个节点的权重数据和输入数据,从高精度的量化级转换为低精度的量化级,例如从32位单精度浮点数 (fp32)转化为8位整型数据(int8)。这样做虽然精度降低了,但有助于降低对数据吞吐量和存储空间的要求。量化算法和策略的优劣直接决定最终部署到芯片上的模型的运行精度和速度。
4.现有的部署框架中,通常对完整模型采用单一的量化算法和策略。例如,针对mobilenetv1模型的量化,如果选择非对称量化算法,并且校准方式选择kl散度,则对整个模型的量化将统一采用这样的算法和策略。这种方式带来的问题是,要么造成量化校准的带来的巨大时间损耗,要么使得部分模型的量化精度爆炸。


技术实现要素:

5.有鉴于此,本公开旨在克服现有技术的模型量化要么精度低、要么复杂度高的问题,实现既能保证量化精度,又降低复杂度。
6.为了达到这个目的,根据本公开的一方面,本公开提供一种深度学习模型的量化方法,包括:
7.接收待量化深度学习模型;
8.将待量化深度学习模型划分成子模型;
9.针对子模型,从预先设置的候选量化算法和候选量化策略的组合中,选择与该子模型对应的量化算法和量化策略,所述量化策略是量化过程中除量化算法外需要遵循的准则;
10.输出子模型按照对应的量化算法和量化策略量化后得到的量化后深度学习模型。
11.可选地,在选择与该子模型对应的量化算法和量化策略之前,所述方法还包括:接收用户输入的量化方向;所述选择与该子模型对应的量化算法和量化策略,包括:选择与该子模型和所述量化方向对应的量化算法和量化策略。
12.可选地,所述接收用户输入的量化方向,包括:接收用户输入的与划分成的子模型对应的量化方向;所述选择与该子模型和所述量化方向对应的量化算法和量化策略,包括:按照该子模型和与划分成的子模型对应的量化方向,选择量化算法和量化策略。
13.可选地,所述将待量化深度学习模型划分成子模型,包括:将所述待量化深度学习模型输入子模型划分模型,由所述子模型划分模型输出划分的子模型。
14.可选地,所述将待量化深度学习模型划分成子模型,包括:基于所述待量化深度学习模型中节点的类型和层级中的至少一个,根据预定规则,将所述节点划分到子模型。
15.可选地,所述将待量化深度学习模型划分成子模型,包括:
16.生成并显示所述待量化深度学习模型对应的静态图;
17.接收用户对所述静态图的子模型划分指示;
18.按照所述子模型划分指示,将所述深度学习模型划分成子模型。
19.可选地,所述量化策略包括校准算法和量化后的位数中的至少一个。
20.可选地,所述候选量化算法和候选量化策略的组合通过以下方式预先设置:
21.获取与所述加速单元兼容的量化算法,作为候选量化算法;
22.获取与所述加速单元兼容的量化策略,作为候选量化策略;
23.对所述候选量化算法和所述候选量化策略进行相互组合。
24.可选地,所述选择与该子模型和所述量化方向对应的量化算法和量化策略,包括:将该子模型和所述量化方向输入量化算法与策略选择模型,由所述量化算法与策略选择模型输出选择的量化算法与量化策略。
25.可选地,所述选择与该子模型对应的量化算法和量化策略,包括:
26.显示所述预先设置的候选量化算法和候选量化策略的组合;
27.接收用户在所述预先设置的候选量化算法和候选量化策略的组合中的选择指示;
28.按照该选择指示,选择与该子模型对应的量化算法和量化策略。
29.可选地,所述选择与该子模型对应的量化算法和量化策略,包括:针对该子模型中的节点的输入张量、权重和偏移量,分别选择对应的量化算法和量化策略。
30.可选地,所述将子模型按照对应的量化算法和量化策略量化,包括:
31.对所述子模型的节点按照所述校准算法进行校准;
32.对校准后的节点,按照所述量化算法和量化后的位数进行量化。
33.根据本公开的一方面,提供了一种云服务系统,包括多个云服务器,用于分布式存储计算机可执行代码,当所述计算机可执行代码被相应云服务器上的处理器执行时,实现如上所述的方法。
34.根据本公开的一方面,提供了一种数据中心,包含如上所述的云服务系统。
35.根据本公开的一方面,提供了一种计算机设备,包括:
36.存储器,用于存储计算机可执行代码;
37.处理器,用于执行所述存储器存储的计算机可执行代码,以实现如上所述的方法。
38.在本公开实施例中,将深度学习模型划分成子模型。针对子模型,确定对该子模型合适的量化算法和量化策略,避免对整体模型运用同一种量化算法和量化策略要么导致巨大时间损耗、要么导致精度爆炸的问题。其避免了量化算法和策略对模型敏感,也避免了针对整个网络模型量化算法和策略强行加到每个子模型中,增加量化的计算复杂度的问题,实现既能保证量化精度,又降低复杂度。
附图说明
39.通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
40.图1是本公开一个实施例所应用的数据中心的结构图;
41.图2a-d是本公开实施例的深度学习模型的量化方法应用在云场景下的界面变化图;
42.图3示出了本公开实施例的量化过程的原理图;
43.图4示出了根据本公开一个实施例的深度学习模型的量化方法的流程图。
具体实施方式
44.以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
45.在本文中使用以下术语。
46.深度学习模型:深度学习是机器学习领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能。深度学习学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习采用的模型即深度学习模型。
47.量化:将深度学习模型中的节点的模型参数(例如权重、偏移量) 和输入张量由高精度数据类型转换为低精度数据类型,从而降低对数据吞吐量和存储空间的要求的行为。
48.下面结合一个量化的具体例子简单介绍量化的过程。
49.在量化时,为了将节点的模型参数(权重、偏移量)和输入张量转换为低精度数据类型的数据,首先需要知道模型参数和输入张量的取值范围,例如最大值为100,最小值为-100,如果转换为二进制8位整型数的话,让2
8-1,即11111111对应于最大值100,让0,即00000000 对应于最小值-100。这时,相当于将-100到100之间共200的区间长度平均分成(2
8-1)个小区间,每个小区间的长度为200/(2
8-1)=0.784。这样,对于-100和100之间任意一个数值,就可以确定出它所在的小区间。将小区间的左端点或右端点数值作为量化后的数值。例如,对于50 来说,[50-(-100)]/0.784=191.3,相当于第191个小区间,左端点为 191,即10111111,量化后的数值为10111111。
[0050]
上述过程中,量化前数值的取值范围中的量化前数值量化后均匀分布在量化后数值的取值范围中,该量化叫做线性量化。常见的线性量化过程可以用以下数学表达式来表示:
[0051]
r=round(s(q-z))
ꢀꢀꢀ
公式1
[0052]
其中,q表示的是量化前数值(例如32位浮点数);z表示的是量化前数值的零点偏移;s表示的是量化缩放因子scale;round(
·
)表示的是四舍五入近似取整的数学函数,除了四舍五入,使用向上或者向下取整也是可以的;r表示的是量化后的整数值。也就是说,将量化前数值q减去零点偏移z,得到差乘以量化缩放因子s,取整后就得到量化后的数值r。量化缩放因子s可以按照量化后数值的最大值与最小值之差除以量化前数值的最大值与最小值之差来确定,如上例的0.784。
[0053]
线性量化可以分为对称量化和非对称量化。
[0054]
对称量化:上述零点偏移z为0的量化,即使用上述公式1使得量化后数值位于一个端点围绕0点基本左右对称的区间中,如【-27,2
7-1】。在上述将最大值为100、最小值为-100的量化前数值进行量化的例子中,最小值-100对应于端点-27,最大值100对应于端点2
7-1。
[0055]
对称量化的一个核心即零点的处理,映射公式1需要保证原始的量化前数值中的零点通过映射公式1后仍然对应量化后数值的取值范围内的零点。在对称量化中,r是用有符号的整型数值来表示的,此时z=0,且q=0时恰好有r=0。
[0056]
非对称量化:上述零点偏移z不为0的量化,即使用上述公式1使得量化后数值位于一个端点不围绕0点基本左右对称的区间中,如【0, 2
8-1】。在上述将最大值为100、最小值为-100的量化前数值进行量化的例子中,最小值-100对应于端点0,最大值100对应于端点2
8-1。
[0057]
节点:深度学习模型中独立运算的最小单位,其接收输入张量,经本身的运算后产生输出张量输出给下一层节点。深度学习模型中有多个层,每个层有多个节点,每个节点的输出是下一层的节点的输入。以卷积节点为例,卷积节点接收到输入张量后,将输入张量乘以自身卷积核中的权重,加上该节点的偏移量,得到输出张量输送给下一层的节点。
[0058]
子模型:深度学习模型的一部分,该部分中包含的节点在量化时采用相同的量化算法和量化策略。一般来说,划分到同一子模型的节点具有某些相同的性质,例如都是同种节点,例如卷积节点;或者都是同一层的节点,例如按照节点的层划分子模型505,将同层的节点划分到相同的子模型505中。
[0059]
量化算法:量化时采用的算法。如上所述的对称量化511、非对称量化512,就是两种常见的量化算法。
[0060]
量化策略:量化过程中除量化算法外需要遵循的准则。量化时除了要遵循量化算法外,还有其它要遵守的准则。例如,量化包含之前的校准过程。校准时采用的校准算法就是一种量化策略。另外,处理量化算法外,量化还要遵循量化后的位数(例如模型的输入张量和参数全都需要量化成8位整型数),量化后的位数是另一种量化策略。
[0061]
候选量化算法:作为候选的量化算法,量化采用的量化算法要从中选出。
[0062]
候选量化策略:作为候选的量化策略,量化采用的量化策略要从中选出。
[0063]
量化方向:量化所追求的目标。例如,如果追求量化过程快速,用时少,则量化方向为提高运算效率;如果追求量化后模型简单,则量化方向是降低模型复杂度;如果追求量化后模型占用存储空间少,则量化方向是降低模型存储空间。不同的量化方向决定了量化算法和量化策略的选择。
[0064]
校准:如上所述,在量化时首先要确定模型中节点的输入参数的取值范围,再将取值范围的最大值与量化后最大值相对应,将取值范围的最小值与量化后最小值相对应,从而进行量化。确定深度学习模型中每个节点的输入参数的取值范围,叫做校准。可以提取在若干个时间点输入到深度学习模型的某个节点的输入张量,从这些时间点的输入张量,归纳出该节点的输入张量的取值范围。校准是量化的基础。
[0065]
子模型划分模型:本公开实施例的专用于将待划分深度学习模型划分成子模型的神经网络模型,其训练过程在后文详述。
[0066]
节点的类型:由于节点是深度学习模型中独立运算的最小单位,其执行何种运算,即为节点的类型,例如执行卷积运算的节点的类型是卷积节点。
[0067]
节点的层级:如上所述,深度学习模型中有多个层,每个层有多个节点,每个节点的输出是下一层的节点的输入,上述深度学习模型分成的包含多个节点的层即为节点的层级。
[0068]
静态图:它是表示深度学习模型中的各节点和各节点之间的关系的图。它表示出各节点的类型和所处的层级,同时用箭头表示各节点之间的信号输入输出关系。
[0069]
子模型划分指示:用户在静态图上操作、表示将某些节点划分在一个子模型中的指示。例如,用户在静态图中画一个圈,圈起来的节点划分在一个子模型中。
[0070]
量化算法与策略选择模型:本公开实施例的专用于为子模型输出为其选择的量化算法和量化策略的神经网络模型,其训练过程在后文详述。
[0071]
云应用场景
[0072]
数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而深度学习作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。
[0073]
在传统的大型数据中心,网络结构通常如图1所示,即互连网络模型(hierarchical inter-networking model)。这个模型包含了以下部分:
[0074]
服务器140:各服务器140是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器140完成的。
[0075]
接入交换机130:接入交换机130是用来让服务器140接入到数据中心中的交换机。一台接入交换机130接入多台服务器140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(top of rack)交换机,它们物理连接服务器。
[0076]
汇聚交换机120:每台汇聚交换机120连接多台接入交换机130,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。
[0077]
核心交换机110:核心交换机110为进出数据中心的包提供高速的转发,为汇聚交换机120提供连接性。整个数据中心的网络分为l3层路由网络和l2层路由网络,核心交换机110为通常为整个数据中心的网络提供一个弹性的l3层路由网络。
[0078]
通常情况下,汇聚交换机120是l2和l3层路由网络的分界点,汇聚交换机120以下的是l2网络,以上是l3网络。每组汇聚交换机管理一个传送点(pod,point of delivery),每个pod内都是独立的vlan 网络。服务器在pod内迁移不必修改ip地址和默认网关,因为一个pod 对应一个l2广播域。
[0079]
汇聚交换机120和接入交换机130之间通常使用生成树协议(stp, spanning tree protocol)。stp使得对于一个vlan网络只有一个汇聚层交换机120可用,其他的汇聚交换机120在出现故障时才被使用(上图中的虚线)。也就是说,在汇聚交换机120的层面,做不到水平扩展,因为就算加入多个汇聚交换机120,仍然只有一个在工作。
[0080]
云场景的应用界面举例
[0081]
图2a-d是本公开实施例的深度学习模型的量化方法应用在云场景下的界面变化图。在云场景下,云端相当于具有如图1所示的数据中心。在所有的服务器140中,有一个入口服务器(未示)。入口服务器与用户的客户端设备通过互联网通信。入口服务器上显示界面,让用户从客户端设备向入口服务器发送待量化的深度学习模型文件,入口服务器接收
到后,可能自己执行本公开实施例的深度学习模型的量化过程,将量化后的深度学习模型文件发送回用户的客户端设备,但更有可能是分发给云端的其它服务器140分别执行一部分上述量化过程,将量化后的深度学习模型文件发送回用户的客户端设备。这里的客户端设备可以是桌面电脑、平板电脑、pda、专用设备、车载设备、移动终端等。在该云场景下,深度学习模型的量化方法是由云端的各服务器140执行的,但图2a-d的界面是展示在用户的客户端上的界面。
[0082]
如图2a所示,用户在客户端打开向入口服务器请求的网页时,客户端展示网页,网页上指示用户上传待量化的深度学习模型文件。深度学习模型文件是包含深度学习模型的所有指令和参数的文件载体。用户可以在界面上选择“浏览”,选择本地存储的待量化的深度学习模型文件的路径,然后选择“上传”,从本地上传待量化的深度学习模型文件。
[0083]
如图2b所述,入口服务器接收到待量化的深度学习模型文件,与云端的其它服务器140合作,将深度学习模型转换成静态图。在静态图中,可以清晰看到深度学习模型的各节点及各节点之间的信号输入输出关系。该静态图发送到客户端显示。用户可以在界面上通过画圈的方式划分子模型,每个圈圈中的节点组成一个子模型。在圈好后,在界面上确认。如果用户不希望由自己来进行子模型的划分,可以在界面上选择自动划分子模型。这样,由服务器端根据后文中详述的方法自动进行子模型划分。
[0084]
当如图2b所示,划分完子模型中,可以在图2c中,在客户端显示界面,让用户选择希望的量化方向,例如提高运算效率、降低模型复杂度、降低模型存储空间等。可以针对所有子模型,让用户选择希望的量化方向。也可以逐个子模型,让用户选择希望的量化方向。图2c显示的是针对所有子模型整体,让用户选择希望的量化方向的界面。
[0085]
当服务器端获得划分的子模型和量化方向后,可以针对每个子模型,根据量化方向,选择对应的量化算法和策略进行量化,完成后在客户端界面上提示用户下载量化后的深度学习模型文件。用户在界面上选择下载到的路径,并选择“下载”,将量化后的深度学习模型文件下载到本地指定的路径。
[0086]
量化
[0087]
量化是指将深度学习模型中的权重等参数以及给深度学习模型的输入张量从高精度数据类型转换为低精度数据类型。下面以卷积神经网络为例对此进行解释。卷积神经网络包括多个层,每一层具有多个节点。节点是深度学习模型中根据输入进行运算得到输出特征的最小计算单位。每一层的节点输出的特征传送到下一层的节点,作为下一层接到的输入。卷积层通过卷积核进行矩阵相乘再加上偏移量矩阵,得到特征图。卷积核为二维矩阵,二维矩阵中的每个数值都可视为一个权重参数,由于卷积神经网络有多个层,每一层的卷积核中有多个权重参数,因此权重参数数量庞大。与权重参数相应地,与所述卷积核相乘的输入矩阵中的输入张量的数量也是巨大的。初始的深度学习模型往往采用高精度模型,其中节点的权重和输入张量等都是高精度数,例如32位浮点数。但受到实际部署时吞吐量和存储空间的限制,执行起来效率很低。这样,就需要将深度学习模型中的每个节点的权重等参数和输入张量,从高精度的数值转换为低精度的数值,即量化操作,例如从32位单精度浮点数 (fp32)转化为8位整型数据(int8)。这样做虽然精度降低了,但有助于降低对数据吞吐量和存储空间的要求。在完成量化操作后,才将量化后的深度学习模型部署到本地或云端。
[0088]
量化操作可以分步骤进行,例如先进行校准,得到校准模型,再在校准模型的基础上实施量化操作,得到量化后深度学习模型。校准即确定待量化深度学习模型中每个节点的输入张量的取值范围的行为。可以提取在若干个时间点输入到待量化深度学习模型的某个节点的输入张量,从这些时间点的输入张量,归纳出该节点的输入张量的取值范围。校准是量化的基础。
[0089]
有些情况下将校准和量化操作合并执行,即输入待量化深度学习模型,输出经过校准和量化操作后的量化后深度学习模型。量化操作完成后,高精度模型转化为低精度模型。
[0090]
本公开实施例中针对深度学习模型的量化
[0091]
现有的部署框架中,通常对完整的深度学习模型采用单一的量化算法和策略。量化算法是指量化时采用的算法,如对称量化511和非对称量化512。量化策略是指量化过程中除量化算法外需要遵循的准则,包括校准算法和量化后的位数(量化后模型的输入张量和权重等参数需要量化成的位数)。校准算法包括kl散度算法521、min-max算法522 和移动平均算法523等。
[0092]
例如,针对mobilenetv1模型的量化,现有技术中可能整体为模型选择非对称量化算法、和kl散度校准算法,则对整个模型的量化将统一采用这样的算法和策略。这种方式带来的问题是,要么造成量化校准的带来的巨大时间损耗,要么使得部分模型的量化精度爆炸。
[0093]
在本公开实施例中,将深度学习模型划分成子模型。不同的子模型,需要的量化算法可能不一样,适用的量化策略也不尽相同。本公开实施例不再限制单个模型采用单一量化算法和策略,而是划分子模型,使得不同的子模型采用不同的量化算法和策略,既防止量化校准的带来的巨大时间损耗,又防止量化精度爆炸。本公开实施例提出了一种基于量化算法和策略融合和对子模型的感知的量化方案,这种方案可以通过学习的方式综合考虑模型中每个子模型的特点,然后赋予每个子模型不同的量化算法和策略,使得最终的量化结果既能保证量化精度,又能减少量化校准的复杂度。
[0094]
下面针对本公开实施例针对深度学习模型的量化并部署的过程进行详细描述。
[0095]
根据本公开的一个实施例,提供了一种深度学习模型的量化方法,它是由图1的各服务器共同执行的。如图4所示,该方法包括:
[0096]
步骤610、接收待量化深度学习模型;
[0097]
步骤620、将待量化深度学习模型划分成子模型;
[0098]
步骤630、针对子模型,从预先设置的候选量化算法和候选量化策略的组合中,选择与该子模型对应的量化算法和量化策略,所述量化策略是量化过程中除量化算法外需要遵循的准则;
[0099]
步骤640、输出子模型按照对应的量化算法和量化策略量化后得到的量化后深度学习模型。
[0100]
下面对以上步骤进行详细描述。
[0101]
步骤610的接收待量化深度学习模型可以由上述入口服务器执行。如图2a所示,显示了引导用户上传深度学习模型的文件的界面。
[0102]
步骤620中提到的子模型是深度学习模型的一部分,该部分中包含的节点在量化
时采用相同的量化算法和量化策略。步骤620可以通过子模型划分模型实现。即,将所述深度学习模型输入子模型划分模型,由所述子模型划分模型输出划分的子模型。
[0103]
子模型划分模型是本公开实施例中专用于将待划分深度学习模型划分成子模型的神经网络模型。它可以通过以下方式进行训练:将由大量深度学习模型样本构成的深度学习模型样本集输入神经网络模型,由神经网络模型输出其划分的子模型。然后,再针对这些子模型执行步骤630 和步骤640,将得到的量化后深度学习模型部署执行后,得到对应的精度。如果在深度学习模型样本集中得到的精度大于预定精度阈值的样本数目占样本集总样本数的比率大于预定比例(例如95%),则认为模型训练成功。反之,则调整神经网络模型中的系数,使得在深度学习模型样本集中得到的精度大于预定精度阈值的样本数目占样本集总样本数的比率大于预定比例(例如95%)。训练成功的神经网络模型就可以作为子模型划分模型使用。将任何深度学习模型输入该子模型划分模型,可以得到划分的子模型。利用子模型划分模型的好处是,可以提高子模型划分的自动性和精确性。
[0104]
步骤620中,也可以基于所述深度学习模型中节点的类型和层级,根据预定规则,将所述节点划分到子模型中。节点的类型是节点执行的运算种类。例如,执行卷积运算的节点的类型是卷积节点。节点的层级是指深度学习模型的第几层。如上所述,深度学习模型为分层结构,每一层可能包含多个节点,上一层的节点的输出作为下一层的节点的输入。
[0105]
预定规则是预先制定的按照节点的类型和层级划分子模型的规则。例如,预定规则可以是,只要是深度学习模型中的同一类型的节点,全部划分到一个子模型中。这样,深度学习模型中的卷积节点划分到一个子模型中,池化节点划分到一个子模型中,等等。另外,预定规则可以是,深度学习模型中每一层的节点作为一个子模型。这样,不管节点类型如何,将第一层的所有节点划分到一个子模型中,将第二层的所有节点划分到一个子模型中,等等。还可以综合类型和层级制定该规则。例如,预定规则可以是,将深度学习模型的每一层的节点按照类型划分为不同子模型。这样,将第一层中的卷积节点划分为一个子模型,将第一层中的池化节点划分为一个子模型,将第二层中的卷积节点划分为一个子模型,将第二层中的池化节点划分为一个子模型,等等。通过预定规则进行划分,处理速度较快,占用处理资源少。
[0106]
另外,还可以如图2b所示,接受用户对子模型的人工划分,以提高划分子模型的灵活性。
[0107]
此时,入口服务器接收到待量化深度学习模型文件后,通过已有方法将待量化深度学习模型文件转换成对应的静态图并显示在客户端。静态图是表示深度学习模型中的各节点和各节点之间的关系的图。它表示出各层的节点,同时用箭头表示各节点之间的信号输入输出关系。如图 3所示,原始模型501(待量化深度学习模型)用其静态图504表示,静态图504中共有4层,每层4个节点,上一层节点和下一层节点之间用箭头表示数据的输入输出关系。箭头引出的是数据的输出节点,箭头指向的是数据的输入节点。
[0108]
用户可以在图2b所示的静态图中作出子模型划分指示。子模型划分指示是用户在静态图上操作、表示将某些节点划分在一个子模型中的指示。例如,用户在静态图中画一个圈,圈起来的节点划分在一个子模型中。触摸显示器接收用户对所述静态图的子模型划分指示按照所述子模型划分指示,将所述深度学习模型划分成子模型。如图3所示,将第1-2 层的节点划分为一个子模型,将第2-3层的节点划分到一个子模型,将第 3-4层的节点划分
到一个子模型。
[0109]
接着,在步骤630中,针对子模型,从预先设置的候选量化算法和候选量化策略的组合中,选择与该子模型对应的量化算法和量化策略。
[0110]
候选量化算法和候选量化策略的组合是预先设置好的。获取与加速单元230兼容的量化算法,作为候选量化算法。候选量化算法是作为候选的量化算法,量化采用的量化算法要从中选出。并不是所有的量化算法都能够在加速单元230上加速,因此,可以列举出加速单元230能够加速的量化算法,作为候选量化算法。获取与加速单元230兼容的量化策略,作为候选量化策略。候选量化策略是作为候选的量化策略,量化采用的量化策略要从中选出。并不是所有的量化策略都能够在加速单元 230上加速,因此,可以列举出加速单元230能够加速的量化策略,作为候选量化策略。接着,将列出的候选量化算法和列出的候选量化策略进行相互组合。例如,候选量化算法有两种,即对称量化算法sys和非对称量化算法asym;由于在量化时,往往要求统一的量化后位数(例如,在将32位浮点数量化为8位整型数的情况下,量化后位数统一为8),因此,多数情况下,量化后位数不可选(但在某些情况下也可以有多种选择),候选量化策略主要针对校准算法,候选量化策略包括kl散度、min-max、移动平均。这样,候选量化算法和候选量化策略的组合a={sys,asys}*{kl 散度,min-max,移动平均},最后产生6种组合,即sys与kl散度的组合、 sys与min-max的组合、sys与移动平均的组合、asys与kl散度的组合、asys 与min-max的组合、asys与移动平均的组合。
[0111]
从预先设置的候选量化算法和候选量化策略的组合中,选择与该子模型对应的量化算法和量化策略,可以通过预先训练的量化算法与策略选择模型。将该子模型输入量化算法与策略选择模型,由所述量化算法与策略选择模型输出选择的量化算法与量化策略。
[0112]
量化算法与策略选择模型是本公开实施例的专用于为子模型输出为其选择的量化算法和量化策略的神经网络模型,例如进化算法模型或 xgboost模型。它可以通过以下方式进行训练:将由大量深度学习模型样本构成的深度学习模型样本集在步骤610中按照同一方法划分成子模型,将每个子模型输入神经网络模型,由神经网络模型输出对应的量化算法和量化策略。在步骤630中,将子模型按照对应的量化算法和量化策略量化后得到的深度学习模型样本部署到加速单元230,由加速单元230 运行,并得到该深度学习模型样本对应的精度。如果在深度学习模型样本集中得到的精度大于预定精度阈值的样本数目占样本集总样本数的比率大于预定比例(例如95%),则认为模型训练成功。反之,则调整神经网络模型中的系数,使得在深度学习模型样本集中得到的精度大于预定精度阈值的样本数目占样本集总样本数的比率大于预定比例(例如 95%)。训练成功的神经网络模型就可以作为量化算法与策略选择模型使用。将任何子模型输入该量化算法与策略选择模型,可以得到选择的量化算法和量化策略。利用量化算法与策略选择模型选择量化算法和量化策略的好处是,可以提高选择量化算法和策略的精确性。
[0113]
上述实施例中,仅根据子模型来选择量化算法和策略。在另一个实施例中,还可以结合用户输入的量化方向来选择量化算法和策略。在该实施例中,在步骤630之前,所述方法还包括:接收用户输入的量化方向。量化方向是指量化所追求的目标。例如,有提高运算效率、降低模型复杂度、降低模型存储空间等不同的量化方向。不同的量化方向决定了量化算法和量化策略的选择。它可以如图2c所示,采用列出所有的候选量化方向,让用户在界面上选择来实现。
[0114]
在该实施例中,就需要按照该子模型和与划分成的子模型对应的量化方向,选择量化算法和量化策略。其与可以通过预先训练的量化算法与策略选择模型事先。将该子模型和量化方向两者输入量化算法与策略选择模型,由所述量化算法与策略选择模型输出选择的量化算法与量化策略。
[0115]
在这种情况下,量化算法与策略选择模型可以通过以下方式进行训练:针对由大量深度学习模型和量化方向的样本对构成的样本对集合,对其每个样本对中的深度学习模型,按照步骤620中的相同方法划分成子模型,然后与样本对中的量化方向一起,输入神经网络模型,由神经网络模型输出对应的量化算法和量化策略。将子模型按照对应的量化算法和量化策略量化后得到的深度学习模型部署执行,得到该量化后深度学习模型样本对应的精度。如果在该样本对集合中得到的精度大于预定精度阈值的样本对数目占样本对集合总样本数目的比率大于预定比例 (例如95%),则认为模型训练成功。反之,则调整神经网络模型中的系数,使得在样本对集合中得到的精度大于预定精度阈值的样本数目占样本对集合的总样本数目的比率大于预定比例(例如95%)。训练成功的神经网络模型就可以作为量化算法与策略选择模型使用。将任何子模型和量化方向一起输入该量化算法与策略选择模型,可以得到选择的量化算法和量化策略。利用量化算法与策略选择模型选择量化算法和量化策略的好处是,可以提高选择量化算法和策略的自动性和精确性。
[0116]
上述实施例中,量化方向是针对待量化深度学习模型中所有划分成的子模型的。在另一个实施例中,量化方向是针对单个子模型的。也就是说,对于每个划分出的子模型,接收用户输入的与该子模型对应的量化方向。在选择量化算法和量化策略时,也是将该子模型和与该子模型对应的量化方向,输入量化算法与策略选择模型,得到选择的量化算法和量化策略。
[0117]
另外,还可以接受用户对量化算法和量化策略的人工选择,以提高确定量化算法和量化策略的灵活性。通过这种方式,可以自定义量化算法和策略,具有可扩展性。
[0118]
此时,可以在客户端上显示预先设置的候选量化算法和候选量化策略的组合(未示)。用户在显示的组合中选择其希望的量化算法和量化策略。服务器量化时按照用户选择的量化算法和量化策略来量化。
[0119]
如上所述,深度学习模型进行推理时,节点将输入张量乘以自身的权重,加上节点对应的偏移量,得到输出张量输出到下一层的节点。因此,不仅权重需要量化,输入张量、偏移量也需要量化。在一个实施例中,可以对节点的输入张量、权重、偏移量采用同样的量化算法和策略。在另一个实施例中,可以针对该子模型中的节点的输入张量、权重和偏移量,分别选择对应的量化算法和量化策略。例如,在由上述量化算法与策略选择模型选择量化算法和策略的情况下,可以由该模型分别为节点的输入张量、权重和偏移量,选择不同的量化算法和量化策略。例如,在某些情况下,将32位浮点数量化为8位整型数时,可以仅让输入张量和权重量化后的位数为8就可以,不需要让偏移量量化为的位数也为8。可以让偏移量的量化后的位数为32。
[0120]
然后,在步骤640中,输出子模型按照对应的量化算法和量化策略量化后得到的量化后深度学习模型。
[0121]
量化分为校准和按照校准得到的最大值和最小值进行量化的过程。在量化时首先要确定模型中节点的输入张量的取值范围,再将取值范围的最大值与量化后最大值相对
应,将取值范围的最小值与量化后最小值相对应,从而进行量化。确定深度学习模型中每个节点的输入张量的取值范围,叫做校准。可以提取在若干个时间点输入到深度学习模型的某个节点的输入张量,从这些时间点的输入张量,归纳出该节点的输入张量的取值范围。
[0122]
另外,由于深度学习模型是在不同框架下编写的,例如tensorflow, mxnet,caffe等。对这些不同框架或格式,其量化时需要进行分别的适应于这些不同格式的量化。为了统一后续量化等过程,采取了转化的过程,即即由tensorflow,mxnet,caffe等各种框架格式转化成通用中间表达(ir),该通用中间表达不依赖于任何框架或格式。在通用中间表达的基础上进行量化,之后再转换回原框架或格式,就达到了在不同的框架下统一量化的效果。
[0123]
因此,本公开实施例中,将子模型按照对应的量化算法和量化策略量化时,可以先将模型转化成通用中间表达(ir),在ir中插入用于收集待量化输入的最大值、最小值的最大最小值收集节点。该最大最小值收集节点是插入的一小段程序,用于在执行时按照所述校准算法进行校准操作。然后,将插入了所述最大最小值收集节点的通用中间表达转化回转化之前的特定格式(如tensorflow 408等)进行校准,得到所述待量化输入的最大值、最小值,此时深度学习模型变为校准模型。然后,根据得到的待量化输入的最大值、最小值,在所述通用中间表达中插入量化节点。该量化节点是插入的一小段程序,用于在执行时按照量化算法和量化后的位数进行量化操作。将插入了量化节点的通用中间表达转化回转化之前的特定格式,进行量化,得到量化后深度学习模型,之后可以进行部署。
[0124]
如图2d所示,输出子模型按照对应的量化算法和量化策略量化后得到的量化后深度学习模型,可以采用在客户端的界面上提示用户下载的方式。用户指定量化后深度学习模型文件在本地的下载路径,选择下载,则可以将量化后深度学习模型文件下载到本地的指定下载路径。
[0125]
本公开实施例的如图4所示的上述量化方法在云端执行时,该方法的不同步骤可以由图1的不同服务器140分布式执行。其不同步骤的代码存储在不同服务器140上,被该服务器140上的处理器执行时,实现如图 4所示的量化方法。另外,本公开实施例的如图4所示的上述量化方法也可以不在云端执行,而是单机执行。此时,本公开实施例的如图4所示的上述量化方法由一台计算机设备执行。该计算机设备包括存储器和处理器。存储器用于存储如图4所示的量化方法的计算机可执行代码。处理器用于执行所述存储器存储的计算机可执行代码,以实现图4所示的量化方法。
[0126]
本公开实施例的商业价值
[0127]
本公开实施例提出了一种基于量化算法和策略融合和对子模型的感知的量化方案。这种方案可以通过学习的方式综合考虑模型中的每个子模型的特点,然后赋予每个子模型不同的量化算法和策略,使得最终的量化结果既能保证量化精度,又能减少量化校准的复杂度。实验证明,使得最终的量化精度提高到原来的1.5倍,复杂度仅为原来的80%以下,在优化深度学习模型的部署和执行方面,具有良好的市场前景。
[0128]
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例的过程,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
[0129]
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的
范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0130]
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
[0131]
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1