1、TensorRT基础回顾:TensorRT是什么、推理引擎与训练框架的区别、TensorRT的安装与版本选择
好,咱们直接进入正题。这一章是给整个课程打地基的。你可能会想:「TensorRT 嘛,不就是个推理加速库吗?」嗯,对,但不全对。我见过不少同学,训练框架玩得飞起,一到部署就翻车。说白了,就是没搞懂训练和推理的本质区别。
我个人习惯,每接触一个新项目,第一件事就是搞清楚「它到底解决什么问题」。TensorRT 也一样。咱们先把它是什么、为什么需要它、怎么装,彻底捋一遍。
1.1 TensorRT 到底是什么?
TensorRT,全称 NVIDIA TensorRT,是一个高性能深度学习推理引擎。注意,是「推理引擎」,不是训练框架。它由 NVIDIA 开发,专门针对 NVIDIA GPU 做了极致优化。
我打个比方你就明白了。训练框架像是一个厨师学校,负责教会模型怎么做菜。而 TensorRT 呢?它像是一个米其林餐厅的后厨,只负责把已经学会的菜,以最快的速度、最少的成本做出来。学校教的是「会做」,后厨追求的是「快、稳、省」。
核心要点:TensorRT 不参与模型训练,它只负责把训练好的模型,转换成能在 GPU 上高效运行的推理引擎。
我在项目中遇到过不少新手,拿着 PyTorch 训练好的模型,直接就用 Python 脚本上线推理了。结果呢?延迟高、吞吐低,GPU 利用率不到 20%。后来换成 TensorRT,同样的模型,吞吐量翻了 3 倍,延迟降到了原来的三分之一。嗯,这就是专业工具的价值。
1.2 推理引擎 vs 训练框架:到底差在哪?
很多同学会问:「我直接用 PyTorch 推理不行吗?为什么非要折腾 TensorRT?」
行,当然行。但你要想清楚,训练框架和推理引擎的设计目标完全不同。咱们用一张表来看清楚:
| 对比维度 | 训练框架(PyTorch/TF) | 推理引擎(TensorRT) |
|---|---|---|
| 核心目标 | 灵活性、可调试性 | 极致性能、低延迟 |
| 精度需求 | FP32 为主,保留梯度 | FP16/INT8/INT4,可量化 |
| 算子支持 | 全量算子,动态图 | 精选算子,静态图优化 |
| 内存管理 | 动态分配,方便调试 | 预分配池化,零拷贝 |
| 部署形态 | Python 脚本为主 | C++/Python SDK,可嵌入 |
你想想看,训练的时候,我们需要反向传播、需要梯度计算、需要随时改网络结构。这些灵活性在推理阶段完全用不上。推理只需要一件事:前向计算,越快越好。
TensorRT 做了哪些优化?我简单列几个:
- 层融合(Layer Fusion):把 Conv + BN + ReLU 这种常见组合,合并成一个 kernel 执行。省去了中间读写显存的开销。
- 精度校准(Precision Calibration):支持 FP16 和 INT8 量化。我做过一个分类模型,INT8 量化后精度只掉了 0.3%,但速度提升了 4 倍。
- 内核自动调优(Kernel Auto-Tuning):针对你的 GPU 型号,自动选择最优的 kernel 实现。
- 显存池化(Memory Pool):避免频繁的 cudaMalloc/cudaFree,减少开销。
我的经验:如果你只是做实验、调模型,用 PyTorch 推理完全没问题。但一旦要上线、要服务用户、要压榨 GPU 性能,TensorRT 几乎是必选项。我曾经在一个视频分析项目里,用 TensorRT 把 8 张 V100 的集群,硬生生压到了 4 张就能扛住线上流量。省下来的 GPU 成本,够团队吃一年火锅了。
1.3 TensorRT 的安装与版本选择
安装 TensorRT,说简单也简单,说坑也多。我踩过的坑,今天一次性告诉你。
版本选择:别盲目追新
TensorRT 的版本号,目前主流是 8.x 和 10.x。怎么选?我给你一个实用建议:
- 看你的 CUDA 版本:TensorRT 对 CUDA 版本有严格依赖。比如 TensorRT 8.5 要求 CUDA 11.x,TensorRT 10.0 要求 CUDA 12.x。先查你的 nvidia-smi 输出,再选对应版本。
- 看你的 PyTorch/TF 版本:如果你用 PyTorch 导出模型,需要确保 ONNX 导出路径兼容。我建议用 PyTorch 2.0+ 配合 TensorRT 8.6+,兼容性最好。
- 别用太老的版本:TensorRT 7.x 及以下,对 Transformer、Attention 等算子的支持很差。如果你做 NLP 或多模态,至少 8.4 起步。
我曾经踩过的坑:有一次项目紧急,我直接装了最新的 TensorRT 10.0,结果发现公司的 CI/CD 环境还是 CUDA 11.8,根本跑不起来。最后只能降级到 8.6。所以,先确认环境,再选版本,别上来就 pip install 最新版。
安装方式:三种主流方法
我推荐三种安装方式,按优先级排序:
- Deb 包安装(推荐):从 NVIDIA 官网下载对应系统的 .deb 包。安装后会自动配置环境变量和库路径。适合服务器环境。
- Tar 包安装:解压到任意目录,手动设置 LD_LIBRARY_PATH。适合需要多版本共存的情况。
- Pip 安装:
pip install tensorrt。最方便,但只包含 Python 绑定,不包含 C++ 库。适合快速验证。
我个人习惯用 Deb 包。为什么呢?因为它会把 TensorRT 的库文件、头文件、工具链(trtexec、polygraphy 等)一次性装好。尤其是 trtexec,这个工具在调试模型时太好用了,后面章节我会专门讲。
安装完成后,验证一下:
# 检查 Python 绑定
python -c "import tensorrt; print(tensorrt.__version__)"
# 检查 C++ 库
dpkg -l | grep TensorRT
# 检查 trtexec 工具
trtexec --help
如果都能正常输出,恭喜你,环境搭好了。
Docker 镜像:懒人福音
如果你不想折腾环境,直接用 NVIDIA 官方提供的 TensorRT Docker 镜像:
docker pull nvcr.io/nvidia/tensorrt:23.12-py3
docker run --gpus all -it nvcr.io/nvidia/tensorrt:23.12-py3
镜像里已经预装了 TensorRT、CUDA、cuDNN,以及常用的 Python 包。我经常在开发机上用这个镜像做原型验证,省去了配环境的烦恼。
小技巧:如果你在公司内网,拉 Docker 镜像可能很慢。可以配置镜像加速器,或者提前把镜像导出成 tar 包,拷贝到内网机器上再 load。我团队就是这么干的,省了不少时间。
1.4 本章小结
嗯,这一章的内容就这些。咱们回顾一下:
- TensorRT 是推理引擎,不是训练框架。它只做前向加速,不做反向传播。
- 推理引擎和训练框架的设计目标完全不同。TensorRT 通过层融合、精度校准、内核调优等手段,把 GPU 性能压榨到极致。
- 安装 TensorRT 时,先确认 CUDA 版本,再选对应版本。Deb 包安装最省心,Docker 镜像最方便。
下一章,咱们会真正动手,把第一个模型转换成 TensorRT 引擎,并跑通推理流程。准备好了吗?