CUDA环境检测正常但训练YOLOv8时触发torchvision::nms CUDA后端未实现错误求助
CUDA环境检测正常但训练YOLOv8时触发torchvision::nms CUDA后端未实现错误求助
看起来你的环境表面配置都对得上,但这个torchvision::nms的CUDA后端错误其实是挺常见的算子兼容问题,我给你几个实际可操作的排查和解决方向:
1. 先检查torchvision版本是否完全匹配Torch和CUDA
你只贴了Torch版本,但torchvision和Torch的版本必须严格对应,否则很容易出现算子不兼容的情况。先运行这段代码确认版本:
import torchvision print(f'torchvision version: {torchvision.__version__}')
正常来说,和Torch 2.1.1+cu121对应的torchvision应该是0.16.1+cu121。如果版本不对,直接重新安装对应版本:
pip install torchvision==0.16.1+cu121 --index-url https://download.pytorch.org/whl/cu121
2. 排查ultralytics库的版本兼容
YOLOv8的ultralytics库和Torch版本有时候会存在兼容冲突,特别是新的Torch版本搭配旧的ultralytics时。可以先尝试升级到最新稳定版:
pip install --upgrade ultralytics
如果升级后还是不行,试试降级到一个和Torch 2.1.1经过验证的稳定版本,比如:
pip install ultralytics==8.0.200
3. 临时切换到CPU模式排查问题
先在训练代码前加上强制CPU运行的设置,看看训练能不能正常跑起来——如果CPU能运行,那100%是GPU算子的匹配问题,回到前两步解决:
from ultralytics import YOLO from datetime import datetime, timedelta import torch # 临时强制用CPU运行(仅排查用) model = YOLO('yolov8n.pt') results = model.train(data='data.yaml', epochs=15, imgsz=[480, 352], device='cpu')
4. 确认cuDNN是否被PyTorch正确加载
虽然你设置了环境变量,但PyTorch可能没正确识别到cuDNN。运行这段代码检查:
print(f'cuDNN version: {torch.backends.cudnn.version()}') print(f'cuDNN enabled: {torch.backends.cudnn.enabled}')
如果输出cuDNN version: None或者版本和你安装的cuDNN不匹配(比如你装的是cuDNN 8.9.4 for CUDA12.1,应该输出8904),那需要:
- 把cuDNN解压后的
bin、lib\x64、include文件夹里的文件,直接复制到CUDA安装目录的对应文件夹下(比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1下的对应目录) - 重启PyCharm甚至电脑,再重新检查
5. 彻底清理缓存后重装依赖
如果上面的方法都不行,可能是pip缓存的旧包导致的混合版本问题,彻底清理后重装:
# 卸载所有相关库 pip uninstall -y torch torchvision torchaudio ultralytics # 清理pip缓存 pip cache purge # 重新安装对应版本的PyTorch全家桶 pip3 install torch==2.1.1+cu121 torchvision==0.16.1+cu121 torchaudio==2.1.1+cu121 --index-url https://download.pytorch.org/whl/cu121 # 安装最新版ultralytics pip install ultralytics --upgrade
备注:内容来源于stack exchange,提问作者Andrei




