【避坑指南】PyTorch报错“Torch not compiled with CUDA enabled”?三步搞定GPU环境与CPU降级

摘要:在Windows环境下使用YOLOv5等深度学习项目时,你是否遇到过RuntimeError: Torch not compiled with CUDA enabled?本文从真实报错出发,带你一步步诊断问题、确认PyTorch版本、根据显卡情况重装GPU版或强制切换到CPU模式。最终提供可直接复制粘贴的命令,并解析PyTorch CUDA编译的原理,帮助新手快速避坑。

引言

刚配好Anaconda环境、装完PyTorch和YOLOv5,信心满满地敲下 python detect.py --source 001.jpg,结果迎面而来一行红字:Torch not compiled with CUDA enabled。那一刻仿佛装了一台PPT演示机——显卡明明有,却完全派不上用场。别急,这个问题大概率是安装了纯CPU版本的PyTorch,根本连CUDA的影子都没编译进去。本文将带你三步摆脱这个坑,既能让GPU跑起来,也会告诉你在没有NVIDIA显卡时如何优雅降级。

环境说明

以下是我和多数读者遇坑时的典型配置(可对照自查):

组件 版本/说明
操作系统 Windows 10 / Windows 11
Python环境 Anaconda 下 Python 3.8+
PyTorch(初始) 纯CPU版本(torch.__version__ 为 1.x/2.x)
项目 YOLOv5(或任何需要GPU的PyTorch项目)
显卡(部分) NVIDIA GTX/RTX 系列,已安装驱动

如果你的 torch.cuda.is_available() 返回 False,且 torch.version.cudaNone,基本上就是踩了这个坑。

错误现场

当代码中试图将模型或数据转移到 GPU 时,会弹出如下错误:

# 比如这样一段代码
import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', device='0')
RuntimeError: Torch not compiled with CUDA enabled

或者在检测时直接报错:

Traceback (most recent call last):
  ...
  File "...\detect.py", line ..., in <module>
    ...
RuntimeError: Torch not compiled with CUDA enabled

这个错误的含义非常直白:你当前安装的 PyTorch 在编译时根本没有开启 CUDA 支持,自然无法调用任何与 GPU 相关的操作。

排查思路

遇到这个问题,我并没有第一时间重装,而是做了以下一步步确认(你也可以跟着做一遍,未来排查类似问题会更有方向):

  1. 检查 PyTorch 的 CUDA 可用性
    打开 Python 交互环境,执行:

    import torch
    print(torch.cuda.is_available())   # 输出 False
    print(torch.version.cuda)          # 输出 None
    

    这个结果直接证明了当前安装的不是 GPU 版,而是纯 CPU 编译的包。

  2. 确认系统是否安装 NVIDIA 驱动及 CUDA 环境
    右键桌面 → NVIDIA 控制面板 → 系统信息 → 组件,查看 NVCUDA64.DLL 对应的 CUDA 版本(例如 12.2)。
    这一步让我们知道显卡驱动支持的 CUDA 等级,以便后续选择正确的 PyTorch 索引。

  3. 尝试卸载现有 PyTorch 并重装 GPU 版
    先用 pip uninstall torch torchvision torchaudio -y 清理掉 CPU 版本,然后从 PyTorch 官网获取适合 CUDA 版本的安装命令。
    比如我的 CUDA 版本是 12.2,我选择了针对 CUDA 12.1 的 PyTorch(兼容性最好),重装后问题解决。

  4. 如果没有 NVIDIA 显卡,放弃 GPU 幻想,锁定 CPU 执行
    对于只有集显的机器,直接把代码里的 device='0' / .cuda() 全部改成 device='cpu' 即可。

终极解决方案

根据是否有 NVIDIA 独显,分两条路走,每一步都附上可直接复制执行的命令。

情况A:机器配备 NVIDIA 显卡(最常见)

