Toybrick

多个计算棒问题

WuKing

注册会员

积分
67
发表于 2019-8-14 16:01:09    查看: 7003|回复: 3 | [复制链接]    打印 | 显示全部楼层
我在PC Ubuntu 16.04 上接了2个1808计算棒,预想是让它们同时处理2张图片,但是通过输出的日志来看,感觉是串行并不是并行的。有没有人做过相关的设计的,可以一起探讨下。

下面是我的测试代码,其实就是例程mobilenet_v1稍微改写了一点:
  1. import numpy as np
  2. import cv2
  3. import time
  4. from multiprocessing import Process
  5. from rknn.api import RKNN

  6. def get_time_stamp():
  7.     ct = time.time()
  8.     local_time = time.localtime(ct)
  9.     data_head = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
  10.     data_secs = (ct - int(ct)) * 1000
  11.     time_stamp = "%s.%03d" % (data_head, data_secs)
  12.     return time_stamp

  13. def show_outputs(outputs):
  14.     output = outputs[0][0]
  15.     output_sorted = sorted(output, reverse=True)
  16.     top5_str = 'mobilenet_v1\n-----TOP 5-----\n'
  17.     for i in range(5):
  18.         value = output_sorted[i]
  19.         index = np.where(output == value)
  20.         for j in range(len(index)):
  21.             if (i + j) >= 5:
  22.                 break
  23.             if value > 0:
  24.                 topi = '{}: {}\n'.format(index[j], value)
  25.             else:
  26.                 topi = '-1: 0.0\n'
  27.             top5_str += topi
  28.     print(top5_str)

  29. def show_perfs(perfs):
  30.     perfs = 'perfs: {}\n'.format(outputs)
  31.     print(perfs)

  32. def infer_rknn(img_name, device_id):
  33.     rknn = RKNN()
  34.    
  35.     # pre-process config
  36.     print('--> config model')
  37.     rknn.config(channel_mean_value='103.94 116.78 123.68 58.82', reorder_channel='0 1 2')
  38.     print('done')

  39.     rknn.load_rknn('./mobilenet_v1.rknn')
  40.     ret = rknn.init_runtime(target='rk1808', device_id = device_id )
  41.     if ret != 0:
  42.         print('Init runtime environment failed')
  43.         exit(ret)
  44.    
  45.     img = cv2.imread(img_name)
  46.     img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


  47.     print(device_id + '--> Running model')
  48.     smp = get_time_stamp()
  49.     print(device_id +':'+ smp)
  50.    
  51.     outputs = rknn.inference(inputs=[img])
  52.     show_outputs(outputs)
  53.         
  54.     smp = get_time_stamp()
  55.     print(device_id +':'+ smp)
  56.             

  57. if __name__ == '__main__':
  58.     p_infer1 = Process(target=infer_rknn, args=('dog1.jpg', 'TS018080190600023'))
  59.     p_infer2 = Process(target=infer_rknn, args=('dog2.jpg', 'TS018080190600068'))
  60.    
  61.     p_infer1.start()
  62.     p_infer2.start()
复制代码
结果显示:
TS018080190600068--> Running model
TS018080190600068:2019-08-14 15:47:26.514
mobilenet_v1
-----TOP 5-----
[156]: 0.8837890625
[155]: 0.0677490234375
[188 205]: 0.00867462158203125
[188 205]: 0.00867462158203125
[263]: 0.0057525634765625

TS018080190600068:2019-08-14 15:47:26.592
TS018080190600023--> Running model
TS018080190600023:2019-08-14 15:47:26.819
mobilenet_v1
-----TOP 5-----
[156]: 0.8837890625
[155]: 0.0677490234375
[188 205]: 0.00867462158203125
[188 205]: 0.00867462158203125
[263]: 0.0057525634765625

TS018080190600023:2019-08-14 15:47:26.885



如果按预期的话,编号23和68的计算棒应该是差不过同步的吧?但实际显示在推理这边还是按先后顺序来的,是我的测试方法有问题还是?
回复

使用道具 举报

bobby_jiang

高级会员

积分
540
发表于 2019-8-15 09:32:19 | 显示全部楼层
两根计算棒,模型加载和推理都是多线程进行,没有所谓的先后顺序。
你看到的log先后打印是由于RKNN-toolkit把打印输出重定向导致的,其实npu的推理都是异步的。
回复

使用道具 举报

WuKing

注册会员

积分
67
 楼主| 发表于 2019-8-15 09:50:05 | 显示全部楼层
bobby_jiang 发表于 2019-8-15 09:32
两根计算棒,模型加载和推理都是多线程进行,没有所谓的先后顺序。
你看到的log先后打印是由于RKNN-toolkit ...

谢谢,那我对比下两根计算棒和单独一个跑60张图的时间,这样的话应该不会受到log影响
回复

使用道具 举报

xiaqing10

高级会员

积分
572
发表于 2019-8-27 11:16:41 | 显示全部楼层
bobby_jiang 发表于 2019-8-15 09:32
两根计算棒,模型加载和推理都是多线程进行,没有所谓的先后顺序。
你看到的log先后打印是由于RKNN-toolkit ...

我用一个pro+1808,可是跑出来也是发现是串行的.
回复

使用道具 举报

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

本版积分规则

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


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