背景
Tensorflow安装过程很痛苦,解决了不能识别GPU问题后,又出现“TF-TRT Warning: Could not find TensorRT”,关于这个问题官方也没有对应的解决办法。不断折腾过程中偶然发现了解决办法,做个记录,也为遇到相同问题的同行者提供参考
关注Tensorflow各依赖项的版本对应关系
安装前请先参考 Tensorflow官网 关于其依赖关系的版本对应关系,否则各种意外需要填入无尽的时间成本:
确定目标版本
安装Tensorflow前,本文设备环境如下表:
类目 | 版本 |
---|---|
Ubuntu | 20.04 |
显卡驱动 | 555.42.06 |
CUDA | 12.5 |
cuda toolkit | 12.2 |
cudnn | 8.9.7 |
tensorRT | 10.2 |
Python | 3.10 |
因此,基于上述官网版本关系,本文安装的Tensorflow的目标版本为“2.15”
读者请参考官网版本依赖找出自身设备环境的版本关系,以确定Tensorflow的目标版本
安装Tensorflow
安装依赖
pip install grpcio
Tensorflow
pip install --upgrade pip
pip install "tensorflow[and-cuda]==2.15" --extra-index-url https://pypi.nvidia.com
NOTE:区别于Tensorflow关于pip安装的官网内容,这里加入了“–extra-index-url https://pypi.nvidia.com”,否则会找不到对应版本
随后输入命令验证:
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
大概率会出现“TRT Warning: Could not find TensorRT”:
解决办法
把调试信息打开,查看找不到tensorrt的具体输出,在终端输入命令:
export TF_CPP_MAX_VLOG_LEVEL=3
随后再次运行官网验证命令:
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
很幸运,我们能看到在“TRT Warning: Could not find TensorRT”信息前,有提示找不到“libnvinfer.so.8.6.1”和“libnvinfer_plugin.so.8.6.1”
有了这个提示基本上就有解决思路了,首先找找设备上是否有这两个lib文件,通过搜索发现目录“/usr/lib/x86_64-linux-gnu”和“${HOME}/.local/python3.10/site-packages/tensorrt_libs”都有,且都是之前确认的版本为10.2的tensorrt:
剩下就是将这两个文件喂给Tensorflow,可以通过创建symbo link的形式,创建到目录“/usr/lib”下,输入命令:
sudo ln ~/.local/lib/python3.10/site-packages/tensorrt_libs/libnvinfer.so.10 /usr/lib/libnvinfer.so.8.6.1
sudo ln ~/.local/lib/python3.10/site-packages/tensorrt_libs/libnvinfer_plugin.so.10 /usr/lib/libnvinfer_plugin.so.8.6.1
NOTE:上述命令中的 “x.so.10” 以及“x.so.8.6.1”完全决定于设备环境所安装的依赖,请依据实际情况替换,不要直接复制执行!
最后,再次输入运行官网验证命令查看是否解决问题:
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
顺利的话,应该不再会看到“TRT Warning: Could not find TensorRT”信息的提示:
总结
记录下Tensorflow填坑过程,希望能帮助到有相同问题的伙伴,如有描述不清楚和不正确的地方,欢迎指正:xinjue.zou.whi@gmail.com