(ubuntu)YOLOv5报错:RuntimeError: CUDA error: no kernel image is available for execution on the …

笔者之前在另一台电脑成功跑通了自己修改的yolov5,但在新系统运行时报了如下错误

1
2
3
RuntimeError: CUDA error: no kernel image is available for execution on the device
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

查阅资料后发现,是因为在配置conda环境时,是直接一键pip install -r requirements。由于自己的显卡是RTX3050,算力8.6,而cuda10只能支持算力7.0以下的。(明明计算速度那么低要求这么高)因此可能引起pytorch和cuda版本不匹配。因此重装cuda

然而重装新cuda后还是不好使。。。

继续研究报错内容,觉得可能是因为pip install -r requirements安装的pytorch和cuda版本不匹配。于是自己写了一小段代码验证

1
2
3
4
5
6
import torch
import torchvision
print(torch.cuda.is_available())
a = torch.Tensor(5,3)
a=a.cuda()
print(a)

代码输出结果:第四行之前都执行正常,输出True。但之后报错,依旧和上面报错类似。

因此去官网下载了相匹配的pytorch

下载安装完后,重新执行了上面自己写的示例代码,输出结果正常如下

1
2
3
4
5
6
True
tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]], device='cuda:0')

就在我以为自己终于解决问题时,我重新执行了yolov5的代码,然而还是报原来的错。。

没办法,继续研究。由于代码已经在原来的电脑上成功执行过了,所以不可能是代码逻辑出问题。我看了下自己的调试配置信息,发现加载的权重不是我训练出来的best.pt,而是一个yolov5-s的初始权重。想到之前有人说权重版本不对(比如第六版yolov5用第五版权重)也可能会报同样的错,我将权重改为自己的best.pt

程序终于顺利执行,开始报下一个与此问题无关的错(手动微笑)

感觉已经被这个报错折磨好几次了,之前系统炸了记得笔记也没了,这次传到网上保存一下。