精度调优¶
Dump使用方法¶
异步/同步 dump的操作步骤基本一样,区别在于json文件不同。
异步dump(训练结束后dump数据)
创建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
:该项可以配置两种格式:算子的名称列表。开启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数据对象目录。还可以指定算子类型。当字符串中不带算子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数据的文件类型,只支持npy
和bin
两种取值。设置成npy
,则dump出的算子张量数据将为host侧格式的npy文件;设置成bin
,则dump出的数据将为device侧格式的protobuf文件,需要借助转换工具进行处理,详细步骤请参考异步Dump数据分析样例。默认取值为bin
。
设置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
之前配置。
可以在训练脚本中设置set_context(reserve_class_name_in_scope=False)
,避免Dump文件名称过长导致Dump数据文件生成失败。
解析Dump数据文件
可以使用MindSpore Insight的离线调试器来分析。离线调试器的使用方法详见使用离线调试器 。
同步dump(训练的同时进行数据dump)