MegEngine 使用小技巧:如何做 MegCC 的模型性能評(píng)測
MegCC?是一個(gè)深度學(xué)習(xí)模型編譯器,具有以下特點(diǎn):
極輕量級(jí)運(yùn)行時(shí):只在二進(jìn)制文件中保留所需的計(jì)算內(nèi)核。例如,MobileNet v1 的81KB運(yùn)行時(shí)間
高性能:每個(gè)操作都經(jīng)過專家精心優(yōu)化
便攜:只生成計(jì)算代碼,易于在 Linux、Android、TEE、BareMetal 上編譯和使用
Low Memory Usage while Boot Instantly:模型優(yōu)化和內(nèi)存規(guī)劃在編譯時(shí)生成。獲得最先進(jìn)的內(nèi)存使用率,并且在推理過程中不花費(fèi)額外的 CPU
MegCC 支持了基礎(chǔ)的 Benchmark 模塊用于測試各類模型的推理性能,獲取推理時(shí)各個(gè) Kernel 的性能數(shù)據(jù),分析模型性能瓶頸。
如何使用 MegCC 基準(zhǔn)測試
介紹
MegCC Benchmark 是一個(gè)簡單的工具,可以在 MegCC 中獲取不同模型的基準(zhǔn)測試結(jié)果,文件結(jié)構(gòu)如下所示:
在 src 中,它是一個(gè) c++ 應(yīng)用程序,用于在不同平臺(tái)上運(yùn)行基準(zhǔn)測試結(jié)果。在 python 中,包含了模型轉(zhuǎn)換,其他相關(guān)準(zhǔn)備工作和基準(zhǔn)測試示例,并給出了一些可用來分析基準(zhǔn)測試結(jié)果工具腳本
支持模型
mobilenetv2、resnet18、efficientnetb0 shufflenetv2 vgg16
要求
mgeconvert 可以通過以下命令安裝:
獲取模型并運(yùn)行基準(zhǔn)示例
example 會(huì)從 torchvision 下載對(duì)應(yīng)模型并轉(zhuǎn)換為 onnx, onnx 模型通過 mgeconvert 以及mgb-to-tiynn 轉(zhuǎn)換為 megcc 模型
如果你想在其他平臺(tái)上運(yùn)行,請(qǐng)參考示例在 BenchmarkRunner 中添加你新的 run_platform_xxx 函數(shù),示例給出了一個(gè)ssh遠(yuǎn)程設(shè)備測試模板
分析megcc日志
example.py 運(yùn)行結(jié)束后,會(huì)在 benchmark 目錄下生成 output 目錄,里面包含了模型的推理 log 以及 profile log,這些 log 可以用相關(guān)分析腳本可視化進(jìn)行進(jìn)一步的分析利用
生成的 log 示例如下:
0 代表只測速的 log, 3 代表 profile 的 log
注意:需安裝 matplotlib
可視化不同模型的推理結(jié)果
benchmark 下tools/inference_visual.py工具可以用于分析測速日志,獲取各個(gè)模型推理的性能對(duì)照,用法如下:
python3 tools/inference_visual.py output -o figure_dir
運(yùn)行完后會(huì)在 figure_dir 目錄下生成如下所示的性能對(duì)照?qǐng)D:

可視化不同內(nèi)核在不同模型中的分析結(jié)果
benchmark 下tools/cc_analysis.py工具可以用于分析profile日志,獲取各個(gè)模型推理時(shí)前10個(gè)最耗時(shí)的kernel 耗時(shí)占比餅圖,用法如下:
運(yùn)行完后相關(guān)餅圖也會(huì)在 figure_dir 目錄下生成, 示例如下:

附
更多 MegEngine 信息獲取,您可以:查看文檔:https://www.megengine.org.cn/doc/stable/zh/
GitHub 項(xiàng)目: https://github.com/MegEngine
加入 MegEngine 用戶交流 QQ 群:1029741705
歡迎參與 MegEngine 社區(qū)貢獻(xiàn),成為?Awesome MegEngineer:https://www.megengine.org.cn/community-AMGE,榮譽(yù)證書、定制禮品享不停。