stress-ng工具详解:如何通过CPU和内存加压测试模型性能
stress-ng工具详解:如何通过CPU和内存加压测试模型性能
在实际应用中,当多个应用程序同时运行时,可能会对算法的资源占用产生影响,进而影响模型性能。因此,在项目早期进行板端验证时,可以使用一些工具对CPU和内存进行加压,以模拟实车测试的情况,得到模型在硬件资源受限时的性能数据。本文将介绍stress-ng工具,并探究该工具是否能明显影响模型的性能表现。
stress-ng工具简介
Stress-ng是一款可以在Linux上产生系统负载的工具,可以加压CPU、内存、磁盘IO等,且有多种加压策略,比如浮点运算、整数运算、矩阵运算、压缩、解压缩等,可以用来测试系统在高负载的状况下的稳定性。
stress-ng工具的使用方法
编译说明
- 首先进入stress-ng的GitHub页面,下载源码到x86服务器上
- 接下来进行源码编译。由于加压测试环境是arm开发板,需要配置环境变量来设置交叉编译器,以编译出可在开发板运行的二进制文件
- 编译完成后,会在源码所在的文件夹下生成可执行文件stress-ng,将其复制到开发板上的/userdata路径即可
主要参数介绍
- --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
CPU和内存共同加压方法(推荐)
执行以下命令可让CPU和内存共同被加压:
stress-ng --vm 2 --vm-bytes 2G --vm-keep
vm为2会让2个CPU核满载运行,vm-bytes为2G则会占用2G的内存(和vm数量无关),添加vm-keep会让内存一直占据不被释放。这个命令可以同时为CPU和内存加压,是比较推荐的一种方式。
模型性能评测工具介绍
hrt_model_exec是地平线算法工具链提供的模型执行工具,可以使用该工具的perf功能在开发板上评测模型的推理性能。评测模型单帧延时的参考命令如下:
hrt_model_exec perf --model_file ./model.bin --frame_count 1000
frame_count默认为200,这里设置为1000,为的是让评估的数值更加准确。
实验部分
实验思路
本文分别使用一大一小两个模型分析CPU和内存加压对单帧延时的影响,计算平台为征程5。
大模型使用CenterPoint(来自OE包ddk/samples/model_zoo/runtime/ai_benchmark/qat/centerpoint_pointpillar_nuscenes),小模型使用Resnet18(OE包ddk/samples/ai_toolchain/horizon_model_convert_sample/03_classification/03_resnet18以O3编译)。加压手段采用本文2.3.3“CPU和内存共同加压方法”,比较两个模型的单帧延时受影响程度。
实验结果展示
实验数据总表:
实验1为不加压时,分别单独运行CenterPoint和Resnet18得到的单帧延时数据;
实验2-8为1个CPU核满载时,内存占用依次提升的单帧延时数据;
实验9-15为4个CPU核满载时,内存占用依次提升的单帧延时数据;
实验16-22为全部CPU核满载时,内存占用依次提升的单帧延时数据;
CenterPoint和Resnet18分开测试,不会同时运行。
CenterPoint折线图:
图中蓝色圆点代表不加压时,CenterPoint的性能数据,绿色折线表示单核满载时内存占用依次提升的性能数据,黄色折线表示4核满载时内存占用依次提升的性能数据,红色折线表示8核满载时内存占用依次提升的性能数据。
Resnet18折线图的阅读方法同Centerpoint。由于在8核满载(红色折线)时,模型性能下降尤为严重,因此额外提供了下图,可方便地看出单核满载(绿色折线)和4核满载(黄色折线)下的性能变化情况。
实验结论
- stress-ng工具对CPU和内存的占用,可以显著影响模型性能
- 内存加压对模型单帧延时的影响相对较小,CPU加压影响较大
- 在内存占用相同时,CPU占用越高,模型单帧延时越高
- 在CPU负载相同时,随着内存占用的提升,模型的单帧延时有上升趋势
- 在CPU全部核满载时,小模型的单帧延时上升情况比大模型严重很多
结论
本文重点介绍了stress-ng工具,并通过实验证明了stress-ng对CPU和内存的加压可以明显影响模型的性能表现,该工具可方便开发者验证模型在资源受限时的实际运行性能。