深度学习模型的量化方法、数据处理方法和装置与流程

未命名 08-14 阅读:182 评论:0


1.本公开涉及人工智能技术领域,尤其涉及深度学习、模型压缩和模型量化技术领域。更具体地,本公开提供了一种深度学习模型的量化方法、数据处理方法、装置、电子设备和存储介质。


背景技术:

2.模型量化是将模型中的浮点型数据的存储(或运算)转换为定点型数据的存储(或运算),是一种模型压缩技术。模型的量化能够减少模型的存储和运算开销、降低功耗、提升计算速度。


技术实现要素:

3.本公开提供了一种深度学习模型的量化方法、数据处理方法、装置、设备以及存储介质。
4.根据第一方面,提供了一种深度学习模型的量化方法,该方法包括:设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数;响应于初始深度学习模型的预运行,处理器根据输入量化参数和输出量化参数,对所述操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行所述操作算子的访存和计算,得到操作算子的输入数据类型和输出数据类型;根据输入数据类型和输出数据类型,将多个操作算子划分为至少一个操作模块,其中,操作模块包括至少一个操作算子;针对每个操作模块,在操作模块的输入位置处插入量化模块,得到待训练的深度学习模型;以及获取经训练的深度学习模型,并对经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型;其中,经训练的深度学习模型是对待训练的深度学习模型进行训练得到的。
5.根据第二方面,提供了一种数据处理方法,该方法包括:获取高比特数据类型的待处理数据;使用深度学习模型对待处理数据以低比特数据类型进行处理,得到低比特数据类型的处理结果;深度学习模型是根据上述深度学习模型的量化方法得到的量化后的深度学习模型。
6.根据第三方面,提供了一种深度学习模型的量化装置,该装置包括:设置模块,用于设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数;预运行模块,用于响应于初始深度学习模型的预运行,处理器根据输入量化参数和输出量化参数,对所述操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行所述操作算子的访存和计算,得到操作算子的输入数据类型和输出数据类型;划分模块,用于根据输入数据类型和输出数据类型,将多个操作算子划分为至少一个操作模块,其中,操作模块包括至少一个操作算子;插入模块,用于针对每个操作模块,在操作模块的输入位置处插入量化模块,得到待训练的深度学习模型;以及调整模块,用于获取经训练的深度学习模型,并对经训练的深度学习模型中的量化模块进行调整,得到量化
后的深度学习模型;其中,经训练的深度学习模型是对待训练的深度学习模型进行训练得到的。
7.根据第四方面,提供了一种数据处理装置,该装置包括:获取模块,用于获取高比特数据类型的待处理数据;处理模块,用于使用深度学习模型对待处理数据以低比特数据类型进行处理,得到低比特数据类型的处理结果;深度学习模型是根据上述深度学习模型的量化装置得到的量化后的深度学习模型。
8.根据第五方面,提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行根据本公开提供的方法。
9.根据第六方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行根据本公开提供的方法。
10.根据第七方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序存储于可读存储介质和电子设备其中至少之一上,所述计算机程序在被处理器执行时实现根据本公开提供的方法。
11.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
12.附图用于更好地理解本方案,不构成对本公开的限定。其中:
13.图1是根据本公开的一个实施例的可以应用深度学习模型的量化方法以及数据处理方法的示例性系统架构示意图;
14.图2是根据本公开的一个实施例的深度学习模型的量化方法的流程图;
15.图3是根据本公开的一个实施例的初始深度学习模型中各操作算子的输入数据类型和输出数据类型的示意图;
16.图4是根据本公开的一个实施例的在操作模块的输入位置处插入量化模块的示意图;
17.图5是根据本公开的一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图;
18.图6是根据本公开的另一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图;
19.图7是根据本公开另一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图;
20.图8是根据本公开另一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图;
21.图9是根据本公开的一个实施例的数据处理方法的流程图;
22.图10是根据本公开的一个实施例的深度学习模型的量化装置的框图;
23.图11是根据本公开的一个实施例的数据处理装置的框图;
24.图12是根据本公开的一个实施例的深度学习模型的量化方法以及数据处理方法中的至少之一的电子设备的框图。
具体实施方式
25.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
26.模型量化,可以通过建立浮点数据(例如float32类型的数据)和定点数据(例如整型int8类型的数据)之间的映射关系,将浮点模型转换为定点模型,使得模型以较小的精度损失获得较大的收益。例如,模型中的一个权重原来需要使用float32类型来表示,量化后只需要使用int8类型来表示。int8类型的数据精度相比于float32类型数据的精度可以认为精度是无损的,然而模型的存储开销、计算速度等性能却得到了显著的提升。
27.一种模型量化方法,可以在浮点模型的基础上,在某些想要量化的操作算子前(如卷积算子)成对地插入量化算子q(quantize)和反量化算子dq(qequantize),然后进行模型训练,模型训练结束后,将训练好的模型中的dq算子移动到操作算子之后,得到量化后的模型。该量化方法称为显式量化方法。
28.量化算子q用于将数据从浮点类型转换为整型,反量化算子dq用于将数据从整型转化为浮点型,成对的量化算子q和反量化算子dq具有相同的量化参数。在模型训练前,在操作算子前成对的插入qdq算子对,因此在模型训练阶段模型的运算仍是浮点型。在训练结束后,量化算子q和反量化算子dq的量化参数达到最优,将dq算子移动到操作算子之后,操作算子被量化算子q和反量化算子dq包起来,从而使得操作算子被量化。在使用模型进行推理时,操作算子的输入和权重从浮点类型转换为整型(例如int8),操作算子的计算从浮点计算转换为整型(例如int8)计算。
29.显式量化方法在模型训练阶段仍采用浮点运算,因此模型精度较高。模型在推理时和训练阶段的前向过程一致,因此推理阶段的模型精度与训练阶段的模型精度一致,可以认为是无损的。然而上述显式量化方法存在以下问题。
30.模型在训练阶段只有部分算子前插入了odq算子,因此,模型在推理阶段也只有部分算子能够实现量化,算子间流动的张量(例如算子的输入和输出)不完全是整型,导致推理时存在大量浮点数据与整型数据的转换开销,访存开销增大。
31.此外,相关技术一般仅针对卷积算子进行量化,模型中还存在大量的其他算子(例如池化算子、全连接算子等)未量化,导致推理时存在大量的浮点运算,运算开销较大。
32.因此,显式量化方法使模型的精度无损,但是由于模型不能全量化运行,造成访存开销大、运算开销大、计算速度低,导致模型性能较差。
33.一种模型的量化方法,在上述显式量化的基础上,统计模型中所有张量的量化参数值,并认为此量化参数值总是可以用来量化此张量,该方法可以称为隐式量化方法。
34.隐式量化方法可以使模型的推理以全量化的形式运行,模型性能达到最优。但是,由于相同的张量可以输入多个操作算子,有的操作算子前面插入了qdq算子对(即张量后插入了qdq算子对),有的操作算子前面没有插入qdq(即张量后没有插入qdq算子对),隐式量化方法针对相同的张量均采用统计到的量化参数来进行量化,然而事实上只有训练时后面插入了qdq算子对的张量才可以在推理的时候被量化,因此,隐式量化会存在模型精度变差的情况。
35.因此,如何让模型以全量化形式运行,且精度和性能均达到最佳是实际应用中的目标,然而,要实现该目标,在哪些操作算子前面插入qdq算子对是一个棘手的问题,以及插入了qdq算子对后的模型到底如何无损全量化推理也是一个难题。
36.本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
37.在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
38.图1是根据本公开一个实施例的可以应用深度学习模型的量化方法以及数据处理方法的示例性系统架构示意图。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
39.如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线和/或无线通信链路等等。
40.用户可以使用终端设备101、102、103通过网络104与服务器105进行交互,以接收或发送消息等。终端设备101、102、103可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机等等。
41.本公开实施例所提供的深度学习模型的量化方法以及数据处理方法中的至少之一一般可以由终端设备101、102、103中的之一执行。相应地,本公开实施例所提供的深度学习模型的量化装置以及数据处理装置一般可以设置于终端设备101、102、103中的之一。
42.本公开实施例涉及深度学习模型的训练,该深度学习模型的训练过程一般可以由服务器105执行。
43.图2是根据本公开的一个实施例的深度学习模型的量化方法的流程图。
44.如图2所示,该深度学习模型的量化方法200包括操作s210~操作s250。
45.在操作s210,设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数。
46.初始深度学习模型可以包括多个操作算子,操作算子可以包括卷积算子、全连接算子、池化算子等。
47.输入量化参数用于将操作算子的输入数据由高比特数据类型(例如float32)转换为低比特数据类型(例如int8),输出量化参数用于将操作算子的输出数据由低比特数据类型(例如int8)转换为高比特数据类型(例如float32)。因此,每个操作算子的输入量化参数和输出量化参数使得该操作算子被量化,该操作算子的访存和运算以低比特数据类型(例如int8)进行。
48.各个操作算子的输入量化参数和输出量化参数可以是任意设置的,因此,本步骤设置的输入量化参数和输出量化参数一般不是最优的。
49.在操作s220,响应于初始深度学习模型的预运行,处理器根据输入量化参数和输出量化参数,对操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行操作算子的访存和计算,得到操作算子的输入数据类型和输出数据类型。
50.初始深度学习模型的预运行可以是初始深度学习模型的推理过程。由于每个操作算子均设置了用于量化该操作算子的输入量化参数和输出量化参数,因此,该预运行可以认为是初始深度学习模型以全量化形式运行。
51.不同框架的深度学习模型,在运行时支持不同的融合策略。例如,有的深度学习模型在运行是会将连续的卷积算子、全连接算子和池化算子融合在一起,作为一个整体。有些深度学习模型在运行时会将卷积算子与相邻的全连接算子分别作为独立的算子,不进行融合。
52.因此,初始深度学习模型的预运行也会根据对应的融合策略将初始深度学习模型中能够融合在一起的多个操作算子作为一个整体,该整体中的各个算子间的中间结果不进行数据类型的转化,而是仍以高比特数据类型(float32)进行。该整体的输入数据被转换为低比特数据类型(int8),该整体的输出数据作为下一个操作算子(或下一个整体)的输入数据也被转换为低比特数据类型(int8)。因此,该整体的输入数据和输出数据均为低比特数据类型(int8),该整体的中间结果为高比特数据类型(float32)。
53.对于独立的操作算子,预运行过程中该独立的操作算子的输入数据被转换为低比特数据类型(int8),该独立的操作算子的输出数据作为下一个独立的操作算子(或下一个整体)的输入数据也被转换为低比特类型(int8)。因此,该独立的操作算子的输入数据和输出数据均为低比特数据类型(int8)。
54.由于不同框架的深度学习模型支持不同的融合策略,用户难以全部知晓。本实施通过自动化的预运行方式,得到各个算子的输入数据类型和输出数据类型,无需开发人员逐个框架的分析,根据输入数据类型和输出数据类型便可以确定初始深度学习模型中哪些算子是融合在一起的,哪些算子是独立的。
55.例如,大多深度学习框架均提供有用于获取模型结构中操作算子的输入输出信息的打印接口。利用该打印接口通过脚本读取初始深度学习模型的结构,可以得到各操作算子的输入数据和类型、输出数据和类型。
56.在操作s230,根据输入数据类型和输出数据类型,将多个操作算子划分为至少一个操作模块。
57.初始深度学习模型中,能够融合在一起的多个操作算子作为一个整体,该整体的输入数据和输出数据均为低比特数据类型(int8),该整体的中间结果为高比特数据类型(float32)。独立的操作算子的输入数据和输出数据均为低比特数据类型(int8)。
58.因此,在得到各个操作算子的输入数据类型和输出数据类型之后,可以将符合预定条件连续多个算子划分在一起,作为操作模块。预定条件可以是该连续多个算子作为一个整体,输入输出数据均为int8类型,连续多个算子的中间输入输出数据为float32型。还可以将输入数据类型和输出数据类型均为int8的独立操作算子确定为一个操作模块。
59.由此,初始深度学习模型中的多个操作算子被划分为至少一个操作模块。每个操作模块可以是一个独立操作算子或者是一个融合算子组合。
60.在操作s240,针对每个操作模块,在操作模块的输入位置处插入量化模块,得到待训练的深度学习模型。
61.在将初始深度学习模型划分为至少一个操作模块之后,可以确定每个操作模块的输入位置,并在该输入位置处插入量化模块,得到新的模型结构。量化模块包括量化算子q
和反量化算子dq,即该量化模块为qdq算子对。
62.对于包括连续多个操作算子的操作模块,该连续多个操作算子间是没有必要插入qdq算子对的。例如,初始深度学习模型可以融合连续的卷积算子(conv)、批量归一化算子(bn,batch normalization)以及加和算子(add),即(conv+bn+add)作为一个整体,中间数据仍采用浮点型运算,因此,在add算子或bn算子之前插入qdq算子对是没有必要的。
63.因此,设置初始深度学习模型中各个操作算子的输入量化参数和输出量化参数,等效于将每个操作算子进行了量化,对初始深度学习模型进行预运行,该预运行为全量化运行,根据预运行结果,得到每个操作算子的输入数据类型和输出数据类型,根据输入数据类型和输出数据类型将多个操作算子划分为至少一个操作模块,选择在操作模块的输入位置处插入qdq算子对,能够达到与预运行阶段一样的全量化的效果,且能够避免不必要的插入,简化模型结构。
64.此外,相比于仅在个别操作算子前插入qdq算子对,本实施例在操作模块的输入位置插入qdq算子对,能够使初始深度学习模型的量化更全面,提升系统性能。
65.至此,在操作模块的输入位置处插入有量化模块的初始深度学习模型可以作为待训练的深度学习模型。
66.接下来,可以对待训练的深度学习模型进行训练,在深度学习模型的训练过程中,深度学习模型中各个操作算子的权重参数、dqd算子对的量化参数均得到优化,直至训练收敛,得到经训练的深度学习模型。该经训练的深度学习模型中各个操作算子的权重参数和dqd算子对的量化参数均达到最优。
67.在操作s250,获取经训练的深度学习模型,并对经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型。
68.经训练的深度学习模型中的qdq算子对位于操作算子的输入位置处,需要将qdq算子对进行调整,使qdq算子对将操作算子量化。
69.例如,可以将qd算子调整到操作算子之后,使得q算子和dq算子将操作算子包起来,操作算子被量化。从而使得在使用模型进行推理时,操作算子的输入和权重从float类型转换为整型int类型,操作算子的运算算从float类型的运算转换为int类型的运算。
70.本公开的实施例通过全量化的预运行结果,将初始深度学习模型中的多个操作算子划分为至少一个操作模块,操作模块可以包括单一算子或者融合算子组合,在每个操作模块的输入位置处插入量化模块,相比于相关技术中仅在个别操作算子前插入qdq算子对,本实施例能够使初始深度学习模型的量化更全面,提升系统性能。
71.此外,本实施例通过全量化的预运行结果,确定初始深度学习模型中的能够融合的操作模块,在操作模块的输入位置处插入量化模块,使得经训练的深度学习模型在进行推理时,均是对输入位置处插入有量化模块的操作算子进行量化,因此不会损失模型的精度,实现无损量化。
72.因此,本公开的实施例能够使得深度学习模型的精度和性能均达到最佳。
73.根据本公开的实施例,操作s220包括响应于初始深度学习模型的预运行,处理器根据输入量化参数,将多个操作算子中的至少一个操作算子的输入数据从高比特数据类型float32转换为低比特数据类型int8,并以低比特数据类型执行所述至少一个操作算子的访存和计算;处理器根据输出量化参数,将至少一个操作算子的输出数据从低比特数据类
型int8转换为高比特数据类型float32;以及针对至少一个操作算子中的每个操作算子,将当前操作算子的输入数据类型确定为在前操作算子的输出数据类型。
74.根据初始深度学习模型框架自身支持的融合策略,初始深度学习模型在预运行过程中,仅对部分操作算子(至少一个操作算子)的输入输出进行浮点与整型的转换,能够被融合的操作算子间的输入输出不进行转换。
75.图3是根据本公开的一个实施例的初始深度学习模型中各操作算子的输入数据类型和输出数据类型的示意图。
76.如图3所示,初始深度学习模型包括操作算子a~e。根据初始深度学习模型自身支持的操作算子融合策略,操作算子b、c、d是能够融合的。操作算子a、e是独立的。那么在预运行过程中,操作算子b、c、d之间的中间运算仍是浮点运算。
77.例如,根据操作算子a的输入量化参数,操作算子a的输入数据由float型转换为int型,操作算子a的输出数据为int型。根据操作算子a的输出量化参数,操作算子a的输出数据由int型转换为float型。操作算子a的输出数据作为操作算子b的输入数据。
78.根据操作算子b的输入量化参数,操作算子b的输入数据由float型转换为int型,由于操作算子b的输入数据为操作算子a的输出数据,因此操作算子a的输出数据最终为int型。因此,操作算子a的输入数据和输出数据均为int型。该操作算子a可以作为一个操作模块。
79.例如,操作算子b的输入数据为int型,操作算子b的输出数据也为int型,然后根据操作算子b的输出量化参数,操作算子b的输出数据由int型转换为float型。操作算子b的输出数据作为操作算子c的输入数据,由于操作算子b、c、d可融合,操作算子b、c、d之间的中间运算仍是浮点运算,因此,操作算子c并未利用输入量化参数将输入数据转换为int,而是直接使用float型的输入数据进行运算,得到float型的输出数据,作为操作算子d的输入数据。类似地,操作算子d直接使用float型的输入数据进行运算,得到float型的输出数据,作为操作算子e的输入数据。
80.例如,操作算子e不能与操作算子d融合,因此,操作算子e根据输入量化参数将输入数据由float型的转化为int型。由于操作算子e的输入数据为操作算子d的输出数据,因此操作算子d的输出数据最终为int型。因此,操作算子b、c、d作为一个整体,输入数据和输出数据均为int型。
81.因此,操作算子a可以作为一个操作模块,操作算子b~d作为一个操作模块,操作算子e根据后续的操作模块的输入输出类型来确定是否为一个操作模块。
82.图4是根据本公开一个实施例的在操作模块的输入位置处插入量化模块的示意图。
83.如图4所示,卷积算子conv、批量归一化算子bn以及加和算子add可以融合在一起作为一个操作模块。
84.卷积算子conv包括两个输入位置,一个用于输入上一个操作算子的输出(记为input_1 fp32),另一个用于输入权重(记为weight fp32)。
85.加和算子add没有权重输入,但是加和算子add包括两个输入,一个输入是批量归一化算子bn的输出,另一个输入是外部输入(记为input_2 fp32)。
86.卷积算子conv、批量归一化算子bn以及加和算子add作为操作模块,整体的输入包
括卷积算子conv的两个输入(input_1fp32、weight fp32)以及加和算子add一个输入(input_2fp32)。
87.因此,可以记录该操作模块的输入标识(input_1fp32、weight fp32、input_2fp32),在这些输入标识的位置处插入qdq算子对。
88.初始深度学习模型在插入qdq算子对之后,可以进行深度学习模型的训练,得到经训练的深度学习模型。针对经训练的深度学习模型,模型结构中的qdq算子对的量化参数达到最优,可以用来量化操作算子。此时,需要对模型中的qdq算子进行调整,也即模型结构图优化,才能实现对操作算子的量化。
89.根据本公开的实施例,操作s250包括确定量化模块的在后操作模块中的操作算子的类型;以及根据在后操作模块中的操作算子的类型,对量化模块中的量化算子和反量化算子中的之一进行调整,得到量化后的深度学习模型。
90.相关技术中一般在卷计算子conv的输入位置插入qdq算子对,在模型训练结束后,将dq算子移动到卷积算子之后。本实施例由于将深度学习模型中的多个操作算子划分为了至少一个操作模块,在每个操作模块的输入位置处插入了qdq算子对,操作模块作为qdq算子对的在后操作模块,可以将do算子移动到在后操作模块之后,而不局限于卷积算子。
91.由于操作模块可以是一个独立的操作算子,或者是一个融合算子组合。因此dq算子可以是移动到独立的在后操作算子之后,也可以是移动到在后的融合算子组合之后。
92.图5是根据本公开一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图。
93.如图5所示,qdq算子对可以拆分为量化算子q和反量化算子dq。由于独立操作算子不局限于卷计算子conv,还可以是其他算子,例如池化算子pool等。因此,本实施例dq算子可以是移动到独立的池化算子pool之后。
94.然而,深度学习模型中的操作算子众多,并非所有的操作算子均支持将dq算子移动到该操作算子之后。例如,激活函数类的操作算子sigmoid,不能将dq算子移动到激活函数算子sigmoid。又例如,分组归一化操作模块gn(group norm),是将输入分为多个组,每组求均值和方差,然后再对每组进行归一化,求均值和方差包含了加和操作算子sum,允许将dq算子移动到加和操作算子sum的后面,归一化操作包含了先乘后加算子,不允许将dq算子移动到先乘后加操作算子的后面。
95.因此,可以根据在后操作模块中的操作算子的类型,来确定qdq算子对的调整方式。操作算子的类型可以包括第一算子类型和第二算子类型,第一算子类型可以是常规类型,如conv算子、pool算子、add算子等。对于常规类操作算子,可以将dq算子添加到这类操作算子之后。第二算子类型可以是非常规类型,例如sigmoid算子等,对于非常规类操作算子,不能将dq算子添加到这类操作算子之后。
96.对于在后操作模块,包含的操作算子可以均为第一算子类型,也可以是均为第二算子类型,还可以同时包含第一算子类型和第二算子类型的操作算子。
97.针对在后操作模块中的操作算子的类型均为第一算子类型的情况,例如独立的conv算子、pool算子等,或者包含可以融合的conv算子和add算子的操作模块,可以直接将dq算子移动到该操作模块之后。
98.如果在后操作模块具有多个输入位置,每个输入位置均插入有qdq算子对的情况。
多个qdq算子对的dq算子均调整到在后操作模块的输出位置。
99.图6是根据本公开另一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图。
100.如图6所示,conv算子为第一算子类型,包括两个输入,在两个输入位置处分别插入了q0dq0算子对和q1dq1算子对。因此,在调整时,将两个算子对的dq算子之和(dq0+dq1)调整到conv算子之后。
101.dq下移的调整方式对于一些计算密集型的算子来说收益很大。由于dq算子为一个线性映射,操作非常简单,将dq下移到操作模块的后面就可以改变操作算子的运算精度,使操作算子以int8数据类型进行运算,大大提高了运算速度,且不改变运算结果。
102.根据本公开的实施例,响应于在后操作模块中的操作算子的类型为第二算子类型,将量化模块的量化算子与量化模块的在前操作模块融合,并将量化模块的反量化算子与在后操作模块融合。
103.针对在后操作模块中的操作算子的类型均为第二算子类型的情况,例如sigmoid算子。本实施例采用将q算子和dq算子与在前操作模块和在后操作模块分别融合的调整方式。
104.图7是根据本公开另一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图。
105.如图7所示,操作模块op1和操作模块op2之间插入了qdq算子对,操作模块op1可以是单个操作算子,也可以是融合算子组合。操作模块op2也可以是单个操作算子,或者可以是融合算子组合。操作模块op2中的操作算子为第二算子类型,无法将dq算子移动到操作模块op2之后。可以将q算子与操作模块op1融合(即将op1量化),将dq算子与操作模块op2融合(即将op2反量化),分别得到融合模块(op1
·
q)以及融合模块(dq
·
op2)。
106.虽然该调整方式的代价是需要将op1量化,将op2反量化,但是由于q和dq的操作很简单,且处理器访存开销较计算开销占主要地位,因此该代价是非常划算的。
107.如果在后操作模块具有多个输入位置,每个输入位置均插入有qdq算子对的情况。可以将多个量化模块各自的量化算子之和与在前操作模块融合,并将多个量化模块各自的反量化算子之和与在后操作模块融合。
108.例如,操作模块op1和操作模块op2之间插入了q0dq0算子对和q1dq1算子对,操作模块op1可以是单个操作算子,也可以是融合算子组合。操作模块op2也可以是单个操作算子,或者可以是融合算子组合。操作模块op2中的操作算子为第二算子类型,无法将dq0算子和dq1算子移动到操作模块op2之后。可以将q0算子和q1之和与操作模块op1融合得到融合模块(op1
·
(q0+q1)),将dq0算子和dq1算子之和与操作模块op2融合,得到融合模块((dq0+dq1)
·
op2)。
109.本实施例采用融合方式调整后得到的两个融合模块之间可以以整型(int8类型)数据进行通信,减少访存开销。
110.根据本公开的实施例,响应于在后操作模块包括第一算子类型的操作算子以及第二算子类型的操作算子,将量化模块的反量化算子调整到在后操作模块中的第一算子类型的操作算子的输出位置。
111.针对在后操作模块中的操作算子的类型包括第一算子类型和第二算子类型的情
况,例如,分组归一化操作模块gn(group norm),是将输入分为多个组,每组求均值和方差,然后再对每组进行归一化,求均值和方差包含了加和操作算子sum,允许将dq算子移动到加和操作算子sum的后面,归一化操作包含了先乘后加算子,不允许将dq算子移动到先乘后加操作算子的后面。本实施例采用部分下移dq算子的调整方式。
112.图8是根据本公开另一个实施例的对经训练的深度学习模型中的量化模块进行调整的示意图。
113.如图8所示,分组归一化操作模块包括加和算子sum和先乘后加算子。分组归一化操作模块的输入位置插入了qdq算子对。
114.分组归一化可以用如下公式(1)表示。
[0115][0116]
其中,x表示分组后的输入数据,mean表示均值,var表示方差,y表示输出数据,γ和β为预设参数。均值和方差实质都是加和sum操作。do算子可以下移到sum算子之后,但是无法下移到先乘后加算子之后。
[0117]
如果操作模块具有多个输入位置,每个输入位置均插入有qdq算子对的情况。可以将将多个量化模块各自的反量化算子之和调整到后操作模块中的第一算子类型的操作算子的输出位置。
[0118]
例如,分组归一化操作的两个输入位置之前分别插入了q0dq0算子对和q1dq1算子对,可以将dq0算子和dq1算子之和(dq0+dq1)调整到sum算子之后。
[0119]
本实施将dq算子部分下移到sum算子之后,虽然不能下移到整体的操作模块之后,但是仍大大提高了sum算子的计算速度,整体上提升了系统性能。
[0120]
综上,本公开的实施例在操作模块的输入位置插入qdq算子对,在模型训练结束后,将qd算子移动到在后操作模块的输出位置,对于不能后移的情况,可以选择将q算子与在先操作模块融合并将dq算子与在后操作模块进行融合的调整方式,或者还可以将dq模块部分下移到在后操作模块中的允许下移的操作算子的输出位置的调整方式。从而基于以上三种调整方式,能够使得深度学习模型在推理时以全量化形式运行,精度无损的实现整型存储和运算,从而降低访存开销、降低计算开销、提高运算速度、提升系统性能。
[0121]
图9是根据本公开的一个实施例的数据处理方法的流程图。
[0122]
如图9所示,该数据处理方法900包括操作s910~s920。
[0123]
在操作s910,获取高比特数据类型的待处理数据。
[0124]
在操作s920,使用深度学习模型对待处理数据以低比特数据类型进行处理,得到低比特数据类型的处理结果。
[0125]
深度学习模型是根据上述深度学习模型的量化方法得到的量化后的深度学习模型。
[0126]
由于上述深度学习模型的量化方法得到的量化后的深度学习模型能够以全量化形式运行,因此,使用深度学习模型可以将高比特数据类型(float32)的待处理数据转换为低比特的整型(int8)数据,并在整个推理过程中实现以整型进行存储和运算,提高数据处理效率。
[0127]
图10是根据本公开的一个实施例的深度学习模型的量化装置的框图。
[0128]
如图10所示,该深度学习模型的量化装置1000包括设置模块1001、预运行模块1002、划分模块1003、插入模块1004以及调整模块1005。
[0129]
设置模块1001用于设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数。
[0130]
预运行模块1002用于响应于初始深度学习模型的预运行,处理器根据输入量化参数和输出量化参数,对操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行操作算子的访存和计算,得到操作算子的输入数据类型和输出数据类型。
[0131]
划分模块1003用于根据输入数据类型和输出数据类型,将多个操作算子划分为至少一个操作模块,其中,操作模块包括至少一个操作算子。
[0132]
插入模块1004用于针对每个操作模块,在操作模块的输入位置处插入量化模块,得到待训练的深度学习模型。
[0133]
调整模块1005用于获取经训练的深度学习模型,并对经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型。
[0134]
其中,经训练的深度学习模型是对待训练的深度学习模型进行训练得到的。
[0135]
预运行模块1002包括第一转换单元、第二转换单元和第一确定单元。
[0136]
第一转换单元用于响应于初始深度学习模型的预运行,通过处理器根据输入量化参数,将多个操作算子中的至少一个操作算子的输入数据从高比特数据类型转换为低比特数据类型,并以低比特数据类型执行所述至少一个操作算子的访存和计算。
[0137]
第二转换单元用于通过处理器根据输出量化参数,将至少一个操作算子的输出数据从低比特数据类型转换为高比特数据类型。
[0138]
第一确定单元用于针对至少一个操作算子中的每个操作算子,将当前操作算子的输入数据类型确定为在前操作算子的输出数据类型。
[0139]
划分模块包括1003包括第一划分单元和第二划分单元。
[0140]
第一划分单元用于将符合预定条件的连续多个操作算子划分在一起,作为一个操作模块,其中预定条件包括连续多个操作算子作为一个整体的输入数据和输出数据均为低比特数据类型,连续多个算子之间的输入数据和输出数据为高比特数据类型。
[0141]
第二划分单元用于将输入数据类型和输出数据类型均为低比特数据类型的独立操作算子确定为一个操作模块。
[0142]
量化模块包括量化算子和反量化算子,操作算子包括第一算子类型和第二算子类型。调整模块1005包括第二确定单元和调整单元。
[0143]
第二确定单元用于确定量化模块的在后操作模块中的操作算子的类型。
[0144]
调整单元用于根据在后操作模块中的操作算子的类型,对量化模块中的量化算子和反量化算子中的之一进行调整,得到量化后的深度学习模型。
[0145]
调整单元用于响应于在后操作模块中的操作算子的类型为第一算子类型,将量化模块中反量化算子调整到在后操作模块的输出位置。
[0146]
根据本公开的实施例,操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,操作模块作为与多个输入位置各自对应的多个量化模块的在后操作模块。调整单元用于响应于在后操作模块中的操作算子的类型为第一算子类型,将多个量化
模块各自的反量化算子之和调整到在后操作模块的输出位置。
[0147]
调整单元用于响应于在后操作模块中的操作算子的类型为第二算子类型,将量化模块的量化算子与量化模块的在前操作模块融合,并将量化模块的反量化算子与在后操作模块融合。
[0148]
调整单元用于响应于在后操作模块中的操作算子的类型为第二算子类型,将多个量化模块各自的量化算子之和与在前操作模块融合,并将多个量化模块各自的反量化算子之和与在后操作模块融合。
[0149]
调整单元用于响应于在后操作模块包括第一算子类型的操作算子以及第二算子类型的操作算子,将量化模块的反量化算子调整到在后操作模块中的第一算子类型的操作算子的输出位置。
[0150]
调整单元,用于响应于在后操作模块包括第一算子类型的操作算子以及第二算子类型的操作算子,将多个量化模块各自的反量化算子之和调整到在后操作模块中的第一算子类型的操作算子的输出位置。
[0151]
图11是根据本公开的一个实施例的数据处理装置的框图。
[0152]
如图11所示,该数据处理装置1100包括获取模块1101和处理模块1102。
[0153]
获取模块1101用于获取高比特数据类型的待处理数据。
[0154]
处理模块1102用于使用深度学习模型对待处理数据以低比特数据类型进行处理,得到低比特数据类型的处理结果。
[0155]
其中,深度学习模型是根据上述深度学习模型的量化装置得到的量化后的深度学习模型。
[0156]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0157]
图12示出了可以用来实施本公开的实施例的示例电子设备1200的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0158]
如图12所示,设备1200包括计算单元1201,其可以根据存储在只读存储器(rom)1202中的计算机程序或者从存储单元1208加载到随机访问存储器(ram)1203中的计算机程序,来执行各种适当的动作和处理。在ram 1203中,还可存储设备1200操作所需的各种程序和数据。计算单元1201、rom 1202以及ram 1203通过总线1204彼此相连。输入/输出(i/o)接口1205也连接至总线1204。
[0159]
设备1200中的多个部件连接至i/o接口1205,包括:输入单元1206,例如键盘、鼠标等;输出单元1207,例如各种类型的显示器、扬声器等;存储单元1208,例如磁盘、光盘等;以及通信单元1209,例如网卡、调制解调器、无线通信收发机等。通信单元1209允许设备1200通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0160]
计算单元1201可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1201的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的
人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元1201执行上文所描述的各个方法和处理,例如深度学习模型的量化方法以及数据处理方法中的至少之一。例如,在一些实施例中,深度学习模型的量化方法以及数据处理方法中的至少之一可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1208。在一些实施例中,计算机程序的部分或者全部可以经由rom 1202和/或通信单元1209而被载入和/或安装到设备1200上。当计算机程序加载到ram 1203并由计算单元1201执行时,可以执行上文描述的深度学习模型的量化方法以及数据处理方法中的至少之一的一个或多个步骤。备选地,在其他实施例中,计算单元1201可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行深度学习模型的量化方法以及数据处理方法中的至少之一。
[0161]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0162]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0163]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0164]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0165]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算
系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0166]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
[0167]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0168]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

