神经网络的量化方法、装置、芯片、板卡及设备与流程

文档序号:33624639发布日期:2023-03-25 15:32阅读:54来源:国知局
神经网络的量化方法、装置、芯片、板卡及设备与流程

1.本公开涉及人工智能技术领域,尤其涉及一种神经网络的量化方法、装置、芯片、板卡、设备及存储介质。


背景技术:

2.神经网络被应用于各个领域中,随着神经网络处理的任务的多样性及复杂度越来越高,神经网络的规模也越来越大,网络结构越来越复杂,导致在对神经网络进行训练的过程中,需要消耗大量的计算资源和存储资源,对用于训练神经网络的芯片的性能要求较高,且耗时较长。因此,在对神经网络进行训练的过程中,希望提供一种可以降低资源消耗且对训练的神经网络的准确性不会产生太大的影响的方案。


技术实现要素:

3.本公开提供一种神经网络的量化方法、装置、芯片、板卡、设备及存储介质。
4.根据本公开实施例的第一方面,提供一种神经网络的量化方法,所述方法包括:
5.在利用样本数据对神经网络进行训练的前向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据后,再执行相关的计算;
6.在反向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第二数据类型的数据后,再执行相关的计算,其中,所述第一数据类型的精度和所述第二数据类型的精度均低于所述原始数据类型的精度,且所述第一数据类型的精度低于所述第二数据类型的精度。
7.在一些实施例中,所述第一数据类型和所述第二数据类型基于所述神经网络执行的任务的类型确定,所述第一数据类型的精度和所述第二数据类型的精度与所述神经网络执行的任务所需的精度正相关。
8.在一些实施例中,所述第一数据类型和所述第二数据类型基于所述任一层中的算子的类型确定,所述第一数据类型的精度和所述第二数据类型的精度与所述算子的复杂程度负相关。
9.在一些实施例中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,包括:
10.在判定该层中包括目标类型的算子的情况下,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,其中,所述目标类型的算子基于各类算子的计算量从各类算子中筛选得到。
11.在一些实施例中,所述目标类型的算子包括以下一种或多种:卷积、全连接、矩阵乘法。
12.在一些实施例中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,再执行相关的计算之后,所
述方法还包括:
13.将计算结果反量化成所述原始数据类型的数据,并将反量化得到的结果作为该层的下一层的输入数据。
14.在一些实施例中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,包括:
15.获取该层中参与计算的原始数据类型的数据的分布情况;
16.基于所述分布情况确定对所述原始数据进行量化采用的量化方案,其中,所述量化方案包括量化类型和量化参数;
17.基于所述量化方案将所述原始数据类型的数据进行量化成第一数据类型的数据或第二数据类型的数据。
18.在一些实施例中,所述样本数据被划分成多个数据块,逐一将每个数据块输入到所述神经网络中完成对所述神经网络的一轮训练,在每对所述神经网络进行预设轮数的训练后,执行一次获取该层中参与计算的原始数据类型的分布情况的操作。
19.在一些实施例中,所述原始数据类型为32位浮点型,所述第一数据类型为8位整型,所述第二数据类型为16位整型。
20.根据本公开实施例的第二方面,提供一种神经网络量化装置,所述装置包括:
21.第一处理模块,用于在利用样本数据对神经网络进行训练的前向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据后,再执行相关的计算;
22.第二处理模块,用于在反向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第二数据类型的数据后,再执行相关的计算,其中,所述第一数据类型的精度和所述第二数据类型的精度均低于所述原始数据类型的精度,且所述第一数据类型的精度低于所述第二数据类型的精度。
23.根据本公开实施例的第三方面,提供一种芯片,所述芯片包括处理器、存储器、存储在所述存储器可供所述处理器执行的计算机指令,所述处理器执行所述计算机指令时,可实现上述第一方面提及的方法。
24.根据本公开实施例的第四方面,提供一种板卡,所述板卡封装有至少一个上述第三方面提及的芯片。
25.根据本公开实施例的第五方面,提供一种电子设备,所述电子设备包括上述第四方面提及的板卡或包括上述第三方面提供的芯片。
26.根据本公开实施例的第六方面,提供一种计算机可读存储介质,所述存储介质上存储有计算机指令,所述计算机指令被执行时实现上述第一方面提及的方法。
27.本公开实施例中,在对神经网络进行训练的过程中,可以对参与计算的原始数据类型的数据进行量化处理,量化成更低精度的数据类型的数据后,再进行计算,从而可以降低训练过程中的资源开销。并且在进行量化处理时,针对神经网络训练过程中的不同阶段,可以将参与计算的原始数据类型的数据量化成精度不同的数据类型的数据后,再进行计算。比如,前向传播过程中由于对数据精度的要求更低,因而,可以将该阶段中参与计算的原始数据类型的数据量化成精度较低的第一数据类型的数据,反向传播过程中对数据精度的要求较高,因而,可以将该阶段中参与计算的原始数据类型的数据量化成精度更高一些
的第二数据类型的数据。通过这种有针对性的区别处理的量化方式,可以在保证训练的神经网络的性能不受太大影响的前提下,最大程度的减小神经网络训练过程中的资源开销。
28.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
附图说明
29.此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
30.图1是本公开实施例的一种神经网络训练过程的示意图。
31.图2是本公开实施例的一种神经网络量化方法的流程图。
32.图3是本公开实施例的一种神经网络训练过程中前向传播的示意图
33.图4是本公开实施例的一种神经网络训练装置的逻辑结构示意图。
34.图5是本公开实施例的一种芯片的逻辑结构示意图。
35.图6是本公开实施例的一种板卡的逻辑结构示意图。
具体实施方式
36.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
37.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。
38.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
39.为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。
40.神经网络被应用于各个领域中,随着神经网络处理任务的多样性及复杂度越来越高,比如,计算机视觉,自然语言处理,语音识别等,这些任务对神经网络的准确性和实时性的要求不断提高,因此神经网络的规模越来越大,网络结构越来越复杂,导致在对神经网络进行训练的过程中,需要消耗大量的计算资源和存储资源,对用于训练神经网络的芯片的性能要求也越来越高,且耗时较长。比如,当前在神经网络训练过程中,各阶段所用到的运算数据都采用统一的数据类型,比如,大多数神经网络在训练过程中都统一采用32位浮点
数进行训练。由于浮点运算计算量大,在芯片上需要消耗更多的存储空间及计算资源,且整个训练过程耗时较长。
41.考虑到在神经网络的训练过程中,运算数据采用的数据类型的精度并非是越高越好,因为在一些场景,即便运算数据采用的数据类型的精度很高(比如32位浮点型),对神经网络性能的提升也不大,但却会大大增加训练过程中的资源消耗,降低训练效率。并且,针对神经网络训练过程中的不同阶段,对运算数据的精度要求也不一样。比如,在神经网络训练过程中的前向传播的阶段,其对运算数据的精度要求较低,而在神经网络训练过程中的反向传播阶段,由于涉及到误差的传播和梯度信息的计算,其对运算数据的精度较为敏感,因而要求运算数据具有较高的精度。
42.基于此,本公开实施例提供了一种神经网络量化方法,在对神经网络进行训练的过程中,可以对参与计算的原始数据类型的数据进行量化处理,量化成更低精度的数据类型的数据后,再进行计算,从而可以降低训练过程中的资源开销。并且在进行量化处理时,针对神经网络训练过程中的不同阶段,可以将参与计算的原始数据类型的数据量化成精度不同的数据类型的数据后,再进行计算。比如,前向传播过程中由于对数据精度的要求更低,因而,可以将该阶段中参与计算的原始数据类型的数据量化成精度较低的第一数据类型的数据,反向传播过程中对数据精度的要求较高,因而,可以将该阶段中参与计算的原始数据类型的数据量化成精度更高一些的第二数据类型的数据。通过这种有针对性的区别处理的量化方式,可以在保证训练的神经网络的性能不受太大影响的前提下,最大程度的减小神经网络训练过程中的资源开销。
43.本公开实施例中提供的神经网络量化方法可以由各种电子设备执行,比如,可以由电脑、服务器或者服务器集群执行。
44.本公开实施例中的神经网络可以是用于处理各种任务的神经网络,比如,可以是用于对图像、文本进行分类的分类网络,或者可以是检测图像中是否存在目标的目标检测网络等。该神经网络也可以是各种类型的神经网络,比如,可以是卷积神经网络、循环神经网络、生成对抗网络等等。比如,在一些场景,该神经网络可以是图像分类网络,用于训练该神经网络的样本数据可以携带分类标签的样本图像。在一些场景,该神经网络可以目标检测网络,样本数据可以是标注有目标对应的检测框的样本图像。
45.本公开实施例中的提及的数据类型可以是指数据是整数型还是浮点型等类型、以及数据的位宽,比如,8位、16位、32位等。举个例子,数据类型可以是32位浮点型、16位浮点型、32位整型、16位整型、8位整型等。
46.如图1所示,为本公开实施例提供的神经网络量化方法的示意图,如图2所示,为该神经网络量化方法的流程图,具体可以包括以下步骤:
47.s202、在利用样本数据对神经网络进行训练的前向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据后,再执行相关的计算;
48.对神经网络进行训练时的前向传播过程,即是将样本数据输入到神经网络中,经过神经网络各层的计算,得到该样本数据对应的计算结果的过程。其中,每一个的输出都是下一层的输入,在每一层中均会基于该层预先设置的算子以及网络参数(比如,权重、偏置、或者卷积核)对输入进行一系列的运算,得到该层的输出。其中,神经网络在设计阶段,其运
算数据对应的原始数据类型会预先设置好,比如,通常都是设置成32位浮点型。考虑到最初设置的原始数据类型的精度一般较高,造成训练过程中资源开销较大,且训练效率较低。
49.所以,在步骤s202中,在利用样本数据对神经网络进行训练的前向传播过程中,针对神经网络中的任一层,可以先将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据后,再执行相关的计算。其中,针对神经网络的任一层,该层中参与计算的原始数据包括该层的输入数据(即上一层的输出)、该层的网络参数,比如,权重、偏置、卷积核等。其中,为了节省计算资源,第一数据类型的精度可以低于该原始数据类型的精度。
50.s204、在反向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第二数据类型的数据后,再执行相关的计算,其中,所述第一数据类型的精度和所述第二数据类型的精度均低于所述原始数据类型的精度,且所述第一数据类型的精度低于所述第二数据类型的精度。
51.神经网络的反向传播过程即是基于前向传播过程得到的计算结果和样本数据的标签的差异,得到整体的误差,然后再将误差由最后一层往前传播,得到各层对应的误差,基于该误差对各层的网络参数进行调整。在步骤s204中,在反向传播过程中,针对神经网络的任一层,也可以先将该层中参与计算的原始数据类型的数据量化成第二数据类型的数据后,再执行相关的计算。其中,反向传播过程中,各层参与计算的原始数据类型的数据可以上一层确定的误差,各层的网络参数、预先设置的学习率、各层在前向传播过程中的输出等。其中,为了降低该层计算过程的资源开销,第二数据类型的精度也可以小于原始数据类型的精度。并且由于反向传播对数据精度较为敏感,即数据精度对反向传播过程中的计算结果的影响比较大,为了保证训练的神经网络的性能不会受到太大影响,第二数据类型的精度可以高于第一数据类型的精度。
52.举个例子,假设神经网络中设置的原始数据类型为32位浮点型,在前向传播过程中,在任一层执行相应的计算之前,可以将该层中参与运算的数据均量化成8位整型数据,然后再执行该层相应的运算。而在反向传播的过程中,在任一层执行相应的计算之前,可以将该层中参与运算的数据均量化成16位整型数据,然后再执行该层相应的运算。通过这种方式,可以灵活地根据各阶段对数据精度的需求调整量化方案,即可以大大减少计算过程中的资源消耗,也不会对训练得到的神经网络的性能产生太大的影响。
53.其中,可以针对神经网络中的任意一层执行上述量化处理方案,也可以针对神经网络中的任意多层执行上述量化方案,或者针对神经网络的所有层均执行上述量化方案,具体可以基于实际需求设置。
54.其中,不论是前向传播过程还是反向传播过程,在对参与计算的原始数据类型的数据进行量化时,可以基于用于训练神经网络的芯片的特点,以及原始数据类型的数据的分布情况确定量化方案,其中,量化方案包括用于对原始数据类型的数据进行量化所采用的量化类型和量化参数,其中,量化类型可以包括均匀量化、非均匀量化,均匀量化又可以进一步划分成对称量化和非对称量化等不同类型。量化参数可以是零点值、量化步长中的一种或多种,量化参数的类别随着量化类型的不同而不同。
55.在一些实施例中,不论是前向传播过程还是反向传播过程,在对神经网络进行量化时,可以是对神经网络的所有层中参与计算的原始数据类型的数据进行整体的量化,比如,可以对所有层均采用相同的量化方案进行量化,并且量化成同一数据类型的数据后,再
逐层进行计算。举个例子,以前向传播为例,可以获取输入的样本数据以及神经网络各层的网络参数,基于输入数据和各层的网络参数的分布情况确定量化方案,对输入的样本数据以及网络参数进行量化,然后利用量化得到的数据逐层进行计算,得到计算结果。反向传播也可以采用类似的方式。
56.在一些实施例中,不论是前向传播过程还是反向传播过程,在对神经网络进行量化时,可以采用逐层量化的方式,每一层可以独立量化,每一层的量化方案可以基于该层参与计算的原始数据类型的数据的分布特点确定,即每一层所采用的量化方案可以不一样。通过这种方式,可以针对每一层的计算数据,为其适配更加合适的量化方案。
57.针对这种场景逐层量化的场景,不论是前向传播过程还是反向传播过程,可以针对每一层中参与计算的原始数据类型的数据进行量化,得到第一数据类型的数据或第二数据类型的数据,然后执行相应的计算,得到计算结果。然后再将计算结果反量化成原始数据类型的数据,并将反量化得到的结果作为当前层的下一层的输入数据,然后再对下一层进行计算之前,又重新对下一层参与计算的原始数据类型的数据进行量化处理,将其量化成第一数据类型的数据后,再参与计算。
58.举个例子,如图3所示,以前向传播为例,针对神经网络中的第n层,可以获取该层原始的32位浮点型的输入数据和网络参数,然后将其量化成8位整型数据后,再进行该层的计算,得到计算结果。其中,由于计算过程中可能存在一些乘法等运算,因而计算结果的位宽可能会大于计算数据的位宽,比如,计算结果可以是32位整型数据,然后可以对计算结果进行反量化处理,反量化成32位浮点型数据。然后将该32位浮点型的计算结果作为第n+1层的输入,重复上述步骤,对n+1层的计算数据进行量化处理,完成第n+1层的计算。针对反向传播的过程,也可以采用类似的方式。
59.在一些实施例中,如果是采用逐层量化的方式,在前向传播过程或反向传播过程中,针对神经网络的任一层,在将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据时,可以先获取该层中参与计算的原始数据类型的数据的分布情况,比如,可以获取该层参与计算的数据的最大值和最小值。然后可以基于参与计算的数据的分布情况确定量化方案,其中,量化方案包括量化类型(比如,对称量化或非对称量化)和量化参数(比如,零点值和量化步长),然后可以基于确定的量化方案将该原始数据类型的数据进行量化成第一数据类型的数据或第二数据类型的数据。
60.由于在利用样本数据对神经网络进行训练的过程中,通常是将样本数据划分成多个数据块(batch),然后每次将一个数据块输入到神经网络中,完成一次上述前向传播和反向传播的过程,对网络参数进行一次更新,我们将这个过程称为完成一轮训练。比如,以样本数据为图像为,可以将所有样本图像分成n组,每次输入一组,完成一次前向传播和反向传播的过程。在一些实施例中,考虑到每利用一个数据块对神经网络进行训练后,其网络参数进行更新了,因而,在利用下一个数据块对神经网络进行训练时,在对各层参与计算的原始数据类型的数据进行量化之前,都需要重新统计各层当前的网络参数,以确定数据分布情况(比如,最大值和最小值),再基于数据分布情况确定量化方案。
61.这种实时统计各层数据分布的方式虽然会更加准确,但是也会占用一定的计算资源和耗费一定时间,导致资源开销较大,训练效率较低。考虑到在完成邻近的几轮训练后,神经网络的网络参数的变化并不大,即参与计算的数据中的最大值和最小值相差也不大,
因而可以无需实时的统计当前各层的数据分布,而是间隔的统计。比如,可以设置当神经网络完成了预设轮数的训练后,再重新执行一次获取该层中参与计算的原始数据类型的分布情况的操作。通过这种方式,可以进一步的节省训练过程中的资源消耗,提高训练过程的处理效率。
62.举个例子,以前向传播为例,可以在每利用5个数据块(batch)对神经网络完成一轮训练后,再重新统计当前神经网络各层的数据分布情况,基于数据分布情况重新确定量化方案。而在利用上述5个数据块对神经网络进行训练时,都可以采用基于上一次统计的数据分布情况确定量化方案,将该层参与计算的原始数据类型的数据量化成第一数据类型的数据。
63.针对不同的应用场景,其对神经网络的预测结果的准确度的要求也不一样。比如,用于执行分类任务的神经网络,其对神经网络预测结果的准确度要求可能会低一些,而用于执行目标检测任务的神经网络,其对神经网络预测结果的准确度的要求可能高一些。为了尽可能的适配不同应用场景对神经网络的准确度的需求,使得训练的神经网络即可以满足不同应用场景的需求,又可以最大化的降低训练过程的资源开销。在训练神经网络时,第一数据类型和第二数据类型可以根据神经网络执行的任务的类型确定,比如,第一数据类型的精度和第二数据类型的精度与神经网络执行的任务所需的精度可以是正相关。举个例子,第一数据类型和第二数据类型应该设置成浮点型还是整型,其位宽应该设置成32位、16位还是8位,这些具体的数据类型可以基于神经网络执行的任务适配性的调整,神经网络执行的任务对神经网络预测结果的准确度要求越高,则第一数据类型和第二数据类型可以选取精度越高的数据类型。
64.由于不同类型的神经网络其包含的算子的类型是不一样的,并且针对神经网络的不同层,其包含的算子的类型也不一样。通常,针对一些简单的算子,其计算量较少,即便参与计算的数据的数据类型采用较高的精度(比如,32位浮点型),也不会增加太多的计算量。而针对一些较为复杂的算子,其计算量较大,如果参与计算的数据的数据类型采用较高的精度,则会大大增加计算量,对资源消耗较大。考虑到这个因素,在一些实施例中,第一数据类型和第二数据类型可以基于任一层中的算子的类型确定,比如,第一数据类型的精度和第二数据类型的精度可以是与该层中包括的算子的复杂程度负相关。如果算子复杂程度较高,则尽可能将第一数据类型和第二数据类型设置成精度较低的数据类型,反之可以设置成精度较高的数据类型。通过基于算子的类型确定量化后的数据的数据类型,可以最大程度的减小训练过程中的资源开销。
65.当然,由于对神经网络各层中参与计算的数据进行量化的操作也是需要耗费计算资源的。因而,可以对神经网络采用逐层量化的方式,即每一层独立量化,针对神经网络的各层,可以基于该层算子的实际特点来确定是否需要对该层的计算数据进行量化处理。举个例子,假设该层包括的算子都是一些简单的算子,比如,仅仅是简单的加减法,这类算子对计算资源的开销并不大,即便进行量化处理,对计算资源的开销和训练耗时也没有太大的提升,反而量化的过程需要消耗资源和时间。因而,这种情况可以不进行量化处理,直接进行计算。而如果该层包括一些比较复杂的算子,比如,矩阵乘法、卷积等,这类算子计算量很大,对计算资源的开销也很大,因而,可以先将其量化成第一数据类型或第二数据类型的数据后,再执行相应的计算。
66.所以,在一些实施例中,针对神经网络的任一层,在将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据之前,可以先判定该层中的算子是否包括目标类型的算子,其中,目标类型的算子是基于各类算子的计算量从各类算子中筛选得到,比如,可以是一些计算量较大,较为复杂的算子,比如,目标类型的算子可以是涉及到运算的相关算子。如果该层中的算子包括目标类型的算子,则将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,再执行相关的计算。如果不包含,则可以无需量化,直接进行计算。
67.在一些实施例中,目标类型的算子包括以下一种或多种:卷积、全连接、矩阵乘法。这一类的算子的计算量比较大,需要消耗较多的资源,因而针对这类算子可以先对参与计算的数据进行量化后,再进行计算。
68.通过这种方式,在神经网络训练过程中,可以基于各层中包含的算子的复杂程度确定是否需要对各层进行量化处理,进而,可以最大化的节省计算资源和缩短训练耗时。
69.在一些实施例中,可以采用芯片对神经网络进行训练,下面以ai芯片为例进行说明:通常ai芯片中可以包括处理单元和片上存储单元,由于神经网络的模型参数和训练数据较多,因而,通常可以将神经网络的模型参数和训练数据可以存储在与ai芯片连接的外部存储器中。以前向传播过程为例,ai芯片在执行第n层的运算时,通常需提前从外部存储器中读取第n层之后的若干层(比如,第n+1至n+3)相关的运算数据,并存储到片上存储单元中备用。如果运算数据是float32类型的数据,则需内部存储器中耗费更多的存储空间缓存这些运算数据。但是,如果从外部存储器中获取到这些运算数据后,先将这些运算数据量化成int8类型的数据,再缓存,那就可以大大减小在片上存储单元中占用的存储空间。此外,处理单元在进行运算的过程中,必然会产生一些中间数据,这些中间数据也需要耗费ai芯片上的内存去存储,如果量化成低精度数据后再计算,则计算过程中产生的中间数据也是低精度数据,从而也可以减小对ai芯片上存储空间的占用。此外,相比于对float32类型的数据进行运算,对低精度的int8类型的数据进行计算也可以提高处理单元的计算速度,从整体上提高芯片的执行效率。
70.本公开实施例通过将神经网络中参与计算的数据进行量化成低精度数据,并且针对前向传播和反向传播对数据精度的需求的不同,将参与计算的数据量化成不同精度的数据,从而,可以节约ai芯片在对神经网络计算过程中的资源开销。比如,将数据量化成低精度数据后,ai芯片在计算过程中,可以采用更少的存储资源来存储要计算的数据,从而可以节省ai芯片的存储资源。再比如,将数据量化成低精度数据后,ai芯片在计算过程中,可以采用更少的计算资源对数据进行计算,进而也可以节省ai芯片的计算资源。
71.在一些实施例中,该神经网络可以是目标检测神经网络,用于检测目标对象在图像中的位置。该样本数据可以是携带标签的样本图像,该标签用于指示目标对象在样本图像中的位置。其中,原始数据类型是指样本图像的像素数据以及初始神经网络中各层的网络参数的数据类型,比如,可以是float32类型。在利用样本图像对初始神经网络进行训练,得到目标检测神经网络时,在前向传播的过程中,针对初始神经网络的第一层,可以将第一层涉及的模型参数以及样本图像的像素数据量化成int8类型的数据,然后利用量化得到的int8类型的数据进行相应的计算,得到第一层的输出,其中,由于计算过程中可能存在一些乘法等运算,因而计算结果的位宽可能会大于输入数据的位宽,比如,输出可能是int32类
型的数据,然后可以对输出进行反量化处理,反量化成float32位类型的数据。对于神经网络的第二层,可以将第一层的输出以及第二层的网络参数量化成int8类型的数据,然后再进行计算。针对初始神经网络的每一层,都重复上述方案,从而可以得到最后一层的输出,然后将最后一层的输出反量化成float32位类型的数据,然后和样本图像的标签进行比较,得到误差。
72.在反向传播过程中,由于对数据精度要求较高,因而针对初始神经网络的各层,可以先对前向传播计算得到的float32位类型的整体误差、各层的float32位类型的模型参数、预先设置的float32位类型的学习率等进行量化处理,量化成int16位类型的数据,然后进行相应的计算,得到每一层的误差,并用每一层的误差更新模型参数。通过上述方式,即可以训练得到目标检测神经网络,用于对待检测图像进行检测,以确定待检测图像中目标对象的位置。为了进一步解释本公开实施例中的神经网络量化方法,以下结合一个具体的是实施例加以解释。
73.在神经网络训练过程中,通常采用float32类型的数据进行运算。为了减少训练神经网络时内存和计算资源的开销,提升训练的效率,可采用低精度的数据类型代替float32类型进行运算,比如,int8类型、int16类型等,这两种数据类型相比float32类型可大幅节省硬件资源。
74.网络训练运算过程分为前向传播过程和反向传播过程,通常,反向传播过程相比前向传播过程对精度要求更高。考虑到前向传播过程中,大多数任务上采用int8类型的数据进行计算即可满足精度要求,因而可以将原始的float32类型的数据量化成int8类型的数据。而反向传播由于对精度更加敏感,采用int8类型的数据进行计算可能会对精度造成一定损失,因此,反向传播过程可以采用int16类型的数据进行计算,即将原始的float32类型的数据量化成int16类型的数据。
75.前向传播过程的具体量化过程如下:
76.以卷积运算为例,输入数据以及网络参数为float32类型,首先需要将输入数据和网络参数量化为int8类型的数据,比如,可以采用对称量化的方式,即量化后的输入和网络参数的范围为[-127,127]。假设量化后数据为q,则q=input/scale,input为输入真实值,scale为量化系数,scale可以通过以下公式确定:
[0077]
max(abs(min),abs(max))/127,
[0078]
其中,max,min为统计该层输入的最大值及最小值。其中,max,min统计方法可为在线统计,每次执行该层前向运算前实时进行统计。由于实时统计max,min会占用一定时间及计算资源开销,因此可采取相应优化方法进行统计,如间隔多个iteration(每用一个batch对神经网络完成一轮训练,即为一个iteration)统计一次。
[0079]
输入和网络参数经过量化后,均转为int8类型的数据,分别记为qa及qw,量化系数为scalea和scalew。qa及qw参与硬件运算,卷积运算乘累加结果为qout,位宽可以是int32类型。在该层输出时,需要把qout*scalea*scaleb转到float32类型的数据进行输出,该值接近实际浮点运算的输出结果。每一层均重复上述过程,即可以完成前向传播过程。
[0080]
反向传播过程的具体量化过程如下:
[0081]
反向传播的量化过程和前向传播类似,首先统计反向传播中当前层输入的max,min,然后将输入和网络参数量化成int16类型的数据,q=input/scale,此处scale=max
(abs(min),abs(max))/32767。该层反向计算完成后,输出也需要进行反量化,将int32类型的输出转为float32类型的输出,然后再进行下一层的运算。每一层均重复上述过程,即可以完成反向传播过程。
[0082]
由于采用int8、int16类型的数据参与训练过程中的运算,相比float32类型可大幅节省硬件资源,从而可以降低训练过程中的资源开销,提高训练过程的处理效率。
[0083]
其中,不难理解,上述各实施例中的描述的方案在不存在冲突的情况,可以进行组合,本公开实施例中不一一例举。
[0084]
相应的,本公开实施例还提供了一种神经网络量化装置,如图4所示,所述装置包括:
[0085]
第一处理模块41,用于在利用样本数据对神经网络进行训练的前向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据后,再执行相关的计算;
[0086]
第二处理模块42,用于在反向传播过程中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第二数据类型的数据后,再执行相关的计算,其中,所述第一数据类型的精度和所述第二数据类型的精度均低于所述原始数据类型的精度,且所述第一数据类型的精度低于所述第二数据类型的精度。
[0087]
在一些实施例中,所述第一数据类型和所述第二数据类型基于所述神经网络执行的任务的类型确定,所述第一数据类型的精度和所述第二数据类型的精度与所述神经网络执行的任务所需的精度正相关。
[0088]
在一些实施例中,所述第一数据类型和所述第二数据类型基于所述任一层中的算子的类型确定,所述第一数据类型的精度和所述第二数据类型的精度与所述算子的复杂程度负相关。
[0089]
在一些实施例中,针对所述神经网络的任一层,所述装置在将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据时,具体用于:
[0090]
在判定该层中包括目标类型的算子的情况下,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,其中,所述目标类型的算子基于各类算子的计算量从各类算子中筛选得到。
[0091]
在一些实施例中,所述目标类型的算子包括以下一种或多种:卷积、全连接、矩阵乘法。
[0092]
在一些实施例中,针对所述神经网络的任一层,将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据,再执行相关的计算之后,所述装置还用于:
[0093]
将计算结果反量化成所述原始数据类型的数据,并将反量化得到的结果作为该层的下一层的输入数据。
[0094]
在一些实施例中,针对所述神经网络的任一层,所述装置在将该层中参与计算的原始数据类型的数据量化成第一数据类型的数据或第二数据类型的数据时,具体用于:
[0095]
获取该层中参与计算的原始数据类型的数据的分布情况;
[0096]
基于所述分布情况确定对所述原始数据进行量化采用的量化方案,其中,所述量化方案包括量化类型和量化参数;
[0097]
基于所述量化方案将所述原始数据类型的数据进行量化成第一数据类型的数据或第二数据类型的数据。
[0098]
在一些实施例中,所述样本数据被划分成多个数据块,逐一将每个数据块输入到所述神经网络中完成对所述神经网络的一轮训练,在每对所述神经网络进行预设轮数的训练后,执行一次获取该层中参与计算的原始数据类型的分布情况的操作。
[0099]
在一些实施例中,所述原始数据类型为32位浮点型,所述第一数据类型为8位整型,所述第二数据类型为16位整型。其中,上述装置执行神经网络的量化方法的具体步骤可以参考上述方法实施例中的描述,在此不再赘述。
[0100]
进一步的,本公开实施例还提供一种芯片,如图5所示,所述芯片包括处理器51、存储器52、存储于所述存储器52可供所述处理器51执行的计算机指令,所述处理器51执行所述计算机指令时实现上述实施例中任一项所述的方法。
[0101]
进一步的,本公开实施例还提供一种板卡,其包括了封装有至少一个上述各个实施例中提及的芯片的封装结构。参阅图6,其提供了一种示例性的板卡,上述板卡包括上述芯片700,还可以包括其他的部件,包括但不限于:存储器件702、接口器件704和控制器件706。
[0102]
所述存储器件702与所述芯片封装结构内的芯片700通过总线连接,用于存储数据。所述存储器件702可以包括多组存储单元7021,例如:ddr sdram(英文:double data rate sdram,双倍速率同步动态随机存储器)等。每一组所述存储单元7021与所述图像处理芯片700通过总线连接。
[0103]
所述接口器件704与所述芯片封装结构内的芯片700电连接。所述接口器件704用于实现所述芯片与外部设备800(例如:终端、服务器、摄像头等)之间的数据传输。在一个实施例中,所述接口器件704可以包括pcie接口,还可以是网络接口、或者其他的接口,本公开不做限制。
[0104]
所述控制器件706与所述芯片封装结构内的芯片700电连接。所述控制器件706可以是mcu等,本公开不做限制。
[0105]
本公开实施例还提供一种电子设备,该电子设备包括上述实施例中提及的板卡或者芯片。
[0106]
本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一实施例所述的方法。
[0107]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0108]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本公开实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本公开实施例的
技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开实施例各个实施例或者实施例的某些部分所述的方法。
[0109]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
[0110]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本公开实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0111]
以上所述仅是本公开实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开实施例的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1