<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > CPU& 內存加壓工具 stress-ng 介紹

CPU& 內存加壓工具 stress-ng 介紹

發(fā)布人:地平線(xiàn)開(kāi)發(fā)者 時(shí)間:2024-11-22 來(lái)源:工程師 發(fā)布文章
01 文章背景介紹


在實(shí)車(chē)測試時(shí),除了感知算法外,往往還會(huì )有別的 APP 在同時(shí)運行,從而擠壓算法的資源占用,影響模型性能,降低部署效果。因此在項目早期做板端驗證的時(shí)候,我們就可以使用一些工具對 CPU 和內存進(jìn)行加壓,再運行模型,以模擬實(shí)車(chē)測試的情況,得到模型在硬件資源受限時(shí)的性能數據,做到心中有數,及時(shí)調整優(yōu)化,避免到了項目后期還要為節約性能開(kāi)銷(xiāo)而裁剪模型,得不償失。


本文的重點(diǎn)在于向廣大開(kāi)發(fā)者介紹 stress-ng 工具,并探究該工具是否能明顯影響模型的性能表現,以方便開(kāi)發(fā)者在非實(shí)車(chē)環(huán)境下能做好性能驗證工作。關(guān)于模型或工程的性能調優(yōu),可參考社區其他精品貼。因作者水平有限,文章如有錯漏之處,歡迎指出并共同交流。



02 開(kāi)發(fā)板加壓工具介紹


2.1 stress-ng 簡(jiǎn)介


Stress-ng 可以在 linux 上產(chǎn)生系統負載,可加壓 CPU、內存、磁盤(pán) IO 等,且有多種加壓策略,比如浮點(diǎn)運算、整數運算、矩陣運算、壓縮、解壓縮等,可以用來(lái)測試系統在高負載的狀況下的穩定性。


Stress-ng 工具的 github 開(kāi)源地址為:https://github.com/ColinIanKing/stress-ng


2.2 stress-ng 編譯說(shuō)明


  1. 首先進(jìn)入 stress-ng 的 github 頁(yè)面,下載源碼到我們的 x86 服務(wù)器上


圖片


  1. 接下來(lái)進(jìn)行源碼編譯。由于我們的加壓測試環(huán)境是 arm 開(kāi)發(fā)板,而 github 介紹的編譯流程基于 x86,因此我們需要配置**環(huán)境變量來(lái)設置交叉編譯器**,以編譯出可在開(kāi)發(fā)板運行的二進(jìn)制文件,參考代碼如下:

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


  1. 編譯完成后,會(huì )在源碼所在的文件夾下生成可執行文件 stress-ng,將其復制到開(kāi)發(fā)板上的/userdata 路徑即可。


2.3 stress-ng 使用說(shuō)明


2.3.1 主要參數介紹


  • --cpu N:讓 N 個(gè) CPU 滿(mǎn)載,N=0 會(huì )讓所有 CPU 滿(mǎn)載

  • --cpu-load M:搭配--cpu 使用,占用 N 個(gè)核各自 M%的 CPU 負載

  • --vm N:?jiǎn)⒂?N 個(gè)進(jìn)程占用內存,不斷釋放和分配

  • --vm-bytes N:所有 vm 進(jìn)程共占用 N 字節的內存大小,可帶單位,如 1M 1G

  • --vm-keep:vm 進(jìn)程一直占用內存不釋放

  • --timeout N:加壓時(shí)長(cháng) N 秒,可帶單位,如 1s 1m 1h 1d,不配置則為 1d


2.3.2 CPU 加壓方法


CPU 加壓命令:

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

運行以上命令可讓 4 個(gè) CPU 核各以 90%左右的負載運行。


2.3.3 CPU 和內存共同加壓方法(推薦)


執行以下命令可讓 CPU 和內存共同被加壓:

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

vm 為 2 會(huì )讓 2 個(gè) CPU 核滿(mǎn)載運行,vm-bytes 為 2G 則會(huì )占用 2G 的內存(和 vm 數量無(wú)關(guān)),添加 vm-keep 會(huì )讓內存一直占據不被釋放。這個(gè)命令可以同時(shí)為 CPU 和內存加壓,是比較推薦的一種方式,本文也會(huì )基于這種方法做性能測試工作。


03 模型性能評測工具介紹


3.1 hrt_model_exec 簡(jiǎn)介


hrt_model_exec 是地平線(xiàn)算法工具鏈提供的模型執行工具,可以使用該工具的 perf 功能在開(kāi)發(fā)板上評測模型的推理性能,該工具的完整介紹可以查看用戶(hù)手冊:

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 路徑找到這個(gè)工具,需要將其復制到開(kāi)發(fā)板。


