算子data dump功能
功能简介
本功能可以Dump Ascend IR图执行时的算子输入、输出数据,用于后续问题定位和分析,如算子运行性能或精度问题。
说明
本功能与图结构dump功能是不同的功能,二者可以单独使用,也可共同用于用户定位精度问题。
图 1 算子data dump示意图

使用约束
- 本功能仅适用于GE图模式场景。
- 参数若涉及文件路径配置,请确保路径真实存在,并且具有读取和写入权限。
使用方法
该功能通过torchair.get_npu_backend中compiler_config配置,示例如下,仅供参考不支持直接拷贝运行,参数说明参见下表。
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类型。 False(默认值):不开启数据dump。 True:开启数据dump。 |
| dump_mode | dump数据模式,用于指定dump算子的输入还是输出数据,字符串类型。 input:仅dump算子输入数据。 output:仅dump算子输出数据。 all(默认值):同时dump算子输入和输出数据。 |
| dump_path | dump数据的存放路径,字符串类型,默认值为当前执行路径。支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。 相对路径配置直接以目录名开始,例如:output。 |
| quant_dumpable | 如果是量化后的网络,可通过此参数控制是否采集量化前的dump数据,bool类型。 False(默认值):不采集量化前的dump数据。因为图编译过程中可能优化量化前的输入/输出,此时无法获取量化前的dump数据。 True:开启此配置后,可确保能够采集量化前的dump数据。 |
| dump_step | 指定采集哪些迭代的dump数据。字符串类型,默认值None,表示所有迭代都会产生dump数据。 多个迭代用 |分割,例如:0|5|10;也可以用"-"指定迭代范围,例如:0|3-5|10。 |
| dump_layer | 指定需要dump的算子名,多个算子名之间使用空格分隔,形如"Add1_in_0 Add2 Mul2"。算子名获取方法参见dump_layer配置项说明。若指定的算子其输入涉及data算子,会同时将data算子信息dump出来。 |
| dump_data | 指定算子dump内容类型,字符串类型。 tensor(默认值):dump算子数据。 stats:dump算子统计数据,保存结果为csv格式,文件中包含算子名称、输入/输出的数据类型、最大值、最小值等。 通常dump数据量太大并且耗时长,可以先dump算子统计数据,根据统计数据识别可能异常的算子,再dump算子数据。 |
| dump_config_path**(推荐)** | 指定dump配置文件(json格式)路径,字符串类型,无默认值。支持绝对/相对路径(即相对执行命令时的当前路径)。上述dump options(除了enable_dump)均能通过json文件配置,推荐json方式dump,其余配置后续不再演进。功能模式支持模型Dump/单算子Dump、溢出算子Dump、算子Dump Watch模式等,具体使用方法和约束参见dump_config_path配置项说明。 |
对于表1提供的dump options,TorchAir提供了更灵活的dump算子范围。通过data_dump接口实现,支持与表中其他所有dump options配套使用。
说明
- 使用本接口时必须以with语句块形式调用,语句块内的算子信息均能被dump,具体参见下方调用示例。
- 本接口与dump layer配置项指定的算子范围均能生效,dump算子范围为两者并集,产物目录与dump layer一致。
- 本接口支持与上述所有dump配置项配合使用,产物目录基本一致。
import torch
import torchair
import logging
from torchair import logger
logger.setLevel(logging.DEBUG)
class Network(torch.nn.Module):
def __init__(self):
super().__init__()
def forward(self, data0, data1):
add_01 = torch.add(data0, data1)
with torchair.scope.data_dump():
sub_01 = torch.sub(data0, data1)
return add_01, sub_01
input0 = torch.randn(2, 2, dtype=torch.float16).npu()
input1 = torch.randn(2, 2, dtype=torch.float16).npu()
config = torchair.CompilerConfig()
config.dump_config.enable_dump = True
config.dump_config.dump_layer = "Add"
npu_backend = torchair.get_npu_backend(compiler_config=config)
npu_mode = Network().npu()
npu_mode = torch.compile(npu_mode, fullgraph=True, backend=npu_backend, dynamic=False)
npu_out = npu_mode(input0, input1)
dump_layer配置项说明
通过表中“dump_layer”参数dump指定算子信息,算子名获取方法如下:
-
通过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" ...... } }
dump_config_path配置项说明
通过表中“dump_config_path”参数指定dump配置json文件路径,基于json的配置启用各种场景dump功能。
-
使用说明:
- 同时配置dump_config_path和表1提供的其他dump options时,dump options有较高的配置优先级。不建议同时使用。
- 注意torch_npu默认已开启exception类信息的dump功能(即dump_scene参数,异常算子Dump配置) ,通过本功能配置的exception dump不会生效。
- 对于大模型场景,通常dump数据量太大并且耗时长,建议dump_data配置为“stats”,开启算子统计功能,根据统计数据识别可能异常的算子后,再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" } }
配置说明如下:
- json文件支持配置的参数介绍请参考《CANN 精度调试工具用户指南》中“准备离线模型dump数据文件”章节下acl.json文件格式说明表。
- 若开启模型Dump/单算子Dump配置,则dump_path必须配置,表示导出dump文件的存储路径。关于dump结果文件介绍请参考《CANN 精度调试工具用户指南》中“准备离线模型dump数据文件”章节下dump数据文件路径说明表。
-
-
溢出算子Dump配置:
用于导出模型中溢出算子的输入和输出数据,可用于分析溢出原因,定位精度问题。
通过dump_debug参数置为on表示开启溢出算子配置,示例如下:
{ "dump":{ "dump_path":"output", "dump_debug":"on" } }配置说明如下:
-
不配置dump_debug或将dump_debug配置为off表示不开启溢出算子配置。
-
若开启溢出算子配置,则dump_path必须配置,表示导出dump文件的存储路径。
获取导出的数据文件后,文件的解析请参见《CANN 精度调试工具用户指南》中“扩展功能 > 溢出算子数据采集与解析”章节。
dump_path支持配置绝对路径或相对路径:
- 绝对路径配置以“/“开头,例如:/home。
- 相对路径配置直接以目录名开始,例如:output。
-
溢出算子Dump配置,不能与模型Dump配置或单算子Dump配置同时开启,否则会返回报错。
-
仅支持采集AI Core算子的溢出数据。
-
-
算子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_nodes处配置的算子都必须是静态图、静态子图中的算子,否则不生效。
- 若layer和watcher_nodes处配置的算子名称相同,或者layer处配置的是集合通信类算子(算子类型以Hcom开头,例如HcomAllReduce),则只导出watcher_nodes中所配置算子的dump文件。
- 对于融合算子,watcher_nodes处配置的算子名称必须是融合后的算子名称,若配置融合前的算子名称,则不导出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}/\{dump\_path\}/(worldsize_global_rank)/{time}/\{time\}/{device_id}/{model_name}/\{model\_name\}/{model_id}/{data_index}。若\{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\}:子图名称。可能存在多个文件夹,dump数据为计算图名称对应目录下的数据。如果{model_name}出现了“.“、“/“、“\“、空格时,转换为下划线表示。
- ${model_id}:子图ID号。
- ${data_index}:迭代数,用于保存对应迭代的dump数据。如果指定了dump_step,则data_index和dump_step一致;如果不指定dump_step,则data_index一般从0开始计数,每dump一个迭代的数据,序号递增1。
解析dump数据文件
dump文件无法通过文本工具直接查看其内容,建议先将dump文件转换为numpy格式文件,再通过numpy官方提供的能力转为txt文档进行查看。详细操作指导请参考《CANN 精度调试工具用户指南》中“查看dump数据文件”章节。