Open ysh329 opened 4 years ago
# CPU 1,2,4线程性能
# mnasnet_1.0_224 armv8-cpu threads:1,2,4
min=102048 max=102730 avg=102384
min=293583 max=355475 avg=328560
min=164904 max=211662 avg=189418
# mobilenet_v1_1.0_224 armv8-cpu threads:1,2,4
min=154950 max=156463 avg=155844
min=397915 max=472597 avg=435525
min=197265 max=287929 avg=252718
# mobilenet_v1_1.0_224_quant armv8-cpu threads:1,2,4
min=65783 max=66270 avg=66037.9
min=38575 max=38884 avg=38764
min=23286 max=23863 avg=23594.1
# mobilenet_v2_1.0_224 armv8-cpu threads:1,2,4
min=102584 max=103298 avg=103018
min=246394 max=341243 avg=308457
min=160923 max=212959 avg=186528
# mobilenet_v2_1.0_224_quant armv8-cpu threads:1,2,4
min=55023 max=55343 avg=55191.7
min=33395 max=33988 avg=33674.5
min=21856 max=22272 avg=22097.8
# nasnet_mobile armv8-cpu threads:1,2,4
min=229487 max=235007 avg=232925
min=700011 max=771798 avg=727812
min=675640 max=806278 avg=732020
# squeezentv1.0 armv8-cpu threads:1,2,4
min=214243 max=218894 avg=216610
min=349433 max=456087 avg=398142
min=202149 max=215569 avg=211357
# ARMv8-CPU 1,2,4线程性能
# mnasnet_1.0_224 armv8-cpu threads:1,2,4
min=108165 max=109337 avg=108787
min=148973 max=167006 avg=159535
min=222008 max=229384 avg=224901
# mobilenet_v1_1.0_224 armv8-cpu threads:1,2,4
min=163745 max=171952 avg=166583
min=367913 max=384085 avg=372927
min=255050 max=282610 avg=273626
# mobilenet_v1_1.0_224_quant armv8-cpu threads:1,2,4
min=66699 max=66838 avg=66767.6
min=37413 max=37601 avg=37511.5
min=22707 max=22815 avg=22744.8
# mobilenet_v2_1.0_224 armv8-cpu threads:1,2,4
min=113392 max=143769 avg=117875
min=155522 max=166782 avg=161599
min=234480 max=239018 avg=236194
# mobilenet_v2_1.0_224_quant armv8-cpu threads:1,2,4
min=133474 max=134269 avg=133690
min=32370 max=32493 avg=32432.2
min=20993 max=21131 avg=21044.7
# nasnet_mobile armv8-cpu threads:1,2,4
min=238340 max=241155 avg=239684
min=680721 max=708213 avg=694333
min=576914 max=597362 avg=589411
# squeezentv1.0 armv8-cpu threads:1,2,4
min=230071 max=243180 avg=234774
min=183201 max=188201 avg=185056
min=286525 max=313425 avg=302760
基本概况
TensorFlow Lite 提供了转换 TensorFlow 模型,并在移动端(mobile)、嵌入式(embeded)和物联网(IoT)设备上运行 TensorFlow 模型所需的所有工具。TensorFlow Lite的文档很健全,与TensorFlow的文档在一起,Lite的代码与TensorFlow训练端看框架在一个仓库中,即tensorflow仓库的tensorflow/lite目录下:
不过我点击
查看示例
的时候,可能是因为网络缘故:通过科学上网,以全局代理方式正常打开。
编译和benchmark
但我要做的是性能测试,希望是在
shell
环境下测试tflite的性能,但是文档中都是要打包成APP的,装Android Studio等其它东西,但是发现这不是我期望的测试环境。在文档里找了半天,最终以
benchnmark
为关键词检索,搜到了:性能跑分 | TensorFlow Lite。文档开头便写道如何做性能测试和如何编译:点进去Android TFLite benchmark binary ,可以看到里面罗列了如何交叉编译Android的C++ Native的benchmark可执行文件,以及详细介绍了benchmark的使用参数:
/data/local/tmp/
路径下,使用该选项可能会失败,且目前benchmark调用该NNAPI的计算结果可能错误(关于NNAPI的其它选项这里略过,在后文中我们不测该NNAPI);下面根据性能跑分 | TensorFlow Lite中的tensorflow/lite/tools/benchmark的指导,根据
To build/install/run
这一小节进行编译,将其中的命令行整理成如下脚本:因为文档中没区分armv7、armv8,默认编译的是armv8,也根本找不到编译armv7,好在我在代码根目录下搜了
armeabi-v7a
,发现可以搜到,将这个armeabi-v7a
关键词作为cpu
参数替换,可以得到armv7
版本的tflite(编译完成后用file
命令确认得到的编译结果是32位的)。但根据前文中benchmark参数的使用,将所有情况(armv7-cpu、armv8-cpu)写成一键benchmark脚本(
benchmark
不支持gpu,虽然参数指定了,但性能仍旧是单线程CPU的性能):