Toybrick

标题: 设置了rknn_batch_size后,推理出现段错误 [打印本页]

作者: 11111qq    时间: 2025-3-6 16:48
标题: 设置了rknn_batch_size后,推理出现段错误
我用一个双模态的onnx模型(这个onnx模型是一个batch_size=1的静态模型)成功量化转成了rknn模型,进行板端rknn_lite推理时也没有问题(batch_size=1),能够得到正常的mAP。但是我用其他批次比如2,4,8推理这个rknn模型,虽然能成功运行,但是得到的mAP就会有很大的波动,不准确了。

我现在想要推理不同批次的rknn模型,是需要在构建rknn模型的时候设置rknn_batch_size参数把?
我设置rknn_batch_size=2之后放到rk3588板子上推理会经常出现Segmentation fault,但也不是每次都会出现Segmentation fault,偶尔也能运行完,但得到的mAP也是不准确的。





作者: jefferyzhang    时间: 2025-3-7 11:01
设2就一定要传递2,他其实就只是一个新的维度的输入,nhwc,那你这四个维度就必须是固定的长度和空间,否则访问就会越界。
建议你用batch_size=1就好了,n=2时候就是推理两次而已,设置多了并不会有更高的推理效率提升
作者: 11111qq    时间: 2025-3-10 10:20
jefferyzhang 发表于 2025-3-7 11:01
设2就一定要传递2,他其实就只是一个新的维度的输入,nhwc,那你这四个维度就必须是固定的长度和空间,否则 ...

在rk3588上的多batch_size和batch_size=1的性能是差不多的吗?
我设置rknn_batch_size=2时,传进去的输入数据是固定的,shape都是是(2,3,640,640),输出的out是(2,25200,11),输入输出尺寸和pytorch模型是一样的,应该没问题把?为什么会出现Segmentation fault,您能讲一下可能是什么原因引起的吗,是npu内存分配的原因,内存不够,还是需要修改前后处理代码?我是在板端直接推理的,用的rknn_lite
作者: jefferyzhang    时间: 2025-3-10 10:50
11111qq 发表于 2025-3-10 10:20
在rk3588上的多batch_size和batch_size=1的性能是差不多的吗?
我设置rknn_batch_size=2时,传进去的输入 ...

我不是npu的开发者,无法就靠字面问题解释具体原因,段错误可以自己用gdb跟下,或者全部更新到最新版本再试。

性能方面我个人觉得是一样的,因为3588有3个npu核,你一个个图送和一次性送3张,耗费的时间是一样的,甚至有可能你在等待准备三张图的过程耗费时间还更多。
作者: 11111qq    时间: 2025-3-13 11:38
jefferyzhang 发表于 2025-3-10 10:50
我不是npu的开发者,无法就靠字面问题解释具体原因,段错误可以自己用gdb跟下,或者全部更新到最新版本再 ...

您好,还有个问题想请教下,rknn模型怎么计算出GOPS/GFLOPS,还有模型参数量
作者: leok    时间: 2025-3-14 11:18
11111qq 发表于 2025-3-13 11:38
您好,还有个问题想请教下,rknn模型怎么计算出GOPS/GFLOPS,还有模型参数量 ...

1、模型参数量在模型train完之后保存就是固定的了。
2、"rknn怎么计算" 你的问题就是有问题的,GOPS/GFLOPS代表npu算力,这个是你芯片选型完就确定的,是硬件IP核性能;

一个MFLOPS(megaFLOPS)等于每秒一百万(=10^6)次的浮点运算,

一个GFLOPS(gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算,

一个TFLOPS(teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)

一个PFLOPS(petaFLOPS)等于每秒一千万亿(=10^15)次的浮点运算,





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