3.2 hrt_model_exec 使用方法


hrt_model_exec 可以在單核單線(xiàn)程下評測模型的單幀延時(shí)(Latency),也可以在雙核多線(xiàn)程下評測模型的吞吐量(FPS)。單幀延時(shí)體現了單個(gè)模型處理一幀數據所需的時(shí)間,是衡量計算平臺能滿(mǎn)足實(shí)時(shí)性能要求的重要指標。

這里我們選擇基于單幀延時(shí)來(lái)分析性能影響,相比 FPS,對單幀延時(shí)的觀(guān)測會(huì )更加穩定。

評測模型單幀延時(shí)的參考命令如下:

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

frame_count 默認為 200,這里我們設置為 1000,為的是讓評估的數值更加準確。


04 實(shí)驗部分


4.1 實(shí)驗思路


本文分別使用一大一小兩個(gè)模型分析 CPU 和內存加壓對單幀延時(shí)的影響,計算平臺為 征程 5。


大模型使用 CenterPoint(來(lái)自 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 和內存共同加壓方法”,比較兩個(gè)模型的單幀延時(shí)受影響程度。



4.2 征程 5 硬件資源說(shuō)明


對本實(shí)驗涉及到的 征程 5 硬件資源,這里做出以下簡(jiǎn)單介紹。


  • CPU: 8 * A55

  • BPU:征程 5 有雙核 BPU,但本文所做的性能測試只用到單核

  • 內存:可使用 free 命令查看開(kāi)發(fā)板內存分配情況,在不執行任何用戶(hù)進(jìn)程時(shí),可用內存約為 3.8G,見(jiàn)下圖


圖片



4.3 實(shí)驗結果展示


*4.3.1 實(shí)驗數據總表*


圖片


  • 實(shí)驗 1 為不加壓時(shí),分別單獨運行 CenterPoint 和 Resnet18 得到的單幀延時(shí)數據;

  • 實(shí)驗 2-8 為 1 個(gè) CPU 核滿(mǎn)載時(shí),內存占用依次提升的單幀延時(shí)數據;

  • 實(shí)驗 9-15 為 4 個(gè) CPU 核滿(mǎn)載時(shí),內存占用依次提升的單幀延時(shí)數據;

  • 實(shí)驗 16-22 為全部 CPU 核滿(mǎn)載時(shí),內存占用依次提升的單幀延時(shí)數據;

  • CenterPoint 和 Resnet18 分開(kāi)測試,不會(huì )同時(shí)運行。


可以查看下方更加直觀(guān)的,基于表格信息制作的折線(xiàn)圖。



4.3.2 CenterPoint 折線(xiàn)圖


圖片


圖中藍色圓點(diǎn)代表不加壓時(shí),CenterPoint 的性能數據,綠色折線(xiàn)表示單核滿(mǎn)載時(shí)內存占用依次提升的性能數據,黃色折線(xiàn)表示 4 核滿(mǎn)載時(shí)內存占用依次提升的性能數據,紅色折線(xiàn)表示 8 核滿(mǎn)載時(shí)內存占用依次提升的性能數據。


4.3.3 Resnet18 折線(xiàn)圖


圖片


Resnet18 折線(xiàn)圖的閱讀方法同 Centerpoint。由于在 8 核滿(mǎn)載(紅色折線(xiàn))時(shí),模型性能下降尤為嚴重,因此額外提供了下圖,可方便地看出單核滿(mǎn)載(綠色折線(xiàn))4 核滿(mǎn)載(黃色折線(xiàn))下的性能變化情況。


圖片



05 實(shí)驗結論


  1. stress-ng 工具對 CPU 和**內存的占用,可以顯著(zhù)影響模型性能**;

  2. 內存加壓對模型單幀延時(shí)的影響相對較小,CPU 加壓影響較大;

  3. 在內存占用相同時(shí),CPU 占用越高,模型單幀延時(shí)越高;

  4. 在 CPU 負載相同時(shí),隨著(zhù)內存占用的提升,模型的單幀延時(shí)有上升趨勢;

  5. 在 CPU 全部核滿(mǎn)載時(shí),小模型的單幀延時(shí)上升情況比大模型嚴重很多。



06 結論


本文重點(diǎn)介紹了 stress-ng 工具并通過(guò)實(shí)驗證明了 stress-ng 對 CPU 和內存的加壓可以明顯影響模型的性能表現,該工具可方便開(kāi)發(fā)者驗證模型在資源受限時(shí)的實(shí)際運行性能。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 算法 自動(dòng)駕駛

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>