单算子dump方法

采集dump数据

当前适配昇腾AI处理器的PyTorch通过torch_npu.npu中的init_dump()set_dump()finalize_dump()接口来进行算子dump数据的采集。首先init_dump()会进行初始化dump配置,然后通过set_dump()接口通过传入配置文件来配置dump参数,最后通过finalize_dump()来结束dump。以下以Add算子为例,介绍算子dump数据采集方法。

样例脚本如下:

import torch
import torch_npu
torch_npu.npu.set_device("npu:0")
torch_npu.npu.init_dump()
torch_npu.npu.set_dump("/home/HwHiAiUser/dump.json")   # "/home/HwHiAiUser/dump.json"为配置文件路径,用户自行配置
a = torch.tensor([2, 2]).to("npu:0")
a.add_(1)
torch_npu.npu.finalize_dump()

其中dump.json配置方法如下:

{
 "dump":
 {
         "dump_list":[],
         "dump_path":"/home/HwHiAiUser/dump/output",
         "dump_mode":"all",
         "dump_op_switch":"on"
 }
}
表1 参数说明

字段名

说明

dump_list

待dump数据的算子模型。为空,无需配置。

dump_path

dump数据文件存储到运行环境的目录,支持配置绝对路径或相对路径:

  • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
  • 相对路径配置直接以目录名开始,例如:output。

例如:dump_path配置为/home/HwHiAiUser/output,则dump数据文件存储到运行环境的/home/HwHiAiUser/output目录下。

dump_mode

dump数据模式,配置如下:

  • output:dump算子的输出数据,默认取值output。
  • input:dump算子的输入数据。
  • all:dump算子的输入、输出数据。

dump_op_switch

单算子模型dump数据开关,配置如下:

  • off:关闭单算子模型dump,默认取值off。
  • on:开启单算子模型dump。

查看溢出数据

采集的dump数据会在{dump_path}/{time}/{deviceid}/{model_id}/{data_index}目录下生成,例如“/home/HwHiAiUser/output/20200808163566/0/0”。

存放路径及文件命名规则:

解析溢出算子的dump文件

  1. 进入解析脚本所在路径。

    cd  ${CANN_INSTALL_PATH}/latest/toolkit/tools/operator_cmp/compare

  2. 执行msaccucmp.py脚本,转换dump文件为numpy文件。

    python3 msaccucmp.py convert -d dump_file [-out output] [-f format -s shape] [-o output_tensor] [-i input_tensor] [-v version] [-t type]
    表2 参数说明

    参数名

    描述

    是否必选

    -d

    --dump_file

    昇腾AI处理器生成的dump文件。

    支持指定单个文件;单个路径;同时指定多个文件,文件名用逗号隔开,例如-d /{PATH}/dump_file1,/{PATH}/dump_file2。

    -out

    --output

    转换后的数据存放目录,默认为当前路径。

    -f

    --format

    • 命令行包含-f参数,表示进行format转换,指定转换后数据format。如果dump文件包含original_shape字段,则会根据original_shape对数据进行切片。
    • 命令行不包含-f参数,表示进行dump文件解析。

    -s

    --shape

    format转换需要的shape,当前仅FRACTAL_NZ转换需要配置该参数,格式为([0-9]+,)+[0-9]+,每个数字必须大于0。配置-f时有效。

    -o

    --output_tensor

    转换指定index的output数据,与-i互斥。配置-f时有效。

    当-o与-i均未配置时,默认转换所有的input与output。

    -i

    --input_tensor

    转换指定index的input数据,与-o互斥。配置-f时有效。

    -v

    --version

    dump文件类型,1代表protobuf序列化后的数据文件,2代表自定义格式的数据文件。默认值为2。

    -t

    --type

    输出文件的类型。取值为:

    • npy:输出文件保存为numpy格式。
    • msnpy:输出文件保存为numpy格式,一般用于MindSpore场景。
    • bin:输出文件保存为binary格式。

    默认值为npy。

  3. 调用Python,转换numpy文件为txt文件。

    import numpy as np
    a = np.load("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.npy")
    b = a.flatten()
    np.savetxt("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.txt", b)