精度调优

Dump使用方法

异步/同步 dump的操作步骤基本一样,区别在于json文件不同。

异步dump(训练结束后dump数据)

  1. 创建json配置文件

JSON文件的名称和位置可以自定义设置。

{
    "common_dump_settings": {
        "dump_mode": 0,
        "path": "/absolute_path",
        "net_name": "ResNet50",
        "iteration": "0|5-8|100-120",
        "saved_data": "tensor",
        "input_output": 0,
        "kernels": ["Default/Conv-op12"],
        "support_device": [0,1,2,3,4,5,6,7],
        "op_debug_mode": 0,
        "file_format": "npy"
    }
}
  • dump_mode:设置成0,表示Dump出该网络中的所有算子数据;设置成1,表示Dump"kernels"里面指定的算子数据或算子类型数据;设置成2,表示Dump脚本中通过set_dump指定的算子数据,set_dump的使用详见mindspore.set_dump 。开启溢出检测时,此字段的设置失效,Dump只会保存溢出节点的数据。

  • path:Dump保存数据的绝对路径。

  • net_name:自定义的网络名称,例如:”ResNet50”。

  • iteration:指定需要Dump的迭代。类型为str,用“|”分离要保存的不同区间的step的数据。如”0|5-8|100-120”表示Dump第1个,第6个到第9个, 第101个到第121个step的数据。指定“all”,表示Dump所有迭代的数据。PyNative模式开启溢出检测时,必须设置为”all”。

  • saved_data: 指定Dump的数据。类型为str,取值成”tensor”,表示Dump出完整张量数据;取值成”statistic”,表示只Dump张量的统计信息;取值”full”代表两种都要。异步Dump统计信息只有在file_format设置为npy时可以成功,若在file_format设置为bin时选”statistic”或”full”便会错误退出。默认取值为”tensor”。

  • input_output:设置成0,表示Dump出算子的输入和算子的输出;设置成1,表示Dump出算子的输入;设置成2,表示Dump出算子的输出。

  • kernels:该项可以配置两种格式:

    1. 算子的名称列表。开启IR保存开关set_context(save_graphs=2)并执行用例,从生成的IR文件trace_code_graph_{graph_id}中获取算子名称。详细说明可以参照教程:如何保存IR。 需要注意的是,是否设置set_context(save_graphs=2)可能会导致同一个算子的id不同,所以在Dump指定算子时要在获取算子名称之后保持这一项设置不变。或者也可以在Dump保存的ms_output_trace_code_graph_{graph_id}.ir文件中获取算子名称,参考同步Dump数据对象目录。

    2. 还可以指定算子类型。当字符串中不带算子scope信息和算子id信息时,后台则认为其为算子类型,例如:”conv”。算子类型的匹配规则为:当发现算子名中包含算子类型字符串时,则认为匹配成功(不区分大小写),例如:”conv” 可以匹配算子 “Conv2D-op1234”、”Conv3D-op1221”。

  • support_device:支持的设备,默认设置成0到7即可;在分布式训练场景下,需要dump个别设备上的数据,可以只在support_device中指定需要Dump的设备Id。

  • op_debug_mode:该属性用于算子溢出调试,设置成0,表示不开启溢出;设置成1,表示开启AiCore溢出检测;设置成2,表示开启Atomic溢出检测;设置成3,表示开启全部溢出检测功能。在Dump数据的时候请设置成0,若设置成其他值,则只会Dump溢出算子的数据。

  • file_format: dump数据的文件类型,只支持npybin两种取值。设置成npy,则dump出的算子张量数据将为host侧格式的npy文件;设置成bin,则dump出的数据将为device侧格式的protobuf文件,需要借助转换工具进行处理,详细步骤请参考异步Dump数据分析样例。默认取值为bin

  1. 设置Dump环境变量

export MINDSPORE_DUMP_CONFIG=${Absolute path of data_dump.json}

如果Dump配置文件没有设置path字段或者设置为空字符串,还需要配置环境变量MS_DIAGNOSTIC_DATA_PATH

export MS_DIAGNOSTIC_DATA_PATH=${yyy}

则“$MS_DIAGNOSTIC_DATA_PATH/debug_dump”就会被当做path的值。若Dump配置文件中设置了path字段,则仍以该字段的实际取值为准。

  • 在网络脚本执行前,设置好环境变量;网络脚本执行过程中设置将会不生效。

  • 在分布式场景下,Dump环境变量需要在调用mindspore.communication.init之前配置。

  1. 启动网络训练脚本

可以在训练脚本中设置set_context(reserve_class_name_in_scope=False),避免Dump文件名称过长导致Dump数据文件生成失败。

  1. 解析Dump数据文件

可以使用MindSpore Insight的离线调试器来分析。离线调试器的使用方法详见使用离线调试器

同步dump(训练的同时进行数据dump)

参考mindspore官网dump说明