From 9234b7f3fa64bbc41947cbf6cc7fd91d6eb08cfa Mon Sep 17 00:00:00 2001 From: liuzihan000 Date: Wed, 14 Aug 2024 16:09:33 +0800 Subject: [PATCH] dump doc update --- .../source_zh_cn/model_train/debug/dump.md | 547 +++++++++++++----- 1 file changed, 387 insertions(+), 160 deletions(-) diff --git a/docs/mindspore/source_zh_cn/model_train/debug/dump.md b/docs/mindspore/source_zh_cn/model_train/debug/dump.md index d3bf0a229a..594386519a 100644 --- a/docs/mindspore/source_zh_cn/model_train/debug/dump.md +++ b/docs/mindspore/source_zh_cn/model_train/debug/dump.md @@ -6,38 +6,38 @@ - 对于静态图模式,MindSpore提供了Dump功能,用来将模型训练中的图以及算子的输入输出数据保存到磁盘文件。 -- 对于动态图模式,前向过程可以使用Python原生执行能力,用户可以在网络脚本运行过程中查看记录相应的输入输出。jit以及反向过程属于图编译的部分可以使用同步Dump功能,将算子的输入输出数据保存到磁盘文件。 +- 对于动态图模式,前向过程可以使用Python原生执行能力,用户可以在网络脚本运行过程中查看记录相应的输入输出。jit以及反向过程属于图编译的部分可以使用Ascend O0/O1功能,将算子的输入输出数据保存到磁盘文件。 -MindSpore提供了两种Dump模式: +MindSpore在不同模式下支持的Dump功能不完全相同,因此需要根据运行的模式选择对应的Dump配置: -- 同步Dump:在算子下发后,Host侧执行流同步,发起对Device侧数据的拷贝,将其保存到文件中。 -- 异步Dump:专为Ascend开发,在算子执行完成后,Device侧主动发起数据落盘。 +- [Ascend下O0/O1模式Dump](#ascend下o0o1模式dump) +- [Ascend下O2模式Dump](#ascend下o2模式dump) +- [CPU/GPU模式Dump](#cpugpu-dump) +> Ascend下O0/O1/O2模式的区别请见[ JitConfig 的参数 jit_level](https://www.mindspore.cn/docs/zh-CN/r2.3.1/api_python/mindspore/mindspore.JitConfig.html) +> > 不同模式需要不同的配置文件,生成的数据格式也不同: > -> - GPU/CPU后端和编译等级为O0/O1下的Ascend后端,推荐使用[同步Dump](#同步dump),具体参考[同步dump操作步骤](https://www.mindspore.cn/tutorials/experts/zh-CN/master/debug/dump.html#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4);编译等级为O2的Ascend后端推荐使用[异步Dump](#异步dump),具体参考[异步dump操作步骤](https://www.mindspore.cn/tutorials/experts/zh-CN/master/debug/dump.html#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4-1)。 > - Dump暂不支持异构训练,如果在异构训练场景启用Dump,生成的Dump数据对象目录可能不符合预期的目录结构。 -Ascend后端同步Dump支持情况如下表(GPU/CPU后端参考 `O0/O1` 列)。 - - - + + - + - + @@ -59,17 +59,17 @@ Ascend后端同步Dump支持情况如下表(GPU/CPU后端参考 `O0/O1` 列) - + - + - + @@ -92,78 +92,7 @@ Ascend后端同步Dump支持情况如下表(GPU/CPU后端参考 `O0/O1` 列) > 1. 在统计信息方面,device计算速度较host快(目前仅支持Ascend后端),但host统计指标比device多,详见`statistic_category`选项。 > 2. 仅支持Ascend后端。 -Ascend后端异步Dump支持情况如下表(GPU/CPU后端不支持)。 - -
同步Dump 功能O0/O1O2Ascend O0/Ascend O1/CPU/GPUAscend O2
全量dump 整网数据dump 支持不支持支持,但无full_name信息
部分数据dump 统计信息dump 支持host和device模式1不支持仅支持host模式
数据采样dump
指定迭代 支持不支持支持
指定device 支持不支持支持
指定file_format 不涉及不支持支持
set_dump
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
异步Dump功能O0/O1O2
全量dump整网数据dump支持,但无full_name信息支持
部分数据dump统计信息dump仅支持host模式仅支持host模式
数据采样dump不支持不支持
溢出dumpdump溢出算子不支持支持
指定条件dump指定算子名称不支持支持
指定迭代支持支持
指定device支持支持
指定file_format支持支持
set_dump不支持不支持
辅助信息dump图ir dump不支持不支持
执行序dump不支持不支持
- -## 同步Dump +## Ascend下O0/O1模式Dump ### 操作步骤 @@ -186,7 +115,8 @@ Ascend后端异步Dump支持情况如下表(GPU/CPU后端不支持)。 "e2e_dump_settings": { "enable": true, "trans_flag": true, - "stat_calc_mode": "host" + "stat_calc_mode": "host", + "save_kernel_args": false } } ``` @@ -196,11 +126,11 @@ Ascend后端异步Dump支持情况如下表(GPU/CPU后端不支持)。 - `path`:Dump保存数据的绝对路径。 - `net_name`:自定义的网络名称,例如:"ResNet50"。 - `iteration`:指定需要Dump数据的迭代。类型为str,用“|”分离要保存的不同区间的step的数据。如"0|5-8|100-120"表示Dump第1个,第6个到第9个, 第101个到第121个step的数据。指定“all”,表示Dump所有迭代的数据。仅在op_debug_mode设置为0或3时支持保存指定迭代,op_debug_mode设置为4时不支持指定迭代。 - - `saved_data`: 指定Dump的数据。类型为str,取值成"tensor",表示Dump出完整张量数据;取值成"statistic",表示只Dump张量的统计信息;取值"full"代表两种都要。同步Dump统计信息现只支持GPU场景和Ascend场景,CPU场景若选"statistic"或"full"便会错误退出。默认取值为"tensor"。保存统计信息仅支持op_debug_mode设置为0的场景。 + - `saved_data`: 指定Dump的数据。类型为str,取值成"tensor",表示Dump出完整张量数据;取值成"statistic",表示只Dump张量的统计信息;取值"full"代表两种都要。默认取值为"tensor"。保存统计信息仅在op_debug_mode设置为0时生效。 - `input_output`:设置成0,表示Dump出算子的输入和算子的输出;设置成1,表示Dump出算子的输入;设置成2,表示Dump出算子的输出。在op_debug_mode设置为4时,只能保存算子输入。 - `kernels`:该项可以配置三种格式: 1. 算子的名称列表。开启IR保存开关`set_context(save_graphs=2)`并执行用例,从生成的IR文件`trace_code_graph_{graph_id}`中获取算子名称。详细说明可以参照教程:[如何保存IR](https://www.mindspore.cn/tutorials/zh-CN/master/advanced/error_analysis/mindir.html#如何保存ir)。 - 需要注意的是,是否设置`set_context(save_graphs=2)`可能会导致同一个算子的id不同,所以在Dump指定算子时要在获取算子名称之后保持这一项设置不变。或者也可以在Dump保存的`ms_output_trace_code_graph_{graph_id}.ir`文件中获取算子名称,参考[同步Dump数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/master/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)。 + 需要注意的是,是否设置`set_context(save_graphs=2)`可能会导致同一个算子的id不同,所以在Dump指定算子时要在获取算子名称之后保持这一项设置不变。或者也可以在Dump保存的`ms_output_trace_code_graph_{graph_id}.ir`文件中获取算子名称,参考[Ascend O0/O1模式下Dump数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/master/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)。 2. 还可以指定算子类型。当字符串中不带算子scope信息和算子id信息时,后台则认为其为算子类型,例如:"conv"。算子类型的匹配规则为:当发现算子名中包含算子类型字符串时,则认为匹配成功(不区分大小写),例如:"conv" 可以匹配算子 "Conv2D-op1234"、"Conv3D-op1221"。 3. 算子名称的正则表达式。当字符串符合"name-regex(xxx)"格式时,后台则会将其作为正则表达式。例如,"name-regex(Default/.+)"可匹配算子名称以"Default/"开头的所有算子。 - `support_device`:支持的设备,默认设置成0到7即可;在分布式训练场景下,需要dump个别设备上的数据,可以只在`support_device`中指定需要Dump的设备Id。该配置参数在CPU上无效,因为CPU下没有device这个概念,但是在json格式的配置文件中仍需保留该字段。 @@ -222,11 +152,12 @@ Ascend后端异步Dump支持情况如下表(GPU/CPU后端不支持)。 以上除了标记了支持device统计的,其它都仅支持在host统计。 该字段为可选,默认值为["max", "min", "l2norm"]。 - - `enable`:设置成true,表示开启同步Dump;设置成false时,在Ascend上会使用异步Dump,在GPU上仍然使用同步Dump。 - - `trans_flag`:开启格式转换。将设备上的数据格式转换成NCHW格式。若为`True`,则数据会以Host侧的4D格式(NCHW)格式保存;若为`False`,则保留Device侧的数据格式。该配置参数在CPU上无效,因为CPU上没有format转换。默认值:true。 - - `stat_calc_mode`:选择统计信息计算后端,可选"host"和"device"。选择"device"后可以使能device计算统计信息,当前只在Ascend生效,只支持`min/max/avg/l2norm`统计量。 - - `sample_mode`:设置成0,表示不开启切片dump功能;设置成1时,在图编译等级为O0或O1的情况下开启切片dump功能。仅在op_debug_mode设置为0时生效,其它场景不会开启切片dump功能。 - - `sample_num`:用于控制切片dump中切片的大小。默认值为100。 + - `enable`:设置成true,表示开启同步Dump;设置成false时,采用异步Dump。不设置该字段时默认值为false,开启异步Dump。两者的区别是异步Dump对原本代码执行过程的影响更小。 + - `trans_flag`:开启格式转换。将设备上的数据格式转换成NCHW格式。若为`True`,则数据会以Host侧的4D格式(NCHW)格式保存;若为`False`,则保留Device侧的数据格式。 + - `stat_calc_mode`:选择统计信息计算后端,可选"host"和"device"。选择"device"后可以使能device计算统计信息,但只支持`min/max/avg/l2norm`统计量。 + - `sample_mode`:设置成0,表示不开启切片dump功能;设置成1,且仅在op_debug_mode设置为0时开启切片dump功能,其它场景不会开启切片dump功能。 + - `sample_num`:用于控制切片dump中切片的大小。默认值为100。仅在开启切片dump功能时生效。 + - `same_kernel_args`: 设置成true时,会保存算子的初始化信息。 2. 设置Dump环境变量。 @@ -263,11 +194,11 @@ Ascend后端异步Dump支持情况如下表(GPU/CPU后端不支持)。 可以在训练脚本中设置`set_context(reserve_class_name_in_scope=False)`,避免Dump文件名称过长导致Dump数据文件生成失败。 -4. 通过`numpy.load`读取和解析同步Dump数据,参考[同步Dump数据文件介绍](#数据对象目录和数据文件介绍)。 +4. 通过`numpy.load`读取和解析Dump数据,参考[Ascend O0/O1模式下Dump数据文件介绍](#数据对象目录和数据文件介绍)。 ### 数据对象目录和数据文件介绍 -启动训练后,同步Dump保存的数据对象包括最终执行图(`ms_output_trace_code_graph_{graph_id}.ir`文件)以及图中算子的输入和输出数据,数据目录结构如下所示: +启动训练后,Ascend O0/O1模式下Dump保存的数据对象包括最终执行图(`ms_output_trace_code_graph_{graph_id}.ir`文件)以及图中算子的输入和输出数据,数据目录结构如下所示: ```text {path}/ @@ -309,27 +240,28 @@ Ascend后端异步Dump支持情况如下表(GPU/CPU后端不支持)。 只当`saved_data`为"statistic"或者"full"时,才会生成`statistic.csv`,当`saved_data`为"tensor"或者"full"时,才会生成`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`命名的完整张量信息。 -只当`save_kernel_args`为`True`时,才会生成`{op_type}.{op_name}.json`,保存算子的初始化信息。 - -同步Dump生成的数据文件是后缀名为`.npy`的文件,文件命名格式为: - -```text -{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy +只当`save_kernel_args`为`True`时,才会生成`{op_type}.{op_name}.json`,保存算子的初始化信息。该json文件内部格式为算子各初始化参数的的对应值,以`Matmul`算子为例, json信息如下: ``` +{ + "transpose_a": "False", + "transpose_b": "False" +} +``` +代表Matmul算子的两个初始化参数`transpose_a`和`transpose_b`的值均为`false`。 -同步Dump生成的常量数据文件与其他数据文件格式相同,而所有常量数据的{op_type},{task_id},{stream_id},{input_output_index},{slot},{format}不变。注意,非Tensor类型数据不会被生成数据文件。该功能不支持Ascend场景。 +Ascend O0/O1模式下Dump生成的数据文件是后缀名为`.npy`的文件,文件命名格式为: ```text -Parameter.data-{data_id}.0.0.{timestamp}.output.0.DefaultFormat.npy +{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy ``` -{iteration_id}目录下也可能会保存Parameter开头的文件(weight, bias等参数会保存成Parameter开头的文件),Ascend上不会保存Parameter文件。 +> - Ascend O0/O1模式下不支持Dump常量数据 可以用Numpy的`numpy.load`接口读取数据。 -同步Dump生成的统计数据文件名为`statistic.csv`,此文件存有相同目录下所有落盘张量(文件名为`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`)的统计信息。每个张量一行,每行有张量的 Op Type,Op Name,Task ID,Stream ID,Timestamp,IO,Slot,Data Size,Data Type,Shape以及用户配置的统计信息项。注意,如果用Excel来打开此文件,数据可能无法正确显示。请用`vi`、`cat`等命令查看,或者使用Excel自文本导入csv查看。 +Ascend O0/O1模式下生成的统计数据文件名为`statistic.csv`,此文件存有相同目录下所有落盘张量(文件名为`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`)的统计信息。每个张量一行,每行有张量的 Op Type,Op Name,Task ID,Stream ID,Timestamp,IO,Slot,Data Size,Data Type,Shape以及用户配置的统计信息项。注意,如果用Excel来打开此文件,数据可能无法正确显示。请用`vi`、`cat`等命令查看,或者使用Excel自文本导入csv查看。 -同步Dump生成的最终执行图文件后缀名分别为`.pb`和`.ir`,文件命名格式为: +Ascend O0/O1模式下生成的最终执行图文件后缀名分别为`.pb`和`.ir`,文件命名格式为: ```text ms_output_trace_code_graph_{graph_id}.pb @@ -338,25 +270,15 @@ ms_output_trace_code_graph_{graph_id}.ir 其中以`.ir`为后缀的文件可以通过`vi`命令打开查看。 -同步Dump生成的节点执行序文件后缀名为`.csv`,文件命名格式为: +Ascend O0/O1模式下Dump生成的节点执行序文件后缀名为`.csv`,文件命名格式为: ```text ms_execution_order_graph_{graph_id}.csv ``` -图执行历史文件的后缀为`.csv`,文件名格式为: - -```text -ms_global_execution_order_graph_{graph_id}.csv -``` - -此文件记录该图在训练过程中的执行轮次历史。图编译过程中,一张根图可能产生多张子图,但子图与根图具有相同的执行轮次历史。故与图执行序文件不同,此处仅保存根图的图执行历史文件。该功能不支持Ascend。 - -`.dump_metadata`记录了训练的原信息(Ascend后端无此目录),其中`data_dump.json`保存了用户设置的dump配置。 - ### 数据分析样例 -为了更好地展示使用Dump来保存数据并分析数据的流程,我们提供了一套[完整样例脚本](https://gitee.com/mindspore/docs/tree/master/docs/sample_code/dump) ,同步Dump只需要执行 `bash run_sync_dump.sh`。 +为了更好地展示使用Dump来保存数据并分析数据的流程,我们提供了一套[完整样例脚本](https://gitee.com/mindspore/docs/tree/master/docs/sample_code/dump) ,只需要执行 `bash run_sync_dump.sh`。 在通过Dump功能将脚本对应的图保存到磁盘上后,会产生最终执行图文件`ms_output_trace_code_graph_{graph_id}.ir`。该文件中保存了对应的图中每个算子的堆栈信息,记录了算子对应的生成脚本。 @@ -494,9 +416,7 @@ numpy.load("Conv2D.Conv2D-op12.0.0.1623124369613540.output.0.DefaultFormat.npy") 生成numpy.array数据。 -## 异步Dump - -MindSpore通过异步Dump提供了Ascend平台上大型网络的调试能力。 +## Ascend下O2模式Dump ### 操作步骤 @@ -524,10 +444,10 @@ MindSpore通过异步Dump提供了Ascend平台上大型网络的调试能力。 - `op_debug_mode`:该属性用于算子溢出调试,设置成0,表示不开启溢出;设置成3,表示开启溢出检测功能;设置成4,表示开启轻量异常Dump功能。在Dump数据的时候请设置成0,若设置成其他值,则只会Dump溢出算子或异常算子的数据。 - `dump_mode`:设置成0,表示Dump出该网络中的所有算子数据;设置成1,表示Dump`"kernels"`里面指定的算子数据或算子类型数据。仅在op_debug_mode设置为0时支持指定算子dump。op_debug_mode设置为非0值时,此字段的设置失效,Dump只会保存溢出算子的数据或者异常算子的数据。 - - `path`:Dump保存数据的绝对路径。在图编译等级为O0时,MindSpore会在path目录下新建每个step的子目录。 + - `path`:Dump保存数据的绝对路径。 - `net_name`:自定义的网络名称,例如:"ResNet50"。 - `iteration`:指定需要Dump的迭代。类型为str,用“|”分离要保存的不同区间的step的数据。如"0|5-8|100-120"表示Dump第1个,第6个到第9个, 第101个到第121个step的数据。指定“all”,表示Dump所有迭代的数据。仅在op_debug_mode设置为0时支持保存指定迭代,op_debug_mode设置为3或4时不支持指定迭代。 - - `saved_data`: 指定Dump的数据。类型为str,取值成"tensor",表示Dump出完整张量数据;取值成"statistic",表示只Dump张量的统计信息;取值"full"代表两种都要。异步Dump统计信息只有在`file_format`设置为`npy`时可以成功,若在`file_format`设置为`bin`时选"statistic"或"full"便会错误退出。保存统计信息仅支持op_debug_mode设置为0的场景。默认取值为"tensor"。 + - `saved_data`: 指定Dump的数据。类型为str,取值成"tensor",表示Dump出完整张量数据;取值成"statistic",表示只Dump张量的统计信息;取值"full"代表两种都要。Ascend O2模式下Dump统计信息只有在`file_format`设置为`npy`时可以成功,若在`file_format`设置为`bin`时选"statistic"或"full"便会错误退出。保存统计信息仅支持op_debug_mode设置为0的场景。默认取值为"tensor"。 - `input_output`:设置成0,表示Dump出算子的输入和算子的输出;设置成1,表示Dump出算子的输入;设置成2,表示Dump出算子的输出。 - `kernels`:该项可以配置两种格式: 1. 算子的名称列表。指定算子需要先设置保存图文件的环境变量来保存图,再从保存的图文件中获取算子名称。保存图文件的环境变量请参考昇腾社区文档[DUMP_GE_GRAPH](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0011.html) 、[DUMP_GRAPH_LEVEL](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0012.html) 和[DUMP_GRAPH_PATH](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0013.html) 。 @@ -550,7 +470,7 @@ MindSpore通过异步Dump提供了Ascend平台上大型网络的调试能力。 该字段为可选,默认值为["max", "min", "l2norm"]。 - - `file_format`: dump数据的文件类型,只支持`npy`和`bin`两种取值。设置成`npy`,则dump出的算子张量数据将为host侧格式的npy文件;设置成`bin`,则dump出的数据将为device侧格式的protobuf文件,需要借助转换工具进行处理,详细步骤请参考[异步Dump数据分析样例](#数据分析样例-1)。默认取值为`bin`。 + - `file_format`: dump数据的文件类型,只支持`npy`和`bin`两种取值。设置成`npy`,则dump出的算子张量数据将为host侧格式的npy文件;设置成`bin`,则dump出的数据将为device侧格式的protobuf文件,需要借助转换工具进行处理,详细步骤请参考[Ascend O2模式下数据分析样例](#数据分析样例-1)。默认取值为`bin`。 2. 设置数据Dump的环境变量。 @@ -573,14 +493,14 @@ MindSpore通过异步Dump提供了Ascend平台上大型网络的调试能力。 可以在训练脚本中设置`set_context(reserve_class_name_in_scope=False)`,避免Dump文件名称过长导致Dump数据文件生成失败。 -4. 参考[异步Dump数据分析样例](#数据分析样例-1)解析Dump数据文件。 +4. 参考[Ascend O2模式下数据分析样例](#数据分析样例-1)解析Dump数据文件。 > - 若需要dump全量或部分算子,则可以修改json配置文件中的`dump_mode`选项为0或1。 > - 由于Dump速度较慢,在大模型场景下开启Dump会延长不同卡之间的通信间隔时间,从而导致通信算子超时。可以通过调整通信算子的超时时间来解决此问题。对于Ascend后端,可以设置HCCL_EXEC_TIMEOUT环境变量,具体设置方法请参考[昇腾CANN文档](https://www.hiascend.com/document/detail/zh/canncommercial/80RC1/apiref/envvar/envref_07_0072.html)。 ### 数据对象目录和数据文件介绍 -图编译等级不为O0或O1时,Dump目录结构如下所示,主要特征为存在{step_id}目录,代表用户侧的训练轮次: +Ascend O2模式下Dump目录结构如下所示,主要特征为存在{step_id}目录,代表用户侧的训练轮次: ```text {path}/ @@ -597,27 +517,6 @@ MindSpore通过异步Dump提供了Ascend平台上大型网络的调试能力。 acl_dump_{device_id}.json ``` -图编译等级为O0或O1时,Dump目录结构如下所示,此种场景下aclop和aclnn算子的Dump数据会保存于{device_id}目录,"ReduceSum"类通信算子的Dump数据会保存在{iteration_id}目录: - -```text -{path}/ - - {step_id}/ - - {time}/ - - {device_id}/ - - {model_name}/ - - {model_id}/ - - {iteration_id}/ - statistic.csv - {op_type}.{op_name}.{task_id}.{stream_id}.{timestamp} //aclop 算子 - {op_name}.{op_type}.{task_id}.{stream_id}.{timestamp} //aclnn 算子 - mapping.csv - statistic.csv - {op_type}.{op_name}.{task_id}.{stream_id}.{timestamp} //aclop 算子 - {op_name}.{op_type}.{task_id}.{stream_id}.{timestamp} //aclnn 算子 - mapping.csv - acl_dump_{device_id}.json -``` - - `path`:`data_dump.json`配置文件中设置的绝对路径。 - `time`: dump目录的创建时间。 - `device_id`: 卡号。 @@ -631,7 +530,7 @@ MindSpore通过异步Dump提供了Ascend平台上大型网络的调试能力。 - `timestamp`:时间戳。 - `step_id`: 用户侧的训练轮次。 -在{path}目录的`acl_dump_{device_id}.json`文件,是异步Dump在接口调用过程中生成的中间文件,一般情况下无需关注。 +在{path}目录的`acl_dump_{device_id}.json`文件,是Ascend O2模式下Dump在接口调用过程中生成的中间文件,一般情况下无需关注。 其中,溢出文件(`Opdebug.Node_OpDebug.{task_id}.{stream_id}.{timestamp}`文件)只会在开启溢出Dump且检测到溢出时保存。 @@ -646,11 +545,11 @@ Opdebug.Node_OpDebug.{task_id}.{stream_id}.{timestamp}.output.0.json 若配置文件中`file_format`值设置为`npy`,可以直接用`numpy.load`加载。 -若未配置`file_format`值或`file_format`值为`bin`,启动训练后,异步Dump生成的原始数据文件或溢出检测生成的溢出文件是protobuf格式的文件,需要用到海思Run包中自带的数据解析工具进行解析,详见[如何查看dump数据文件](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/devaids/auxiliarydevtool/atlasaccuracy_16_0059.html)。 +若未配置`file_format`值或`file_format`值为`bin`,启动训练后,Ascend O2模式下Dump生成的原始数据文件或溢出检测生成的溢出文件是protobuf格式的文件,需要用到海思Run包中自带的数据解析工具进行解析,详见[如何查看dump数据文件](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/devaids/auxiliarydevtool/atlasaccuracy_16_0059.html)。 -数据在Device侧的格式可能和Host侧计算图中的定义不同,异步Dump的bin数据格式为Device侧格式,如果想要转为Host侧格式,可以参考[如何进行dump数据文件Format转换](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/devaids/auxiliarydevtool/atlasaccuracy_16_0057.html)。 +数据在Device侧的格式可能和Host侧计算图中的定义不同,Ascend O2模式下Dump的bin数据格式为Device侧格式,如果想要转为Host侧格式,可以参考[如何进行dump数据文件Format转换](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/devaids/auxiliarydevtool/atlasaccuracy_16_0057.html)。 -异步Dump生成的数据文件是`bin`文件时,文件命名格式为: +Ascend O2模式下Dump生成的数据文件是`bin`文件时,文件命名格式为: ```text {op_type}.{op_name}.{task_id}.{stream_id}.{timestamp} @@ -660,17 +559,17 @@ Opdebug.Node_OpDebug.{task_id}.{stream_id}.{timestamp}.output.0.json 如果`op_type`和`op_name`中出现了“.”、“/”、“\”、空格时,会转换为下划线表示。 -Dump生成的原始数据文件也可以使用MindSpore Insight的数据解析工具DumpParser解析,DumpParser的使用方式详见[DumpParser介绍](https://gitee.com/mindspore/mindinsight/tree/master/mindinsight/parser) 。MindSpore Insight解析出来的数据格式与同步dump的数据格式完全相同。 +Dump生成的原始数据文件也可以使用MindSpore Insight的数据解析工具DumpParser解析,DumpParser的使用方式详见[DumpParser介绍](https://gitee.com/mindspore/mindinsight/tree/master/mindinsight/parser) 。MindSpore Insight解析出来的数据格式与Ascend O0/O1模式下Dump的数据格式完全相同。 -若配置`file_format`值为`npy`,则启用异步dump生成的数据文件命名规则与同步Dump相同,可以参考[同步Dump数据文件介绍](#数据对象目录和数据文件介绍),溢出检测生成的溢出文件是`json`格式,溢出文件内容解析可参考[解析算子溢出数据文件](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/devguide/appdevg/aclpythondevg/aclpythondevg_0078.html#ZH-CN_TOPIC_0000001781325073__section6864050111619) 。 +若配置`file_format`值为`npy`,则启用Ascend O2模式下Dump生成的数据文件命名规则与Ascend O0/O1模式下Dump相同,可以参考[Ascend O0/O1模式下Dump数据文件介绍](#数据对象目录和数据文件介绍),溢出检测生成的溢出文件是`json`格式,溢出文件内容解析可参考[解析算子溢出数据文件](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/devguide/appdevg/aclpythondevg/aclpythondevg_0078.html#ZH-CN_TOPIC_0000001781325073__section6864050111619) 。 -选项`saved_data`只有在`file_format`为"npy"的时候生效。如`saved_data`是"statistic"或者"full"。张量统计数据会落盘到`statistic.csv`。如`saved_data`是"tensor"或者"full"完整张量数据会落盘到`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`。`statistic.csv`的格式与同步Dump相同,可以参考[同步Dump数据文件介绍](#数据对象目录和数据文件介绍)。 +选项`saved_data`只有在`file_format`为"npy"的时候生效。如`saved_data`是"statistic"或者"full"。张量统计数据会落盘到`statistic.csv`。如`saved_data`是"tensor"或者"full"完整张量数据会落盘到`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`。`statistic.csv`的格式与Ascend O0/O1模式下Dump相同,可以参考[Ascend O0/O1模式下Dump数据文件介绍](#数据对象目录和数据文件介绍)。 ### 数据分析样例 -异步Dump不会自动保存`.ir`文件,要想查看`.ir`文件,可以在执行用例前通过MindSpore的IR保存开关`set_context(save_graphs=2)`, 执行用例后查看保存的`trace_code_graph_{xxx}`文件, 可以用vi打开。文件查看方式请参考同步dump的数据分析样例。在图编译等级为O0或O1时,异步Dump保存的算子文件和图文件中的算子名不同,所以此场景不推荐使用异步Dump,建议使用同步Dump。在图编译等级为O2时,由于`.ir`文件中并不是最终执行图,不能保证算子文件和`.ir`文件中的算子名一一对应。保存最终的执行图请参考昇腾社区文档[DUMP_GE_GRAPH](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0011.html) 、[DUMP_GRAPH_LEVEL](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0012.html) 和[DUMP_GRAPH_PATH](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0013.html) 。 +Ascend O2模式下Dump不会自动保存`.ir`文件,要想查看`.ir`文件,可以在执行用例前通过MindSpore的IR保存开关`set_context(save_graphs=2)`, 执行用例后查看保存的`trace_code_graph_{xxx}`文件, 可以用vi打开。文件查看方式请参考Ascend O0模式下的数据分析样例。Ascend O2模式下,由于`.ir`文件中并不是最终执行图,不能保证算子文件和`.ir`文件中的算子名一一对应。保存最终的执行图请参考昇腾社区文档[DUMP_GE_GRAPH](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0011.html) 、[DUMP_GRAPH_LEVEL](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0012.html) 和[DUMP_GRAPH_PATH](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC1alpha001/apiref/envref/envref_07_0013.html) 。 -通过异步Dump的功能,获取到算子异步Dump生成的数据文件。如果异步Dump配置文件中设置的`file_format`为"npy",可以跳过以下步骤中的1、2,如果没有设置`file_format`,或者设置为"bin",需要先转换成`.npy`格式的文件。 +Ascend O2模式下Dump会在对应目录生成到生成Dump数据文件。数据文件的解析可以通过以下3个步骤。如果Ascend O2模式下Dump配置文件中设置的`file_format`为"npy",可以跳过以下步骤中的1、2,如果没有设置`file_format`,或者设置为"bin",需要先转换成`.npy`格式的文件。 1. 使用run包中提供的`msaccucmp.py`解析Dump出来的文件。不同的环境上`msaccucmp.py`文件所在的路径可能不同,可以通过`find`命令进行查找: @@ -724,6 +623,334 @@ Dump生成的原始数据文件也可以使用MindSpore Insight的数据解析 import numpy numpy.load("Conv2D.Default_network-WithLossCell__backbone-AlexNet_conv3-Conv2d_Conv2D-op12.2.7.161243956333802.input.0.32x256x13x13.npy") ``` +## CPU/GPU Dump + +### 操作步骤 + +1. 创建json格式的配置文件,JSON文件的名称和位置可以自定义设置。 + + ```json + { + "common_dump_settings": { + "op_debug_mode": 0, + "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], + "statistic_category": ["max", "min", "l2norm"] + }, + "e2e_dump_settings": { + "enable": true, + "trans_flag": true, + } + } + ``` + + - `op_debug_mode`:该属性用于算子溢出或算子异常调试,设置成0,表示保存所有算子或指定算子;设置成3,表示只保存溢出算子;设置成4,表示只保存异常算子的输入。在Dump数据的时候请设置成0,若设置成其他值,则只会Dump溢出算子或异常算子的数据。默认值:0。 + - `dump_mode`:设置成0,表示Dump出该网络中的所有算子数据;设置成1,表示Dump`"kernels"`里面指定的算子数据或算子类型数据;设置成2,表示使用[mindspore.set_dump](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.set_dump.html) Dump指定对象。仅在op_debug_mode设置为0时支持指定算子dump。 + - `path`:Dump保存数据的绝对路径。 + - `net_name`:自定义的网络名称,例如:"ResNet50"。 + - `iteration`:指定需要Dump数据的迭代。类型为str,用“|”分离要保存的不同区间的step的数据。如"0|5-8|100-120"表示Dump第1个,第6个到第9个, 第101个到第121个step的数据。指定“all”,表示Dump所有迭代的数据。仅在op_debug_mode设置为0或3时支持保存指定迭代,op_debug_mode设置为4时不支持指定迭代。 + - `saved_data`: 指定Dump的数据。类型为str,取值成"tensor",表示Dump出完整张量数据;取值成"statistic",表示只Dump张量的统计信息;取值"full"代表两种都要。统计信息现只支持GPU场景,CPU场景若选"statistic"或"full"便会错误退出。默认取值为"tensor"。保存统计信息仅支持op_debug_mode设置为0的场景。 + - `input_output`:设置成0,表示Dump出算子的输入和算子的输出;设置成1,表示Dump出算子的输入;设置成2,表示Dump出算子的输出。在op_debug_mode设置为4时,只能保存算子输入。 + - `kernels`:该项可以配置三种格式: + 1. 算子的名称列表。开启IR保存开关`set_context(save_graphs=2)`并执行用例,从生成的IR文件`trace_code_graph_{graph_id}`中获取算子名称。详细说明可以参照教程:[如何保存IR](https://www.mindspore.cn/tutorials/zh-CN/master/advanced/error_analysis/mindir.html#如何保存ir)。 + 需要注意的是,是否设置`set_context(save_graphs=2)`可能会导致同一个算子的id不同,所以在Dump指定算子时要在获取算子名称之后保持这一项设置不变。或者也可以在Dump保存的`ms_output_trace_code_graph_{graph_id}.ir`文件中获取算子名称,参考[CPU/GPU模式下Dump数据对象目录](https://www.mindspore.cn/tutorials/experts/zh-CN/master/debug/dump.html#%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E7%9B%AE%E5%BD%95%E5%92%8C%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E4%BB%8B%E7%BB%8D)。 + 2. 还可以指定算子类型。当字符串中不带算子scope信息和算子id信息时,后台则认为其为算子类型,例如:"conv"。算子类型的匹配规则为:当发现算子名中包含算子类型字符串时,则认为匹配成功(不区分大小写),例如:"conv" 可以匹配算子 "Conv2D-op1234"、"Conv3D-op1221"。 + 3. 算子名称的正则表达式。当字符串符合"name-regex(xxx)"格式时,后台则会将其作为正则表达式。例如,"name-regex(Default/.+)"可匹配算子名称以"Default/"开头的所有算子。 + - `support_device`:支持的设备,默认设置成0到7即可;在分布式训练场景下,需要dump个别设备上的数据,可以只在`support_device`中指定需要Dump的设备Id。该配置参数在CPU上无效,因为CPU下没有device这个概念,但是在json格式的配置文件中仍需保留该字段。 + - `statistic_category`: 该属性用于用户配置要保存的统计信息类别,仅在开启了保存统计信息(即`saved_data`设置为"statistic"或"full")时生效。类型为字符串列表,其中的字符串可选值如下: + + - "max": 表示Tensor中元素的最大值,支持在device统计和在host统计; + - "min": 表示Tensor中元素的最小值,支持在device统计和在host统计; + - "avg": 表示Tensor中元素的平均值,支持在device统计和在host统计; + - "count": 表示Tensor中元素的个数; + - "negative zero count": 表示Tensor中小于0的元素个数; + - "positive zero count": 表示Tensor中大于0的元素个数; + - "nan count": 表示Tensor中元素的`Nan`的个数; + - "negative inf count": 表示Tensor中`-Inf`元素的个数; + - "positive inf count": 表示Tensor中`+Inf`元素的个数; + - "zero count": 表示Tensor中元素`0`的个数; + - "md5": 表示Tensor的MD5值; + - "l2norm": 表示Tensor的L2Norm值,支持在device统计和在host统计。 + + 以上除了标记了支持device统计的,其它都仅支持在host统计。 + 该字段为可选,默认值为["max", "min", "l2norm"]。 + + - `enable`:在CPU/GPU Dump模式下,该字段必须设置为`true`。 + - `trans_flag`:开启格式转换。将设备上的数据格式转换成NCHW格式。若为`True`,则数据会以Host侧的4D格式(NCHW)格式保存;若为`False`,则保留Device侧的数据格式。该配置参数在CPU上无效,因为CPU上没有format转换。默认值:true。 + +2. 设置Dump环境变量。 + + 指定Dump的json配置文件。 + + ```bash + export MINDSPORE_DUMP_CONFIG=${xxx} + ``` + + 其中"xxx"为配置文件的绝对路径,如: + + ```bash + export MINDSPORE_DUMP_CONFIG=/path/to/data_dump.json + ``` + + 如果Dump配置文件没有设置`path`字段或者设置为空字符串,还需要配置环境变量`MS_DIAGNOSTIC_DATA_PATH`。 + + ```bash + export MS_DIAGNOSTIC_DATA_PATH=${yyy} + ``` + + 则“$MS_DIAGNOSTIC_DATA_PATH/debug_dump”就会被当做`path`的值。若Dump配置文件中设置了`path`字段,则仍以该字段的实际取值为准。 + + 注意: + + - 在网络脚本执行前,设置好环境变量;网络脚本执行过程中设置将会不生效。 + - 在分布式场景下,Dump环境变量需要在调用`mindspore.communication.init`之前配置。 + +3. 启动网络训练脚本。 + + 训练启动后,若正确配置了`MINDSPORE_DUMP_CONFIG`环境变量,则会读取配置文件的内容,并按照Dump配置中指定的数据保存路径保存算子数据。 + 同步模式下,GPU环境如果要Dump数据,必须采用非数据下沉模式(设置`model.train`或`DatasetHelper`中的`dataset_sink_mode`参数为`False`),以保证可以获取每个step的Dump数据。 + 若脚本中都不调用`model.train`或`DatasetHelper`,则默认为非数据下沉模式。使用Dump功能将自动生成最终执行图的IR文件。 + + 可以在训练脚本中设置`set_context(reserve_class_name_in_scope=False)`,避免Dump文件名称过长导致Dump数据文件生成失败。 + +4. 通过`numpy.load`读取和解析CPU/GPU模式下Dump数据,参考[CPU/GPU模式下Dump数据文件介绍](#数据对象目录和数据文件介绍)。 + +### 数据对象目录和数据文件介绍 + +启动训练后,CPU/GPU模式下Dump保存的数据对象包括最终执行图(`ms_output_trace_code_graph_{graph_id}.ir`文件)以及图中算子的输入和输出数据,数据目录结构如下所示: + +```text +{path}/ + - rank_{rank_id}/ + - .dump_metadata/ + - {net_name}/ + - {graph_id}/ + - {iteration_id}/ + {op_type}.{op_name}.json + statistic.csv + {op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy + - constants/ + Parameter.data-{data_id}.0.0.{timestamp}.output.0.DefaultFormat.npy + ... + - graphs/ + ms_output_trace_code_graph_{graph_id}.pb + ms_output_trace_code_graph_{graph_id}.ir + - execution_order/ + ms_execution_order_graph_{graph_id}.csv + ms_global_execution_order_graph_{graph_id}.csv +``` + +- `path`:`data_dump.json`配置文件中设置的绝对路径。 +- `rank_id`: 逻辑卡号。 +- `net_name`:`data_dump.json`配置文件中设置的网络名称。 +- `graph_id`:训练的图标号。 +- `iteration_id`:训练的轮次。 +- `op_type`:算子类型。 +- `op_name`:算子名称。 +- `task_id`:任务标号。 +- `stream_id`:流标号。 +- `timestamp`:时间戳。 +- `input_output_index`:输入或输出标号,例如`output.0`表示该文件是该算子的第1个输出Tensor的数据。 +- `slot`:slot标号。 +- `format`: 数据格式。 +- `data_id`: 常量数据标号。 + +对于多图网络,由于存在控制流,某些子图可能不会被执行,Dump只保存执行过的节点,所以graphs目录下`.pb`文件名中的{graph_id}并不一定在{net_name}下存在对应的{graph_id}目录。 + +只当`saved_data`为"statistic"或者"full"时,才会生成`statistic.csv`,当`saved_data`为"tensor"或者"full"时,才会生成`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`命名的完整张量信息。 + +只当`save_kernel_args`为`True`时,才会生成`{op_type}.{op_name}.json`,保存算子的初始化信息。 + +CPU/GPU模式下Dump生成的数据文件是后缀名为`.npy`的文件,文件命名格式为: + +```text +{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy +``` + +CPU/GPU模式下Dump生成的常量数据文件与其他数据文件格式相同,而所有常量数据的{op_type},{task_id},{stream_id},{input_output_index},{slot},{format}不变。 + +```text +Parameter.data-{data_id}.0.0.{timestamp}.output.0.DefaultFormat.npy +``` + +{iteration_id}目录下也可能会保存Parameter开头的文件(weight, bias等参数会保存成Parameter开头的文件 + +可以用Numpy的`numpy.load`接口读取数据。 + +CPU/GPU模式下Dump生成的统计数据文件名为`statistic.csv`,此文件存有相同目录下所有落盘张量(文件名为`{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}.{input_output_index}.{slot}.{format}.npy`)的统计信息。每个张量一行,每行有张量的 Op Type,Op Name,Task ID,Stream ID,Timestamp,IO,Slot,Data Size,Data Type,Shape以及用户配置的统计信息项。注意,如果用Excel来打开此文件,数据可能无法正确显示。请用`vi`、`cat`等命令查看,或者使用Excel自文本导入csv查看。 + +CPU/GPU模式下Dump生成的最终执行图文件后缀名分别为`.pb`和`.ir`,文件命名格式为: + +```text +ms_output_trace_code_graph_{graph_id}.pb +ms_output_trace_code_graph_{graph_id}.ir +``` + +其中以`.ir`为后缀的文件可以通过`vi`命令打开查看。 + +CPU/GPU模式下Dump生成的节点执行序文件后缀名为`.csv`,文件命名格式为: + +```text +ms_execution_order_graph_{graph_id}.csv +``` + +图执行历史文件的后缀为`.csv`,文件名格式为: + +```text +ms_global_execution_order_graph_{graph_id}.csv +``` + +此文件记录该图在训练过程中的执行轮次历史。图编译过程中,一张根图可能产生多张子图,但子图与根图具有相同的执行轮次历史。故与图执行序文件不同,此处仅保存根图的图执行历史文件。 + +`.dump_metadata`记录了训练的原信息,其中`data_dump.json`保存了用户设置的dump配置。 + +### 数据分析样例 + +为了更好地展示使用Dump来保存数据并分析数据的流程,我们提供了一套[完整样例脚本](https://gitee.com/mindspore/docs/tree/master/docs/sample_code/dump) ,CPU/GPU模式下Dump只需要执行 `bash run_sync_dump.sh`。 + +在通过Dump功能将脚本对应的图保存到磁盘上后,会产生最终执行图文件`ms_output_trace_code_graph_{graph_id}.ir`。该文件中保存了对应的图中每个算子的堆栈信息,记录了算子对应的生成脚本。 + +以[AlexNet脚本](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/dump/train_alexnet.py)为例 : + +```python +... +def conv(in_channels, out_channels, kernel_size, stride=1, padding=0, pad_mode="valid"): + weight = weight_variable() + return nn.Conv2d(in_channels, out_channels, + kernel_size=kernel_size, stride=stride, padding=padding, + weight_init=weight, has_bias=False, pad_mode=pad_mode) + + +def fc_with_initialize(input_channels, out_channels): + weight = weight_variable() + bias = weight_variable() + return nn.Dense(input_channels, out_channels, weight, bias) + + +def weight_variable(): + return TruncatedNormal(0.02) + + +class AlexNet(nn.Cell): + """ + Alexnet + """ + + def __init__(self, num_classes=10, channel=3): + super(AlexNet, self).__init__() + self.conv1 = conv(channel, 96, 11, stride=4) + self.conv2 = conv(96, 256, 5, pad_mode="same") + self.conv3 = conv(256, 384, 3, pad_mode="same") + self.conv4 = conv(384, 384, 3, pad_mode="same") + self.conv5 = conv(384, 256, 3, pad_mode="same") + self.relu = nn.ReLU() + self.max_pool2d = nn.MaxPool2d(kernel_size=3, stride=2) + self.flatten = nn.Flatten() + self.fc1 = fc_with_initialize(6 * 6 * 256, 4096) + self.fc2 = fc_with_initialize(4096, 4096) + self.fc3 = fc_with_initialize(4096, num_classes) + + def construct(self, x): + """ + The construct function. + + Args: + x(int): Input of the network. + + Returns: + Tensor, the output of the network. + """ + x = self.conv1(x) + x = self.relu(x) + x = self.max_pool2d(x) + x = self.conv2(x) + x = self.relu(x) + x = self.max_pool2d(x) + x = self.conv3(x) + x = self.relu(x) + x = self.conv4(x) + x = self.relu(x) + x = self.conv5(x) + x = self.relu(x) + x = self.max_pool2d(x) + x = self.flatten(x) + x = self.fc1(x) + x = self.relu(x) + x = self.fc2(x) + x = self.relu(x) + x = self.fc3(x) + return x +... +``` + +如果用户想查看脚本中第175行的代码: + +```python +x = self.conv3(x) +``` + +执行完训练网络后,可以从最终执行图(`ms_output_trace_code_graph_{graph_id}.ir`文件)中查找到该行代码所对应的多个算子信息,例如Conv2D-op12对应的文件内容如下所示: + +```text + %20(equivoutput) = Conv2D(%17, %19) {instance name: conv2d} primitive_attrs: {IsFeatureMapInputList: (0), kernel_size: (3, 3), mode: 1, out_channel: 384, input_names: [ +x, w], pri_format: NC1HWC0, pad: (0, 0, 0, 0), visited: true, pad_mod: same, format: NCHW, pad_list: (1, 1, 1, 1), precision_flag: reduce, groups: 1, output_used_num: +(1), stream_id: 0, stride: (1, 1, 1, 1), group: 1, dilation: (1, 1, 1, 1), output_names: [output], IsFeatureMapOutput: true, ms_function_graph: true} + : (, ) -> () + : (, ) -> () + : full_name_with_scope: (Default/network-WithLossCell/_backbone-AlexNet/conv3-Conv2d/Conv2D-op12) + ... + # In file ./tain_alexnet.py(175)/ x = self.conv3(x)/ + ... +``` + +以上所示文件内容的各行所表示的含义如下: + +- 算子在Host侧(第一行)和Device侧(第二行,有些算子可能不存在)的输入输出情况。从执行图可知,该算子有两个输入(箭头左侧),一个输出(箭头右侧)。 + + ```text + : (, ) -> () + : (, ) -> () + ``` + +- 算子名称。从执行图可知,该算子在最终执行图中的完整名称为`Default/network-WithLossCell/_backbone-AlexNet/conv3-Conv2d/Conv2D-op12`。 + + ```text + : (Default/network-WithLossCell/_backbone-AlexNet/conv3-Conv2d/Conv2D-op12) + ``` + +- 算子对应的训练脚本代码。通过搜索要查询的训练脚本代码,可以找到多个匹配的算子。 + + ```text + # In file {Absolute path of model_zoo}/official/cv/alexnet/src/alexnet.py(175)/ x = self.conv3(x)/ + ``` + +通过算子名称和输入输出信息,可以查找到唯一对应的Tensor数据文件。比如,若要查看Conv2D-op12算子的第1个输出数据对应的Dump文件,可获取以下信息: + +- `operator_name`:`Conv2D-op12`。 + +- `input_output_index`:`output.0`表示该文件是该算子的第1个输出Tensor的数据。 + +- `slot`:0,该算子的输出只有一个slot。 + +在Dump保存的数据对象文件目录下搜索到相应的文件名: +`Conv2D.Conv2D-op12.0.0.1623124369613540.output.0.DefaultFormat.npy`。 + +还原数据的时候,通过执行: + +```python +import numpy +numpy.load("Conv2D.Conv2D-op12.0.0.1623124369613540.output.0.DefaultFormat.npy") +``` + +生成numpy.array数据。 + + ## 其它说明 @@ -731,7 +958,7 @@ Dump生成的原始数据文件也可以使用MindSpore Insight的数据解析 在一些特殊场景下,可在开发指导下应用GE dump模式。 -如果要使能GE dump,除了配置环境变量MINDSPORE_DUMP_CONFIG之外,还需要另外配置环境变量ENABLE_MS_GE_DUMP=1,该方式仅支持图编译等级为O2的场景。配置文件的格式和异步Dump相同,op_debug_mode字段不支持配置为4,其余各项参数和异步Dump相同。 +如果要使能GE dump,除了配置环境变量MINDSPORE_DUMP_CONFIG之外,还需要另外配置环境变量ENABLE_MS_GE_DUMP=1,该方式仅支持图编译等级为O2的场景。配置文件的格式和Ascend O2模式下Dump相同,op_debug_mode字段不支持配置为4,其余各项参数和Ascend O2模式下Dump相同。 ```bash export ENABLE_MS_GE_DUMP=1 @@ -752,7 +979,7 @@ GE dump的目录结构如下: mapping.csv ``` -其中, `path`、`time`、`device_id`、`model_name`、`model_id`、`iteration_id`、`op_type`、`op_name`、`task_id`、`stream_id`、`timestamp`的含义和异步Dump的相同。 +其中, `path`、`time`、`device_id`、`model_name`、`model_id`、`iteration_id`、`op_type`、`op_name`、`task_id`、`stream_id`、`timestamp`的含义和Ascend O2模式下Dump的相同。 该方式在将来会被废弃,不推荐使用。 @@ -762,4 +989,4 @@ GE dump的目录结构如下: - Dump仅支持bool、int、int8、in16、int32、int64、uint、uint8、uint16、uint32、uint64、float、float16、float32、float64、bfloat16、double、complex64、complex128类型数据的保存。 - complex64和complex128仅支持保存为npy文件,不支持保存为统计值信息。 - Print算子内部有一个输入参数为string类型,string类型不属于Dump支持的数据类型,所以在脚本中包含Print算子时,会有错误日志,这不会影响其它类型数据的保存。 -- 使能异步Dump时,不支持同时使用set_context(ascend_config={"exception_dump": "2")配置轻量异常dump; 支持同时使用set_context(ascend_config={"exception_dump": "1")配置全量异常dump。 +- 使能Ascend O2模式下Dump时,不支持同时使用set_context(ascend_config={"exception_dump": "2")配置轻量异常dump; 支持同时使用set_context(ascend_config={"exception_dump": "1")配置全量异常dump。 -- Gitee