TensorRT导入报错
报错表现
在使用tensorrt加速推理pytorch模型过程中,出现如下报错
pycharm中导入tensorrt报错
代码:
import cv2
#import ...若干依赖库
import pycuda.driver as cuda
import pycuda.autoinit
import tensorrt as trt #先导入trt 再导入torch
import ctypes
报错信息:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 843, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "D:\Anaconda\install\envs\ShuiFa\lib\site-packages\tensorrt\__init__.py", line 129, in <module>
ctypes.CDLL(find_lib(lib))
File "D:\Anaconda\install\envs\ShuiFa\lib\ctypes\__init__.py", line 373, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 127] 找不到指定的程序。
python-BaseException
cmd中import tensorrt报错
在刚安装了tensorrt时,检验安装是否成功
import tensorrt
没有报错。
后来pycharm运行程序时报了以上错误,查找资料发现大多数说是版本问题之类的,然后就开始怀疑自己安装的tensorrt版本不匹配,于是想着通过torch查看cuda和cudnn版本,于是在命令行中输入了以下指令:
import torch
#...此处省略若干行
import tensorrt
然后触发了以下报错:
点击确定后,命令行报错信息如下:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Anaconda\install\envs\ShuiFa\lib\site-packages\tensorrt\__init__.py", line 129, in <module>
ctypes.CDLL(find_lib(lib))
File "D:\Anaconda\install\envs\ShuiFa\lib\ctypes\__init__.py", line 373, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 127] 找不到指定的程序。
报错原因
参考链接:https://github.com/NVIDIA/TensorRT/issues/3439
没看很明白。。。。翻译如下:
TensorRT 9.X要求在系统上安装cudnn和cublas。在Windows上,pytorch与cudnn捆绑在一起(可能是不同版本),这可能(取决于torch和tensorrt的相对加载顺序)导致与使用包管理器(pip或conda)安装的cudnn包发生符号冲突。这将在tensort10.0中修复。
为了解决这个问题,同时:
如果您的项目中安装了pytorch并导入了pytorch,请在安装TensorRT后卸载system cudnn包。
例如:https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT/blob/main/install.py L12-L14
在Torch之前导入TensorRT。
例如:https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT/blob/main/utilities.py L32-L33
解决方案
在Torch之前导入TensorRT。
import tensorrt as trt
import torch
没再报错。