cuda error: no kernel image is available for execution on the device

1. 问题描述

有一个项目要用到torch,readme里的部署过程如下:

1
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge
BASH

但是环境配好了以后,一用到to(self.device)就会报以下的错:

1
runtimeerror: cuda error: no kernel image is available for execution on the device
BASH

以下是记录debug的过程

2. 排查过程

2.1 CUDA_LAUNCH_BLOCKING=1

报错信息中推荐将CUDA_LAUNCH_BLOCKING设置成1来debug,于是在代码头部添加如下代码:

1
2
import os
os.environ['CUDA_LAUNCH_BLOCKING=1']='1'
BASH

或者也可以在shell中python前加上:

1
CUDA_LAUNCH_BLOCKING=1 python xxx.py
BASH

然而,即使设置了该环境变量,也没有得到有用的信息

2.2 查看cudatoolkit

怀疑是cudatoolkit的版本有问题,遂查看一系列版本

1
2
3
4
5
import torch
print(torch.__version__) # PyTorch 版本
print(torch.version.cuda) # PyTorch 绑定的 CUDA 版本
print(torch.cuda.is_available()) # 检查 GPU 是否可用
print(torch.cuda.device_count()) # GPU 数量
BASH

经排查没有发现问题

PS: 此处说明一下torch版本和cuda版本的关系:

每个版本的Pytorch都是根据某个对应版本的cuda编译的

即使安装Pytorch时没有安装cuda,也仍然可以使用PyTorch内置的CUDA运行

具体的对应版本的安装方法可以查看pytorch官网

3. 解决方法

因为项目指定的torch和cuda版本很旧,我的显卡是4060较新

怀疑是某种不匹配

但是查阅资料发现:前例只有显卡太旧不支持新版本的cuda,报类似的错误,而没有我假设的情况

还是决定大胆假设。进行尝试:

先卸载旧版本

1
2
3
4
5
# 这三个是python包,既可以使用pip安装,也可以使用conda安装
pip uninstall pytorch torchvision torchaudio

# 而cudatoolkit只能使用conda安装(非python包)
conda uninstall cudatoolkit
BASH

再安装新版本

1
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia
BASH

经尝试竟然真的解决了问题

具体原因等时间空余后会补充

4. Reference

pytorch官网各版本安装文档:https://pytorch.org/get-started/previous-versions/


cuda error: no kernel image is available for execution on the device
https://cyandyue.github.io/2025/02/19/Linux-cuda-error-1/
作者
CYandYUE
发布于
2025年2月19日
许可协议