掌桥专利:专业的专利平台
掌桥专利
首页

神经网络模型的量化方法、装置及设备

文献发布时间:2023-06-19 12:24:27


神经网络模型的量化方法、装置及设备

技术领域

本申请涉及计算机技术领域,具体涉及一种神经网络模型的量化方法、装置,本申请还涉及一种电子设备和一种存储介质。

背景技术

公有云上神经网络模型的推理需求比重越来越大,存在优化推理任务性能的需求。目前公有云上的新型GPU(graphics processing unit,图形处理器)支持INT8(8bit位的整形有符号数)类型的运算,INT8的标称算力是FP16(半精度浮点数)的两倍。为了提高运算速度,往往需要把训练出的FP16精度的神经网络模型量化为INT8精度的模型。但是,针对部分对精度要求高的任务,采用PTQ(Post-Training Quantization,训练后量化)的技术方案,如果直接把神经网络模型量化为INT8精度模型,就会存在不可接受的精度损失。

现有技术下,针对客户有加速需求的神经网络模型,采用混合量化的方案,在保证精度的前提下,来进一步提升神经网络模型推理的性能,并能最大化的利用目标硬件的算力。量化神经网络模型到INT8精度时,模型精度不能满足需求的情况下,通过判断单个运算层对量化的敏感度,把对量化敏感的层保留为高精度,对量化不敏感的运算层量化为INT8。

上述方案存在一些缺点:首先,对一个大规模的模型,在一个数据集上衡量每一个运算层的敏感度需要很长的时间,其中编译生成混合精度模型耗时较长。其次,两个对量化敏感度高的运算层不一定都要保留为高精度,有些情况只保留其中一个运算层为高精度就能达到保证精度的目的。

综上,现有技术对神经网络模型进行混合量化时的混合策略获取的效率低以及不够优化的问题。

发明内容

本申请提供一种神经网络模型的量化方法、装置、电子设备,以解决现有技术对神经网络模型进行混合量化时的混合策略获取的效率低以及不够优化的问题。

本申请提供一种神经网络模型的量化方法,包括:

获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

将所述第一运算分支量化为第一精度;

将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

作为一种实施方式,所述第一运算分支为包含多层运算的第一运算分支;所述第二运算分支为短路分支。

作为一种实施方式,所述第一精度为八位整形精度;所述第二精度为半精度浮点数精度。

作为一种实施方式,所述获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支,包括:

确定待量化的神经网络模型的目标运算模块;

根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

作为一种实施方式,所述确定待量化的神经网络模型的目标运算模块,包括:

遍历所述待量化的神经网络模型;

判断当前运算操作的输出是否经过两个运算分支,若是,则将当前运算操作的输出作为目标运算模块的起始位置;

确定目标运算模块的合并位置;

将目标运算模块的起始位置至合并位置之间的运算操作作为目标运算模块。

作为一种实施方式,所述确定目标运算模块的合并位置,包括:

获得预设的合并位置标识;

根据所述合并位置标识,确定目标运算模块的合并位置。

作为一种实施方式,还包括:

将神经网络模型中所述目标运算模块之外的运算模块量化为第二精度。

本申请还提供一种神经网络模型的量化装置,包括:

分支获得单元,用于获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

第一运算分支量化单元,用于将所述第一运算分支量化为第一精度;

第二运算分支量化单元,用于将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

作为一种实施方式,所述第一运算分支为包含多层运算的第一运算分支;所述第二运算分支为短路分支。

作为一种实施方式,所述第一精度为八位整形精度;所述第二精度为半精度浮点数精度。

作为一种实施方式,所述分支获得单元具体用于:

确定待量化的神经网络模型的目标运算模块;

根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

作为一种实施方式,所述分支获得单元具体用于:

遍历所述待量化的神经网络模型;

判断当前运算操作的输出是否经过两个运算分支,若是,则将当前运算操作的输出作为目标运算模块的起始位置;

