torch.cuda.is_available()返回False说明GPU未接入PyTorch,需按驱动→CUDA运行时→PyTorch编译版本链路逐层排查;nvidia-smi是底层探针,必须先验证其正常输出,再检查torch.version.cuda、安装版本及设备可见性。

直接看 torch.cuda.is_available() 的返回值——这是唯一可信的判断依据。它为 False,说明GPU根本没接入PyTorch;为 True,才代表整条链路(驱动 → CUDA运行时 → PyTorch编译版本)已打通。别信 nvidia-smi 显示有卡、也别信 nvcc --version 有输出,那些只是“有硬件”或“有编译器”,不是“能算”。
先确认nvidia-smi能跑通,否则后面全是空谈
nvidia-smi 是最底层的探针,不依赖Python、不依赖CUDA Toolkit安装,只认NVIDIA驱动是否真正在内核里跑起来。
- 常见错误现象:
bash: nvidia-smi: command not found或执行后无GPU列表、只显示No devices were found - 实操建议:在宿主机终端(不是Docker容器内)直接运行;失败就去NVIDIA官网下最新驱动(2026年推荐 ≥535.x),Linux装完必须
sudo reboot,Windows也建议重启 - 注意:
nvidia-smi右上角写的CUDA Version: 12.4不是你装的CUDA版本,而是该驱动**最高支持的CUDA运行时版本**;PyTorch的cu121包可以跑,cu125就不行
检查torch.cuda.is_available()为什么是False
这个函数返回 False,通常不是单一原因,而是多个环节中某一个断了。排查顺序不能乱:
安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。
- 先查
torch.version.cuda:如果输出None,说明PyTorch压根没链接到CUDA运行时库(libcudart.so),大概率是LD_LIBRARY_PATH没包含对应CUDA Toolkit的lib64路径(如/usr/local/cuda-12.1/lib64) - 再查PyTorch安装方式:用
pip install torch默认装的是CPU版;必须明确指定CUDA版本,例如pip install torch --index-url https://download.pytorch.org/whl/cu121 - 最后看多卡环境下的设备状态:即使前面都对,若GPU被其他进程锁死(比如计算模式设为
EXCLUSIVE_PROCESS)、或显存被占满且无法分配新context,is_available()也可能返回False
验证GPU真正在算,不只是“看到”
光有 True 不够,得让张量动起来:
立即学习“Python免费学习笔记(深入)”;
- 运行
x = torch.randn(1000, 1000).cuda(),如果报错RuntimeError: CUDA error: no kernel image is available for execution on the device,说明GPU算力架构(Compute Capability)不匹配——比如你用的是老款GTX 960(CC 5.2),但PyTorch二进制包只编译了CC 6.0+的kernel - 用
torch.cuda.current_device()和torch.cuda.get_device_name(0)确认识别到的型号和你物理卡一致;torch.cuda.memory_allocated()能看到显存是否真被占用 - 容器场景下,仅加
--gpus all不够,必须确保宿主机的/dev/nvidiactl、/dev/nvidia-uvm、/dev/nvidia0这些设备节点被正确挂载进容器
最容易被忽略的点是:nvidia-smi 显示正常 + torch.cuda.is_available() 返回 True,不代表你的模型就在GPU上跑。你还得手动把模型和数据都调用 .to('cuda') 或 .cuda() ——PyTorch不会自动迁移,也不会报错提醒你忘了这步。

















