一、问题背景
在开发工业视觉检测软件过程中,项目集成了多个 AI 模块:
- YOLO目标检测
- OCR文字识别
- OpenCV图像处理
- PySide6界面框架
项目架构:
工业视觉软件 | | AlgorithmEngine | ┌──────┴────────┐ | | YOLO检测 OCR识别 | | PyTorch PaddleOCR GPU GPU/CPU启动程序时出现异常:
RuntimeError: generic_type: type "_CudaDeviceProperties" is already registered!导致:
fromultralyticsimportYOLO无法正常导入,程序启动失败。
二、错误现象
完整错误:
packages\ultralytics\utils\__init__.py", line 26, in <module> import torch File "C:\Users\admin\miniconda3\envs\pyside6\lib\site-packages\torch\__init__.py", line 218, in <module> from torch._C import * RuntimeError: generic_type: type "_CudaDeviceProperties" is already registered!调用流程:
main.py | | MainFunction.py | | AiTrain_Win.py | | from ultralytics import YOLO | | import torch | | torch._C加载失败 | | 程序异常退出三、运行环境
Python版本
Python 3.9显卡环境
GPU: Tesla P4 Driver: 560.94 CUDA: 12.6注意:
nvidia-smi显示的CUDA版本代表驱动支持版本,并不代表Python环境实际使用的CUDA版本。
PyTorch环境
torch 1.13.1+cu116 torchvision 0.14.1+cu116 torchaudio 0.13.1+cu116CUDA:
CUDA 11.6YOLO环境
ultralytics 8.4.95OCR环境
PaddleOCR PaddlePaddle GPU四、问题分析
1. 错误表象
错误发生位置:
fromultralyticsimportYOLO看起来像:
- YOLO版本问题
- PyTorch安装问题
- 模型文件问题
但是实际并不是。
2. 深层原因
项目同时使用:
PyTorch GPU和:
PaddlePaddle GPU两个框架都会加载:
CUDA Runtime cuDNN CUDA相关动态库加载关系:
CUDA Runtime | ┌─────────┴─────────┐ | | PyTorch PaddlePaddle | | torch._C paddle CUDA模块 | | _CudaDeviceProperties注册Windows环境下多个CUDA框架同时初始化时可能发生冲突。
最终导致:
_CudaDeviceProperties重复注册。
错误:
generic_type: type "_CudaDeviceProperties" is already registered本质:
CUDA运行环境初始化冲突,而不是YOLO代码错误。
五、问题排查过程
1. 检查PyTorch
执行:
pip list|findstr torch结果:
torch 1.13.1+cu116 torchvision 0.14.1+cu116 torchaudio 0.13.1+cu116PyTorch安装正常。
2. 检查YOLO版本
执行:
pip show ultralytics结果:
Version: 8.4.95Ultralytics安装正常。
3. 尝试降低Ultralytics版本
尝试:
ultralytics 8.4.x ↓ ultralytics 8.3.x ↓ ultralytics 8.0.x但是问题仍然存在。
说明:
问题不是单纯Ultralytics版本导致。
4. 检查Paddle环境
发现:
同时安装:
paddlepaddle-gpu和:
torch CUDA两个GPU框架同时占用CUDA。
最终定位:
PaddlePaddle GPU + PyTorch GPU ↓ CUDA初始化冲突六、解决方案
方案:PaddlePaddle改CPU版本
项目实际情况:
YOLO:
- 检测频率高
- 计算量大
- 需要GPU
OCR:
- 调用频率低
- 单次识别耗时可接受
因此调整:
YOLO ↓ PyTorch GPU OCR ↓ PaddleOCR CPU七、具体操作
1. 卸载Paddle GPU
执行:
pip uninstall paddlepaddle-gpu-y检查:
pip list|findstr paddle不要存在:
paddlepaddle-gpu2. 安装CPU版本Paddle
执行:
pipinstallpaddlepaddle==2.6.1验证:
importpaddleprint(paddle.__version__)print(paddle.device.get_device())输出:
2.6.1 cpu八、最终稳定环境
Python 3.10 PyTorch torch 1.13.1+cu116 torchvision 0.14.1+cu116 torchaudio 0.13.1+cu116 YOLO ultralytics 8.4.95 OCR paddleocr 2.7.3 paddlepaddle 2.6.1 CPU OpenCV opencv-python九、最终运行架构
工业视觉软件 | AlgorithmEngine / \ YOLO检测 OCR识别 | | PyTorch PaddleOCR | | CUDA GPU CPU | | 高性能检测 稳定识别十、总结
错误:
RuntimeError: generic_type: type "_CudaDeviceProperties" is already registered原因:
不是:
- YOLO模型错误
- torch版本错误
- ultralytics代码错误
真正原因:
PyTorch GPU 与 PaddlePaddle GPU 在Windows环境下同时初始化CUDA组件产生冲突。
解决方法:
- 保留主要计算框架GPU
- 辅助算法使用CPU
- 避免多个深度学习框架同时占用CUDA Runtime
对于工业视觉项目:
YOLO GPU + OCR CPU是一种更加稳定、更容易部署和维护的方案。