技术特征:
1.一种深度学习模型的量化方法,包括:设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数;响应于所述初始深度学习模型的预运行,处理器根据所述输入量化参数和所述输出量化参数,对所述操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行所述操作算子的访存和计算,得到所述操作算子的输入数据类型和输出数据类型;根据所述输入数据类型和输出数据类型,将所述多个操作算子划分为至少一个操作模块,其中,所述操作模块包括至少一个操作算子;针对每个操作模块,在所述操作模块的输入位置处插入量化模块,得到待训练的深度学习模型;以及获取经训练的深度学习模型,并对所述经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型;其中,所述经训练的深度学习模型是对所述待训练的深度学习模型进行训练得到的。2.根据权利要求1所述的方法,其中,所述响应于所述初始深度学习模型的预运行,处理器根据所述输入量化参数和所述输出量化参数,对所述操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行所述操作算子的访存和计算,得到所述操作算子的输入数据类型和输出数据类型包括:响应于所述初始深度学习模型的预运行,处理器根据所述输入量化参数,将所述多个操作算子中的至少一个操作算子的输入数据从高比特数据类型转换为低比特数据类型,并以低比特数据类型执行所述至少一个操作算子的访存和计算;处理器根据所述输出量化参数,将所述至少一个操作算子的输出数据从低比特数据类型转换为高比特数据类型;以及针对所述至少一个操作算子中的每个操作算子,将当前操作算子的输入数据类型确定为在前操作算子的输出数据类型。3.根据权利要求2所述的方法,其中,所述根据所述输入数据类型和输出数据类型,将所述多个操作算子划分为至少一个操作模块包括:将符合预定条件的连续多个操作算子划分在一起,作为一个操作模块,其中所述预定条件包括所述连续多个操作算子作为一个整体的输入数据和输出数据均为低比特数据类型,所述连续多个算子之间的输入数据和输出数据为所述高比特数据类型;以及将输入数据类型和输出数据类型均为所述低比特数据类型的独立操作算子确定为一个操作模块。4.根据权利要求1至3中任一项所述的方法,其中,所述量化模块包括量化算子和反量化算子,所述操作算子包括第一算子类型和第二算子类型;所述对所述经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型包括:确定所述量化模块的在后操作模块中的操作算子的类型;以及根据所述在后操作模块中的操作算子的类型,对所述量化模块中的量化算子和反量化算子中的之一进行调整,得到所述量化后的深度学习模型。5.根据权利要求4所述的方法,所述根据所述在后操作模块中的操作算子的类型,对所
述量化模块中的量化算子和反量化算子中的之一进行调整,得到所述量化后的深度学习模型包括:响应于所述在后操作模块中的操作算子的类型为所述第一算子类型,将所述量化模块中反量化算子调整到所述在后操作模块的输出位置。6.根据权利要求5所述的方法,其中,所述操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,所述操作模块作为与所述多个输入位置各自对应的多个量化模块的在后操作模块;所述响应于所述在后操作模块中的操作算子的类型为所述第一算子类型,将所述量化模块中反量化算子调整到所述在后操作模块的输出位置包括:响应于所述在后操作模块中的操作算子的类型为所述第一算子类型,将所述多个量化模块各自的反量化算子之和调整到所述在后操作模块的输出位置。7.根据权利要求4所述的方法,其中,所述根据所述在后操作模块中的操作算子的类型,对所述量化模块中的量化算子和反量化算子中的之一进行调整,得到所述量化后的深度学习模型包括:响应于所述在后操作模块中的操作算子的类型为所述第二算子类型,将所述量化模块的量化算子与所述量化模块的在前操作模块融合,并将所述量化模块的反量化算子与所述在后操作模块融合。8.根据权利要求7所述的方法,其中,所述操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,所述操作模块作为与所述多个输入位置各自对应的多个量化模块的在后操作模块;所述响应于所述在后操作模块中的操作算子的类型为所述第二算子类型,将所述量化模块的量化算子与所述量化模块的在前操作模块融合,并将所述量化模块的反量化算子与所述在后操作模块融合包括:响应于所述在后操作模块中的操作算子的类型为所述第二算子类型,将所述多个量化模块各自的量化算子之和与所述在前操作模块融合,并将所述多个量化模块各自的反量化算子之和与所述在后操作模块融合。9.根据权利要求4所述的方法,其中,所述根据所述在后操作模块中的操作算子的类型,对所述量化模块中的量化算子和反量化算子中的之一进行调整,得到所述量化后的深度学习模型包括:响应于所述在后操作模块包括所述第一算子类型的操作算子以及所述第二算子类型的操作算子,将所述量化模块的反量化算子调整到所述在后操作模块中的第一算子类型的操作算子的输出位置。10.根据权利要求9所述的方法,其中,所述操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,所述操作模块作为与所述多个输入位置各自对应的多个量化模块的在后操作模块;所述响应于所述在后操作模块包括所述第一算子类型的操作算子以及所述第二算子类型的操作算子,将所述量化模块的反量化算子调整到所述在后操作模块中的第一算子类型的操作算子的输出位置包括:响应于所述在后操作模块包括所述第一算子类型的操作算子以及所述第二算子类型的操作算子,将所述多个量化模块各自的反量化算子之和调整到所述在后操作模块中的第一算子类型的操作算子的输出位置。11.一种数据处理方法,包括:
获取高比特数据类型的待处理数据;使用深度学习模型对所述待处理数据以低比特数据类型进行处理,得到低比特数据类型的处理结果;所述深度学习模型是根据权利要求1至10中任一项所述的方法得到的量化后的深度学习模型。12.一种深度学习模型的量化装置,包括:设置模块,用于设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数;预运行模块,用于响应于所述初始深度学习模型的预运行,处理器根据所述输入量化参数和所述输出量化参数,对所述操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,并以低比特数据类型执行所述操作算子的访存和计算,得到所述操作算子的输入数据类型和输出数据类型;划分模块,用于根据所述输入数据类型和输出数据类型,将所述多个操作算子划分为至少一个操作模块,其中,所述操作模块包括至少一个操作算子;插入模块,用于针对每个操作模块,在所述操作模块的输入位置处插入量化模块,得到待训练的深度学习模型;以及调整模块,用于获取经训练的深度学习模型,并对所述经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型;其中,所述经训练的深度学习模型是对所述待训练的深度学习模型进行训练得到的。13.根据权利要求12所述的装置,其中,所述预运行模块包括:第一转换单元,用于响应于所述初始深度学习模型的预运行,通过处理器根据所述输入量化参数,将所述多个操作算子中的至少一个操作算子的输入数据从高比特数据类型转换为低比特数据类型,并以低比特数据类型执行所述至少一个操作算子的访存和计算;第二转换单元,用于通过处理器根据所述输出量化参数,将所述至少一个操作算子的输出数据从低比特数据类型转换为高比特数据类型;以及第一确定单元,用于针对所述至少一个操作算子中的每个操作算子,将当前操作算子的输入数据类型确定为在前操作算子的输出数据类型。14.根据权利要求13所述的装置,其中,所述划分模块包括:第一划分单元,用于将符合预定条件的连续多个操作算子划分在一起,作为一个操作模块,其中所述预定条件包括所述连续多个操作算子作为一个整体的输入数据和输出数据均为低比特数据类型,所述连续多个算子之间的输入数据和输出数据为所述高比特数据类型;以及第二划分单元,用于将输入数据类型和输出数据类型均为所述低比特数据类型的独立操作算子确定为一个操作模块。15.根据权利要求12至14中任一项所述的装置,其中,所述量化模块包括量化算子和反量化算子,所述操作算子包括第一算子类型和第二算子类型;所述调整模块包括:第二确定单元,用于确定所述量化模块的在后操作模块中的操作算子的类型;以及调整单元,用于根据所述在后操作模块中的操作算子的类型,对所述量化模块中的量化算子和反量化算子中的之一进行调整,得到所述量化后的深度学习模型。
16.根据权利要求15所述的装置,其中,所述调整单元,用于响应于所述在后操作模块中的操作算子的类型为所述第一算子类型,将所述量化模块中反量化算子调整到所述在后操作模块的输出位置。17.根据权利要求16所述的装置,其中,所述操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,所述操作模块作为与所述多个输入位置各自对应的多个量化模块的在后操作模块;所述调整单元,用于响应于所述在后操作模块中的操作算子的类型为所述第一算子类型,将所述多个量化模块各自的反量化算子之和调整到所述在后操作模块的输出位置。18.根据权利要求15所述的装置,其中,所述调整单元,用于响应于所述在后操作模块中的操作算子的类型为所述第二算子类型,将所述量化模块的量化算子与所述量化模块的在前操作模块融合,并将所述量化模块的反量化算子与所述在后操作模块融合。19.根据权利要求18所述的装置,其中,所述操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,所述操作模块作为与所述多个输入位置各自对应的多个量化模块的在后操作模块;所述调整单元,用于响应于所述在后操作模块中的操作算子的类型为所述第二算子类型,将所述多个量化模块各自的量化算子之和与所述在前操作模块融合,并将所述多个量化模块各自的反量化算子之和与所述在后操作模块融合。20.根据权利要求15所述的装置,其中,所述调整单元,用于响应于所述在后操作模块包括所述第一算子类型的操作算子以及所述第二算子类型的操作算子,将所述量化模块的反量化算子调整到所述在后操作模块中的第一算子类型的操作算子的输出位置。21.根据权利要求20所述的装置,其中,所述操作模块的输入位置包括多个输入位置,每个输入位置均插入有量化模块,所述操作模块作为与所述多个输入位置各自对应的多个量化模块的在后操作模块;所述调整单元,用于响应于所述在后操作模块包括所述第一算子类型的操作算子以及所述第二算子类型的操作算子,将所述多个量化模块各自的反量化算子之和调整到所述在后操作模块中的第一算子类型的操作算子的输出位置。22.一种数据处理装置,包括:获取模块,用于获取高比特数据类型的待处理数据;处理模块,用于使用深度学习模型对所述待处理数据以低比特数据类型进行处理,得到低比特数据类型的处理结果;所述深度学习模型是根据权利要求12至21中任一项所述的装置得到的量化后的深度学习模型。23.一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至11中任一项所述的方法。24.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1至11中任一项所述的方法。25.一种计算机程序产品,包括计算机程序,所述计算机程序存储于可读存储介质和电子设备其中至少之一上,所述计算机程序在被处理器执行时实现根据权利要求1至11中任
一项所述的方法。

技术总结
本公开提供了一种深度学习模型的量化方法,涉及人工智能技术领域。具体实现方案为:设置初始深度学习模型中多个操作算子各自的输入量化参数和输出量化参数;响应于初始深度学习模型的预运行,处理器根据输入量化参数和输出量化参数,对操作算子的输入数据和输出数据进行高比特数据类型和低比特数据类型的转换,以低比特数据类型执行所述操作算子的访存和计算,得到操作算子的输入数据类型和输出数据类型;将多个操作算子划分为至少一个操作模块;在操作模块的输入位置处插入量化模块,得到待训练的深度学习模型;获取经训练的深度学习模型,并对经训练的深度学习模型中的量化模块进行调整,得到量化后的深度学习模型。得到量化后的深度学习模型。得到量化后的深度学习模型。


技术研发人员:周康康
受保护的技术使用者:北京百度网讯科技有限公司
技术研发日:2023.05.19
技术公布日:2023/8/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