使用 Load and run debug 模型推理#
使用 MegEnigne 进行模型推理时,可能会因为各种原因导致推理时出现 bug。 Load and run 提供了一些选项用于推理时的 bug 排查。
获取模型输入输出 tensor 的简要信息#
有些情况下,不正确的模型输入会导致推理出现问题。
另外,还有可能出现部分模型的输入输出信息暂时未知。
这些情况下,可以使用 Load and run 提供的 --model-info
来查看模型输入输出信息。
具体使用方法如下:
load_and_run <model_path> --model-info
模型的输入输出信息会以表格的形式输出到终端:
+Runtime Model Info---------------+---------+
| type | name | shape | dtype |
+--------+--------+---------------+---------+
| INPUT | data | {1,3,224,224} | float32 |
+--------+--------+---------------+---------+
| OUTPUT | fc.ADD | {1,1000} | float32 |
+--------+--------+---------------+---------+
主要包括输入输出的名称,shape 以及数据类型。
获取模型运行时 debug 信息#
部分模型在推理运行过程中会出现中断,报错等问题,为了更加方便的定位问题所在,
Load and run 提供了设置 Megengine 内部 log 等级的选项 --verbose
,这一选项可以展示更多的运行时信息,辅助用户 debug。
load_and_run <model_path> --verbose
相关信息会输出到对应终端。大概信息如下:
[14 11:23:44 @:718][DEBUG] model feature: aligned=0 has_dtype_map=1 has_opr_priority=0 has_output_dtype=0
[14 11:23:44 @:159][DEBUG] create CompNode cpu0:0 from logical xpux:0
load model: 5.730ms
[14 11:23:44 @:816][DEBUG] opr seq of length 4: var_static=4 var_dynamic_shape=0 var_dynamic_storage=0 no_sys_alloc=0
[14 11:23:44 @:121][WARN] run testcase: 0
=== prepare: 0.109ms; going to warmup
[14 11:23:44 @:60][DEBUG] static memory allocation:
comp_node alloc lower_bound upper_bound
CompNode("cpu0:0" from "xpux:0") 0.00MiB( 64bytes) 0.00MiB(100.00%) 0.00MiB( 37.50%)
[14 11:23:44 @:73][DEBUG] static storage on CompNode("cpu0:0" from "xpux:0"): size=0.00MiB addr_range=[0x56088d820e00, 0x56088d820e40).
[14 11:23:44 @:385][DEBUG] static memory allocation: nr_opr=4 nr_var=4 realtime=0.10msec (plan0.08 alloc0.02)
使用时会输出存储分配,算法选择,推理优化等一些推理时的重要信息。
获取模型结构以及运行时显存相关信息#
直观的查看模型结构以及模型中各个算子运行时占用显存的大小,对于模型优化参考价值很大。Megengine 提供了模型以及静态显存可视化的工具,用于前述操作。
使用方法:
load_and_run <model_path> --get-static-mem-info <staticMemInfoDir>
# view the graph with given url (usally: http://localhost:6006/)
mkdir <staticMemInfoDirLogs> && python3 imperative/python/megengine/tools/graph_info_analyze.py -i <staticMemInfoDir> -o <staticMemInfoDirLogs>
# pip3 install tensorboard
tensorboard --logdir <staticMemInfoDirLogs>