第1步:查看驱动支持的 CUDA 版本
  • 进入 NVIDIA 控制面板(桌面右键),点击“帮助” → “系统信息” → “组件”,在列表中找到 NVCUDA64.DLL 这一项,右侧会显示类似 12.2 的版本号。
  • 你的 PyTorch 对应的 CUDA 版本只要 <= 这个数字即可,通常安装 cu121(CUDA 12.1)或 cu118(CUDA 11.8)的轮子就能用。
第2步:完全卸载 CPU 版 PyTorch

打开 Anaconda Prompt 或 Windows Terminal,执行:

pip uninstall torch torchvision torchaudio -y

💡 如果之前用 conda 安装过,最好再用 conda uninstall pytorch torchvision torchaudio -y 清理一次,避免残留。

第3步:安装 GPU 版本 PyTorch

根据你的 CUDA 版本,从下面二选一:

  • 如果 CUDA 版本 ≥12.1(如12.2、12.3、12.4),推荐安装 CUDA 12.1 版:
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
    
  • 如果 CUDA 版本为 11.x(如11.7、11.8),安装 CUDA 11.8 版:
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    
  • ⚠️ 切勿为了追求版本一致而手动安装不存在的 cu122 索引,PyTorch 官网未提供 12.2 对应的预编译包,12.1 是官方最推荐的。
第4步:验证安装是否成功
python -c "import torch; print(torch.cuda.is_available())"

输出 True,并且可以通过下面命令查看 GPU 名称:

import torch
print(torch.cuda.get_device_name(0))
第5步:在 YOLOv5 等项目中启用 GPU

运行检测时,加上 --device 0

python detect.py --source 001.jpg --weights yolov5s.pt --device 0

如果是脚本中加载模型,直接将 device 参数设置为 '0'(或 'cuda:0'):

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', device='0')

情况B:机器没有 NVIDIA 显卡(集显/AMD 显卡)

这种情况下,无法使用 CUDA,只能强制使用 CPU。

  1. 无需安装任何额外包,保留 CPU 版 PyTorch 即可。
  2. 修改所有涉及 .cuda()device='0' 的代码:
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s', device='cpu')
    
  3. 检测命令里省略 --device 或显式指定 --device cpu
    python detect.py --source 001.jpg --weights yolov5s.pt --device cpu
    

原理浅析

为什么装了 PyTorch 还会报错“not compiled with CUDA”?
PyTorch 在发布时提供了多种预编译版本:纯 CPU 版、对应 CUDA 11.8 的 GPU 版、对应 CUDA 12.1 的 GPU 版……这些版本在编译时就决定了是否链接 CUDA 库。当你在命令行执行 pip install torch 时,pip 默认会拉取对你环境最通用的版本(通常是 CPU 版,因为不依赖 GPU 会更稳定)。只有显式通过 --index-url 指定 CUDA 索引,才会下载带有 CUDA 支持的轮子。因此,很多用户稀里糊涂就装成了“阉割版”。

类比一下:CPU 版的 PyTorch 就像一辆只有发动机(CPU)的车,而你却拼命想踩油门(调用 .cuda())让涡轮(GPU)介入,结果只能得到一个错误提示——这辆车根本没装涡轮。

重装 GPU 版后,底层 C++/CUDA 代码能通过 CUDA Toolkit 和驱动与显卡通信,torch.cuda.is_available() 也就能正常返回 True 了。

总结与避坑

  • 先用 torch.cuda.is_available() 诊断,返回 False 基本就是没装 GPU 版。
  • 根据驱动 CUDA 版本选择正确的 PyTorch 索引,主流选择 cu121cu118,不要手动编造。
  • 卸载旧版务必干净,pip 和 conda 混合安装时最好两边都卸载一次。
  • 没有独显就果断切 CPU,虽然速度慢,但比报错强。
  • 建议使用虚拟环境(conda create),隔离依赖,避免影响其他项目。

最佳实践:创建项目的 conda 环境时,直接通过一键命令安装 GPU 版 PyTorch,例如:

conda create -n yolov5 python=3.8 -y
conda activate yolov5
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

再也不用担心那句折磨人的“not compiled with CUDA enabled”啦。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