mindspore-Dump功能调试

  1. Dump功能简介
  2. 同步Dump
  3. 异步Dump

1. Dump功能简介

对于静态图模式(GRAPH),Dump功能可以将模型训练中的图、算子的输入输出数据保存到文件

对于动态图模式(PYNATIVE),Dump功能仅支持Ascend后端的溢出检测能力,要看其他的可以直接调用print

Dump可以协助定位,可以比对标杆相同位置算子的输出输出数据,来定位模型的精度问题

2. 同步Dump

1. Ascend开启同步Dump,dump的时候自动关闭内存复用,有时候没dump出现误差(报错),dump的时候误差符合要求或报错消失,就要考虑是内存复用的影响。

2.同步Dump目前支持Ascend、GPU和CPU上的图模式,暂不支持PyNative模式(pynative直接print就可以)

2.1开启同步Dump操作步骤

1.创建json文件

2.设置环境变量 MINDSPORE_DUMP_CONFIG,变量值为json绝对路径

3.启动训练脚本,生成的数据文件保存在json文件中指定的位置

以下是json文件

1.dump_mode:0,表示Dump出该网络中的所有算子数据

2. iteration:”all”表示Dump所有迭代的数据

3. input_output:0表示Dump出算子的输入和算子的输出

设置成1,表示Dump出算子的输入;设置成2,表示Dump出算子的输出

4. enable:设置成true,表示开启同步Dump

设置环境变量

cke_77200.png

脚本执行完成后,dump数据会在/tmp/dumpdata下面产生, 后缀是npy, 可以直接用numpy.load读取

3. 异步Dump

大型网络(如Bert Large)使用同步Dump时会导致内存溢出,MindSpore通过异步Dump提供了大型网络的调试能力

3.1 异步Dump操作步骤

1.创建json文件

2.设置环境变量 MINDSPORE_DUMP_CONFIG,变量值为json绝对路径

3.启动训练脚本,生成的数据文件保存在json文件中指定的位置

4.若是设置file_format为bin,需要使用run包提供的msaccucmp.py解析dump出来的文件

json

其他配置都和同步的基本一致,file_format若是不设置则取默认值为bin, 保存的文件为bin格式,所以当前保存的dump文件的格式为bin

解析文件:

python /usr/local/Ascend/latest/toolkit/tools/operator_cmp/compare/msaccucmp.py convert -d /tmp/async_dump/test_async_dump/rank_0/test/0/0/ -out /home/dumpdata/ -f NCHW

原始文件:

cke_250819.png

解析后的文件

cke_277798.png