专栏算法工具链【perfetto】J6工具链UCP Trace 使用分享

【perfetto】J6工具链UCP Trace 使用分享

Jade-self2024-08-25
195
0

1. 使用场景

地平线J6算法工具链提供了一套板端实测 性能分析工具UCP trace,通过在 UCP 执行的关键路径上嵌入 trace 记录,进而深入分析 UCP 应用程序 调度逻辑。特别是在出现性能异常时,可以通过分析UCP trace,快速找到异常发生的时间点。另一方面,在工程任务调度层面,可以分析出 模型推理 是否在持续进行。
Description
UCP Trace 记录点:UCP 在应用程序 API 及内部关键调度路径嵌入了 trace 记录点,包括任务 trace 记录点和算子 trace 记录点。(后面会结合示例介绍)
Description

2. 相关文件

手册
本文参考J6算法工具链用户手册,结合几个示例场景,介绍UCP Trace使用过程。
工具
OE开发包的OE3.0.17/samples/ucp_tutorial/tools/trace路径下提供了UCP trace的相关配置和可执行文件,目录如下:
注意,上述文件包含:
  1. perfetto trace 和 chrome trace 两种后端选项。

  2. perfetto trace 包含 in_process 和 system 两种模式。

本文会详细介绍in_process模式,用到的文件只有ucp_in_process.cfg、ucp_in_process.json这两个。

模型及程序
OE开发包OE3.0.17/samples/ucp_tutorial/dnn/basic_samples下的示例及模型。
名词解释
  1. Perfetto 是 Google 开发的系统性能分析工具,能够收集来自不同数据源的性能数据, 同时提供了 Perfetto UI (https://ui.perfetto.dev/) 用于数据的可视化和分析。
  2. Perfetto in_process 表示进程内模式,进程内直接保存 perfetto trace 到文件。

  3. Perfetto system 表示系统模式,由后台服务 traced,traced_probe 两个工具统一进行 trace 捕获。

3. 详述in_process模式

in_process 模式下只能抓取 UCP 进程内的 trace 信息,无需启动 perfetto 的后台进程。

3.1 单帧示例运行

需要用到的工具配置文件有:

将其放在runtime 00_quick_start快速上手示例运行脚本目录下:

进入上述目录下,配置环境变量:

运行程序:

在该目录下会生成trace文件:ucp.pftrace
Description
  1. Perfetto 不支持直接覆盖原有的 trace 文件,若 trace 文件已经存在,则需要先将其删除。

  2. ucp_in_process.json中指定的文件路径是相对路径,因此trace配置文件和脚本需要放置在运行程序的同级目录下。

  3. 确保在同一个shell环境中配置环境变量和运行程序。

3.2 单帧结果解读

生成的ucp.pftrace,就是我们要分析的文件。
访问 Perfetto UI (https://ui.perfetto.dev/),点击左侧的Open trace file,如下所示:
Description
选择生成的ucp.pftrace文件,选中中间最长的一块,如下所示:
Description

上图中run_resnet 113105线程是工具内部新起的线程,用于OpFnish(接收BPU完成的信号),TaskSetDone(通知任务执行完成)、SubmitOp(算子提交)等任务。

可以看到等待部分耗时为1.x ms,也可以看到线程、进程等信息。(注意:Wait部分耗时和模型推理部分耗时可能差别很大,后文多线程时有例子)
在时间线上 点击创建的任务,可以看到任务从创建到释放的完整调度流程。
Description
在这个示例中,你可以看到如下Trace点:
Description
同理,运行runtime_sample示例roi_infer.sh,可视化如下:
Description

3.3 单线程+多帧 运行与结果解读

文件准备:

环境变量参考上节,然后运行命令:

产出pftrace文件,可视化如下:
Description

3.4 多线程+多帧 运行与结果解读

文件准备:

环境变量参考上节,然后运行命令:

产出pftrace文件(04_hrt_4thread_ucp.pftrace),可视化如下:

Description
Description
Description

拿到这个多线程的可视化数据,能分析什么?

  1. 查看UCP内部调度耗时是否异常:例如哪块耗时明显高于预期,内部调度异常,可以联系地平线技术支持。

  2. 观察到BPU是否在持续使用:例如两个BPU OpFnish算子记录点之间的耗时是否符合预期,继而判断任务编排是否合理,任务下发是否及时等,这需要用户自行处理。

Description

4. 简述system模式

system 模式下,UCP trace 只是其中的一个数据源,因此需要运行 Perfetto 的后台进程来完成 trace 捕获,同时通过运行命令行工具perfetto来配置和触发 trace 捕获。
地平线OE包中Trace相关文件,主要是用在system 模式中的,使用方式也非常简单。
配置环境变量
后台运行 Perfetto 进程
在一个终端中触发数据抓取
在另一个终端中运行UCP程序
以OE runtime 01_api_tutorial为例:

注意:为了能够抓取完整的数据,需要确保数据上一步perfetto进程 先执行,后退出。

可视化生成的ucp.pftrace:

Description

由于 个人 在实际使用过程中应用system模式较少,故这儿不进行详细介绍,未来有必要,再详细研究。

算法工具链
社区征文官方教程技术深度解析
评论0
0/1000