确定目标运算模块的合并位置;将目标运算模块的起始位置至合并位置之间的运算操作作为目标运算模块。

作为一种实施方式,所述分支获得单元具体用于:

获得预设的合并位置标识;

根据所述合并位置标识,确定目标运算模块的合并位置。

作为一种实施方式,所述装置还包括:

其余运算模块量化单元,用于将所述目标运算模块之外的运算模块量化为第二精度。

本申请还提供一种电子设备,包括:

处理器;以及

存储器,用于存储神经网络模型的量化方法的程序,该设备通电并通过所述处理器运行该神经网络模型的量化方法的程序后,执行下述步骤:

获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

将所述第一运算分支量化为第一精度;

将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

作为一种实施方式,所述第一运算分支为包含多层运算的第一运算分支;所述第二运算分支为短路分支。

作为一种实施方式,所述第一精度为八位整形精度;所述第二精度为半精度浮点数精度。

作为一种实施方式,所述获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支,包括:

确定待量化的神经网络模型的目标运算模块;

根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

作为一种实施方式,所述确定待量化的神经网络模型的目标运算模块,包括:

遍历所述待量化的神经网络模型;

判断当前运算操作的输出是否经过两个运算分支,若是,则将当前运算操作的输出作为目标运算模块的起始位置;

确定目标运算模块的合并位置;将目标运算模块的起始位置至合并位置之间的运算操作作为目标运算模块。

作为一种实施方式,所述确定目标运算模块的合并位置,包括:

获得预设的合并位置标识;

根据所述合并位置标识,确定目标运算模块的合并位置。

作为一种实施方式,所述电子设备还执行下述步骤:

将所述目标运算模块之外的运算模块量化为第二精度。

本申请另外提供一种存储介质,存储有数据处理方法的程序,该程序被处理器运行,执行下述步骤:

获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

将所述第一运算分支量化为第一精度;

将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。与现有技术相比,本申请具有以下优点:

本申请提供一种神经网络模型的量化方法,包括:获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;将所述第一运算分支量化为第一精度;将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。本申请提供的神经网络模型的量化方法,将待量化的神经网络模型的目标运算模块中的运算层数多的第一分支量化为低精度,将运算层数少的第二分支直接量化为高精度,不需要对每个运算层进行量化敏感度的度量,因此对神经网络模型进行混合量化时的混合策略获取的效率较高,此外,当第一运算分支存在对量化敏感的运算层时,不需要对其中的运算层量化为高精度,可以只保留第二运算分支中的运算层为高精度,实现了只保留其中一个分支的运算层为高精度就能达到保证精度的目的。本申请解决了对神经网络模型进行混合量化时的混合策略获取的效率低以及不够优化的问题。

附图说明

图1A是本申请提供的一种神经网络模型的量化方法的应用场景图。

图1是本申请第一实施例提供的一种神经网络模型的量化方法的流程图。

图2是本申请第一实施例提供的一种目标运算模块运算分支的示意图。

图3是本申请第一实施例提供的一种目标运算模块的示意图。

图4是本申请第二实施例提供的一种神经网络模型的量化装置的示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。

为了更清楚地展示本申请,先对本申请第一实施例提供的神经网络模型的量化方法的应用场景进行简单介绍。

本申请第一实施例提供的神经网络模型的量化方法可以应用于客户端与服务端交互的场景,如图1A,在需要获得量化的神经网络模型时,通常是由客户端首先与服务端建立连接,连接之后客户端发送待量化的神经网络模型到服务端,服务端获得待量化的神经网络模型后,首先在分支获得单元101,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;然后,在第一运算分支量化单元102,将第一运算分支量化为第一精度;接着,在第二运算分支量化单元103,将第二运算分支量化为第一精度。

本申请第一实施例提供一种神经网络模型的量化方法,以下结合图1进行介绍。

