一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种适配于运行在FPGA上的神经网络加速器的自适应量化方法与流程

2022-02-22 07:33:50 来源:中国专利 TAG:

一种适配于运行在fpga上的神经网络加速器的自适应量化方法
技术领域
1.本发明属于神经网络领域,尤其是一种适配于运行在fpga上的神经网络加速器的自适应量化方法。


背景技术:

2.神经网络加速器为实现高速低功耗运算,一般支持低数值精度,如8位或6 位定点数的运算,而神经网络模型原始的数值精度一般为32位浮点数。因此,在神经网络加速器部署神经网络算法时,需要通过量化操作将神经网络模型自动化压缩为8位或6位整型网络。
3.国外巨头公司英伟达基于其完备的gpu cuda生态主导神经网络加速器市场,将浮点型数据映射为整型数据,但其产品售价高昂,不具备自主可控性,gpu 计算效能及功耗不如fpga及asic芯片。国内神经网络加速器主流方案为具有可扩展性的cpu fpga的国产化方案,神经网络模型运行在fpga上完成计算,与cpu相对独立,cpu主要功能为初始化模型以及读取模型结果。针对该架构,为了提高计算的有效性,fpga需要自主完成整个神经网络模型每一层数据量化后的计算过程。现有的量化方法是由量化软件预先分析神经网络模型各层输入、权重以及输出数据的分布和范围,计算出量化参数,生成神经网络加速器将浮点型数据映射成整型数据的指导文件,该过程并未考虑在fpga上部署时整数型数据运算过程中可能产生的溢出问题,无法确保计算结果的正确性,尤其是对精度要求较高的神经网络模型算法,将导致结果的巨大偏差。


技术实现要素:

