一、问题背景信息
开发人员在调试模型时可能会遇到一些异常情况,比如性能、精度异常,需要分析训练过程中特定Cell或算子的输入和输出数据。而在使用异步Dump在Graph模式调试中提供了指定Cell或算子的dump数据功能,即“按cell粒度dump”。
二、开启按Cell粒度Dump功能流程
2.1、示例代码
以下代码对自定义网络中卷积层使用dump数据功能。
示例代码如下:
import mindspore
import mindspore.nn as nn
import numpy as npfrom mindspore
import Tensor, set_dump from mindspore
import contextimport mindspore.ops as ops
context.set_context(device_target="Ascend", mode=context.GRAPH_MODE)
class PrintDemo(nn.Cell):
def __init__(self):
super(PrintDemo, self).__init__()
self.abs = ops.Abs()
def construct(self, input_pra):
x = self.abs(input_pra)
x = x.sum()
return x
def test():
input_x = Tensor(np.array([-1.0, 1.0, 0.0]), mindspore.float32)
input_pra = Tensor(input_x)
net = PrintDemo()
set_dump(net.abs, enabled=True)
net(input_pra)
return net(input_pra)
print(test())
2.2、创建配置文件data_dump.json
“按按Cell粒度Dump”是异步Dump下的一个子功能;通过修改data_dump.json文件中dump_mode 的值来dump特定的算子数据。
{
"common_dump_settings": {
"dump_mode": 2,
"path": "/home/ma-user/xxx/dump_data_save/",
"net_name": "ResNet50",
"iteration": "1|3",
"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:设置为2,表示Dump脚本中通过set_dump指定的算子数据。
- path:Dump保存数据的绝对路径。
- net_name:自定义的网络名称,例如:”ResNet50”。
- iteration:指定需要Dump的迭代。类型为str,用“|”分离要保存的不同区间的step的数据。如”0|5-8|100-120”表示Dump第1个,第6个到第9个, 第101个到第121个step的数据。指定“all”,表示Dump所有迭代的数据。
- saved_data: 此处取默认取值为”tensor”即可。
- input_output:设置成0,表示Dump出算子的输入和算子的输出;设置成1,表示Dump出算子的输入;设置成2,表示Dump出算子的输出。
- kernels:算子的名称列表。
- support_device:支持的设备,默认设置成0到7即可。
- op_debug_mode:该属性用于算子溢出调试,在这里设置0即可;
- file_format: dump数据的文件类型,为了处理方便建议设置为npy。
2.3、设置环境变量
export MINDSPORE_DUMP_CONFIG={Absolute path of data_dump.json}
- 在网络脚本执行前,设置好环境变量;否则按Cell粒度Dump功能将不生效。
- 在分布式场景下,该环境变量需要在调用mindspore.communication.init之前配置。
2.4、使用加载工具解析input.0.npy文件。
利用此段代码进行加载.npy文件:
import numpy
numpy.load("/path/Abs.Abs-op0.2.22.1642152199130556.input.0.ND.npy")
此时该算子的输入文件Abs.Abs-op0.2.22.1642152199130556.input.0.ND.npy加载后的输出为:
该算子的输出文件Abs.Abs-op0.2.22.1642152199130556.output.0.ND.npy加载后的输出为: