codeformer 中文文档 下载 App

CUDA not found 排查:从 nvidia-smi 到 PyTorch 驱动链路

症状

运行推理脚本时报类似错误:

RuntimeError: CUDA error: no kernel image is available for execution on the device
CUDA kernel errors might be asynchronously reported at some other API call
CUDA not available

排查流程(按顺序)

第一步:nvidia-smi

nvidia-smi

正常输出:显卡型号、驱动版本、CUDA Version 右上角显示。

如果这条命令都跑不通:

第二步:PyTorch 能不能看到 CUDA

import torch
print(f"PyTorch: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version (PyTorch): {torch.version.cuda}")

正常输出:True 和一个 CUDA 版本号(如 11.7)。

如果输出 False:

第三步:PyTorch 版本和驱动版本匹配吗

关键:PyTorch 编译时的 CUDA 版本(torch.version.cuda)必须 ≤ nvidia-smi 右上角的 CUDA Version。

驱动版本和支持的 CUDA 版本:

NVIDIA 驱动版本支持的最高 CUDA
≥ 525.60.13CUDA 12.0
≥ 520.56.10CUDA 11.8
≥ 515.43.04CUDA 11.7
≥ 510.47.03CUDA 11.6
≥ 495.29.05CUDA 11.5

检查你的 PyTorch 是用哪个 CUDA 版本装的:

pip show torch | grep -i "cu"
# 或看 pip list 里 torch 的版本号:torch==1.12.1+cu117 表示编译时用的 CUDA 11.7

不匹配示例:驱动只支持到 CUDA 11.6,但 PyTorch 是 cu117 版本 → PyTorch 看不到 CUDA。

修复:重新装匹配的 PyTorch:

# 例:驱动只支持 CUDA 11.6
pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116

第四步:其他常见原因

原因一:CUDA Toolkit 没装?

不需要单独装 CUDA Toolkit! PyTorch pip 包自带 CUDA runtime。只要驱动版本匹配就行。

很多旧教程说"装完驱动还要装 CUDA Toolkit"——这是老经验,现代 PyTorch 不需要。

原因二:conda 环境没激活

conda activate codeformer
python -c "import torch; print(torch.cuda.is_available())"

有时你在系统 Python 里装了 PyTorch(有 CUDA),但 conda 环境里没装(没有 CUDA)。每次跑推理前确认 conda activate codeformer。

原因三:WSL2 特殊情况

在 WSL2 里跑需要额外配置:

原因四:多显卡机器

如果有多张显卡,可以指定:

CUDA_VISIBLE_DEVICES=0 python inference_codeformer.py ...

或在 Python 里:

torch.cuda.set_device(0)

快速修复清单

症状最可能原因修复
nvidia-smi 无输出驱动没装 / 坏了重装 NVIDIA 驱动
torch.cuda.is_available()=FalsePyTorch CUDA 版本和驱动不匹配重装匹配版本的 PyTorch
CUDA 版本号低驱动过时升级 NVIDIA 驱动
之前能跑现在不能驱动被系统更新冲掉了重装驱动 + 重连 PyTorch

验证脚本

修好后跑一下确认:

import torch
import torch.nn as nn

# 创建一个简单的 CUDA tensor
x = torch.randn(100, 100, device='cuda')
y = x @ x  # GPU 上做矩阵乘法
print("CUDA OK!矩阵乘法成功,结果 shape:", y.shape)

如果不报错误,CUDA 链路就通了。