PyTorch torch.cuda.is_available() 返回 False 的主因是 conda 环境中缺失或错配 cudatoolkit,而非驱动或显卡问题;需先清理所有残留 torch(含 pip 和多环境安装),再用 conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia 一步安装匹配版本,并验证 torch.cuda.get_arch_list() 是否包含显卡对应架构(如 sm_89)及张量能否真正分配到 GPU。

PyTorch 安装后 torch.cuda.is_available() 返回 False,大概率不是驱动或显卡问题,而是 cudatoolkit 版本与 PyTorch 编译时所用 CUDA 不一致,必须重装匹配的 cudatoolkit —— 即使你已安装完整 CUDA Toolkit(含 nvcc),conda 环境里缺这个包,PyTorch 就找不到运行时库。
先确认是不是 cudatoolkit 缺失或错配
别急着重装,先看关键证据:
- 运行
python -c "import torch; print(torch.cuda.get_arch_list())":如果输出空列表[],说明当前torch根本没编译 CUDA 支持,极可能是 CPU-only 版本覆盖了 GPU 版本 - 运行
conda list cudatoolkit:查环境里有没有cudatoolkit,版本号是多少;若无输出,就是缺失 - 运行
nvidia-smi:确认驱动支持的最高 CUDA 版本(右上角显示的CUDA Version: X.Y是驱动兼容上限,不是你该装的cudatoolkit版本)
重装前必须清理所有残留 torch
Windows 用户尤其容易中招:系统级 pip、用户级 Roaming Python、旧 conda 环境里可能埋着一个 torch CPU 版,它会优先被导入,导致你新装的 GPU 版完全不生效。
- 退出所有 conda 环境,执行
conda deactivate两次,确保回到base - 在
base下运行pip list | findstr torch(Windows)或pip list | grep torch(Linux/macOS):若有结果,用pip uninstall torch torchvision torchaudio彻底删掉 - 再进目标环境(如
conda activate myenv),执行conda remove pytorch torchvision torchaudio cudatoolkit,清空所有相关包 - 最后检查
python -c "import torch; print(torch.__version__)”是否报错 —— 报错才说明清干净了
用 conda 指定安装匹配的 pytorch + cudatoolkit
不要分开装。分开装(比如先 conda install pytorch 再补 cudatoolkit)极易错配。必须一步到位,让 conda 解析依赖关系。
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
立即学习“Python免费学习笔记(深入)”;
- 查你的显卡驱动支持的
cudatoolkit最高版本:参考nvidia-smi输出的CUDA Version,再对照 NVIDIA 官方表格(例如驱动 551.61 支持cudatoolkit≤ 12.4) - 选一个稳定、广泛验证的组合,比如驱动支持 12.4,就选
cudatoolkit=12.1(比上限低一档更稳) - 执行命令(以 Python 3.9、CUDA 12.1 为例):
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia - 注意:不要加
cudatoolkit=12.1参数!pytorch-cuda=12.1已隐含正确版本的cudatoolkit,手动指定反而可能触发 conda 冲突
验证时别只看 is_available()
返回 True 只是第一步。真正容易忽略的是架构兼容性 —— RTX 40 系列需要 sm_89,而旧版 PyTorch 可能只带 sm_86(RTX 30 系列),这时即使 is_available() 为 True,实际运行也会卡死或报错。
- 运行
python -c "import torch; print(torch.cuda.get_arch_list())":确认输出包含你显卡对应的架构(如['sm_86', 'sm_89']) - 运行
python -c "import torch; x = torch.randn(2,2).cuda(); print(x.device)":真正在 GPU 上分配张量,避免假阳性 - 如果仍失败,且
get_arch_list()有内容但训练崩溃,大概率是 PyTorch 版本太旧(如 2.0.x 对 RTX 4090 支持不全),直接升到 2.4+ 或 2.5+
最常被跳过的动作是清理多层残留 torch;最容易被误信的信号是 nvidia-smi 显示 CUDA 版本高就以为“随便装个高版本就行”。其实 cudatoolkit 版本必须和 PyTorch 编译版本严丝合缝,差一个小数点都可能失效。

















