CPU 内存加压工具 stress-ng 介绍

01 文章背景介绍

 

在实车测试时,除了感知算法外,往往还会有别的 APP 在同时运行,从而挤压算法的资源占用,影响模型性能,降低部署效果。因此在项目早期做板端验证的时候,我们就可以使用一些工具对 CPU 和内存进行加压,再运行模型,以模拟实车测试的情况,得到模型在硬件资源受限时的性能数据,做到心中有数,及时调整优化,避免到了项目后期还要为节约性能开销而裁剪模型,得不偿失。

 

本文的重点在于向广大开发者介绍 stress-ng 工具,并探究该工具是否能明显影响模型的性能表现,以方便开发者在非实车环境下能做好性能验证工作。关于模型或工程的性能调优,可参考社区其他精品贴。因作者水平有限,文章如有错漏之处,欢迎指出并共同交流。

 

 

02 开发板加压工具介绍

 

2.1 stress-ng 简介

 

Stress-ng 可以在 linux 上产生系统负载,可加压 CPU、内存、磁盘 IO 等,且有多种加压策略,比如浮点运算、整数运算、矩阵运算、压缩、解压缩等,可以用来测试系统在高负载的状况下的稳定性。

 

Stress-ng 工具的 github 开源地址为:https://github.com/ColinIanKing/stress-ng

 

2.2 stress-ng 编译说明

 

  1. 首先进入 stress-ng 的 github 页面,下载源码到我们的 x86 服务器上

 

图片

 

  1. 接下来进行源码编译。由于我们的加压测试环境是 arm 开发板,而 github 介绍的编译流程基于 x86,因此我们需要配置**环境变量来设置交叉编译器**,以编译出可在开发板运行的二进制文件,参考代码如下:

cd stress-ng-0.17.06export CC=aarch64-linux-gnu-gccmake

 

  1. 编译完成后,会在源码所在的文件夹下生成可执行文件 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 加压命令:

stress-ng --cpu 4 --cpu-load 90

运行以上命令可让 4 个 CPU 核各以 90%左右的负载运行。

 

2.3.3 CPU 和内存共同加压方法(推荐)

 

执行以下命令可让 CPU 和内存共同被加压:

stress-ng --vm 2 --vm-bytes 2G --vm-keep

vm 为 2 会让 2 个 CPU 核满载运行,vm-bytes 为 2G 则会占用 2G 的内存(和 vm 数量无关),添加 vm-keep 会让内存一直占据不被释放。这个命令可以同时为 CPU 和内存加压,是比较推荐的一种方式,本文也会基于这种方法做性能测试工作

 

03 模型性能评测工具介绍

 

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,对单帧延时的观测会更加稳定。

评测模型单帧延时的参考命令如下:

hrt_model_exec perf --model_file ./model.bin --frame_count 1000

frame_count 默认为 200,这里我们设置为 1000,为的是让评估的数值更加准确。

 

04 实验部分

 

4.1 实验思路

 

本文分别使用一大一小两个模型分析 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 和内存共同加压方法”,比较两个模型的单帧延时受影响程度。

 

 

4.2 征程 5 硬件资源说明

 

对本实验涉及到的 征程 5 硬件资源,这里做出以下简单介绍。

 

  • CPU: 8 * A55

  • BPU:征程 5 有双核 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 折线图

 

图片

 

图中蓝色圆点代表不加压时,CenterPoint 的性能数据,绿色折线表示单核满载时内存占用依次提升的性能数据,黄色折线表示 4 核满载时内存占用依次提升的性能数据,红色折线表示 8 核满载时内存占用依次提升的性能数据。

 

4.3.3 Resnet18 折线图

 

图片

 

Resnet18 折线图的阅读方法同 Centerpoint。由于在 8 核满载(红色折线)时,模型性能下降尤为严重,因此额外提供了下图,可方便地看出单核满载(绿色折线)4 核满载(黄色折线)下的性能变化情况。

 

图片

 

 

05 实验结论

 

  1. stress-ng 工具对 CPU 和**内存的占用,可以显著影响模型性能**;

  2. 内存加压对模型单帧延时的影响相对较小,CPU 加压影响较大;

  3. 在内存占用相同时,CPU 占用越高,模型单帧延时越高;

  4. 在 CPU 负载相同时,随着内存占用的提升,模型的单帧延时有上升趋势;

  5. 在 CPU 全部核满载时,小模型的单帧延时上升情况比大模型严重很多。

 

 

06 结论

 

本文重点介绍了 stress-ng 工具并通过实验证明了 stress-ng 对 CPU 和内存的加压可以明显影响模型的性能表现,该工具可方便开发者验证模型在资源受限时的实际运行性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(C语言)文件操作

目录 文件 程序文件 数据文件 文件名 ​编辑数据文件的分类 文件的打开和关闭 流 标准流 1)stdin 2)stdout 3)stderr 文件指针 文件的打开和关闭 对文件内容操作的函数 1)fgetc,fputc 2)fp…

低代码开发平台搭建思考与实战

什么是低代码开发平台? 低代码开发平台是一种平台软件,人们能通过它提供的图形化配置功能,快速配置出满足各种特定业务需求的功能软件。 具有以下特点: 提供可视化界面进行程序开发0代码或少量代码快速生成应用 什么是低代码产…

Axure设计之日期时间范围选择器

在产品设计和原型制作过程中,日期时间范围选择器是一个常见的需求。Axure作为一个强大的原型设计工具,能够帮助我们快速实现这一功能。通过利用Axure的动态面板、中继器、文本框、按钮以及时间函数,我们可以轻松制作一个功能完备的日期时间范…

