专栏算法工具链【J6工具链部署实用技巧-7】模型设计帧率推理时耗时与带宽分析

【J6工具链部署实用技巧-7】模型设计帧率推理时耗时与带宽分析

momo(社区版)2025-06-27
405
0

 

前言

在实际部署智能驾驶方案时,很多不同任务的模型会同时运行,在非正常情况下,模型按设计帧率运行时,每次运行花费的时间会不稳定。在这种情况下,我们要让模型按设计帧率运行,同时实时监测模型推理耗时和带宽使用情况,分析模型耗时不稳定时带宽占了多少。

针对以上情况,本帖将介绍以下内容:

  • 对 hrt_model_exec 工具进行修改,让它能让单个模型按设计帧率运行指定的帧数,还能计算每帧推理耗时和系统时间戳;

  • 运行修改后的 hrt_model_exec 工具和系统软件里的带宽检测工具 hrut_ddr,分析日志,查看模型耗时和带宽的变化情况。

  • 通过示例说明工具的使用和数据分析方法。

hrt_model_exec 魔改方法

OE开发包的samples/ucp_tutorial/tools/hrt_model_exec目录下提供了hrt_model_exec 工具的源码,通过修改源码,希望hrt_model_exec 实现以下功能:
  • 通过--perf_fps实现模型在单核单线程下按照设计帧率运行;

  • 通过--frame_count 控制按照设计帧率推理的总帧数;

  • log中输出系统时间戳、当前推理帧数,推理Latency。

代码修改

hrt_model_exec 源码修改涉及以下main.cpp、parse_util.h、log_util.cpp、function_util.cpp这4个文件,每一部分的修改如下所示:

  main.cpp

  main.cpp位于hrt_model_exec/src目录下,主要在其中增加两行代码来新增perf_fps参数:

  parse_util.h

  parse_util.h位于hrt_model_exec/include/util/目录下,在typedef struct {}中增加:

  log_util.cpp

  log_util.cpp位于samples/ucp_tutorial/tools/hrt_model_exec/src/util/目录下,修改这里的目的主要是为了运行hrt_model_exec -h时可以显示--perf_fps的参数:

  function_util.cpp(重点)

  function_util.cpp位于samples/ucp_tutorial/tools/hrt_model_exec/src/util/目录下,重构model_performance函数。如下所示:

修改完代码后进行编译:

编译完成后会生成output_shared_J6_aarch64文件夹,其结构如下:

使用的时候将上述文件夹传输到板端即可。

参考命令

输出log如下所示:

hrut_ddr 带宽监测工具

hrut_ddr是由系统软件提供的带宽监测工具,其参数和使用示例如下所示:

hrut_ddr获取请联系地平线支持人员。

示例说明

本节将以一个简单的示例,阐述如何分析设计帧率推理模型的耗时与带宽。通过示例能直观了解其实际运行的用时和带宽情况,下面将详细说明分析的具体步骤。

步骤1 选取模型

智驾方案中一般有很多个模型,建议在实验中选取设计带宽占用比较大的模型,其中设计带宽的计算公式为:

设计带宽=每帧的ddr占用*设计带宽

其中每帧的ddr占用可以根据编译器的性能预估perf.html中计算得到,比如下图中每帧的ddr占用为:40492429354/94.48/1024/1024=408.76MB/FPS

本帖的示例中选取了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个值和对应的时间戳。

参考代码如下所示:

 

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

 

算法工具链
社区征文杂谈技术深度解析
评论0
0/1000