# mindspore-Dump功能调试

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend

软件环境: MindSpore 版本: 2.3

执行模式（静态图/动态图）： 不限

Python 版本: 3.7.6

操作系统平台: linux

**2. Dump功能简介**

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

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

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

**3. 同步Dump**

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

同步Dump目前支持Ascend、GPU和CPU上的图模式，暂不支持PyNative模式（pynative直接print就可以）

开启同步Dump操作步骤

创建json文件

设置环境变量 MINDSPORE\_DUMP\_CONFIG，变量值为json绝对路径

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

以下是json文件

![](figures/zh-cn_image_0000002136165089.png)

dump\_mode:0，表示Dump出该网络中的所有算子数据

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

input\_output:0表示Dump出算子的输入和算子的输出设置成1，表示Dump出算子的输入；设置成2，表示Dump出算子的输出

enable:设置成true，表示开启同步Dump

设置环境变量

![](figures/zh-cn_image_0000002100406860.png)

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

![](figures/zh-cn_image_0000002136165785.png)

**4. 异步Dump**

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

异步Dump操作步骤

创建json文件

设置环境变量 MINDSPORE\_DUMP\_CONFIG，变量值为json绝对路径

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

若是设置file\_format为bin，需要使用run包提供的msaccucmp.py解析dump出来的文件

json

![](figures/zh-cn_image_0000002100567312.png)

其他配置都和同步的基本一致，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
```

原始文件：

![](figures/zh-cn_image_0000002136126857.png)

解析后的文件

![](figures/zh-cn_image_0000002136166545.png)

