torch.cuda.is_available()返回False主因是驱动、CUDA运行时或PyTorch版本三者未对齐;需先验证nvidia-smi驱动版本是否满足要求(如RTX 40系≥535.86.05),再用pip指定cu121渠道安装PyTorch 2.1.2,最后检查torch.version.cuda是否为'12.1'并运行GPU张量计算验证。

torch.cuda.is_available() 返回 False?别急着重装,大概率是环境链路断在了驱动、CUDA运行时或PyTorch版本三者之一。PyTorch 2.1 + CUDA 12.1 组合目前最稳,但必须按顺序对齐,跳步或倒置都会失败。
确认 NVIDIA 驱动是否真正支持 CUDA 12.1
这是最容易被忽略的前置条件——nvidia-smi 显示的 “CUDA Version” 是驱动能“向上兼容”的最高 CUDA 运行时版本,不是你装了啥就跑啥。RTX 40系需驱动 ≥ 535.86.05,A100/L40S 需 ≥ 535.104.05。
执行以下命令验证:
nvidia-smi --query-gpu=driver_version --format=csv,noheader,nounits
如果输出低于上述版本,pip install torch 即使指定 cu121 也会静默降级到 CPU 模式。此时必须先升级驱动,再重启系统(仅 reload nvidia module 不够)。
立即学习“Python免费学习笔记(深入)”;
用 pip 安装 PyTorch 2.1 时必须指定 cu121 渠道
PyTorch 2.1 的官方 pip 包已内置精简版 CUDA 12.1 运行时,但默认 pip install torch 会拉取 CPU 版本。你必须显式指定索引地址:
pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu121
注意三点:
- 不要用
conda install pytorch—— conda-forge 的 PyTorch 2.1 默认绑定 CUDA 11.8,与你的驱动和目标不匹配 - 版本号建议锁定(如
2.1.2),避免torch==2.1拉到未来可能回退的非 cu121 构建 - 安装后检查
torch.__version__和torch.version.cuda,后者应为'12.1',不是None
torch.cuda.is_available() 仍为 False 的常见原因
驱动和 pip 命令都对了,但 torch.cuda.is_available() 还是 False?重点排查这三项:
-
LD_LIBRARY_PATH(Linux)或PATH(Windows)里混入了旧版libcudnn.so.8或cudnn64_8.dll,导致 PyTorch 加载失败;建议清空相关路径,或用strace python -c "import torch"(Linux)看它到底在找哪个 so 文件 - Python 进程被启动在 Docker 容器或 WSL2 中,且未正确挂载 GPU 设备(
--gpus all或export LIBRARY_PATH=/usr/lib/wsl/lib) - 使用了虚拟环境但未激活,或者
pip装到了系统 Python 而不是当前环境(用which python和python -m pip list | grep torch双重确认)
验证 GPU 是否真能干活,不只是“能识别”
通过 torch.cuda.is_available() 只是第一步。很多环境能识别 GPU,却在 tensor 计算时报 CUDA error: out of memory 或卡死,说明底层 kernel 调度异常。
运行这段最小验证代码:
import torch<br>x = torch.randn(4096, 4096, device='cuda')<br>y = torch.randn(4096, 4096, device='cuda')<br>%timeit z = x @ y # 矩阵乘,触发实际 GPU 计算
关键看两点:
- 第一次执行是否报错(如
OSError: libcusparseLt.so.12: cannot open shared object file)——说明 CUDA 12.1 运行时缺库,需重装 PyTorch 或手动补全 -
%timeit结果是否明显快于 CPU(比如 5s)——否则可能是 PCIe 带宽受限、GPU 被其他进程占满,或驱动未启用 persistence mode
真正的坑不在安装命令,而在驱动版本与 PyTorch 构建版本之间那层看不见的 ABI 兼容性。哪怕只差一个小版本,torch.cuda.device_count() 可能返回 1,但 torch.tensor(..., device='cuda') 就会 segfault——这种问题不会报错信息,只会让进程消失。


