汽车资讯新趋势:Spring Boot技术解读

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户,可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

代码随想录第三十七天

52.携带研究材料 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同…

[开源] 告别黑苹果!用docker安装MacOS体验苹果系统

没用过苹果电脑的朋友可能会对苹果系统好奇,有人甚至会为了尝鲜MacOS去折腾黑苹果。如果你只是想体验一下MacOS,这里有个更简单更优雅的解决方案,用docker安装MacOS来体验苹果系统。 一、项目简介 项目描述 Docker 容器内的 OSX&#xff08…

redis延时队列

引入 <redisson.version>3.15.5</redisson.version><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>${redisson.version}</version></dependency>…

「四」体验HarmonyOS端云一体化开发模板——工程目录结构与云侧工程一键部署AGC云端

关于作者 白晓明 宁夏图尔科技有限公司董事长兼CEO、坚果派联合创始人 华为HDE、润和软件HiHope社区专家、鸿蒙KOL、仓颉KOL 华为开发者学堂/51CTO学堂/CSDN学堂认证讲师 开放原子开源基金会2023开源贡献之星 「目录」 「一」HarmonyOS端云一体化概要 「二」体验HarmonyOS端云一…

241121学习日志——[CSDIY] [InternStudio] 大模型训练营 [11]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

STM32完全学习——使用SysTick精确延时(阻塞式)

一、SysTick相关寄存器 首先关于SysTick寄存器的数据在下面这个文件里面可以找到&#xff0c;平时那个数据手册是没有的。其次我这边使用的开发板是F407的开发板&#xff0c;关于这个寄存器的数据都是来自下面这个文件的截图&#xff0c;一般只会用到这3个寄存器。 二、使用标…

理解加密:常见算法及其应用

在信息安全领域&#xff0c;加密技术被广泛用于保护数据的机密性。加密的核心目的是将明文信息转化为密文&#xff0c;以防止未经授权的访问和数据泄露。本文将介绍几种常见的加密算法&#xff0c;包括对称加密、非对称加密和哈希算法&#xff0c;并提供 C# 代码示例&#xff0…

【机器学习】- 模型复杂度vs模型误差

目录 0.引言1.模型复杂度vs模型误差1.1. 模型误差的分类1.2 模型复杂度与误差的关系1.3 偏差-方差权衡&#xff08;Bias-Variance Tradeoff&#xff09;1.4 可视化&#xff1a;误差与复杂度1.5 如何选择模型复杂度&#xff1f;1.6 总结 2.方差描述含义&#xff1a;2.1 方差的定…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…

什么是SEO中的博客评论?

博客评论通过为其他网站提供价值来帮助你建立反向链接。 例如&#xff0c;你在你的网站上发布烘焙技巧。你可以在一个很受欢迎的食谱博客上评论巧克力饼干的帖子&#xff1a; “多么美味的食谱啊&#xff01;”为了防止饼干在烤箱里散开&#xff0c;试着在烘烤前将面团冷却至…

插件元器件焊接错了该怎么处理指南!!!

前言&#xff1a;编写不易&#xff0c;请勿搬运&#xff0c;仅供学习&#xff01;&#xff01;&#xff01; 目录 插件引脚焊接标准 ​编辑 板子不平如何焊接插件 电烙铁快速焊接插件 焊接把过孔封住怎么办 焊接插件元器件焊错了怎么处理 电烙铁焊接贴片 插件引脚焊接标准…

高级java每日一道面试题-2024年11月18日-基本篇-Java创建对象有几种方法?

如果有遗漏,评论区告诉我进行补充 面试官: Java创建对象有几种方法? 我回答: 在 Java 中&#xff0c;创建对象有多种方法。以下是常见的几种方法及其详细解释&#xff1a; 1. 使用 new 关键字 这是最常见的创建对象的方法。通过调用类的构造方法来创建对象。 MyClass ob…

【软考】系统架构设计师-信息安全技术基础

信息安全核心知识点 信息安全5要素&#xff1a;机密性、完整性、可用性、可控性、审查性 信息安全范围&#xff1a;设备安全、数据安全、内容安全、行为安全 网络安全 网络安全的隐患体现在&#xff1a;物理安全性、软件安全漏洞、不兼容使用安全漏洞、选择合适的安全哲理 …

【Node.js】Node.js 和浏览器之间的差异

Node.js 是一个强大的运行时环境&#xff0c;它在现代 JavaScript 开发中扮演着重要角色。然而&#xff0c;许多开发者在使用 Node.js 时常常会感到困惑&#xff0c;尤其是与浏览器环境的对比。本文将深入探讨 Node.js 和浏览器之间的差异&#xff0c;帮助你全面理解两者的设计…

用Python爬虫“偷窥”1688搜索词推荐:一场数据的奇妙冒险

在这个信息爆炸的时代&#xff0c;数据就像是藏在深海里的宝藏&#xff0c;等待着勇敢的探险家去发掘。今天&#xff0c;我们将化身为数据海盗&#xff0c;用Python作为我们的船只&#xff0c;航向1688的海域&#xff0c;去“偷窥”那些神秘的搜索词推荐。准备好了吗&#xff1…

【Redis】redis缓存击穿,缓存雪崩,缓存穿透

一、什么是缓存&#xff1f; 缓存就是与数据交互中的缓冲区&#xff0c;它一般存储在内存中且读写效率高&#xff0c;提高响应时间提高并发性能&#xff0c;如果访问数据的话可以先访问缓存&#xff0c;避免数据查询直接操作数据库&#xff0c;造成后端压力过大。 但是可能会面…