拿到一个浮点模型,想分析单帧延迟,看看有没有可以优化的地方,可以从一下几个方面入手:
-
用模型可视化工具打开模型,看下模型结构,如果是图像输入类型,看模型是否编译为了带预处理node的(省了一个transpose+quantize)。
-
如果模型最后输出结构是dequtize + tranpose,可以考虑能不能修改下原始模型最终输出结构,进而省略掉transpose操作
-
check下模型结构里出现的cpu op为什么不能放到bpu上加速,防止转换环节误将其切了出来。
-
打开node_profiler 功能,看下各个op的耗时,主要关注cpu op的耗时,若某个cpu op的耗时较大, 则:
(1)hrut_somstatus -n 10000 -d 1 用这个命令看下cpu是否降频了,xj3上cpu最大主频1.2G, 如果降频了,运行echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor,一般板子重启后,cpu都会降频,所以可以把这句话加到应用程序启动脚本里。
(2)可以查看下Runtime支持的op列表(对齐到onnx的实现)该op是否被arm加速过,若加速过,则提升空间有限,可以考虑下能否和前后cpu op进行融合,若没被优化过,可以尝试进行优化
op融合和op优化都需要提需求给runtime小组进行评估开发。