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


    一、问题背景信息

    开发人员在调试模型时可能会遇到一些异常情况,比如性能、精度异常,需要分析训练过程中特定Cell或算子的输入和输出数据。而在使用异步Dump在Graph模式调试中提供了指定Cell或算子的dump数据功能,即“按cell粒度dump”。

    二、开启按Cell粒度Dump功能流程

    2.1、示例代码

    以下代码对自定义网络中卷积层使用dump数据功能。

    示例代码如下:

    1. import mindspore
    2. import mindspore.nn as nn
    3. import numpy as npfrom mindspore
    4. import Tensor, set_dump from mindspore
    5. import contextimport mindspore.ops as ops
    6. context.set_context(device_target="Ascend", mode=context.GRAPH_MODE)
    7. class PrintDemo(nn.Cell):
    8.         def __init__(self):
    9.             super(PrintDemo, self).__init__()
    10.             self.abs = ops.Abs()
    11.         def construct(self, input_pra):
    12.             x = self.abs(input_pra)
    13.             x = x.sum()
    14.             return x
    15. def test():
    16.     input_x = Tensor(np.array([-1.0, 1.0, 0.0]), mindspore.float32)
    17.     input_pra = Tensor(input_x)
    18.     net = PrintDemo()
    19.     set_dump(net.abs, enabled=True)
    20.     net(input_pra)
    21.     return net(input_pra)
    22. print(test())

    2.2、创建配置文件data_dump.json

    “按按Cell粒度Dump”是异步Dump下的一个子功能;通过修改data_dump.json文件中dump_mode 的值来dump特定的算子数据。

    1. {
    2.     "common_dump_settings": {
    3.         "dump_mode": 2,
    4.         "path": "/home/ma-user/xxx/dump_data_save/",
    5.         "net_name": "ResNet50",
    6.         "iteration": "1|3",
    7.         "saved_data": "tensor",
    8.         "input_output": 0,
    9.         "kernels": ["Default/Conv-op12"],
    10.         "support_device": [0,1,2,3,4,5,6,7],
    11.         "op_debug_mode": 0,
    12.         "file_format": "npy"
    13.     }
    14. }
    • 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文件:

    1. import numpy
    2. 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加载后的输出为:

  • 相关阅读:
    Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT
    Android 13.0 无源码app增加授予相关权限
    vue2全家桶-vuex
    C++中sort()函数的greater<int>()参数
    unity工程参照以及评价
    django基于python的水果销售系统--python-计算机毕业设计
    专有网络VPC 是什么
    云原生时代:从 Jenkins 到 Argo Workflows,构建高效 CI Pipeline
    android studio如何查看程序打印的文字
    加上boot程序,FreeRTOS就跑不起来了
  • 原文地址:https://blog.csdn.net/Kenji_Shinji/article/details/127634804