Toybrick

标题: 预编译对模型的推理速度有怎样的影响? [打印本页]

作者: SimleLi    时间: 2020-7-7 10:15
标题: 预编译对模型的推理速度有怎样的影响?
本帖最后由 SimleLi 于 2020-7-7 10:15 编辑

RKNN 版本:
API: 1.3.0
DRV: 1.3.1
Toolkit: 1.3.2

测试模型由 pytorch 构建,源模型算力 2.66 GFLOPs,构建时开启8int量化。测试代码均为 C++。

测试模型的推理速度如下:
使用预编译:
模型初始化:<1s
模型推理一帧时间:17.138 ms(注:推理时间由 "rknn_perf_run" api 得到。
多次运行单张图片推理,平均 rknn_outputs_get API 用时:20ms

关闭预编译:
模型初始化:73s
模型推理一帧时间:89.5 ms(注:推理时间由 "rknn_perf_run" api 得到。
多次运行单张图片推理,平均 rknn_outputs_get API 用时:26ms

开启和关闭预编译对一帧推理时间,有比较大的影响!

RKNN Toolkit 1.3.2 文档 "build" api 说明 "pre_compile" 会影响首次启动速度,但并未提及对推理速度有影响。

预编译为啥对推理速度有影响?
哪位大佬能解下疑惑




作者: SimleLi    时间: 2020-7-9 15:30
RKNN 1.3.2 版本
l
ibrknn_api:build: 2020-01-07 08:35:59
rknn_server: 1.3.2
npu ko:  6.4.0.227915
librknn_runtime: 1.3.2
RKNN Toolkit: 1.3.2

开启预编译
模型初始化:<1s
rknn_inputs_set:1.5ms
run: 17ms
rknn_outputs_get: 1ms
连续推理出现:"GPU[0] hang, automatic recovery."

关闭预编译
模型初始化:78s
rknn_inputs_set:4ms(不稳定,3-11ms之间变动)
run: 19ms
rknn_outputs_get: 3ms
连续推理:30 fps(CPU应是瓶颈)

结论:
1. 1.3.2 版本模型推理在 API "rknn_run" 出阻塞,之前版本是 "rknn_outputs_get"。
2. 在1.3.2版本下,开启预编译,一帧推理可快 6.5ms。





作者: jefferyzhang    时间: 2020-7-9 15:36
预编译只对读取模型时间有影响,能提高load_model/init速度,对推理无影响。
没有预编译的模型在读取时候需要花时间编译,所以读取速度会变慢,仅此而已。
作者: SimleLi    时间: 2020-7-9 16:00
jefferyzhang 发表于 2020-7-9 15:36
预编译只对读取模型时间有影响,能提高load_model/init速度,对推理无影响。
没有预编译的模型在读取时候需 ...

虽然不知原因,实测结果是 预编译模型推理速度确实会快些。目前只测试一个模型,等测试其他模型再看。
作者: yancywang    时间: 2021-12-2 16:54
SimleLi 发表于 2020-7-9 16:00
虽然不知原因,实测结果是 预编译模型推理速度确实会快些。目前只测试一个模型,等测试其他模型再看。 ...

麻烦问下,预编译的开启后对其它网络也会有加速作用吗




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3