4.本发明的目的在于克服现有的量化方法并未考虑在fpga上部署时整数型数据运算过程中可能产生的溢出问题,无法确保计算结果的正确性的缺点,提供一种适配于运行在fpga上的神经网络加速器的自适应量化方法。
5.为达到上述目的,本发明采用以下技术方案予以实现:
6.一种适配于运行在fpga上的神经网络加速器的自适应量化方法,根据卷积层的输入和权重值、fpga计算过程中的数据位宽,预判中间计算过程数据的范围和分布;
7.基于fpga计算过程中的实际计算位宽和所述中间计算过程数据的范围和分布,计算溢出程度;
8.基于溢出程度,采用kl-divergence的方法,自适应地调整量化参数,直至调整量化参数后数据的分布与原始数据分布的差异在预设范围内。
9.进一步的,根据kl-divergence方法调整量化参数,采用相对熵的方式衡量调整量化参数后数据分布与原始数据分布的差异程度,寻找最优阈值作为量化参数。
10.进一步的,设置用于构造新样本的循环计数i,不断构造参考样本p和新样本q,计算两者的相对熵,得到最小的相对熵,此时,对应的阈值即为最优阈值。
11.进一步的,具体步骤为:
12.(1)不断地截断参考样本p,将截断区外的值全部求和;
13.(2)将截断区外的值加到截断样本的最后一个值之上;
14.(3)求得参考样本p的概率分布;
15.(4)创建新样本q,其元素的值为截断样本p;
16.(5)将新样本q的长度拓展到i,使得样本q和参考样本p具有相同长度;
17.(6)求得新样本q的概率分布;
18.(7)求参考样本p、新样本q的kl散度值。
19.进一步的,当卷积层的输入和权重值均为8位整型数,若fpga计算过程中的数据位宽为20位,则其能够表示的数据范围为-524288~524287,超出此范围的数据将被截断;
20.基于fpga计算过程中的实际计算位宽,预判中间计算过程数据的范围和分布,针对溢出的程度,采用kl-divergence的方法,自适应地调整量化参数,直至调整量化参数后数据的分布与原始真实的数据分布最为相近。
21.与现有技术相比,本发明具有以下有益效果:
22.本发明的适配于运行在fpga上的神经网络加速器的自适应量化方法,根据神经网络加速器计算过程的实际位宽自动预判神经网络加速器计算时的溢出程度,并针对溢出的程度自适应的调整量化参数,避免神经网络算法在fpga上计算过程中数据溢出问题的发生,从而保证神经网络模型结果的正确性。本发明的自适应量化方法,将量化操作与神经网络加速器硬件的资源规划相结合,保证了在神经网络加速器部署算法时结果的正确性,在不损失模型精度和执行效率的前提下,能够有效压缩模型规模,使之在资源受限的情况下易于部署实施,节省存储空间和计算资源,具有重要的研究意义和应用价值。
附图说明
23.图1为本发明的fpga计算神经网络卷积层的过程示意图。
具体实施方式
24.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
25.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
26.现有量化方法并未考虑在神经网络加速器部署时整数型数据运算过程中可能产生的溢出问题,本发明提出了一种适配于运行在fpga上的神经网络加速器的自适应量化方
法,可根据神经网络加速器计算过程的实际位宽自动预判神经网络加速器计算时的溢出状况,并针对溢出的程度自适应的调整量化参数,避免神经网络算法在fpga上计算过程中数据溢出问题的发生,从而保证神经网络模型结果的正确性。本发明的自适应量化方法,将量化操作与神经网络加速器硬件的资源规划相结合,保证了在神经网络加速器部署算法时结果的正确性,在不损失模型精度和执行效率的前提下,能够有效压缩模型规模,使之在资源受限的情况下易于部署实施,节省存储空间和计算资源,具有重要的研究意义和应用价值。
27.下面结合附图对本发明做进一步详细描述:
28.参见图1,图1为fpga计算神经网络卷积层的过程示意图,卷积层的输入和权重值均为8位整型数,若fpga计算过程中的数据位宽为20位,则其能够表示的数据范围为-524288~524287,超出此范围的数据将被截断。考虑fpga计算过程中的实际计算位宽限制,预判中间计算过程数据的范围和分布,针对溢出的程度,采用kl-divergence的方法,自适应地调整量化参数,使调整量化参数后数据的分布与原始真实的数据分布最为相近。
29.实施例
30.以只有一个convolution层的神经网络模型为例,对本发明做进一步详细说明。
31.(1)不采用该发明,即不考虑在fpga上部署时整数型数据运算过程中可能产生的溢出问题,则计算过程和结果推导如下:
32.该神经网络模型中的convolution层参数pad=0,stride=1,输入尺寸为1
×3ꢀ×
3,其值为滤波器尺寸为2
×
2,其值为bias为1.213093。将该神经网络模型部署在神经网络加速器的过程如下:
33.(a)由量化软件预先计算出量化系数
34.以量化位宽为8进行举例。由量化软件得到量化参数th
in
=11.32375,thw=8.134685,th
iout
=153.37865。输入、权重、输出的量化系数分别为:
[0035][0036][0037][0038]
(b)将输入和权重预先量化为整数
[0039]
将输入数据按照量化系数量化为整型权重量化为整型
[0040]
(c)预先计算在fpga上部署时需要的乘、加、移位参数
[0041]
移位参数n、乘参数、加参数分别为:
[0042][0043][0044][0045]
(d)fpga计算过程
[0046]
fpga计算卷积层的输入数据和输出数据位宽为8位。中间计算过程的位宽假设为20位,能够表示的数据范围为-524288~524287,超出此范围的数据将被截断。
[0047]
量化后神经网络加速器整型输入数据为权重为二者乘累加结果为乘以乘参数76,得到超出了 20位位宽能够表示的数据范围-524288~524287,被截断为加上加参数16039再截断得到以二进制方式右移14位得到以二进制方式右移14位得到
[0048]
(e)神经网络加速器推理计算结果正确性验证
[0049]
量化后神经网络加速器计算convolution层的输出结果为由 out_float=out_integer
·
scaling可得对应的真实值为以浮点型数据格式计算convolution层的真实结果为计算结果导致了极大的误差。
[0050]
(2)采用该发明,即考虑在fpga上部署时整数型数据运算过程中可能产生的溢出问题,自适应的调整量化参数。计算过程和结果推导如下:
[0051]
该神经网络模型中的convolution层参数pad=0,stride=1,输入尺寸为 1
×3×
3,其值为滤波器尺寸为2
×
2,其值为
bias为1.213093。将该神经网络模型部署在神经网络加速器的过程如下:
[0052]
(a)由量化软件预先计算出量化系数
[0053]
以量化位宽为8进行举例。由量化软件得到量化参数th
in
=11.32375,thw=8.134685,th
iout
=153.37865。根据神经网络加速器计算过程的实际位宽自动预判出神经网络加速器计算时的溢出状况,针对溢出的程度,根据数据分布采用 kl-divergence的方法,自适应地调整量化参数为th
in
=22.6475,thw=16.26937,th
iout
=153.37865,输入、权重、输出的量化系数分别为:
[0054][0055][0056][0057]
(b)将输入和权重预先量化为整数
[0058]
将输入数据按照自适应调整后的量化系数量化为整型权重量化为整型
[0059]
(c)预先计算在fpga上部署时需要的乘、加、移位参数
[0060]
移位参数n、乘参数、加参数分别为:
[0061][0062][0063][0064]
(d)fpga计算过程
[0065]
fpga计算卷积层的输入数据和输出数据位宽为8位。中间计算过程的位宽假设为20位,能够表示的数据范围为-524288~524287,超出此范围的数据将被截断。
[0066]
量化后神经网络加速器整型输入数据为权重为二者乘
累加结果为乘以乘参数74,得到并未超出20 位位宽能够表示的数据范围-524288~524287,加上加参数4009得到以二进制方式右移12位得到
[0067]
(e)神经网络加速器推理计算结果正确性验证
[0068]
量化后神经网络加速器计算convolution层的输出结果为由 out_float=out_integer
·
scaling可得对应的真实值为以浮点型数据格式计算convolution层的真实结果为二者对比可得量化造成的数据误差为平均误差为0.83%。证明该发明可以有效地避免在fpga计算神经网络模型时产生的溢出问题,确保计算结果的正确性。
[0069]
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献