前言
在实际部署智能驾驶方案时,很多不同任务的模型会同时运行,在非正常情况下,模型按设计帧率运行时,每次运行花费的时间会不稳定。在这种情况下,我们要让模型按设计帧率运行,同时实时监测模型推理耗时和带宽使用情况,分析模型耗时不稳定时带宽占了多少。
针对以上情况,本帖将介绍以下内容:
对 hrt_model_exec 工具进行修改,让它能让单个模型按设计帧率运行指定的帧数,还能计算每帧推理耗时和系统时间戳;
运行修改后的 hrt_model_exec 工具和系统软件里的带宽检测工具 hrut_ddr,分析日志,查看模型耗时和带宽的变化情况。
通过示例说明工具的使用和数据分析方法。
hrt_model_exec 魔改方法
通过--perf_fps实现模型在单核单线程下按照设计帧率运行;
通过--frame_count 控制按照设计帧率推理的总帧数;
log中输出系统时间戳、当前推理帧数,推理Latency。
代码修改
main.cpp
parse_util.h
log_util.cpp
function_util.cpp(重点)
修改完代码后进行编译:
使用的时候将上述文件夹传输到板端即可。
参考命令
输出log如下所示:
hrut_ddr 带宽监测工具
hrut_ddr获取请联系地平线支持人员。
示例说明
本节将以一个简单的示例,阐述如何分析设计帧率推理模型的耗时与带宽。通过示例能直观了解其实际运行的用时和带宽情况,下面将详细说明分析的具体步骤。
步骤1 选取模型
智驾方案中一般有很多个模型,建议在实验中选取设计带宽占用比较大的模型,其中设计带宽的计算公式为:
设计带宽=每帧的ddr占用*设计带宽

本帖的示例中选取了4个设计带宽比较大的模型model1~model4。
步骤2 模型推理和带宽监测
首先在板端运行hrut_ddr工具,参考命令如下:
然后在板端打开4个终端按照设计帧率分别推理这4个hbm模型:
如果需要将模型运行在不同的BPU core上可以配置core_id参数。
步骤3 数据分析
耗时带宽总体趋势图
将4个模型的耗时带宽变化集成在同一个图像上,由此观察变化趋势,如下所示:

这里提供绘图的脚本,此脚本可以实现以下功能:
指定绘图的时间段,hrut_ddr和hrt_model_exec均有系统时间戳;
计算每秒钟的平均耗时和带宽占用;
将多个模型的耗时和带宽集成在同一张图上。
峰值带宽获取
根据hrut_ddr工具的log(如下所示),获取BPU带宽占用(Range1:bpu_p0列)和系统带宽占用(Bandwidth列)Read+Write 最大的20个值和对应的时间戳。

参考代码如下所示:
这样,我们就完成了延迟和带宽的数据获取和分析,后续笔者将分享如何根据获取的数据进行调优。

