第2章:环境搭建与版本选择
说实话,很多同学刚开始接触TensorRT时,第一个坑就踩在环境搭建上。我见过太多人花了一整天装环境,结果版本对不上,编译报错,心态直接崩了。这一章,我就带你把这关过了。
2.1 版本匹配关系:别让版本坑了你
CUDA、cuDNN、TensorRT这三者的关系,说白了就是「底层驱动-加速库-推理引擎」的链条。版本不匹配,就像你给法拉利加了92号汽油——跑不起来。
我个人习惯用一个表格来对照,这样最清晰。下面是我整理的主流版本匹配关系:
| TensorRT版本 | CUDA版本 | cuDNN版本 | 备注 |
|---|---|---|---|
| 8.4.x | 11.6 / 11.7 | 8.4.x | 比较稳定的组合 |
| 8.5.x | 11.8 | 8.6.x | 支持FP8 |
| 8.6.x | 11.8 / 12.0 | 8.7.x | 我目前主力在用 |
| 9.0.x | 12.0 / 12.1 | 8.9.x | 新特性多,但生态还不够稳 |
2.2 两种搭建方式:Docker vs 源码编译
环境搭建主要有两条路:用Docker镜像,或者自己源码编译。我两种都试过,各有优劣。你想想看,如果你只是做推理部署,Docker是最省心的;但如果你要改TensorRT的源码或者做深度定制,那源码编译就是必经之路。
2.2.1 Docker镜像搭建(推荐新手)
Docker的好处是「开箱即用」。NVIDIA官方提供了TensorRT的Docker镜像,你拉下来就能跑。
# 拉取TensorRT 8.6的镜像
docker pull nvcr.io/nvidia/tensorrt:23.06-py3
# 启动容器,挂载你的项目目录
docker run --gpus all -it --rm \
-v /your/project:/workspace \
nvcr.io/nvidia/tensorrt:23.06-py3
进去之后,TensorRT已经装好了。你直接 python3 -c "import tensorrt as trt; print(trt.__version__)" 就能看到版本号。嗯,就是这么简单。
pip install pycuda onnxruntime-gpu。
2.2.2 源码编译(进阶玩家)
如果你需要定制TensorRT的插件,或者想用最新的开发分支,那就得走源码编译了。这条路稍微折腾一点,但自由度更高。
我记得第一次编译TensorRT时,光依赖就装了半小时。这里我把关键步骤列出来:
- 安装依赖: gcc、cmake、protobuf、libssl-dev 等。Ubuntu下直接
apt-get install就行。 - 下载源码: 从NVIDIA的GitHub仓库拉取对应分支。
- 配置编译选项: 用cmake指定CUDA路径、cuDNN路径。
- 编译:
make -j$(nproc),这个过程大概10-20分钟。 - 安装:
make install,然后设置环境变量。
# 以TensorRT 8.6为例
git clone -b release/8.6 https://github.com/NVIDIA/TensorRT.git
cd TensorRT
mkdir build && cd build
cmake .. -DTRT_LIB_DIR=/usr/lib/x86_64-linux-gnu \
-DCUDA_VERSION=11.8 \
-DCUDNN_ROOT=/usr/lib/x86_64-linux-gnu
make -j$(nproc)
make install
dpkg -l | grep protobuf 确认一下。
2.3 验证环境是否正常
不管用哪种方式,装完之后一定要验证。我一般会跑一个最简单的TensorRT程序:
import tensorrt as trt
# 创建builder和network
logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
network = builder.create_network()
# 打印版本信息
print(f"TensorRT version: {trt.__version__}")
print(f"CUDA version: {trt.__cuda_version__}")
print(f"cuDNN version: {trt.__cudnn_version__}")
# 检查GPU是否可用
import pycuda.driver as cuda
cuda.init()
print(f"GPU count: {cuda.Device.count()}")
如果这段代码能跑通,说明环境基本没问题了。如果报错,多半是版本不匹配或者路径没设对。
2.4 我的个人建议
如果你只是做课程里的实验,用Docker镜像最省事。但如果你要在生产环境部署,我建议你走源码编译——因为你可以控制每一个依赖的版本,而且方便后续加自定义插件。
嗯,环境搭建这部分就到这里。下一章我们开始写第一个TensorRT程序,到时候你就知道今天搭的环境有多重要了。