CUDA error: no kernel image is available for execution on the device 报错解决方法

装新环境按CLRNet项目要求装了个1.8.0的 pytroch,训练的时候报错。
先是显示 RuntimeError: CUDA error: no kernel image is available for execution on the device,网上查了一圈都说是当前显卡的算力太低,不支持高版本的 CUDA。
看了一眼显卡:3090;而且之前用 pytorch 也没出现这种问题。
往上翻了一下训练途中的 warning,看到一句:
GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation

UserWarning: 
NVIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.
If you want to use the NVIDIA GeForce RTX 3090 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/
warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))

错误描述: CUDA capability sm_86 是说当前 GPU 3090 算力是 8.6,与安装的 PyTorch 版本不匹配。虽然错误描述里说的是 PyTorch,但实际上是说 PyTorch 依赖的 CUDA 版本(因为我们安装的是 CUDA 版本的 PyTorch,如果使用 CPU 版的就不会有这个问题)。所以说,当前的 PyTorch CUDA 版本支持算力为只有 3.7、5.0、6.0、7.0,低于 GPU 3090 算力。
原因: 发现报错的原因是之前在搭环境时没有指定Cuda版本,默认下了10.2版本的cuda,因此不支持GPU3090的算力。需要安装11.2版本的Cuda才可支持。
关于 GPU 算力和 CUDA 算力的关系是:

  • 算力 8.0 的显卡可以在最高支持算力 8.6 的 CUDA 下正常运行
  • 但算力 8.6 的显卡不能在最高支持算力 8.0 的 CUDA下正常运行
  • 也就是说 CUDA 支持的最高算力要大于等于GPU本身的算力

关于版本问题:

  • CUDA 10.x 最高支持算力为 7.x,CUDA 11.x 最高支持算力为 8.x

报错环境:

  • Linux:Ubuntu 18.04
  • GPU:NVIDIA GeForce RTX 3090
  • CUDA:10.2
  • Pytorch:1.8.0
  • Python:3.8

解决方法

升级CUDA版本,然后安装与CUDA版本相对应的Pytorch。

笔者直接安装了11.1版本的CUDA以及对应的pytorch,进入Pytorch官网,通过安装命令直接安装所需的pytorch版本和Cuda
在这里插入图片描述
pytorch各版本和cuda版本对应关系
使用方法: 注意低版本的 pytorch 是否支持更高版本的 cuda。(高版本的pytorch一般能兼容低版本cuda)例如:你需要 1.7.0 的 pytorch,那么 cuda 只能 11.0 及以下。官方推荐的cuda版本为10.2和11.3,这两种 cuda 支持大多数的 pytorch 版本。
(不过一般人都是根据cuda装pytorch,谁没事指定pytorch版本反装cuda啊,哦是复现baseline啊,那没事了
在这里插入图片描述
显卡的算力与CUDA的算力对应关系
显卡的算力要高于CUDA的算力,并且在一般情况下,两者的算力应该在同一个版本下。例如,RTX 2080 Ti显卡的算力为7.5,那么在装CUDA时,应该装算力为7.X的CUDA,且7.5≥7.X。以笔者的经验来看,RTX 2080 Ti的显卡装CUDA Toolkit 10.x就行,RTX 3090的显卡装CUDA 11系列的就可以。
GPU型号和计算能力的关系
CUDA版本(如10.4)是指CUDA软件平台的版本,而计算能力(如sm_86)是架构的版本号。

每个GPU及计算能力之间的关系是一对多的,这个信息可以在Nvidia官网中查到,下面是一张截图:
在这里插入图片描述
图中显示,RTX 3090的计算能力架构版本号是8.6,对应sm_86。其中8是主版本号,6是次版本号。
CUDA版本
在搜索“如何查CUDA版本”时,你会得到好几个答案:

通过which nvcc查看运行API版本:

/usr/local/cuda-11.3/bin/nvcc
  1. 通过ls -l /usr/local/cuda查看/usr/local/cuda这个软连接指向哪里:
lrwxrwxrwx 1 root root 21 Nov 17  2020 /usr/local/cuda -> /usr/local/cuda-11.1/
  1. 通过nvidia-smi看上面的CUDA Version:驱动API版本

  2. 通过python -c "import torch; print(torch.version.cuda)"查看当前PyTorch使用的CUDA

上面四个版本可以各不相同。在使用PyTorch时,我们只需要关注4。

PyTorch内置对CUDA的支持,我们只需在安装PyTorch时选择正确的版本即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值