【MindSpore易点通】常用定位方法之按Cell粒度Dump

一、问题背景信息

开发人员在调试模型时可能会遇到一些异常情况,比如性能、精度异常,需要分析训练过程中特定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加载后的输出为:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值