如图1所示,在步骤S101中,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数。

待量化的神经网络模型,指经过训练数据训练好的神经网络模型。现有技术在采用PTQ(Post-Training Quantization,训练后量化)方式对待量化的神经网络模型进行量化时,直接把神经网络模型量化为INT8精度模型,就会存在不可接受的精度损失。本申请采用将一些运算层量化为高精度,将一些运算层量化为低精度,采用混合量化的方式,能够满足精度要求。

所述目标运算模块,可以指神经网络模型中包含两个运算分支的模块。例如,图2中从图最上边的mul到contact之间的部分为一个目标运算模块。图2只是截取了一个神经网络模型的一部分,整个神经网络模型中包含多个类似的目标运算模块。

所述运算层,可以指神经网络模型中一个单独的运算。例如,图2中的conv(卷积运算)、sigmoid、mul(乘法运算)都可以称为一个运算层。

所述第一运算分支的运算层数,可以指第一运算分支包含的单独的运算的数量。

所述第二运算分支的运算层数,可以指第二运算分支包含的单独的运算的数量。如图2所示,第二运算分支的运算层数为3。

如图2所示,其为YoloV5网络的一部分,可以将其看作一个目标运算模块的示例,2-1为第一运算分支,它包含的运算层数远远多于第二运算分支2-2包含的运算层数。

所述第一运算分支可以为包含多层运算的第一运算分支;所述第二运算分支可以为短路分支。

如图2,2-1为包含多层运算的第一运算分支,2-2为一个短路分支(shortcut)。

所述获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支,包括:

确定待量化的神经网络模型的目标运算模块;

根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

在具体实施时,可以先确定待量化的神经网络模型的目标运算模块,然后再根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

所述确定待量化的神经网络模型的目标运算模块,包括:

遍历所述待量化的神经网络模型;

判断当前运算操作的输出是否经过两个运算分支,若是,则将当前运算操作的输出作为目标运算模块的起始位置;

确定目标运算模块的合并位置;

将目标运算模块的起始位置至合并位置之间的运算操作作为目标运算模块。

例如,图2中mul的输出经过2-1和2-1两个运算分支,则将mul的输出作为目标运算模块的起始位置。

所述确定目标运算模块的合并位置,包括:

获得预设的合并位置标识;

根据所述合并位置标识,确定目标运算模块的合并位置。

所述预设的合并位置标识,可以为contact、add、mul等标识,图2中的contact为一个合并位置标识。

如图1所示,在步骤S102中,将所述第一运算分支量化为第一精度。

如图1所示,在步骤S103中,将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

第一精度,指进行神经网络模型混合量化时采用的较低精度。

第二精度,指进行神经网络模型混合量化时采用的较高精度。

混合量化,指神经网络模型的不同段运行在不同的精度。

具体的,所述第一精度可以为八位整形精度;所述第二精度为半精度浮点数精度。根据具体场景,第一精度和第二精度也可以为其他的精度,只要满足第一精度小于第二精度即可。

下面结合图3介绍一下本申请第一实施例相比于现有技术中给出的逐层度量敏感度的混合策略的优势:

1、本申请方案不需要去度量每一层对量化的敏感度,通过分析网络结构即可快速给出混合量化的混合策略,图3中,通过分析网络结构,获得目标运算模块,直接将3-1分支设为第一精度,将3-2设为第二精度。

2、两个对量化敏感度高的运算层在保留其中一个运算层为高精度就能达到保证精度的情况下,可以做出比逐层度量敏感度中提到的算法更优的选择。如下3所示,单独测试时,3-3框中的模块与3-2框中的模块都对量化比较敏感。按照逐层度量敏感度的混合算法,由于3-3框与3-2框的敏感度都满足FP16精度,因此将3-3框与3-2框的运算都保留FP16精度;本申请中的算法,只需要保留3-2框中的运算为FP16即可,而3-3框中的运算为INT8精度。实验结果表明,两种算法对最终的精度影响基本一致,本申请中的算法做混合量化以后模型推理时耗时更少。

