准备离线模型dump数据文件
使用前须知
- 请在dump数据前,完成模型对应的应用工程的编译、运行,确保工程正常。
- 每次推理都会产生dump数据,在循环次数较多时,每次推理产生的dump数据量会相应增加,建议dump数据时仅执行一次推理。对于大模型场景,通常dump数据量庞大且耗时较长,可以通过dump_data开启算子统计功能,根据统计数据识别可能异常的算子,然后仅针对这些可能异常的算子进行dump。
- Docker场景下,不支持将容器作为运行环境使用dump功能。
- 提供aclInit()接口和aclmdlSetDump()接口两种接口方式dump数据。
dump数据
参考以下步骤进行离线模型dump操作:
- 打开aclInit()函数所在的推理应用工程代码文件,查看调用的aclInit()或aclmdlSetDump()函数,获取acl.json文件路径。
- 在查到的目录下修改acl.json文件(如不存在,则需要新建,建议放在工程编译后的out目录下),添加dump配置,格式如下所示。模型推理场景下,开启dump数据采集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
{ "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数据采集:
1 2 3 4 5 6 7 8
{ "dump":{ "dump_path":"/home/output", "dump_list":[{}], "dump_op_switch":"on", "dump_data":"tensor" } }
- 运行应用程序,生成dump数据文件,生成的路径及格式说明如下。
模型推理场景下,dump数据落盘路径为:{dump_path}/{time}/{device_id}/{model_name}/{model_id}/{data_index}/{dump文件}
单算子调用场景(包括单算子模型执行和单算子API执行)下,dump数据落盘路径为:{dump_path}/{time}/{device_id}/{dump文件}
表2 dump数据文件路径说明 路径key
说明
备注
dump_path
acl.json中配置的dump数据文件存储目录。
dump数据文件命名格式为:{op_type}.{op_name}.{task_id}.{stream_id}.{timestamp}
time
dump数据文件落盘的时间。
格式为:YYYYMMDDHHMMSS
device_id
设备ID。
-
model_name
模型名称。
如果model_name出现了“.”、“/”、“\”、空格时,转换为下划线表示。
model_id
模型ID号。
-
data_index
针对每个Task ID执行的次数维护一个序号,从0开始计数,该Task每dump一次数据,序号递增1。
-
- dump数据文件如果op_type、op_name出现了“.”、“/”、“\”、空格时,则会转换为下划线表示。
- 如果文件名称长度超过了OS文件名称长度限制(一般是255个字符),则会将该dump文件重命名为一串随机数字,映射关系可查看同目录下的mapping.csv。
- 在图执行过程中,以下算子不会产生dump数据:
- 在图执行前,已明确不会在Device侧执行的算子,如条件类算子(if/while/for/case等)、数据类算子(Data/RefData/Const等)、数据流算子(StackPush/StackPop/Concat/Split等)。
- 在图优化阶段,被GE标记为不在Device侧执行的算子,这些算子在dump图中的attr的_no_task属性为true。
- 图中不会到达最终执行分支的算子。
父主题: NPU vs NPU(离线推理)