1. 理解TypeError: pybind11::init()报错的本质
当你看到TypeError: pybind11::init(): factory function returned nullptr这个错误时,本质上是在说TensorRT的Python绑定初始化失败了。这个错误通常伴随着CUDA初始化失败的警告信息,比如[TRT] [W] CUDA initialization failure with error: 35。
我在实际项目中遇到过多次这种情况,最让人头疼的是它往往发生在你已经确认TensorRT和CUDA安装"看起来"正常的情况下。比如你能成功导入tensorrt模块,也能打印出版本号,但一旦尝试创建Runtime或Builder对象时就会报错。
这个问题的核心在于CUDA运行时库版本与TensorRT版本不兼容。TensorRT是一个高度依赖CUDA的库,它对CUDA版本有非常严格的要求。当系统中存在多个CUDA版本,或者PyTorch等框架自带的CUDA与TensorRT要求的版本不一致时,就会引发这个问题。
2. 常见错误场景与诊断方法
2.1 PyTorch与TensorRT的CUDA版本冲突
这是最常见的场景之一。比如你的PyTorch 1.13可能自带CUDA 11.6,而安装的TensorRT 8.6.1需要CUDA 11.8。当你在同一个Python环境中同时导入torch和tensorrt时,CUDA运行时库的加载顺序就会导致冲突。
诊断方法很简单:
python -c "import torch; print(torch.version.cuda); import tensorrt; print(tensorrt.__version__)"
如果两个CUDA版本号不一致,那基本上可以确定是版本冲突问题。我曾在项目中遇到过torch报告CUDA 11.7而TensorRT需要11.8的情况,结果就是初
4617




被折叠的 条评论
为什么被折叠?