本申请据神经网络模型的结构特征确定目标运算模块,直接将所述第一运算分支量化为第一精度,将所述第二运算分支量化为第二精度,无需再逐层度量其对量化的敏感度,可以显著提高模型的运行速度。

需要说明的是,图2中截图截的只是神经网络模型的一部分,不是网络的全部;一个神经网络模型可以包含多个目标运算模块(分叉合并结构),还可以包含目标运算模块之外的模块。

作为一种实施方式,本申请第一实施例还可以包括:

将神经网络模型中所述目标运算模块之外的运算模块量化为第二精度。

作为一种实施方式,本申请第一实施例还可以包括:

将神经网络模型中所述目标运算模块之外的部分运算模块量化为第二精度,另一部分运算模块量化为第一精度。

运算模块可以指一个运算层。

具体的,将神经网络模型中所述目标运算模块之外的部分运算模块量化为第二精度,另一部分运算模块量化为第一精度,可以将对量化敏感度高的部分运算模块量化为第二精度,将另一部分对量化敏感度低的运算模块量化为第一精度。

本申请第一实施例仅将目标运算模块的包含运算较少的第二运算分支量化为第二精度,将目标运算模块的包含运算较多的第一运算分支量化为第二精度,,可以显著提升运行速度。根据在YoloV5l网络的实验结论看,本方案提出的混合量化,相比于量化为FP16的精度,可以在精度损失小于1%的情况下,提升运行速度13.6%。

本申请第一实施例可以应用于基于卷积神经网络模型做图片分类、目标物体检测、环境分割、人脸识别的场景。以目标物体检测为例,采用本方案的技术,可以降低处理单帧图片的耗时,提高吞吐量。

至此,完成了对本申请第一实施例的介绍。本申请提供的神经网络模型的量化方法,将待量化的神经网络模型的目标运算模块中的运算层数多的第一分支量化为低精度,将运算层数少的第二分支直接量化为高精度,不需要对每个运算层进行量化敏感度的度量,因此对神经网络模型进行混合量化时的混合策略获取的效率较高,此外,当第一运算分支存在对量化敏感的运算层时,不需要对其中的运算层量化为高精度,可以只保留第二运算分支中的运算层为高精度,实现了只保留其中一个分支的运算层为高精度就能达到保证精度的目的。本申请解决了对神经网络模型进行混合量化时的混合策略获取的效率低以及不够优化的问题。

与本申请第一实施例提供的神经网络模型的量化方法相对应的,本申请第二实施例提供一种数据处理装置。

如图4所示,所述神经网络模型的量化装置,包括:

分支获得单元401,用于获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

第一运算分支量化单元402,用于将所述第一运算分支量化为第一精度;

第二运算分支量化单元403,用于将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

作为一种实施方式,所述第一运算分支为包含多层运算的第一运算分支;所述第二运算分支为短路分支。

作为一种实施方式,所述第一精度为八位整形精度;所述第二精度为半精度浮点数精度。

作为一种实施方式,所述分支获得单元具体用于:

确定待量化的神经网络模型的目标运算模块;

根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

作为一种实施方式,所述分支获得单元具体用于:

遍历所述待量化的神经网络模型;

判断当前运算操作的输出是否经过两个运算分支,若是,则将当前运算操作的输出作为目标运算模块的起始位置;

确定目标运算模块的合并位置;将目标运算模块的起始位置至合并位置之间的运算操作作为目标运算模块。

作为一种实施方式,所述分支获得单元具体用于:

获得预设的合并位置标识;

根据所述合并位置标识,确定目标运算模块的合并位置。

作为一种实施方式,所述装置还包括:

其余运算模块量化单元,用于将所述目标运算模块之外的运算模块量化为第二精度。

