Toybrick

预编译对模型的推理速度有怎样的影响?

SimleLi

注册会员

积分
134
发表于 2020-7-7 10:15:59    查看: 7159|回复: 4 | [复制链接]    打印 | 显示全部楼层
本帖最后由 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

注册会员

积分
134
 楼主| 发表于 2020-7-9 15:30:40 | 显示全部楼层
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

版主

积分
12919
发表于 2020-7-9 15:36:29 | 显示全部楼层
预编译只对读取模型时间有影响,能提高load_model/init速度,对推理无影响。
没有预编译的模型在读取时候需要花时间编译,所以读取速度会变慢,仅此而已。
回复

使用道具 举报

SimleLi

注册会员

积分
134
 楼主| 发表于 2020-7-9 16:00:25 | 显示全部楼层
jefferyzhang 发表于 2020-7-9 15:36
预编译只对读取模型时间有影响,能提高load_model/init速度,对推理无影响。
没有预编译的模型在读取时候需 ...

虽然不知原因,实测结果是 预编译模型推理速度确实会快些。目前只测试一个模型,等测试其他模型再看。
回复

使用道具 举报

yancywang

注册会员

积分
134
发表于 2021-12-2 16:54:42 | 显示全部楼层
SimleLi 发表于 2020-7-9 16:00
虽然不知原因,实测结果是 预编译模型推理速度确实会快些。目前只测试一个模型,等测试其他模型再看。 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表