昇腾社区首页
中文
注册

比对步骤(融合算子精度问题排查)

一般情况下离线模型精度比对在转换离线模型时都是默认开启算子融合功能的。为了排查融合后的算子产生的精度问题,可以将模型转换时的算子融合功能关闭,生成关融合的dump数据文件与开融合的dump数据文件进行比对。这种情况下需要同时指定-f参数(开融合的算子映射文件)和-cf(关融合的算子映射文件)。

有关关闭算子融合功能的详细介绍请参见ATC工具使用指南的“参数说明>高级功能参数>模型调优选项>--fusion_switch_file”。

融合算子精度问题排查操作步骤:

  1. 开启算子融合功能的离线模型在昇腾AI处理器上运行生成dump数据;关闭算子融合功能的离线模型在昇腾AI处理器上运行生成dump数据。

    数据分别保存在:

    • /home/HwHiAiUser/MyApp_mind/resnet50_on
    • /home/HwHiAiUser/MyApp_mind/resnet50_off
  2. 以HwHiAiUser用户登录开发环境。
  3. 生成json文件。

    Ascend-cann-toolkit安装目录/ascend-toolkit/latest/bin/atc --mode=1 --om=/home/HwHiAiUser/data_on/resnet50.om --json=/home/HwHiAiUser/data/resnet50_on.json

    使用开启算子融合功能的离线模型生成resnet50_on.json文件。

    Ascend-cann-toolkit安装目录/ascend-toolkit/latest/bin/atc --mode=1 --om=/home/HwHiAiUser/data_off/resnet50.om --json=/home/HwHiAiUser/data/resnet50_off.json

    使用关闭算子融合功能的离线模型生成resnet50_off.json文件。

  4. 进入/home/HwHiAiUser/Ascend/ascend-toolkit/latest/toolkit/tools/operator_cmp/compare目录。
  5. 执行Vector比对命令。

    由于dump和npy比对数据文件是由多个文件组成,故下文操作步骤中-m-g参数须指定数据文件所在的父目录。如:/home/HwHiAiUser/MyApp_mind/resnet50,其中resnet50文件夹下直接保存比对数据文件。

    目录结构示例如下:

    root@xxx:/home/HwHiAiUser/MyApp_mind/resnet50# tree
    .
    ├── BatchMatMul.bert_encoder_layer_0_attention_self_MatMul_1.24.1614717261785536
    ├── BatchMatMul.bert_encoder_layer_0_attention_self_MatMul.21.1614717261768864
    ├── BatchMatMul.bert_encoder_layer_10_attention_self_MatMul_1.235.1614717263664916
    #仅为示例,此处省略剩余文件名。

    python3 msaccucmp.py compare -m /home/HwHiAiUser/MyApp_mind/resnet50_on -g /home/HwHiAiUser/MyApp_mind/resnet50_off -f /home/HwHiAiUser/data/resnet50_on.json -cf /home/HwHiAiUser/data/resnet50_off.json -out /home/HwHiAiUser/result

    Vector比对结果result_*.csv文件内容如图1所示。
    图1 融合算子精度问题排查比对结果
    表1 输出参数说明

    参数

    说明

    LeftOp

    表示开启算子融合功能的离线模型的算子名。

    RightOp

    表示关闭算子融合功能的离线模型的算子名。