1.芯片型号:J52.天工开物开发包OpenExplorer版本:J5_OE_1.1.403.问题定位:板端部署4.问题具体描述:部署时,用chrono记录的推断时间和静态评估的推断时间差距较大,想问下是什么原因造成的。记录的时间是hbDNNInfer和hbDNNWaitTaskDONE。
您好。首先您记录的时间点是对的,并且上板性能实测和hb_perf的结果确实会有一定差异。您可以再用hrt_model_exec工具的perf功能多跑一些帧数(比如1000帧以上)看一下性能评测的结果。此外,第一帧通常由于要做一些资源分配和线程初始化的操作,慢一点是正常的。使用hrt_model_exec perf功能时,单核单线程用于评估latency,双核多线程用于评估FPS。
hb_perf只包括了对BPU算子的估计,没有带上CPU。hrt_model_exec perf会计算BPU+CPU所有算子一块的总耗时。如果您模型的CPU算子较多,是会出现板端实测差异和hb_perf很大的情况,关于性能优化,可以参考J5工具链用户手册的4.1.1.7.3. 模型性能优化章节。
hb_perf得到的图是这样的。我看了约束算子,softmax可以指定到bpu上,我是这样设置的,但是softmax还是在cpu上,是没设置对吗。transpose后面几个也不在bpu上。softmax和transpose的属性是这样的。
看报错信息应该是没有释放旧的task,就又申请了新的task。每一帧都是一个单独的task。可以参考ddk/samples/ai_forword_view_sample/src/modules/inference_module.cc,查看InferenceModule::DoInference函数,了解循环起止点合适的位置。
只在inti的时候使用过hbSysAllocCachedMem和malloc。难道是每跑完一帧都需要用hbSysFreeMem释放掉input_tensors和output_tensors,然后再重新hbSysAllocCachedMem吗?
感谢您使用地平线芯片算法工具链,最近我们在收集大家的满意度反馈,欢迎您填写问卷,详细情况可见:https://developer.horizon.ai/forumDetail/146177053698464782