笔者之前在另一台电脑成功跑通了自己修改的yolov5,但在新系统运行时报了如下错误
RuntimeError: CUDA error: no kernel image is available for execution on the deviceCUDA 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版本不匹配。于是自己写了一小段代码验证
import torchimport torchvisionprint(torch.cuda.is_available())a = torch.Tensor(5,3)a=a.cuda()print(a)
代码输出结果:第四行之前都执行正常,输出True。但之后报错,依旧和上面报错类似。
因此去官网下载了相匹配的pytorch(我的cuda是11.1,也没问题)
下载安装完后,重新执行了上面自己写的示例代码,输出结果正常如下
Truetensor([[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
程序终于能正常执行