pytorch torch.cuda.is_available() 返回 false 主因是 cuda 驱动、cuda toolkit 与 pytorch 版本不兼容,需满足:nvidia-smi 显示的 cuda version ≥ pytorch 所需版本 ≥ nvcc --version 输出版本(若装了 toolkit),并检查 wsl2/docker/用户组权限、gpu 架构匹配及资源占用。

PyTorch报错 torch.cuda.is_available() 返回 False
不是代码写错了,大概率是 CUDA 驱动、CUDA Toolkit 和 PyTorch 三者版本不兼容。PyTorch 官方预编译包只捆绑特定 CUDA 版本(比如 cu118 表示 CUDA 11.8),它不会自动适配你系统里装的驱动或本地安装的 nvidia-cuda-toolkit。
- 先运行
nvidia-smi看顶部显示的 “CUDA Version” —— 这是**驱动支持的最高 CUDA 版本**,不是你装的 Toolkit 版本 - 再运行
nvcc --version(如果报 command not found,说明没装 CUDA Toolkit 或没加到$PATH) - 最后查 PyTorch 官网下载页,确认你用的
pip install torch命令对应的是哪个cuXXX后缀 - 三者关系必须满足:
nvidia-smi显示的 CUDA Version ≥ PyTorch 所需的 CUDA Version ≥nvcc --version输出的版本(仅当手动装了 Toolkit 时才需比对)
装了驱动和 CUDA Toolkit,torch.cuda.device_count() 还是 0
常见于 WSL2、Docker 或多用户环境,GPU 设备节点没被正确挂载或权限未开放。
- WSL2:确认 Windows 主系统已安装 WSL2 GPU 支持(
nvidia-driver515+ +cudnnfor WSL),且 WSL 中运行ls /dev/nvidia*能看到设备文件 - Docker:启动容器时必须加
--gpus all(旧版用--runtime=nvidia),镜像内还需装匹配的libnvidia-container-tools - Linux 主机:检查当前用户是否在
video和render用户组里(groups命令查看),否则无法访问/dev/nvidia0 - 某些云平台(如 AWS g4dn)需要额外启用 ENA 和 NVIDIA persistence daemon,否则设备会“掉线”
RuntimeError: CUDA error: no kernel image is available for execution on the device
典型架构不匹配错误 —— PyTorch 编译时指定的 GPU 计算能力(Compute Capability)和你显卡实际支持的不一致。比如用 RTX 4090(CC 8.9)却装了只支持 CC 8.6 的 PyTorch。
- 查显卡 CC:运行
nvidia-smi --query-gpu=name,compute_cap --format=csv - 查 PyTorch 支持的 CC:看其 wheel 包名,如
torch-2.1.0+cu118-cp39-cp39-linux_x86_64.whl中隐含支持范围(通常 11.8 支持 CC 5.0–8.6;12.x 开始支持 8.9) - 解决办法只有换 PyTorch:去 PyTorch 历史版本页 找带
cu121或更高后缀的包(对应 CUDA 12.1+),再确认该版本 wheel 是否声明支持你的 CC - 别试图用
FORCE_CUDA=1 pip install强制源码编译 —— 没有对应 cuDNN 和 NCCL 头文件,大概率失败
验证时 torch.tensor([1.0]).cuda() 报错但 is_available() 是 True
说明 CUDA 初始化成功,但显存分配失败。这往往不是版本问题,而是资源冲突或初始化异常。
- 检查是否有其他进程占满显存:
nvidia-smi看Processes列,特别是残留的 Python 进程(kill -9掉再试) - 某些笔记本双显卡(Intel + NVIDIA)默认禁用独显,需进 BIOS 开启 Discrete Graphics 或在 NVIDIA 控制面板中设为“高性能处理器”
- PyTorch 1.12+ 在某些驱动下首次调用
.cuda()会触发 lazy init,若此时 GPU 正在做 ECC 校验或温度过高,可能静默失败 —— 加一句torch.cuda.synchronize()后再操作可暴露真实错误 - 虚拟环境里混装了多个 PyTorch(比如 conda 和 pip 各装一个),可能导致 CUDA context 初始化混乱,用
pip list | grep torch和conda list pytorch双查
nvidia-smi,再去 PyTorch 官网选对应 cuXXX 的安装命令,一步到位。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











