
本文主要介绍如何使用TNN来对模型性能进行分析,并打印网络结构的每一个op耗时。主要步骤TNN的官方文档已经有介绍,但是官方使用平台都是基于Linux系统进行一些编译操作。
本文主要介绍在windows系统下使用WSL来搭建TNN对Android库编译环境搭建步骤以及在执行性能分析脚本中遇到的问题。
上一篇文章中我介绍了windows上使用WSL2以及安装docker的步骤。现在我们相当于在window上已经拥有了一个Linux系统,并且安装有docker。
启动WSL后,在Ubuntu系统下进行如下操作:
git clone https://github.com/Tencent/TNN.git首先将NDK环境配置好。然后按照官方步骤进行编译。
我在编译过程中遇到的问题:
1. cmake的安装
wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.sh
sudo sh cmake-3.12.0-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir我安装的3.12版本。这里cmake版本和NDK有关联,如果安装r23那cmake最好使用19或以上。
2. 执行脚本遇到 bin/bash^M: bad interpreter 问题,这个主要是windows和linux的格式问题,set ff:unix就可以了。
不管是tensorflow还是pytorch等框架训练的模型,都需要转换到TNN的模型格式。上文我们介绍了WSL和安装docker的步骤,如果想直接使用镜像。
在TNN官网也提供了TNN模型转换的镜像:
如果使用源码编译,我遇到的问题:
我安装的版本:
pip3 install onnx==1.6.0 onnxruntime numpy onnx-simplifier==0.2.4 protobuf==3.4.0 requests以tensorflow模型为例:
首先我们将ckpt在本地转为pb模型,然后执行
python3 converter.py onnx2tnn model_pb.onnx -optimize -v=v3.0 -o ./ -align就可以生成如下文件

在进行性能测试执行脚本时,需要连接到设备。所以需要进行安装adb。在adb连接真机过程中遇到了无法连接设备的问题。网上很多方案指出windows和Linux上安装adb版本一致,以及端口被占用等解决方案都无效。我这边遇到的问题是windows上可以连接,但是Linux环境下无法连接。
最终解决方案:
强制将adb环境设置为使用windows的adb
vim ~/.bashrc
添加
# Android Debug Bridge
export PATH=$PATH:/mnt/d/tool/android-develpe-SDK/platform-tools/
alias adb='/mnt/d/tool/android-develpe-SDK/platform-tools/adb.exe'source ~/.bashrc
其中d/tool/android-develpe-SDK/platform-tools/是我本地安装adb的路径
还需要强制链接
sudo ln -s /mnt/d/tool/android-develpe-SDK/platform-tools/ /usr/lib/android-sdk/再次执行adb devices就可以看见设备了。
安装好环境,转换好TNN模型,并且连接上设备后,就可以执行脚本对模型进行性能分析了。参考步骤:

将需要测试到模型添加到benchmark_model_list中。执行如下脚本
./benchmark_models.sh -f结果会保存到benchmark_models_result.txt文件中。
就可以得到啊如下图所示每个op到耗时啦~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。