算子输入输出dump功能(图模式)
功能简介
Graph模式下,dump Ascend IR计算图上算子执行时的输入、输出数据,用于后续问题定位和分析,如算子运行性能或精度问题。

使用约束
本功能仅支持max-autotune模式。
使用方法
该功能通过torchair.get_npu_backend中compiler_config配置,示例如下,仅供参考不支持直接拷贝运行,参数介绍参见表1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import torch_npu, torchair config = torchair.CompilerConfig() # data dump开关:[必选] config.dump_config.enable_dump = True # dump类型:[可选],all代表dump所有数据 config.dump_config.dump_mode = "all" # dump路径:[可选],默认为当前执行目录 config.dump_config.dump_path = '/home/dump' # 量化data dump开关:[可选],是否采集量化前的dump数据 config.dump_config.quant_dumpable = True # 保存dump的步数,否则每一步都会保存:[可选] config.dump_config.dump_step = "0|1" # 指定需要dump的算子:[可选] config.dump_config.dump_layer = "Add_1Mul_1 Add2" # 指定算子dump类型:[可选],stats表示dump输出csv文件 config.dump_config.dump_data = "stats" # dump配置文件的路径:[可选],通过配置文件使能data dump。不建议与其他options一起使用,否则此配置将失效。 config.dump_config.dump_config_path = "/home/dump_config.json" npu_backend= torchair.get_npu_backend(compiler_config=config) opt_model = torch.compile(model, backend=npu_backend) |
参数名 |
说明 |
|---|---|
enable_dump |
是否开启数据dump功能,bool类型。
|
dump_mode |
dump数据模式,用于指定dump算子的输入还是输出数据,字符串类型。
|
dump_path |
dump数据的存放路径,字符串类型,默认值为当前执行路径。支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。
说明:
注意,请确保该参数指定的路径确实存在,并且运行用户具有读、写操作权限。 |
quant_dumpable |
如果是量化后的网络,可通过此参数控制是否采集量化前的dump数据,bool类型。
|
dump_step |
指定采集哪些迭代的dump数据。 字符串类型,默认值None,表示所有迭代都会产生dump数据。 多个迭代用“|”分割,例如:"0|5|10";也可以用"-"指定迭代范围,例如:"0|3-5|10"。 |
dump_layer |
指定需要dump的算子名,多个算子名之间使用空格分隔,形如"Add1_in_0 Add2 Mul2"。 算子名获取方法: 通过DUMP_GE_GRAPH环境变量dump整个流程各阶段的图描述信息,建议取3(精简版dump,即只显示节点关系),详细介绍参见《CANN 环境变量参考》中的“DUMP_GE_GRAPH”章节。 export DUMP_GE_GRAPH=3 设置环境变量后,在当前执行路径下生成ge_proto*.txt,示例如下,op中name字段为算子名。
graph {
name: "online_0"
input: "Add1_in_0:0"
input: "Add1_in_1:0"
op {
name: "Add1_in_0"
type: "Data"
input: ""
attr {
key: "OUTPUT_IS_VAR"
value {
list {
b: false
val_type: VT_LIST_BOOL
}
}
}
......
}
op{
name: "Add2"
type: "Data"
......
}
}
说明:
若指定的算子其输入涉及data算子,会同时将data算子信息dump出来。 |
dump_data |
指定算子dump内容类型,字符串类型。
通常dump数据量太大并且耗时长,可以先dump算子统计数据,根据统计数据识别可能异常的算子,再dump算子数据。 |
dump_config_path(推荐) |
指定dump配置json文件路径,通过json文件使能dump,字符串类型,无默认值。支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。目前支持模型Dump/单算子Dump、溢出算子Dump、算子Dump Watch模式等功能,使用方法参见dump_config_path配置项说明。 推荐本方式配置dump,上述功能(除了enable_dump)均能通过json文件配置,并且后续将不再演进。 说明:
|
dump_config_path配置项说明
通过表中“dump_config_path”参数指定dump配置json文件路径,基于json里的配置使能各种场景dump功能。
- 模型Dump/单算子Dump配置:用于导出模型中每一层算子/单个算子的输入和输出数据,可以指定模型Dump或算子Dump进行比对,定位精度问题。
- 模型Dump配置示例如下:
{ "dump":{ "dump_list":[ { "model_name":"ResNet-101" }, { "model_name":"ResNet-50", "layer":[ "conv1conv1_relu", "res2a_branch2ares2a_branch2a_relu", "res2a_branch1", "pool1" ] } ], "dump_path":"/home/output", "dump_mode":"output", "dump_op_switch":"off", "dump_data":"tensor" } } - 单算子Dump配置示例如下:
{ "dump":{ "dump_path":"/home/output", "dump_list":[], "dump_op_switch":"on", "dump_data":"tensor" } }
配置说明如下:
- 模型Dump配置示例如下:
- 溢出算子Dump配置:
用于导出模型中溢出算子的输入和输出数据,可用于分析溢出原因,定位精度问题。
通过dump_debug参数置为on表示开启溢出算子配置,示例如下:
{ "dump":{ "dump_path":"output", "dump_debug":"on" } } - 算子Dump Watch模式配置:
用于开启指定算子输出数据的观察模式,在定位部分算子精度问题且已排除算子本身的计算问题后,若怀疑被其它算子踩踏内存导致精度问题,可开启Dump Watch模式。
将dump_scene参数设置为watcher,开启算子Dump Watch模式,配置文件中的示例内容如下,配置效果为:(1)当执行完A算子、B算子时,会把C算子和D算子的输出Dump出来;(2)当执行完C算子、D算子时,也会把C算子和D算子的输出Dump出来。将(1)、(2)中的C算子、D算子的Dump文件进行比较,用于排查A算子、B算子是否会踩踏C算子、D算子的输出内存。
{ "dump":{ "dump_list":[ { "layer":["A", "B"], "watcher_nodes":["C", "D"] } ], "dump_path":"/home/", "dump_mode":"output", "dump_scene":"watcher" } }配置说明:
- 若开启算子Dump Watch模式,则不支持同时开启溢出算子Dump(配置dump_debug参数)或开启单算子/模型Dump(配置dump_op_switch参数),否则报错。
- 在dump_list中,通过layer参数配置可能踩踏其它算子内存的算子名称,通过watcher_nodes参数配置可能被其它算子踩踏输出内存导致精度有问题的算子名称。
- 若不指定layer,则模型内所有支持Dump的算子在执行后,都会将watcher_nodes中配置的算子的输出Dump出来。
- layer和watcher_node处配置的算子都必须是静态图、静态子图中的算子,否则不生效。
- 若layer和watcher_node处配置的算子名称相同,或者layer处配置的是集合通信类算子(算子类型以Hcom开头,例如HcomAllReduce),则只导出watcher_node中所配置算子的dump文件。
- 对于融合算子,watcher_node处配置的算子名称必须是融合后的算子名称,若配置融合前的算子名称,则不导出dump文件。
- dump_list内暂不支持配置model_name。
- 开启算子Dump Watch模式,则dump_path必须配置,表示导出dump文件的存储路径。
此处收集的dump文件无法通过文本工具直接查看其内容,若需查看dump文件内容,先将dump文件转换为numpy格式文件后,再通过Python查看numpy格式文件,详细转换步骤请参见《CANN 精度调试工具用户指南》中“扩展功能 > 查看dump数据文件”章节。
dump_path支持配置绝对路径或相对路径:- 绝对路径配置以“/”开头,例如:/home。
- 相对路径配置直接以目录名开始,例如:output。
- 通过dump_mode参数控制导出watcher_nodes中所配置算子的哪部分数据,当前仅支持配置为output。
非dump_config_path配置项说明
通过表中“非dump_config_path”参数使能各种场景dump功能。dump结果文件存储在dump_path参数指定的目录${dump_path}/$(worldsize_global_rank)/${time}/${device_id}/${model_name}/${model_id}/${data_index}。若${dump_path}配置为/home/dump,结果目录样例为“/home/dump/worldsize1_global_rank0/2024112145738/0/ge_default_20200808163719_121/1/0”。
- ${dump_path}:由dump_path参数指定,默认为脚本所在路径。
- ${worldsize_global_rank}:表示集合通信相关的world_size以及global_rank信息,若只涉及单卡则表示为“worldsize1_global_rank0”。
- ${time}:dump数据文件落盘的时间,格式为YYYYMMDDHHMMSS。
- ${device_id}:设备ID。
- ${model_name}:子图名称。可能存在多个文件夹,dump数据取计算图名称对应目录下的数据。如果${model_name}出现了“.”、“/”、“\”、空格时,转换为下划线表示。
- ${model_id}:子图ID号。
- ${data_index}:迭代数,用于保存对应迭代的dump数据。如果指定了dump_step,则data_index和dump_step一致;如果不指定dump_step,则data_index一般从0开始计数,每dump一个迭代的数据,序号递增1。
