绝大多数情况不是显卡或驱动坏了,而是装成了cpu-only版本;只需检查torch.__version__是否含+cu(如2.1.0+cu121),若为2.1.0+cpu或无后缀,即确认为cpu版,此时重装驱动或cuda无效。

直接说结论:torch.cuda.is_available() 返回 False,**绝大多数情况不是显卡或驱动坏了,而是你装的 PyTorch 本身就没带 CUDA 支持**——也就是装成了 CPU-only 版本。这个判断比重装驱动、重装 CUDA 快得多,也准得多。
怎么看自己装的到底是 CPU 还是 GPU 版 PyTorch
别猜,直接查版本字符串。PyTorch 的 GPU 版本在 torch.__version__ 里一定含 +cu,比如 2.1.0+cu121;CPU 版则是 2.1.0+cpu 或干脆就是 2.1.0(没后缀)。运行这三行:
import torch print(torch.__version__) print(torch.version.cuda) print(torch.cuda.is_available())
如果 torch.version.cuda 是 None,那就 100% 确认:你装的是 CPU 版。这时候再检查驱动、CUDA Toolkit 全是白忙。
- 用
pip install torch默认拿的就是 CPU 版(尤其在国内网络环境下) - 用
conda install pytorch不加 channel 或 cuda 指定,也极大概率是 CPU 版 -
torch.__version__里没+cuXXX,就别往下排查驱动了
为什么命令行是 True,但 PyCharm / VS Code 里是 False
根本原因是:**IDE 没用对 Python 解释器**。它可能在用系统默认 Python、旧 conda 环境、甚至虚拟环境里没装 torch 的那个解释器。最典型的症状是:which python 和 IDE 设置里显示的路径不一致。
- 在终端里运行
python -c "import torch; print(torch.__version__)",记下输出 - 在 IDE 里打开 Python Console,执行同样代码,对比输出是否一致
- PyCharm 要进
Settings → Project → Python Interpreter,确认路径和终端一致 - VS Code 看右下角 Python 解释器路径,按
Ctrl+Shift+P→Python: Select Interpreter切换
驱动够新,但 torch.version.cuda 显示的版本比 nvidia-smi 高
这是版本不匹配的明确信号。nvidia-smi 显示的是驱动能支持的最高 CUDA 版本(注意:不是已安装的 CUDA Toolkit 版本),而 torch.version.cuda 是 PyTorch 编译时绑定的 CUDA runtime 版本。规则很简单:驱动支持的 CUDA 版本 ≥ PyTorch 绑定的 CUDA 版本,才能过第一关。
- 运行
nvidia-smi,看右上角 “CUDA Version: 12.4” —— 这表示驱动支持 CUDA 12.4 及以下 - 如果
torch.version.cuda是12.6,那必然失败,得换更低版本的 PyTorch - 去 PyTorch 官网安装页,手动选
CUDA 12.4对应的 pip 命令,不要依赖自动推荐 - 别信“CUDA Toolkit 已装 12.6 就能跑”,PyTorch 自带 runtime,完全不依赖你本地装的 Toolkit
多卡机器只识别出部分 GPU 或完全不识别
不是硬件问题,大概率是 CUDA_VISIBLE_DEVICES 环境变量被意外设了值,或者你在容器/WSL 里没做设备透传。
- 运行
echo $CUDA_VISIBLE_DEVICES(Linux/macOS)或echo %CUDA_VISIBLE_DEVICES%(Windows),如果输出非空(比如0或1,2),就说明当前进程只被允许看到指定卡 - 临时清空它:
unset CUDA_VISIBLE_DEVICES(Linux/macOS)或set CUDA_VISIBLE_DEVICES=(Windows),再试is_available() - WSL2 用户必须确认已启用 GPU 支持:
nvidia-smi在 WSL 里能运行,且 Windows 端驱动 ≥ 515.48.07 - Docker 用户要加
--gpus all参数,否则容器内根本看不到/dev/nvidia*
真正卡住人的地方,往往不是驱动或硬件,而是版本字符串里一个 +cu 的有无、IDE 解释器路径的一个字符偏差、或者环境变量里一个被遗忘的数字。这些点不显眼,但一错全错。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











