Skip to main content

关闭融合规则

问题定位流程

图1 定位流程

  1. 推理结果错误,为了后续定位问题,需要重新执行推理,用于获取模型的Dump数据。

    获取模型的Dump数据,需要调用AscendCL接口打开Dump开关,详细描述请参见《精度比对工具使用指南》。

  2. 配置精度模式。

    1. 配置模型高精度模式后推理,获取模型的Dump数据。推理后,如果精度达标,则进行步骤2.b;如果精度不达标,则进行步骤3

      配置模型高精度模式后推理,可能会影响推理性能,如果在精度达标的同时,需要保持性能,则执行2.b~2.d,配置部分算子保持原始网络中的数据类型。

      配置模型高精度模式,请参见配置网络模型的高精度模式

    2. 使用精度比对工具比对高精度模式下的Dump数据与1获取的Dump数据。

      工具的使用请参见《精度比对工具使用指南》。

    3. 根据2.b中的比对结果识别计算有差异的算子。

      一般来说,每次识别一个差异算子(首个余弦相似度较低的算子,例如低于0.95),找到差异算子后,执行2.d推理,推理的同时获取Dump数据,用来与高精度模式下的Dump数据比对,继续找到下一个差异算子。

      需要循环执行该步骤,直至没有差异算子。

    4. 对于有差异的算子,配置该部分算子保持原始网络中的数据类型,再重新推理。

      配置部分算子的高精度模式,请参见配置部分算子保持原始网络中的数据类型

  3. 关闭数据缓存优化功能。

    1. 恢复模型的原有精度模式后,关闭数据缓存优化功能后推理,如果精度达标,则进行步骤3.b;如果精度不达标,则进行步骤4

      当前默认开启数据缓存优化,开启数据缓存优化可提高计算效率、提升性能,但由于部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭数据缓存优化。如果关闭数据缓存优化功能后,精度达标,则还是需要识别出问题算子,反馈给技术支持进一步分析、解决算子问题,解决算子问题后,建议保持开启数据缓存优化。

      关闭数据缓存优化功能,请参见关闭数据缓存优化

    2. 使用精度比对工具比对关闭数据缓存优化功能后的Dump数据与1获取的Dump数据。

      工具的使用请参见《精度比对工具使用指南》。

    3. 根据3.b中的比对结果识别计算有差异的算子。

    4. 联系技术支持(您可以获取日志后单击Link联系技术支持。),提供有差异的算子,进一步分析。

  4. 关闭融合规则功能。

    1. 恢复启用数据缓存优化功能,关闭融合规则功能后推理,如果精度达标,则进行步骤4.b;如果精度不达标,则进行步骤5

      当前默认开启融合规则,开启融合规则可提高计算效率、提升性能,但算子之间可能会融合,融合后的部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭融合规则。如果关闭融合规则功能后,精度达标,则还是需要识别出问题算子,反馈给技术支持进一步分析、解决算子问题,解决算子问题后,建议保持开启融合规则功能。

      关闭融合规则功能,请参见关闭融合规则。关闭某些融合规则可能会导致功能问题,因此在配置关闭融合规则后,系统在不影响功能的前提下关闭部分融合规则,而不是全部融合规则。

    2. 使用精度比对工具比对关闭融合规则后的Dump数据与1获取的Dump数据。

      工具的使用请参见《精度比对工具使用指南》。

    3. 根据4.b中的比对结果识别计算有差异的算子。

    4. 联系技术支持(您可以获取日志后单击Link联系技术支持。),提供有差异的算子,进一步分析。

  5. 检查数据处理或配置。

    推理精度不达标可能是由于数据集、AIPP、后处理方式的差异导致,需逐步进行排查,恢复启用融合规则功能后,请检查数据处理或配置,参见检查数据处理或配置

    如果数据处理逻辑或数据配置有问题,则需修改后重新推理;如果数据处理逻辑或数据配置没有问题,则进行6

  6. 与标杆计算数据比对。

    1. 使用精度比对工具将模型的Dump数据与标杆网络的Dump数据进行对比。

      工具的使用请参见《精度比对工具使用指南》。

    2. 根据6.a中的比对结果识别计算有差异的算子。

    3. 联系技术支持(您可以获取日志后单击Link联系技术支持。),提供有差异的算子,进一步分析。