本申请提供的神经网络模型的量化装置,将待量化的神经网络模型的目标运算模块中的运算层数多的第一分支量化为低精度,将运算层数少的第二分支直接量化为高精度,不需要对每个运算层进行量化敏感度的度量,因此对神经网络模型进行混合量化时的混合策略获取的效率较高,此外,当第一运算分支存在对量化敏感的运算层时,不需要对其中的运算层量化为高精度,可以只保留第二运算分支中的运算层为高精度,实现了只保留其中一个分支的运算层为高精度就能达到保证精度的目的。本申请解决了对神经网络模型进行混合量化时的混合策略获取的效率低以及不够优化的问题。

需要说明的是,对于本申请第二实施例提供的数据处理装置的详细描述可以参考对本申请第一实施例的相关描述,这里不再赘述。

与本申请第一实施例提供的数据处理方法相对应的,本申请第三实施例提供一种电子设备。

所述电子设备,包括:

处理器;以及

存储器,用于存储神经网络模型的量化方法的程序,该设备通电并通过所述处理器运行该神经网络模型的量化方法的程序后,执行下述步骤:

获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

将所述第一运算分支量化为第一精度;

将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

作为一种实施方式,所述第一运算分支为包含多层运算的第一运算分支;所述第二运算分支为短路分支。

作为一种实施方式,所述第一精度为八位整形精度;所述第二精度为半精度浮点数精度。

作为一种实施方式,所述获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支,包括:

确定待量化的神经网络模型的目标运算模块;

根据目标运算模块,获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支。

作为一种实施方式,所述确定待量化的神经网络模型的目标运算模块,包括:

遍历所述待量化的神经网络模型;

判断当前运算操作的输出是否经过两个运算分支,若是,则将当前运算操作的输出作为目标运算模块的起始位置;

确定目标运算模块的合并位置;将目标运算模块的起始位置至合并位置之间的运算操作作为目标运算模块。

作为一种实施方式,所述确定目标运算模块的合并位置,包括:

获得预设的合并位置标识;

根据所述合并位置标识,确定目标运算模块的合并位置。

作为一种实施方式,所述电子设备还执行下述步骤:

将所述目标运算模块之外的运算模块量化为第二精度。

本申请提供的电子设备,该设备通电并通过处理器运行存储器存储的神经网络模型的量化方法的程序后,将待量化的神经网络模型的目标运算模块中的运算层数多的第一分支量化为低精度,将运算层数少的第二分支直接量化为高精度,不需要对每个运算层进行量化敏感度的度量,因此对神经网络模型进行混合量化时的混合策略获取的效率较高,此外,当第一运算分支存在对量化敏感的运算层时,不需要对其中的运算层量化为高精度,可以只保留第二运算分支中的运算层为高精度,实现了只保留其中一个分支的运算层为高精度就能达到保证精度的目的。本申请解决了对神经网络模型进行混合量化时的混合策略获取的效率低以及不够优化的问题。

需要说明的是,对于本申请第三实施例提供的电子设备的详细描述可以参考对本申请第一实施例的相关描述,这里不再赘述。

与本申请第一实施例提供的数据处理方法相对应的,本申请第四实施例提供一种存储介质,存储有数据处理方法的程序,该程序被处理器运行,执行下述步骤:

获得待量化的神经网络模型的目标运算模块包含的第一运算分支和第二运算分支;其中,第一运算分支的运算层数大于第二运算分支的运算层数;

将所述第一运算分支量化为第一精度;

将所述第二运算分支量化为第二精度;所述第一精度小于第二精度。

需要说明的是,对于本申请第四实施例提供的存储设备的详细描述可以参考对本申请第一实施例的相关描述,这里不再赘述。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、存储器映射输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

相关技术
  • 神经网络模型的量化方法、装置和系统、电子设备和存储介质
  • 在设备中的神经网络模型的量化方法和装置
技术分类

06120113283470