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模块并不再支持两个及以上的网络输出模型.

你可能感兴趣的:(深度学习,计算机视觉,神经网络)