MegCC 是一个深度学习模型编译器,具有以下特点:
- 极轻量级运行时:只在二进制文件中保留所需的计算内核。例如,MobileNet v1 的81KB运行时间
- 高性能:每个操作都经过专家精心优化
- 便携:只生成计算代码,易于在 Linux、Android、TEE、BareMetal 上编译和使用
- Low Memory Usage while Boot Instantly:模型优化和内存规划在编译时生成。获得最先进的内存使用率,并且在推理过程中不花费额外的 CPU
MegCC 支持了基础的 Benchmark 模块用于测试各类模型的推理性能,获取推理时各个 Kernel 的性能数据,分析模型性能瓶颈。
如何使用 MegCC 基准测试
介绍
MegCC Benchmark 是一个简单的工具,可以在 MegCC 中获取不同模型的基准测试结果,文件结构如下所示:
├── clean.sh
├── CMakeLists.txt
├── main.cpp
├── model
│ ├── model_arm.json
│ ├── model_riscv.json
│ ├── model_x86.json
│ └── request.txt
├── python
│ ├── example.py
│ ├── format.sh
│ └── src
│ ├── benchmark.py
│ └── models.py
├── README.md
├── src
│ ├── benchmark.h
│ ├── build_config.h.in
│ ├── CCbenchmark.cpp
│ ├── CCbenchmark.h
│ ├── MGEbenchmark.cpp
│ └── MGEbenchmark.h
└── tools
├── cc_analysis.py
└── inference_visual.py
在 src 中,它是一个 c++ 应用程序,用于在不同平台上运行基准测试结果。在 python 中,包含了模型转换,其他相关准备工作和基准测试示例,并给出了一些可用来分析基准测试结果工具脚本
支持模型
mobilenetv2、resnet18、efficientnetb0 shufflenetv2 vgg16
要求
mgeconvert > v.1.0.2
onnx==1.11.0
torch==1.10.0
cmake >=3.15.2
clang
ninja
torchvision==0.11.1`
mgeconvert 可以通过以下命令安装:
git clone https://github.com/MegEngine/mgeconvert.git
cd mgeconvert
git checkout master
python3 -m pip install . --user --install-option="--targets=onnx"
获取模型并运行基准示例
cd megcc/benchmark
export MEGCC_MGB_TO_TINYNN_PATH=<your_mgb_to_tinynn_path>
python3 python/example.py
example 会从 torchvision 下载对应模型并转换为 onnx, onnx 模型通过 mgeconvert 以及mgb-to-tiynn 转换为 megcc 模型
如果你想在其他平台上运行,请参考示例在 BenchmarkRunner 中添加你新的 run_platform_xxx 函数,示例给出了一个ssh远程设备测试模板
分析megcc日志
example.py 运行结束后,会在 benchmark 目录下生成 output 目录,里面包含了模型的推理 log 以及 profile log,这些 log 可以用相关分析脚本可视化进行进一步的分析利用
生成的 log 示例如下:
output/
├── megcc-x86-efficientnetb0-0-log-local.txt
├── megcc-x86-efficientnetb0-3-log-local.txt
├── megcc-x86-mobilenetv2-0-log-local.txt
├── megcc-x86-mobilenetv2-3-log-local.txt
├── megcc-x86-resnet18-0-log-local.txt
├── megcc-x86-resnet18-3-log-local.txt
├── megcc-x86-resnet50-0-log-local.txt
├── megcc-x86-resnet50-3-log-local.txt
├── megcc-x86-shufflenetv2-0-log-local.txt
├── megcc-x86-shufflenetv2-3-log-local.txt
├── megcc-x86-vgg11-0-log-local.txt
├── megcc-x86-vgg11-3-log-local.txt
├── megcc-x86-vgg16-0-log-local.txt
└── megcc-x86-vgg16-3-log-local.txt
0 代表只测速的 log, 3 代表 profile 的 log
注意:需安装 matplotlib
可视化不同模型的推理结果
benchmark 下tools/inference_visual.py工具可以用于分析测速日志,获取各个模型推理的性能对照,用法如下:
python3 tools/inference_visual.py output -o figure_dir
运行完后会在 figure_dir 目录下生成如下所示的性能对照图:
可视化不同内核在不同模型中的分析结果
benchmark 下tools/cc_analysis.py工具可以用于分析profile日志,获取各个模型推理时前10个最耗时的kernel 耗时占比饼图,用法如下:
python3 tools/cc_analysis.py output -o figure_dir
运行完后相关饼图也会在 figure_dir 目录下生成, 示例如下: