torch.cuda.is_available()返回false的主因是驱动、cudatoolkit、pytorch三者版本不匹配:nvidia-smi显示的是驱动支持的最高cuda运行时版本(如12.2),需据此选择兼容的cudatoolkit(如11.8)并安装对应pytorch;须用conda-forge装toolkit、统一conda安装pytorch、验证torch.version.cuda与设备能力匹配,且运行gpu计算而非仅检查is_available()。

torch.cuda.is_available() 返回 False?别急着重装,大概率是版本链断在了某个环节——PyTorch 2.0 对 CUDA 的依赖不是“装了就行”,而是驱动、运行时、编译器、框架四者必须咬合到位。
先看 nvidia-smi 显示的 CUDA Version 是啥意思
它只是当前 NVIDIA 驱动**最高支持的 CUDA 运行时版本**,不是你已安装的 cudatoolkit 版本,更不代表 PyTorch 能用。比如输出 CUDA Version: 12.2,说明你可以安全装 cudatoolkit=11.8 或 =12.1,但不能装 =12.3。
常见误判:
-
nvcc --version没输出 → 不代表没 CUDA,conda 安装的cudatoolkit默认不含nvcc - 看到
nvidia-smi有输出就以为万事大吉 → 忽略了libcudart.so.11.8(Linux)或cudart64_118.dll(Windows)是否真实存在且路径可达 - 驱动版本低于
520.61.05却硬上cu118→ 直接导致torch.cuda.is_available()为False
conda 环境里装 cudatoolkit=11.8 的实操要点
用 conda 装比系统级安装更干净,但必须指定 channel 和约束条件:
- 创建干净环境:
conda create -n pt20 python=3.9(PyTorch 2.0 推荐 Python 3.9) - 激活后,优先用
conda-forge源装 toolkit:conda install cudatoolkit=11.8 -c conda-forge(pytorchchannel 的cudatoolkit常滞后) - 不要混用 pip 和 conda 装 torch:conda 环境里用
pip install torch==2.0.1+cu118可能破坏依赖图;应统一用conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 -c pytorch - 验证 toolkit 是否生效:
python -c "import torch; print(torch.version.cuda)"应输出11.8,且torch.cuda.is_available()为True
torch.compile 要生效,nvcc 必须在 PATH 里
PyTorch 2.0 的 torch.compile 默认走 inductor 后端,它需要调用本地 nvcc 编译 kernel。但 pip 安装的 +cu118 wheel 不含 JIT 编译链路,conda 安装又常漏掉 nvcc 路径。
检查方法:
-
nvcc --version必须成功输出,且版本号严格等于torch.version.cuda - Windows 下确保
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin在系统PATH中 - Linux 下检查
/usr/local/cuda-11.8/bin是否在PATH,且/usr/local/cuda符号链接没指向其他版本(如 12.1) - 运行
model = torch.compile(model)后,用torch._dynamo.utils.debug_prints()看 backend 是否为eager—— 是就说明没触发编译
验证时别只跑 is_available()
这个函数返回 True 只代表 PyTorch 能“看见” CUDA,不代表真能用。必须补这三步:
-
print(torch.cuda.get_device_name(0))—— 看显卡型号有没有被识别出来 -
print(torch.cuda.get_device_capability(0))—— 输出如(7, 5)表示 RTX 30 系列,若报错说明算力不匹配(比如装了 cu117 却用安培架构卡) -
torch.randn(1000, 1000, device='cuda').sum().item()—— 真正走一遍 GPU 计算,避免 driver 加载失败却没报错的静默问题
最易被忽略的是设备能力与 CUDA 版本的隐性绑定:RTX 30/40 系显卡必须用 cu118 或更高,cu117 构建的 PyTorch 会直接拒绝初始化。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











