PyTorch 装好了,torch.cuda.is_available() 为什么还是 False
CUDA Toolkit 已安装,PyTorch 仍看不到 GPU。按实际解释器、CUDA 构建、驱动与设备可见性检查,并区分可用性检测与实际内核兼容。
机器上能看到 NVIDIA 显卡,CUDA Toolkit 也已安装,运行 torch.cuda.is_available() 却返回 False。这几项检查的是不同东西:PyTorch 是否带 CUDA 支持、驱动能否初始化、当前进程能否看到设备,都可能影响结果。反复重装 Toolkit,未必改动了真正出问题的那一层。
下面针对 Windows 或 Linux 上的 NVIDIA CUDA 环境,检查方法按 PyTorch 2.8 的接口说明整理。ROCm、Apple MPS 和其他加速后端不应按这套 NVIDIA 安装路径处理;机器有 GPU,也不代表它能使用 CUDA。
从发生问题的 Python 环境读取信息
在报错的脚本、Notebook 内核或编辑器运行入口中检查。以下是诊断片段,只输出解释器、包信息及设备可用性:
import os
import sys
import torch
print("python:", sys.executable)
print("torch:", torch.__version__)
print("torch path:", torch.__file__)
print("CUDA build:", torch.version.cuda)
print("visible devices:", os.environ.get("CUDA_VISIBLE_DEVICES"))
print("CUDA available:", torch.cuda.is_available())
不要只在另一个终端运行后,就认定 Notebook 也使用了同一份包。路径不同,先调整运行入口;需要具体操作时,可参照安装包与编辑器解释器不一致的检查方法。
在预期的 NVIDIA 环境中,torch.version.cuda 为 None 是当前包没有 CUDA 构建信息的线索。此时应核对是否安装了 CPU 构建、是否导入了另一环境中的包,而不是先升级系统驱动。版本号中的后缀也有参考价值,但不能只看后缀下结论。
torch.version.cuda 有版本号,只说明这份 PyTorch 的 CUDA 构建信息存在,不能单独证明设备可用,也不要求它与本机 nvcc 显示的版本号完全相同。
CPU 构建与 CUDA 构建的处理不同
如果确认当前环境装了 CPU 构建,需要在目标环境中安装适合操作系统、Python 版本及项目依赖的 CUDA 构建。通过 PyTorch 安装选择器或目标版本的安装说明取得对应命令,再让当前解释器运行自己的包管理器。下面的命令只检查 pip 归属和现有安装,不会修改依赖:
python -m pip --version
python -m pip show torch
这里的 python 必须是上一段确认的解释器;项目用绝对路径管理环境时,替换成那个路径。安装命令中的 CUDA 软件源应来自选定版本的安装说明,不要照搬旧文章里的 cu92、cu113 或一个看起来较新的版本号。
保存原依赖清单和环境配置,优先在新建的项目环境中验证,再切换应用或 Notebook 内核。需要恢复时切回原环境。不要为修一个项目删除整台机器的 Anaconda、所有 Python 环境或所有 CUDA 文件。
已有 CUDA 构建,再看驱动与设备可见性
在运行应用的那台机器上查看 NVIDIA 驱动和显卡信息:
nvidia-smi
如果这一步无法访问设备,先处理驱动加载、设备分配或运行环境的问题。驱动更换可能影响其他 GPU 任务,应保留原版本与恢复方法,安排维护窗口,不能把重装驱动当成无影响的包更新。
如果 nvidia-smi 正常,仍需按 PyTorch 所用 CUDA 运行时核对驱动兼容范围。它显示的 CUDA 版本通常反映驱动支持能力,并不能证明本机安装了同版本 Toolkit。兼容性也不是“两个版本号必须相等”;CUDA 的兼容规则有版本范围和功能限制。
再查看诊断输出中的 CUDA_VISIBLE_DEVICES。它控制当前进程可见的 GPU,设为 -1 会隐藏所有 GPU。若调度器或容器平台有意分配了设备,保留平台分配,不要自行取消限制去占用别人的卡。配置确实写错时,从应用启动配置修正,并启动新的进程或内核后复查。
容器内的 PyTorch 与宿主机是两个观察位置。宿主机能看到显卡,不能证明业务容器已经取得 GPU;反过来,Compose 在解析 YAML 时就拒绝 devices,则应先处理Compose 的 GPU 设备请求配置。
返回 True 后,还要确认实际 CUDA 运算
显卡架构是否被选定的 PyTorch 构建支持,是另一项兼容条件。较旧显卡可能需要不同的受支持构建;较旧 PyTorch 也可能缺少较新显卡需要的支持。不要只因 is_available() 返回 False 就认定显卡太旧;同样,返回 True 也不保证所有 CUDA 内核都能执行。
在有空闲 GPU 的测试环境中,可用一个很小的运算确认当前解释器确实使用 CUDA。下面是验证示例,会分配少量 GPU 内存,不是训练任务:
import torch
if not torch.cuda.is_available():
raise RuntimeError("CUDA is still unavailable")
value = torch.tensor([1.0], device="cuda:0")
print((value + 1).cpu())
预期读回的数值为 2,且没有驱动初始化或不支持内核的错误。通过后再恢复实际应用的 GPU 配置,核对模型及输入的设备。若接下来报 CPU 与 CUDA 张量混用,应沿模型与张量的设备检查处理,不必重新安装整套 CUDA。


