Toybrick

标题: rk3399pro npu支持多线程跑同一个模型吗? [打印本页]

作者: 111223    时间: 2019-3-13 20:26
标题: rk3399pro npu支持多线程跑同一个模型吗?
在android 应用层开多线程调用c层的rknnapi进行推理,(只初始化了一次),报以下错

03-13 10:32:02.631 19395-19697/com.example. D/mytest: rknn_input_set fail! ret=-3
03-13 10:32:02.631 19395-19699/com.example. D/NPUTransfer: ERROR: socket write fd = 49, n = -1: Bad file descriptor
03-13 10:32:02.631 19395-19699/com.example. E/RKNNAPI: rknn_input_set,  send(MsgInput 0) fail, -9 != 520311!
03-13 10:32:02.631 19395-19700/com.example. E/RKNNAPI: rknn_input_set,  context = 0 except at p_ctx->thread_exit == true, force destory context!
    rknn_input_set,  index = 0 is not in [0, -1]!
03-13 10:32:02.631 19395-19700/com.example. D/mytest: rknn_input_set fail! ret=-5
03-13 10:32:02.633 19395-19699/com.example D/mytest: rknn_input_set fail! ret=-3


    --------- beginning of crash
03-13 10:32:02.634 19395-19696/com.example. A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 19696 (Thread-10), pid 19395 (314.scanproject)
03-13 10:32:02.647 19395-19702/com.example. E/RKNNAPI: rknn_input_set,  context = 0 has been destory, p_ctx = nullptr!
03-13 10:32:02.647 19395-19702/com.example. D/mytest: rknn_input_set fail! ret=-7
03-13 10:32:02.651 19395-19703/com.example. E/RKNNAPI: rknn_input_set,  context = 0 has been destory, p_ctx = nullptr!
03-13 10:32:02.651 19395-19703/com.example. D/mytest: rknn_input_set fail! ret=-7
03-13 10:32:02.661 19395-19708/com.example. E/RKNNAPI: rknn_input_set,  context = 0 has been destory, p_ctx = nullptr!
03-13 10:32:02.661 19395-19708/com.example. D/mytest: rknn_input_set fail! ret=-7
03-13 10:32:02.673 19395-19706/com.example. E/RKNNAPI: rknn_input_set,  context = 0 has been destory, p_ctx = nullptr!
03-13 10:32:02.673 19395-19709/com.example. E/RKNNAPI: rknn_input_set,  context = 0 has been destory, p_ctx = nullptr!
03-13 10:32:02.673 19395-19706/com.example. D/mytest: rknn_input_set fail! ret=-7
03-13 10:32:02.673 19395-19709/com.example. D/mytest: rknn_input_set fail! ret=-7


作者: jefferyzhang    时间: 2019-3-14 09:00
npu不支持mini batch输入,输入只能是一次一个。

作者: shopping    时间: 2019-9-16 11:50
jefferyzhang 发表于 2019-3-14 09:00
npu不支持mini batch输入,输入只能是一次一个。

你好,看了社区其他帖子,问一句。你说 npu 不支持 多线程跑同一个模型,但是支持 多模型一起跑。目前我司的想法是,一块板子两个摄像头(不同视角)同时输入视频数据,同时返回结果(先不考虑硬件计算能力)。那我的技术实现就要同时运行两个算法模型,这个需要利用 opencl来完成,是吗?
作者: jefferyzhang    时间: 2019-9-17 09:04
shopping 发表于 2019-9-16 11:50
你好,看了社区其他帖子,问一句。你说 npu 不支持 多线程跑同一个模型,但是支持 多模型一起跑。目前我 ...

1.2已经支持mini batch输入了。
我们支持多模型同时跑,NPU是分时复用的,跟cl没啥关系。你两个模型都可以跑npu上
作者: gwjjj35    时间: 2019-9-17 11:24
jefferyzhang 发表于 2019-9-17 09:04
1.2已经支持mini batch输入了。
我们支持多模型同时跑,NPU是分时复用的,跟cl没啥关系。你两个模型都可 ...

那想请问一下,多模型可否是同一个模型呢?一次同时跑两个一样的模型?

作者: jefferyzhang    时间: 2019-9-17 11:28
gwjjj35 发表于 2019-9-17 11:24
那想请问一下,多模型可否是同一个模型呢?一次同时跑两个一样的模型?
...

可以
作者: shopping    时间: 2019-9-17 15:34
jefferyzhang 发表于 2019-9-17 11:28
可以

所以如果我想同时跑两个 mobilenet-ssd 模型,我要打开两个终端窗口,在不同窗口下运行 mobilenet-ssd demo或者将两个摄像头的输入组成一个 batch 输入到模型中。本人小白,所以问的比较多,麻烦谅解。
作者: jefferyzhang    时间: 2019-9-17 17:59
shopping 发表于 2019-9-17 15:34
所以如果我想同时跑两个 mobilenet-ssd 模型,我要打开两个终端窗口,在不同窗口下运行 mobilenet-ssd de ...

1.2版本开始已经支持batch输入了,这种做法没有问题。
或者两个进程(线程)单独送自己的数据给不同模型都可以
作者: shopping    时间: 2019-10-18 12:16
jefferyzhang 发表于 2019-9-17 09:04
1.2已经支持mini batch输入了。
我们支持多模型同时跑,NPU是分时复用的,跟cl没啥关系。你两个模型都可 ...

你好,老哥你说的这个NPU的 “分时复用” ,是不是类似于加了把互斥锁,一个 线程/进程 调用了NPU ,其他 线程/进程  只能等待?
作者: jefferyzhang    时间: 2019-10-18 12:20
shopping 发表于 2019-10-18 12:16
你好,老哥你说的这个NPU的 “分时复用” ,是不是类似于加了把互斥锁,一个 线程/进程 调用了NPU ,其他 ...

NPU是一个IP核,跟你单核CPU是一样的。单核CPU也是分时复用机制,一样可以写多线程代码
作者: shopping    时间: 2019-10-22 11:08
本帖最后由 shopping 于 2019-10-22 11:15 编辑
jefferyzhang 发表于 2019-9-17 17:59
1.2版本开始已经支持batch输入了,这种做法没有问题。
或者两个进程(线程)单独送自己的数据给不同模型 ...

你好,C++ 将两张图拼成一个batch,是不是将
  1. rknn_input inputs[1];
  2.   rknn_output outputs[2];
  3.   rknn_tensor_attr outputs_attr[2];
复制代码

改为:
  1. rknn_input inputs[2];
  2.   rknn_output outputs[4];
  3.   rknn_tensor_attr outputs_attr[4];
复制代码

结果输出的时候 inputs[0] 与 outputs[0]、outputs[1] , inputs[1] 与 outputs[2]、outputs[3] 是对应的吧?
作者: shopping    时间: 2019-10-22 11:20
jefferyzhang 发表于 2019-9-17 09:04
1.2已经支持mini batch输入了。
我们支持多模型同时跑,NPU是分时复用的,跟cl没啥关系。你两个模型都可 ...

你好,C++里将数据拼成一个 batch ,是不是将:
  1. rknn_input inputs[1];
  2. rknn_output outputs[2];
  3. rknn_tensor_attr outputs_attr[2];
复制代码

改为:
  1. rknn_input inputs[2];
  2. rknn_output outputs[4];
  3. rknn_tensor_attr outputs_attr[4];
复制代码

RKNN会将 inputs[0]与outputs[0]、outputs[1] , inputs[1]与outputs[2]、outputs[3]  对应好输出,是吧?




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