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.xcuda12.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__)"
小提示:如果报错说找不到libnvinfer.so,八成是LD_LIBRARY_PATH没设对。在~/.bashrc里加一行: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。然后配置环境变量:

  1. 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
  2. 新建系统变量 TENSORRT_ROOT,值为 C:\TensorRT-8.6.1.6
  3. PATH 中添加 %TENSORRT_ROOT%\lib
  4. PATH 中添加 %TENSORRT_ROOT%\bin
警告:我曾经遇到过一个问题——Windows的PATH变量有长度限制(2048字符)。如果你之前装过很多软件,PATH可能已经很长了。这时候加新路径可能会被截断。建议把TensorRT的路径放在PATH的最前面。

接着安装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是挂载你的项目目录。我建议把项目代码和数据都挂载进去,这样在容器里编译好的模型可以直接保存到宿主机。

重点:Docker镜像里的TensorRT版本是固定的。如果你需要特定版本,可以去NVIDIA NGC官网查一下对应关系。比如TRT 8.6对应的是23.12这个tag。

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的输出,说明环境没问题。

小技巧:trtexec是TensorRT自带的工具,可以用来测试模型性能、验证精度。我每次部署新环境都会用它跑一遍,确保硬件和软件都正常。

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
重要提醒:如果你用的是WSL2 + Docker Desktop,记得在Docker Desktop的设置里开启"Use the WSL 2 based engine"和"Enable NVIDIA GPU support"。我有个学员就是忘了开这个,折腾了一下午。

好了,环境准备这部分就到这里。记住一句话:环境配好了,后面的事就顺了。下一章我们开始讲模型转换,到时候你会感谢今天认真配环境的自己。