Toybrick

rk3568板子+2个rk1808 NPU

gmi

新手上路

积分
19
发表于 2024-6-11 15:04:40    查看: 3114|回复: 12 | [复制链接]    打印 | 显示全部楼层
目前板子是3568,然后集成了2个1808的NPU,也就是说一个板子有3个NPU (3568NPU + 2 1808NPU),接口使用的是rknpu2,那么我在推理的时候怎么能同时使用这3个NPU 还是默认推理3个都会使用?







回复

使用道具 举报

jefferyzhang

版主

积分
13405
发表于 2024-6-11 15:14:30 | 显示全部楼层
三个是独立的,需要写代码自己分配用哪个
回复

使用道具 举报

gmi

新手上路

积分
19
 楼主| 发表于 2024-6-11 17:19:36 | 显示全部楼层
jefferyzhang 发表于 2024-6-11 15:14
三个是独立的,需要写代码自己分配用哪个

可是rk3568不是不支持分配rknpu核心吗?rknn api接口中也没有在初始化或者推理时指定哪个npu模块,如果有的话麻烦您提供一个示例,还有1808的npu是不是需要rknpu1 的sdk才能运行。
还有一个问题,rknn模型推理时不是串行的吗?分配给两个NPU模块是不是两个同时推理就是并行的了。
最后非常感谢您的回答。
回复

使用道具 举报

jefferyzhang

版主

积分
13405
发表于 2024-6-11 17:56:29 | 显示全部楼层
gmi 发表于 2024-6-11 17:19
可是rk3568不是不支持分配rknpu核心吗?rknn api接口中也没有在初始化或者推理时指定哪个npu模块,如果有 ...

不支持分配,需要自己调度。rknn不能自动多个npu串行,这个也是没有意义的,传输的时间远超过推理时间。

正确的多NPU设备玩法就是:

1. 三个NPU同时加载同一个模型,然后用负载均衡的方式轮流分配帧给不同的NPU设备推理。这样如果你的视频输入是60fps,但是一个npu推理该模型只能做到20fps,那么三个npu就可以实现60fps

2. 自行把模型拆成三个模型,例如像一些模型有多组backbone结构或者不同尺寸的backbone输入,就可以拆成多个后做成流水线推理
回复

使用道具 举报

gmi

新手上路

积分
19
 楼主| 发表于 2024-6-11 18:24:50 | 显示全部楼层
jefferyzhang 发表于 2024-6-11 17:56
不支持分配,需要自己调度。rknn不能自动多个npu串行,这个也是没有意义的,传输的时间远超过推理时间。

...

您可能理解错了,就是一个板子集成了2个1808的NPU,不是通过pcie接了两个1808终端设备
回复

使用道具 举报

jefferyzhang

版主

积分
13405
发表于 2024-6-12 08:45:03 | 显示全部楼层
没有区别啊,随便你接多少个,怎么接,都是这样的。
就好比你接了2个CPU或者GPU,你代码逻辑上没写他是不会自动加入运算的
回复

使用道具 举报

gmi

新手上路

积分
19
 楼主| 发表于 2024-6-12 09:45:34 | 显示全部楼层
本帖最后由 gmi 于 2024-6-12 09:50 编辑
jefferyzhang 发表于 2024-6-12 08:45
没有区别啊,随便你接多少个,怎么接,都是这样的。
就好比你接了2个CPU或者GPU,你代码逻辑上没写他是不会 ...

哦哦哦,我明白了,那怎么样才能将模型加载到指定的NPU设备吗?当初我也是这样想的,但是在rknn c api文档中没有找到相关的信息。所以我以为默认都会使用的。rknn_set_core_mask这个接口也不支持3568的设置,然后我就在这卡住了。所以您能给个示例吗?非常感谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

jefferyzhang

版主

积分
13405
发表于 2024-6-12 09:51:24 | 显示全部楼层
gmi 发表于 2024-6-12 09:45
哦哦哦,我明白了,那怎么样才能将模型加载到指定的NPU设备吗?当初我也是这样想的,但是在rknn c api文档 ...

rknn_set_core_mask是设置npu的核数,3568就一个核,没什么好设置的。
你正常写代码就不可能设置错,init_runtime时候都有指定NPU设备,每个session都是一个独立的npu设备
回复

使用道具 举报

gmi

新手上路

积分
19
 楼主| 发表于 2024-6-12 10:40:59 | 显示全部楼层
jefferyzhang 发表于 2024-6-12 09:51
rknn_set_core_mask是设置npu的核数,3568就一个核,没什么好设置的。
你正常写代码就不可能设置错,init ...

def init_runtime(self, target=None, target_sub_class=None, device_id=None, perf_debug=False, eval_mem=False,  async_mode=False, core_mask=NPU_CORE_AUTO, fallback_prior_device="cpu", update_npu_libs=False)
您说的是python的这个接口吗?这里应该是使用device_id指定终端设备的,就是您说的session,在rknn c api 中rknn_init 应该是对应的init_runtime这个接口吧并没有提供这块的参数
回复

使用道具 举报

jefferyzhang

版主

积分
13405
发表于 2024-6-12 10:45:37 | 显示全部楼层
都有的,文档先走读一下
回复

使用道具 举报

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

本版积分规则

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


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