1 文章背景介绍
在实车测试时,除了感知算法外,往往还会有别的APP在同时运行,从而挤压算法的资源占用,影响模型性能,降低部署效果。因此在项目早期做板端验证的时候,我们就可以使用一些工具对CPU和内存进行加压,再运行模型,以模拟实车测试的情况,得到模型在硬件资源受限时的性能数据,做到心中有数,及时调整优化,避免到了项目后期还要为节约性能开销而裁剪模型,得不偿失。
本文的重点在于向广大开发者介绍stress-ng工具,并探究该工具是否能明显影响模型的性能表现,以方便开发者在非实车环境下能做好性能验证工作。关于模型或工程的性能调优,可参考社区其他精品贴。因作者水平有限,文章如有错漏之处,欢迎指出并共同交流。
2 开发板加压工具介绍
2.1 stress-ng简介
stress-ng可以在linux上产生系统负载,可加压CPU、内存、磁盘IO等,且有多种加压策略,比如浮点运算、整数运算、矩阵运算、压缩、解压缩等,可以用来测试系统在高负载的状况下的稳定性。
2.2 stress-ng编译说明
1、首先进入stress-ng的github页面,下载源码到我们的x86服务器上

3、编译完成后,会在源码所在的文件夹下生成可执行文件stress-ng,将其复制到开发板上的/userdata路径即可。
2.3 stress-ng使用说明
2.3.1 主要参数介绍
--cpu N:让N个CPU满载,N=0会让所有CPU满载
--cpu-load M:搭配--cpu使用,占用N个核各自M%的CPU负载
--vm N:启用N个进程占用内存,不断释放和分配
--vm-bytes N:所有vm进程共占用N字节的内存大小,可带单位,如1M 1G
--vm-keep:vm进程一直占用内存不释放
--timeout N:加压时长N秒,可带单位,如1s 1m 1h 1d,不配置则为1d
2.3.2 CPU加压方法
CPU加压命令:
运行以上命令可让4个CPU核各以90%左右的负载运行。
2.3.3 CPU和内存共同加压方法(推荐)
执行以下命令可让CPU和内存共同被加压:
3 模型性能评测工具介绍
3.1 hrt_model_exec简介
hrt_model_exec是地平线算法工具链提供的模型执行工具,可以使用该工具的perf功能在开发板上评测模型的推理性能,该工具的完整介绍可以查看用户手册:https://developer.horizon.cc/api/v1/fileData/horizon_j5_open_explorer_cn_doc/runtime/source/tool_introduction/source/hrt_model_exec.html
我们可以在OE包的ddk/package/board/hrt_tools/bin路径找到这个工具,需要将其复制到开发板。
3.2 hrt_model_exec使用方法
hrt_model_exec可以在单核单线程下评测模型的单帧延时(Latency),也可以在双核多线程下评测模型的吞吐量(FPS)。单帧延时体现了单个模型处理一帧数据所需的时间,是衡量计算平台能满足实时性能要求的重要指标。这里我们选择基于单帧延时来分析性能影响,相比FPS,对单帧延时的观测会更加稳定。评测模型单帧延时的参考命令如下:
frame_count默认为200,这里我们设置为1000,为的是让评估的数值更加准确。
4 实验部分
4.1 实验思路
4.2 J5硬件资源说明
对本实验涉及到的J5硬件资源,这里做出以下简单介绍。
CPU:8 * A55
BPU:J5有双核BPU,但本文所做的性能测试只用到单核
内存:可使用free命令查看开发板内存分配情况,在不执行任何用户进程时,可用内存约为3.8G,见下图

4.3 实验结果展示
4.3.1 实验数据总表

实验1为不加压时,分别单独运行CenterPoint和Resnet18得到的单帧延时数据;
实验2-8为1个CPU核满载时,内存占用依次提升的单帧延时数据;
实验9-15为4个CPU核满载时,内存占用依次提升的单帧延时数据;
实验16-22为全部CPU核满载时,内存占用依次提升的单帧延时数据;
CenterPoint和Resnet18分开测试,不会同时运行。
可以查看下方更加直观的,基于表格信息制作的折线图。
4.3.2 CenterPoint折线图

4.3.3 Resnet18折线图


5 实验结论
- stress-ng工具对CPU和内存的占用,可以显著影响模型性能;
内存加压对模型单帧延时的影响相对较小,CPU加压影响较大;
在内存占用相同时,CPU占用越高,模型单帧延时越高;
在CPU负载相同时,随着内存占用的提升,模型的单帧延时有上升趋势;
在CPU全部核满载时,小模型的单帧延时上升情况比大模型严重很多。
6 结语
本文重点介绍了stress-ng工具并通过实验证明了stress-ng对CPU和内存的加压可以明显影响模型的性能表现,该工具可方便开发者验证模型在资源受限时的实际运行性能。



