14. 附录05:TPU Profile工具使用指南
本章节主要是介绍如何利用Profile数据及TPU Profile工具,可视化模型的完整运行流程,以便于进行模型性能分析。
14.1. 编译bmodel
TPU Profile是将Profile数据转换为可视化网页的工具。首先先生成bmodel,下面以tpu-mlir工程中的yolov5s模型来演示。
由于Profile数据会把编译中的一些layer信息保存到bmodel中,导致bmodel体积变大,所以默认是关闭的。打开方式是在调用 model_deploy
时加上 --debug
选项。如果在编译时未开启该选项,运行时开启Profile得到的数据在可视化时,会有部分数据缺失。在Docker内生成bmodel的命令如下:
# 生成 top mlir
$ model_transform \
--model_name yolov5s \
--model_def ../yolov5s.onnx \
--input_shapes [[1,3,640,640]] \
--mean 0.0,0.0,0.0 \
--scale 0.0039216,0.0039216,0.0039216 \
--keep_aspect_ratio \
--pixel_format rgb \
--output_names 350,498,646 \
--test_input ../image/dog.jpg \
--test_result yolov5s_top_outputs.npz \
--mlir yolov5s.mlir
# 将top mlir转换成fp16精度的bmodel
$ model_deploy \
--mlir yolov5s.mlir \
--quantize F16 \
--processor bm1684x \
--test_input yolov5s_in_f32.npz \
--test_reference yolov5s_top_outputs.npz \
--model yolov5s_1684x_f16.bmodel \
--debug
通过以上命令,将 yolov5s.onnx
编译成了 yolov5s_bm1684x_f16.bmodel
,其中, --debug
参数将记录profile数据。
14.2. 生成Profile原始数据
将生成的 yolov5s_bm1684x_f16.bmodel
拷贝到已安装libsophon的运行环境上。同编译过程,运行时的Profile功能默认是关闭的,防止在做profile保存与传输时产生额外时间消耗。需要开启profile功能时,在运行编译好的bmodel前设置环境变量 BMRUNTIME_ENABLE_PROFILE=1
即可。然后用libsophon中提供的模型测试工具 bmrt_test
运行bmodel,生成profile数据。在Docker外执行如下命令:
export BMRUNTIME_ENABLE_PROFILE=1
bmrt_test --bmodel yolov5s_1684x_f16.bmodel
下面是开启Profile后运行输出的日志:
运行完成后会在当前目录生成 bmprofile_data-1
文件夹, 为全部的Profile数据。
14.3. 可视化Profile数据
将 bmprofile_data-1
目录拷贝回Docker内的tpu-mlir工程环境。tpu-mlir提供了 tpu_profile
脚本,来把生成的二进制profile数据转换成网页文件并进行可视化。在Docker内执行如下命令:
# 将bmprofile_data_0目录的profile原始数据转换成网页放置到bmprofile_out目录
# 如果有图形界面,会直接打开浏览器,直接看到结果
tpu_profile bmprofile_data-1 bmprofile_out
ls bmprofile_out
# echarts.min.js profile_data.js result.html
用浏览器打开 bmprofile_out/result.html
可以看到profile的图表。此外,该工具还有其他用法,可通过如下命令进行查看:
tpu_profile --help
更多的Profile工具使用分析说明请参考 https://tpumlir.org/zh-cn/2023/09/18/analyse-tpu-performance-with-tpu-profile.html