昇腾社区首页
中文
注册
开发者
下载

算子输入输出dump功能(图模式)

功能简介

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

本功能与图结构dump功能是不同的功能,二者可以单独使用,也可共同用于用户定位精度问题。

图1 算子图模式dump功能介绍

使用约束

本功能仅支持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)
表1 参数说明

参数名

说明

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_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内容类型,字符串类型。

  • tensor(默认值):dump算子数据。
  • stats:dump算子统计数据,保存结果为csv格式,文件中包含算子名称、输入/输出的数据类型、最大值、最小值等。

通常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 options时,dump options有较高的配置优先级。不建议同时使用
  • 请确保该参数指定的路径确实存在,且为json格式,并且运行用户具有读、写操作权限。
  • 注意torch_npu默认已开启exception类信息的dump功能(即dump_scene参数,异常算子Dump配置) ,通过本功能配置的exception dump不会生效
  • 对于大模型场景,通常dump数据量太大并且耗时长,建议dump_data配置为“stats”,开启算子统计功能,根据统计数据识别可能异常的算子后,再dump可能异常的算子。

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"
          }
      }

    配置说明如下:

    • 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_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。

解析dump数据文件

dump文件无法通过文本工具直接查看其内容,建议先将dump文件转换为numpy格式文件,再通过numpy官方提供的能力转为txt文档进行查看。详细操作指导请参考《CANN 精度调试工具用户指南》中“查看dump数据文件”章节