cann计算架构下ai处理器算子溢出优化方法及系统
技术领域
1.本发明属于ai处理器技术领域,具体涉及一种cann计算架构下ai处理器算子溢出优化方法及系统。
背景技术:2.cann(compute architecture for neural networks)是华为公司针对ai场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的ai应用和业务。其中,模型开发是cann提供的重要基础功能之一。cann提供了在昇腾ai处理器(npu)上使用tensorflow网络框架进行深度神经网络模型训练的功能。
3.在npu上进行深度神经网络模型训练的过程中,算子是npu支持神经网络计算的基本单元,包括卷积操作、池化操作等等,用于支撑神经网络训练和推理加速。由于硬件本身条件的限制,数据通常由16位浮点数或32位浮点数存储。因此,每一个算子都需要事先定义运算的数据类型,比如16位浮点数或32位浮点数。其中,使用16位浮点数进行运算可以加快处理器的计算速度,但是当存储的数据过大或过小而无法用16位浮点数存储时,不可避免地会出现数据溢出的问题,这将会使模型训练的精度变差,甚至可能完全破坏模型的训练过程。而使用32位浮点数进行运算时,虽然能保证模型训练的精度,但是又不可避免地增加了npu的计算开销,降低了计算性能。
4.为了在保证npu计算性能的同时尽量避免算子数据溢出的问题,在华为cann计算架构下已经提出了两个解决方案:1、使用混合精度2、使能损失缩放。
5.其中使用混合精度指的是通过混合使用16位浮点数和32位浮点数数据类型来加速深度神经网络训练的过程,并减少内存使用和存取,从而可以训练更大的神经网络,同时又能基本保持使用32位浮点数进行训练所能达到的网络精度。
6.使能损失缩放指的是在深度神经网络模型前向计算过程中,将计算得到的损失乘上损失缩放系数,起到在反向梯度计算过程中达到放大梯度的作用,从而最大程度规避浮点计算中较小梯度值无法用16位浮点数表达而出现的溢出问题,再在参数梯度聚合之后以及优化器更新参数之前,将聚合后的参数梯度值除以损失缩放系数还原。
7.虽然上述两个方案都有助于在保证npu计算性能的同时尽量避免算子数据溢出的问题,但他们都没有从本质上解决由于数据存储类型导致的数据溢出问题,数据溢出问题依然存在。其中,使用混合精度需要指定每个算子使用的数据类型,但是在实践中,用户往往不能提前知道哪些算子使用16位浮点数存储会导致溢出,不论是使用内置的优化策略还是用户手动指定,都有可能把会导致数据溢出的算子指定为使用16位浮点数进行运算,这就会导致模型训练的精度问题。而使能损失缩放可以最大程度规避浮点计算中较小梯度值无法用16位浮点数表示的溢出问题,但是无法解决较大梯度值无法用16位浮点数表示的溢出问题。因此,现阶段需设计一种方法,从根本上解决cann计算架构下昇腾ai处理器算子数
据溢出问题。
技术实现要素:8.本发明目的在于提供一种cann计算架构下ai处理器算子溢出优化方法及系统,用于解决上述现有技术中存在的技术问题,即,从根本上解决cann计算架构下昇腾ai处理器算子数据溢出问题。
9.为实现上述目的,本发明的技术方案是:cann计算架构下ai处理器算子溢出优化方法,包括以下步骤:s1:通过溢出检测来找出存在溢出问题的算子;s2:对步骤s1中找出的算子进行溢出数据分析,判断该算子是否为数据异常的根源算子;s3:在步骤s2的基础上修改算子黑白灰名单,从而调整算子优化策略;其中,步骤s1-s3迭代进行,直至昇腾ai处理器算子数据溢出完全解决。
10.进一步的,步骤s1具体如下:在npu中将数据存储为16位浮点数时,数据溢出包括两种情况,即输入或输出值中存在65504,这是由于65504是16位浮点数所能表示的最大的数,出现这种情况意味着数据过大无法用16位浮点数表示,出现上溢出;输入或输出值中存在nan,这是由于零除以零、无穷大除以无穷大、无穷大减无穷大、无穷大乘零无法计算的情况引起,其本质是因为数据存在溢出情况导致计算的过程中出现零和无穷大;通过在模型训练的过程中检测每一个算子的输入或输入数据中是否存在65504或者nan,即可判断该算子是否存在数据溢出的情况;如果存在溢出,则记录下存在溢出的算子数据并将输出传递到下一个算子;如果不存在溢出,则不记录算子数据并将输出传递到下一个算子。
11.进一步的,步骤s2具体如下:首先查看溢出数据的输入数据值,如果输入数据存在65504或nan,说明当前算子的溢出数据存在由前向算子传递而来的可能,此时不能确定当前算子是否导致数据溢出,需要转而分析前向算子;如果输入数据不存在65504或nan,则查看输出数据值进行进一步分析;如果此时输出数据值存在65504或nan,说明当前算子导致数据溢出,对该算子进行记录,反之则不记录。
12.进一步的,步骤s3具体如下:在华为cann计算架构下使用npu进行深度神经网络训练时,算子的优化策略通过黑名单、白名单、灰名单来配置;其中,黑名单指的是不允许将当前32位浮点数类型的算子,降低精度到16位浮点数;白名单指的是允许将当前32位浮点数类型的算子,降低精度到16位浮点数;灰名单指的是当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度;根据算子溢出分析结果,通过修改算子黑名单调整算子优化策略,将导致溢出问
题的算子设置为使用32位浮点数进行运算,从而在根本上解决cann计算架构下ai处理器算子数据溢出的问题。
13.进一步的,cann计算架构下ai处理器具体为华为cann计算架构下昇腾ai处理器。
14.cann计算架构下ai处理器算子溢出优化系统,用于实现如上述的cann计算架构下ai处理器算子溢出优化方法。
15.与现有技术相比,本发明所具有的有益效果为:本方案其中一个有益效果在于,提出一种在华为cann计算架构下解决npu算子数据溢出问题的方法,找出导致溢出问题的算子,并将其设置为使用32位浮点数计算,从根本上避免了算子溢出。提出一种在华为cann计算架构下对npu的算子进行溢出检测的方法,通过识别昇腾ai处理器的算子溢出表现形式,找到溢出算子并对其数据进行记录。提出了一种对npu的算子溢出数据进行分析的方法,以一种保守的策略找到导致溢出问题的根源算子,以在最大程度地维持npu计算性能的同时,逐渐解决算子溢出导致的精度问题。提出了一种调整算子优化策略的方法,首先应用华为cann计算架构对npu算子的内置优化策略,在此基础上,将仍存在溢出问题的算子添加到黑名单中,强制指定其使用32位浮点数进行运算,可以提高整个流程解决溢出问题的效率。
附图说明
16.图1为本技术实施例的方法总体流程示意图。
17.图2为本技术实施例的溢出检测示意图。
18.图3为本技术实施例的溢出数据分析流程示意图。
19.图4为本技术实施例的调整算子优化策略流程示意图。
具体实施方式
20.为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
21.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
22.而且,术语“包括”,“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程,方法,物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程,方法,物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程,方法,物品或者设备中还存在另外的相同要素。
23.以下结合实施例对本发明的特征和性能作进一步的详细描述。
24.实施例:提出一种cann计算架构下ai处理器算子溢出优化方法,包括以下步骤:s1:通过溢出检测来找出存在溢出问题的算子;s2:对步骤s1中找出的算子进行溢出数据分析,判断该算子是否为数据异常的根源算子;s3:在步骤s2的基础上修改算子黑白灰名单,从而调整算子优化策略;其中,步骤s1-s3迭代进行,直至昇腾ai处理器算子数据溢出完全解决。
25.步骤s1中:为了在华为cann计算架构下解决昇腾ai处理器算子数据溢出问题,我们首先设计了一种溢出检测方法,目的是找出存在溢出问题的算子。溢出检测的对象就是神经网络模型中每一个算子的输出,示意图如图2(a)所示。
26.为了对算子的输出进行溢出检测,我们首先应该明确算子数据溢出的表现形式。在npu中将数据存储为16位浮点数时,数据溢出包括两种情况:1、输入或输出值中存在65504,这是由于65504是16位浮点数所能表示的最大的数,出现这种情况意味着数据过大无法用16位浮点数表示,出现上溢出。
27.2、输入或输出值中存在nan,这主要是由于零除以零,无穷大除以无穷大,无穷大减无穷大,无穷大乘零等无法计算的情况引起,其本质上也是因为数据存在溢出情况导致计算的过程中出现零和无穷大。因此,通过在模型训练的过程中检测每一个算子的输入或输入数据中是否存在65504或者nan,就可以判断该算子是否存在数据溢出的情况。如果存在溢出,则记录下存在溢出的算子数据并将输出传递到下一个算子;如果不存在溢出,则不记录算子数据并将输出传递到下一个算子。溢出检测流程图如图2(b)所示。
28.步骤s2中:尽管我们已经获取了溢出数据,知道了哪些算子存在数据溢出的情况,但要注意并不是所有溢出数据都是当前算子数据类型设置不当导致的,因为溢出数据很有可能是从之前的算子传递而来。为了找出真正导致数据溢出问题的根源算子,我们设计了一套溢出数据分析方案,流程图如图3所示。
29.首先查看溢出数据的输入数据值,如果输入数据存在65504或nan,说明当前算子的溢出数据很有可能是由前向算子传递而来的,不能确定当前算子是否导致数据溢出,转而分析前向算子;如果输入数据不存在65504或nan,则查看输出数据值进行进一步分析。如果此时输出数据值存在65504或nan,说明当前算子导致了数据溢出,对该算子进行记录,反之则不记录。值得注意的是,本方法该步骤处理输入数据值有溢出的情况时,采用了一种保守的策略,即不确定溢出情况是由当前算子导致还是由前向算子传递而来时,只分析前向算子,而不分析当前算子,这种做法的优点是不会把没有导致溢出问题的算子错误地记录为导致溢出问题的算子,以最大程度地保证npu的计算性能,但同时也导致通过单次分析无法找出全部的导致溢出问题的算子。这也是本方法需要迭代进行,直到完全解决昇腾ai处理器算子数据溢出问题的原因。
30.步骤s3中:在华为cann计算架构下使用npu进行深度神经网络训练时,算子的优化策略主要通过黑名单、白名单、灰名单来配置。其中黑名单指的是不允许将当前32位浮点数类型的算
子,降低精度到16位浮点数;白名单指的是允许将当前32位浮点数类型的算子,降低精度到16位浮点数;灰名单指的是当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。
31.我们根据算子溢出分析结果,通过修改算子黑名单的方法调整算子优化策略,将导致溢出问题的算子设置为使用32位浮点数进行运算,从而在根本上解决华为cann计算架构下昇腾ai处理器算子数据溢出的问题,流程图如图4所示。
32.由于npu算子种类繁多,每次调整优化策略时都为所有的算子重新进行配置会导致效率低下,因此我们首先采用华为cann内置的优化策略,比如自动混合精度模式,自动将部分32位浮点数的算子降低精度到16位浮点数,在此基础上,再根据溢出数据分析结果,调整部分算子的优化策略。如果溢出分析结果显示某算子导致了数据溢出问题,则将该算子添加到黑名单中,强制其使用32位浮点数进行运算,从而避免华为cann计算架构下昇腾ai处理器算子数据溢出的问题。
33.还提出一种cann计算架构下ai处理器算子溢出优化系统,用于实现如上述的cann计算架构下ai处理器算子溢出优化方法。
34.以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。
技术特征:1.cann计算架构下ai处理器算子溢出优化方法,其特征在于,包括以下步骤:s1:通过溢出检测来找出存在溢出问题的算子;s2:对步骤s1中找出的算子进行溢出数据分析,判断该算子是否为数据异常的根源算子;s3:在步骤s2的基础上修改算子黑白灰名单,从而调整算子优化策略;其中,步骤s1-s3迭代进行,直至昇腾ai处理器算子数据溢出完全解决。2.如权利要求1所述的cann计算架构下ai处理器算子溢出优化方法,其特征在于,步骤s1具体如下:在npu中将数据存储为16位浮点数时,数据溢出包括两种情况,即输入或输出值中存在65504,这是由于65504是16位浮点数所能表示的最大的数,出现这种情况意味着数据过大无法用16位浮点数表示,出现上溢出;输入或输出值中存在nan,这是由于零除以零、无穷大除以无穷大、无穷大减无穷大、无穷大乘零无法计算的情况引起,其本质是因为数据存在溢出情况导致计算的过程中出现零和无穷大;通过在模型训练的过程中检测每一个算子的输入或输入数据中是否存在65504或者nan,即可判断该算子是否存在数据溢出的情况;如果存在溢出,则记录下存在溢出的算子数据并将输出传递到下一个算子;如果不存在溢出,则不记录算子数据并将输出传递到下一个算子。3.如权利要求2所述的cann计算架构下ai处理器算子溢出优化方法,其特征在于,步骤s2具体如下:首先查看溢出数据的输入数据值,如果输入数据存在65504或nan,说明当前算子的溢出数据存在由前向算子传递而来的可能,此时不能确定当前算子是否导致数据溢出,需要转而分析前向算子;如果输入数据不存在65504或nan,则查看输出数据值进行进一步分析;如果此时输出数据值存在65504或nan,说明当前算子导致数据溢出,对该算子进行记录,反之则不记录。4.如权利要求3所述的cann计算架构下ai处理器算子溢出优化方法,其特征在于,步骤s3具体如下:在华为cann计算架构下使用npu进行深度神经网络训练时,算子的优化策略通过黑名单、白名单、灰名单来配置;其中,黑名单指的是不允许将当前32位浮点数类型的算子,降低精度到16位浮点数;白名单指的是允许将当前32位浮点数类型的算子,降低精度到16位浮点数;灰名单指的是当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度;根据算子溢出分析结果,通过修改算子黑名单调整算子优化策略,将导致溢出问题的算子设置为使用32位浮点数进行运算,从而在根本上解决cann计算架构下ai处理器算子数据溢出的问题。5.如权利要求4所述的cann计算架构下ai处理器算子溢出优化方法,其特征在于,cann计算架构下ai处理器具体为华为cann计算架构下昇腾ai处理器。
6.cann计算架构下ai处理器算子溢出优化系统,其特征在于,用于实现如权利要求1-5任一项所述的cann计算架构下ai处理器算子溢出优化方法。
技术总结本发明涉及一种CANN计算架构下AI处理器算子溢出优化方法及系统,属于AI处理器技术领域,找出导致溢出问题的算子,并将其设置为使用32位浮点数计算,从根本上避免了算子溢出。通过识别昇腾AI处理器的算子溢出表现形式,找到溢出算子并对其数据进行记录。提出了一种对NPU的算子溢出数据进行分析的方法,以一种保守的策略找到导致溢出问题的根源算子,以在最大程度地维持NPU计算性能的同时,逐渐解决算子溢出导致的精度问题。提出了一种调整算子优化策略的方法,首先应用华为CANN计算架构对NPU算子的内置优化策略,在此基础上,将仍存在溢出问题的算子添加到黑名单中,强制指定其使用32位浮点数进行运算,可以提高整个流程解决溢出问题的效率。溢出问题的效率。溢出问题的效率。
技术研发人员:孙亚楠 欧玉威
受保护的技术使用者:四川大学
技术研发日:2022.06.07
技术公布日:2022/11/1