PyCUDA LogicError: cuModuleLoadDataEx failed: an illegal memory access was encountered,问题解决

项目场景:

在部署到边缘设备上时会用到tensorRT进行模型的量化加速推理,因为之前的网络只有一个输出,所以在推理部分都没啥问题,后面因为项目需求增加,所以对网络增加了一个分类的输出头,结果就是trt加速跑不通,尝试了很多办法都没搞定,后面脑袋感觉被驴踢了,一下就想到了一个解决方法,没想到还真的成功了

问题描述:

PyCUDA LogicError: cuModuleLoadDataEx failed: an illegal memory access was encountered
在推理的过程中一直报这个错,大致意思就是读取非法内存地址

原因分析:

在网上找了一些解决方案,都尝试了一下,大家也都可以尝试一下,因为不同的问题都可能导致相同的报错
1.训练保存的模型中有部分数据没有放到cuda中运行,而是在cpu上运行的,所以导致trt推理过程上述的错误,所以可以先检查一下你的模型是否存在这种问题
2.还有一种答案就是你在训练的过程中用了不同的gpu,这种问题一般是出现在分布式训练中,说白了就是计算过程中的运行环境存在差别
3.因为一直没有解决我的问题,所以我怀疑网络结构上出现了问题,所以将网络可视化出来查看,但是也并没有发现什么明显的问题

解决方案:

最终解决我遇到问题的方法就是我将网络的两个输出利用cat合并成了一个输出,然后再去推理,结果就没有问题了,推理出来的结果再解析成两个输出,所以我个人认为我这边使用到的trt模块并不再支持两个及以上的网络输出模型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值