2、环境准备:Ubuntu系统下TensorRT安装、Windows系统下TensorRT安装、Docker镜像部署、环境验证与常见问题
好,咱们直接进入正题。环境准备这关过不去,后面全是白搭。我见过太多同学卡在安装这一步,折腾一整天最后发现是版本没对上。今天我把三个主流平台的安装流程拆开揉碎了讲,你跟着走就行。
2.1 Ubuntu系统下TensorRT安装
Ubuntu是我个人最常用的部署环境。说实话,Linux下装TensorRT比Windows省心不少,但有几个坑你得提前知道。
2.1.1 安装方式选择
Ubuntu下主要有三种安装方式,我按推荐程度排个序:
| 方式 | 适用场景 | 推荐指数 |
|---|---|---|
| Deb包安装 | 快速上手、单机部署 | ⭐⭐⭐⭐⭐ |
| Tar包安装 | 需要自定义路径、多版本共存 | ⭐⭐⭐⭐ |
| 源码编译 | 定制化需求、特殊硬件支持 | ⭐⭐⭐ |
我个人习惯用Deb包安装。为什么?因为它会自动处理依赖,省去很多麻烦。你想想看,要是每次装个库都要手动解决依赖冲突,那得多崩溃。
2.1.2 Deb包安装步骤
先确认你的CUDA版本。我记得有一次帮同事排查问题,折腾了半天才发现他CUDA 11.4配了TensorRT 8.6,版本根本不兼容。所以第一步,跑一下这个命令:
nvcc --version
拿到CUDA版本后,去NVIDIA官网下载对应的TensorRT Deb包。下载时注意看文件名里的cuda11.x或cuda12.x标记。然后执行:
# 安装依赖
sudo apt-get update
sudo apt-get install libnvinfer8 libnvinfer-dev
# 安装TensorRT
sudo dpkg -i nv-tensorrt-repo-ubuntu2204-cuda12.5-trt8.6.1.6-ga-20240101_1-1_amd64.deb
sudo apt-get update
sudo apt-get install tensorrt
装完后,建议验证一下Python接口是否可用:
python3 -c "import tensorrt; print(tensorrt.__version__)"
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
2.2 Windows系统下TensorRT安装
Windows下的安装,嗯,这里要注意。相比Ubuntu,Windows的坑更多一些。我曾在Windows上部署一个项目,光环境就配了两天,最后发现是PATH变量顺序的问题。
2.2.1 安装包选择
Windows下推荐用Zip包安装。别用exe安装器,那个会把TensorRT装到Program Files里,路径带空格,后面编译的时候各种报错。你想想看,一个路径空格能让你排查半天,何必呢?
2.2.2 安装步骤
下载对应CUDA版本的Zip包,解压到C:\TensorRT-8.6.1.6。然后配置环境变量:
- 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
- 新建系统变量
TENSORRT_ROOT,值为C:\TensorRT-8.6.1.6 - 在
PATH中添加%TENSORRT_ROOT%\lib - 在
PATH中添加%TENSORRT_ROOT%\bin
接着安装Python wheel包。进入解压后的目录:
cd C:\TensorRT-8.6.1.6\python
pip install tensorrt-8.6.1.6-cp39-none-win_amd64.whl
注意选对Python版本。cp39对应Python 3.9,cp310对应Python 3.10,别搞混了。
2.3 Docker镜像部署
Docker部署是我现在最推荐的方式。说白了,Docker能帮你把环境问题一次性解决。我团队现在所有生产环境都用Docker,再也不用担心"在我电脑上能跑啊"这种问题了。
2.3.1 拉取官方镜像
NVIDIA官方提供了带TensorRT的Docker镜像,直接拉取就行:
docker pull nvcr.io/nvidia/tensorrt:23.12-py3
这个镜像包含了CUDA、cuDNN、TensorRT全套环境。你想想看,要是自己手动配,光CUDA和cuDNN的版本匹配就能折腾半天。
2.3.2 启动容器
docker run --gpus all -it --rm \
-v /path/to/your/project:/workspace \
nvcr.io/nvidia/tensorrt:23.12-py3
这里--gpus all是让容器能访问GPU。-v是挂载你的项目目录。我建议把项目代码和数据都挂载进去,这样在容器里编译好的模型可以直接保存到宿主机。
2.4 环境验证
装完环境,别急着跑项目。先做个快速验证,确保所有组件都能正常工作。我一般按这个顺序检查:
2.4.1 验证TensorRT核心库
# C++验证
dpkg -l | grep TensorRT # Ubuntu
# 或
trtexec --version
# Python验证
python3 -c "import tensorrt as trt; print(trt.__version__); print(trt.utils.get_builder_version())"
2.4.2 验证onnx-tensorrt
如果你要用ONNX模型转TensorRT,这个必须装:
python3 -c "import onnx; import onnx_tensorrt; print('ONNX-TensorRT bridge works')"
2.4.3 跑一个简单的推理测试
我习惯用trtexec跑一个快速测试,验证GPU和TensorRT的配合:
trtexec --onnx=test.onnx --fp16 --workspace=1024
如果能看到类似[I] TensorRT inference took X ms的输出,说明环境没问题。
2.5 常见问题与避坑指南
这部分是我最想跟你分享的。这些年踩过的坑,今天一次性告诉你。
2.5.1 CUDA版本不匹配
问题:安装TensorRT后,import时报错libcudart.so.X.X: cannot open shared object file
原因:TensorRT版本和CUDA版本对不上。
解决:去NVIDIA官网查TensorRT的Release Notes,里面有详细的CUDA版本兼容性列表。我曾经因为没看文档,装了个TRT 8.5配CUDA 11.8,结果折腾了两天才发现TRT 8.5只支持到CUDA 11.7。
2.5.2 Python版本问题
问题:pip install tensorrt时提示No matching distribution found
原因:TensorRT的Python wheel包只支持特定Python版本(通常是3.8-3.11)。
解决:用python3 --version确认你的Python版本。如果版本不对,建议用conda创建一个新环境:conda create -n trt_env python=3.9
2.5.3 动态链接库找不到
问题:运行程序时报错error while loading shared libraries: libnvinfer.so.X
原因:系统找不到TensorRT的库文件路径。
解决:Ubuntu下执行sudo ldconfig刷新库缓存。如果还不行,手动设置LD_LIBRARY_PATH。Windows下检查PATH变量是否包含lib目录。
2.5.4 Docker中GPU不可用
问题:在Docker容器里运行TensorRT,提示Could not load library libcudart.so
原因:没有安装nvidia-docker2或者启动容器时没加--gpus all参数。
解决:先确认宿主机上nvidia-smi能正常输出。然后安装nvidia-docker2:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
好了,环境准备这部分就到这里。记住一句话:环境配好了,后面的事就顺了。下一章我们开始讲模型转换,到时候你会感谢今天认真配环境的自己。