乐趣区

关于性能测试:MegEngine-使用小技巧如何做-MegCC-的模型性能评测

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 目录下生成,示例如下:

更多 MegEngine 信息获取,您能够:查看文档、深度学习框架 MegEngine 官网和 GitHub 我的项目,或退出 MegEngine 用户交换 QQ 群:1029741705

https://wiki.megvii-inc.com/pages/viewpage.action?pageId=4449…

退出移动版