父主题: 算子精度导致推理结果不达标

配置精度模式

如果在模式转换时不指定网络模型或算子的精度模式,默认采用fp16(float16)数据类型进行计算。

配置模型高精度模式后推理,可提升精度,但可能会影响推理性能,如果在精度达标的同时,需要保持性能,则可以配置部分算子保持原始网络中的数据类型。关于ATC参数的详细说明请参见《ATC工具使用指南》。

配置网络模型的高精度模式

  1. 使用ATC工具转换模型时,增加高级参数--precision_mode,用于指定精度模式。

    参数设置如下所示,表示如果网络模型中算子支持fp32(float32),则使用fp32;如果网络模型中算子不支持fp32,则使用fp16(float16)。

    --precision_mode=allow_fp32_to_fp16
  2. 使用转换后的om模型重新推理。

配置部分算子保持原始网络中的数据类型

  1. 使用ATC工具转换模型时,增加高级参数--keep_dtype(指定部分算子计算时保持原始网络的数据类型)和--precision_mode(指定网络模型的精度模式)。

    参数使用示例如下:

    --keep_dtype=$HOME/execeptionlist.cfg --precision_mode=force_fp16

    配置文件名举例为execeptionlist.cfg,配置文件样例如下,文件中每一行是一个算子的名称,将配置好的execeptionlist.cfg文件上传到ATC工具所在服务器任意目录:

    Opname1
    Opname2

  2. 使用转换后的om模型重新推理。

父主题: 算子精度导致推理结果不达标

关闭数据缓存优化

如果在模型转换时不指定关闭数据缓存优化功能,当前默认开启数据缓存优化,开启数据缓存优化可提高计算效率、提升性能,但由于部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭数据缓存优化。

如果关闭数据缓存优化功能后,精度达标,则还是需要识别出问题算子,反馈给技术支持进一步分析、解决算子问题,解决算子问题后,建议保持开启数据缓存优化。

  1. 使用ATC工具转换模型时,增加高级参数:--buffer_optimize,用于关闭数据缓存优化。

    参数设置如下所示,:

    --buffer_optimize=off_optimize

    参数的详细说明请参见《ATC工具使用指南》。

  2. 使用转换后的om模型重新推理。

:::note 说明 在联系技术支持前(您可以获取日志后单击Link联系技术支持。),设置DUMP_GE_GRAPH、DUMP_GRAPH_LEVEL环境变量,重新模型转换,打印模型转换过程中各个阶段的图描述信息。关于环境变量以及图描述信息的说明,请参见《ATC工具使用指南》中的“参考>dump图详细信息”。 :::

父主题: 算子精度导致推理结果不达标

关闭融合规则

如果在模型转换时不指定关闭融合规则,当前默认开启融合规则,开启融合规则可提高计算效率、提升性能,但算子之间可能会融合,融合后的部分算子在实现上可能存在未考虑的场景,导致影响精度,因此在出现精度问题时可以尝试关闭融合规则。

如果关闭融合规则功能后,精度达标,则还是需要识别出问题算子,反馈给技术支持进一步分析、解决算子问题,解决算子问题后,建议保持开启融合规则功能。

  1. 使用ATC工具转换模型时,增加高级参数:--fusion_switch_file

    参数使用示例如下:

    --fusion_switch_file=$HOME/module/fusion_switch.cfg

    配置文件名举例为fusion_switch.cfg,配置文件样例如下,将配置好的fusion_switch.cfg文件上传到ATC工具所在服务器任意目录:

    {
    "Switch":{
    "GraphFusion":{
    "ALL":"off"
    },
    "UBFusion":{
    "ALL":"off"
    }
    }
    }

    参数的详细说明请参见《ATC工具使用指南》。

  2. 使用转换后的om模型重新推理。

:::note 说明 在联系技术支持前(您可以获取日志后单击Link联系技术支持。),设置DUMP_GE_GRAPH、DUMP_GRAPH_LEVEL环境变量,重新模型转换,打印模型转换过程中各个阶段的图描述信息。关于环境变量以及图描述信息的说明,请参见《ATC工具使用指南》中的“参考>dump图详细信息”。 :::

