我试图在Pytorch上运行一段代码,但我得到了错误:
RuntimeError: CUDA error: no kernel image is available for execution on the device
我已经将问题缩小到CUDA版本不匹配的问题。我的机器有两个GPU:一台特斯拉GTX650(计算能力3.0)和一台GeForce K40c (计算能力3.5)。我在这里检查了计算能力:https://developer.nvidia.com/cuda-gpus。我的nvidia-smi
命令提供了以下内容:
nvidia-smi output (驱动版本: 470.57.02 & CUDA版本: 11.4)
而我的nvcc -V
命令提供了以下内容:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
10.1版本之所以存在,是因为我尝试安装该CUDA版本,特别是按照其他地方的说明(例如:https://medium.com/@anarmammadli/how-to-install-cuda-10-2-cudnn-7-6-5-and-samples-on-ubuntu-18-04-2493124478ca)
另外,我已经安装了带有conda
的cudatoolkit
,所以在我的conda list
上我有以下条目:
...
cudatoolkit 10.1.243 h6bb024c_0
...
根据https://github.com/moi90/pytorch_compute_capabilities/blob/main/table.md,我还安装了1.8.0 PyTorch版本。
但是,在Python 3.7.11中:
Python 3.7.11 (default, Jul 27 2021, 14:32:16)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.8.1'
>>> torch.version.cuda
'10.1'
>>> torch.cuda.get_arch_list()
['sm_37', 'sm_50', 'sm_60', 'sm_61', 'sm_70', 'sm_75', 'compute_37']
>>> torch.cuda.is_available()
True
我没有sm_35
,我需要它来使用特斯拉K40。我相信这就是为什么我一直收到CUDA error: no kernel image is available for execution on the device
错误的原因。我还在CUDA的10.2版本中尝试了上述所有方法,结果相同。
发布于 2021-09-29 06:38:22
我已经解决了我的问题。正如评论中所述,我需要一个支持sm_35
计算功能的PyTorch版本。这与当前的CUDA版本关系不大。最后,我找到了这些二进制文件:
https://blog.nelsonliu.me/2020/10/13/newer-pytorch-binaries-for-older-gpus/
我最终通过创建一个新环境并运行以下命令修复了这个问题:
pip install torch==1.3.1+cu92 -f https://nelsonliu.me/files/pytorch/whl/torch_stable.html
https://stackoverflow.com/questions/69364529
复制相似问题