RuntimeError: cuda runtime error (700) : an illegal memory access was encountered at /pytorch/aten/s

在用torch + GPU运行程序的时候出现了这个错误,尝试了很多方法都没有解决, 最终踏破铁鞋无觅处, 解决办法竟然是升级了torch版本。

在这里记录一下踩坑历程, 避免更多的人踩坑。
遇到这个问题后, 我尝试了以下解决方案:

1 首先怀疑的是, 是不是有数据在CPU上, 运算在GPU上, 初步排查没有发现。

2 其次根据直接报错的位置进行分析, 发现报错的位置不是固定的, 但相对固定, 就那么2处, debug发现没问题,完整运行就出错, 后来发现不是一开始就出错, 而是推理到第9张图才报错。 检查了输入没问题, 只跟数据多少有关系。 但是代码中没有跟输入数量相关的特别处理。

3 进一步发现, 其中一个预训练权重不加载的话也没问题, 加了权重就有问题。

至此, 这个问题出现的非常诡异, 因为不是一开始就报错, 而是跑了一段才报错, 并且报错的位置又比较固定,但这个位置又没有特殊处理。 一时陷入僵局, 在网上疯狂搜索, 病急乱投医, 奈何都没有解决。

就在一筹莫展之际,我在多次运行中突然观察到了一个现象, 那就是每次报错前GPU的利用率都会达到100%, 但显存利用率也不高, 好像不至于Out of Memory。并且Out of Memory一般都会直接报出这个错。 但依稀发现了一些端倪, 可能跟显存之类的有关, 抱着试试的心态, 我升级了Pytorch的版本(从1.4升级到1.6版本), 问题竟然神奇的解决了。

我推测原因可能是不同的torch版本对GPU的显存利用优化不同。

这个答案不一定能解决你的问题,但是, 我想说的是, 遇到任何问题都要冷静分析, 不要放弃, 相信凡事必有因, 只要足够细心有耐心, 问题一定能解决。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年5月25日
下一篇 2022年5月25日

相关推荐