父主题: 算子精度导致推理结果不达标

检查数据处理或配置

  1. 检查昇腾om模型与标杆网络推理的输入数据以及输入数据的处理是否一致,如果不一致,需调整成一致。

  2. 检查AIPP配置。

    AIPP(Artificial Intelligence Pre-Processing),用于在AI Core上完成图像预处理,包括改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(改变图像像素),数据处理之后再进行真正的模型推理。

    如果AIPP配置错误可能导致模型推理的输入数据不准确,需要参见《ATC工具使用指南》中的“高级功能>AIPP使能”章节检查AIPP配置,如有不正确的AIPP配置,修改正确后,重新转换模型,再重新推理。

  3. 检查昇腾om模型与标杆网络推理结果的后处理方式是否一致,如果不一致,需调整成一致。

父主题: 算子精度导致推理结果不达标

案例介绍

案例描述

Fastrcnn网络,模型转换时,保持默认高性能模式、force_fp16精度模式,推理出来的精度错误,MAP结果为0。

然后,在模型转换时,设置模型的高精度模式(precision_mode=allow_fp32_to_fp16),推理出来的精度正确。

案例分析

  1. 模型转换时保持默认高性能模式、force_fp16精度模式,进行推理,获取该模式下的Dump数据文件。

  2. 再次模型转换,设置模型的高精度模式(precision_mode=allow_fp32_to_fp16),再次进行推理,获取该模式下的Dump数据文件。

  3. 使用精度比对工具,比对12中的Dump数据。

    比对结果示例如下:

  4. 从图中可以看CosineSimilarity这一列,余弦相似度算法比对出来的结果,范围是[-1,1],比对的结果如果越接近1,表示两者的值越相近,越接近-1意味着两者的值越相反。对于大部分算子,值低于0.95就说明存在精度问题。

    上图中AddN算子第0个输出的余弦相似度只有0.72,说明这个算子可能存在精度问题,因此需要进一步分析该算子在高精度模式下的第0个输出的Dump数据文件(2中获取的Dump数据文件)。

  5. 由于Dump数据文件无法通过文本工具直接查阅,因此在分析该Dump数据文件前,请参考《精度比对工具使用指南》的“附录>如何查看dump数据文件”章节,先将dump数据文件转换为numpy格式,再将numpy格式文件为txt格式文件。

    在将numpy格式文件为txt格式文件的过程中,可以获取AddN算子第0个输出的最大值、最小值,命令示例如下(****.npy表示numpy格式文件的路径):

    $ python3
    Python 3 (default, Mar 5 2020, 16:07:54)[GCC 5.4.0 20160609] on linuxType "help", "copyright", "credits" or "license" for more information.
    >>> import numpy as np
    >>> a = np.load("****.npy")
    >>> a.max()
    >>> 109508.0
    >>> a.min()
    >>> 70683.0
  6. 5获取到的AddN算子第0个输出的最大值、最小值,可以看出高精度模式下AddN算子输出tensor的最大值为109508.0,而高性能模式(fp16)下,输出tensor的最大值为65504.0(FP16能表达的最大值域范围为(-65505~65504),由此可以得出高精度模式下AddN算子的输出值大于fp16类型域表达范围,因此需要配置该算子走高精度模式,参见配置部分算子保持原始网络中的数据类型

父主题: 算子精度导致推理结果不达标

模型推理性能调优思路

在整网推理时,可能由于模型在昇腾AI处理器上的算子适配、数据读写等问题,导致模型推理的性能不符合预期,您可以查阅本节介绍的内容,了解模型推理时的性能调优流程。由于是调优,因此在调优前,请确保已经完成了整网推理功能调测,功能不阻塞,只是模型推理性能不符合预期、待提升。

在下图的性能调优流程中,涉及调优的关键工具为:模型调优工具AOE(Ascend Optimization Engine)、模型压缩工具AMCT(Ascend Model Compression Toolkit)。在调优过程中,涉及转换模型、记录模型推理耗时、分析性能瓶颈点等操作时,还会辅助使用模型转换工具ATC、性能数据采集工具、精度比对工具。

父主题: 模型推理性能调优建议

在线提单