第一章 课程导入:学习目标、适用人群、课程结构与环境准备

TensorRT 是 NVIDIA 推出的高性能深度学习推理优化引擎,能够将训练好的模型(如 ONNX、PyTorch、TensorFlow 格式)转换为针对特定 GPU 硬件深度优化的推理引擎(Engine),从而显著降低延迟、提升吞吐量。在工业级部署场景中,从 ONNX 到 TensorRT Engine 的转换是打通"训练-部署"链路的关键一环。本章作为整个课程的开篇,将明确学习目标与适用人群,梳理课程的知识架构,并带领你完成 CUDA、cuDNN、TensorRT 的完整安装与验证,为后续所有实战操作打下坚实的工具链基础。

TensorRT 模型转换课程知识框架与工具链 学习目标 掌握转换全流程与调优方法 适用人群 算法工程师 / 部署工程师 / 架构师 课程结构 30章:基础→进阶→实战 环境准备(本章核心) CUDA 12.x + cuDNN 8.9.x + TensorRT 10.x CUDA 安装 驱动匹配 → 安装 → nvcc -V 验证 cuDNN 安装 解压 → 复制头文件/库 → ldconfig TensorRT 安装 tar包 → 环境变量 → Python wheel 验证:trtexec --version + Python API 导入 确保 GPU 可被 TensorRT 正确识别与调用 ONNX 模型 Engine 构建 推理部署

1.1 学习目标:从"能跑通"到"跑得快"

本课程的核心目标不是简单地教会你执行一条 trtexec 命令,而是帮助你建立对 TensorRT 转换全链路的系统性认知。完成本课程后,你将能够:

  • 理解转换原理:掌握 ONNX 计算图与 TensorRT Engine 之间的映射关系,理解层融合(Layer Fusion)、精度校准(Calibration)、内核自动调优(Kernel Auto-tuning)等核心机制。
  • 独立完成转换:熟练使用 trtexec 命令行工具和 Python API 两种方式完成 ONNX 到 Engine 的转换,并能处理常见的转换报错。
  • 掌握精度调优:能够根据业务需求选择合适的精度模式(FP32、FP16、INT8),并掌握 INT8 校准数据集准备与精度验证方法。
  • 优化推理性能:学会使用 TensorRT 提供的 Profiling 工具定位性能瓶颈,通过动态形状(Dynamic Shape)、多流推理(Multi-Stream)等手段提升 GPU 利用率。
  • 解决工程问题:能够应对插件编写(Plugin)、自定义层实现、多模型串联等复杂部署场景。

课程定位:本课程定位于"工程落地",而非纯理论讲解。每一章都会围绕一个具体的转换或优化场景展开,提供可复现的代码、命令和参数配置。学完本课程后,你应该能够独立承担一个从 ONNX 到 TensorRT 的完整部署项目。

1.2 适用人群:谁需要学习这门课程?

TensorRT 转换涉及 GPU 底层架构、深度学习框架和推理优化三个领域的交叉知识,因此本课程适合以下三类人群:

人群类型 背景特征 核心诉求 本课程价值
算法工程师 熟悉 PyTorch/TensorFlow,了解模型训练 将训练好的模型部署到生产环境 掌握从 ONNX 到 Engine 的完整转换流程,理解精度损失原因
部署/推理工程师 有 C++/Python 服务端开发经验 优化推理延迟和吞吐量,降低 GPU 成本 深入 TensorRT 调优技巧,掌握性能分析工具
系统架构师 负责推理平台整体设计 评估 TensorRT 在不同硬件上的表现 了解 TensorRT 的能力边界与限制,做出合理技术选型

如果你属于以上任一群体,并且已经具备以下基础,那么本课程非常适合你:

  • 熟悉 Python 编程,了解基本的 Linux 命令行操作;
  • 对深度学习模型的基本结构(卷积、全连接、激活函数等)有概念性认识;
  • 拥有一台配备 NVIDIA GPU 的 Linux 机器(Ubuntu 18.04/20.04/22.04 均可),且 GPU 算力不低于 7.5(即 Turing 架构及以上,如 RTX 20 系列、T4、A100 等)。

1.3 课程结构:30章递进式学习路径

本课程共 30 章,按照"基础环境 → 核心原理 → 工具实战 → 高级优化 → 工程落地"五个阶段组织,每一章都包含理论讲解、代码演示和常见问题复盘。整体结构如下:

阶段 章节范围 核心内容 学习产出
第一阶段:环境与基础 第1-4章 环境安装、ONNX 格式详解、TensorRT 架构认知 完成工具链搭建,能运行第一个转换示例
第二阶段:转换核心 第5-10章 trtexec 使用、Python API 转换、动态形状、精度模式 掌握两种转换方式,理解 FP16/INT8 原理
第三阶段:性能优化 第11-18章 层融合机制、Profiling 工具、内存优化、多流推理 能够定位性能瓶颈并实施针对性优化
第四阶段:高级特性 第19-25章 插件编写、自定义层、多模型串联、TensorRT-LLM 解决复杂模型转换问题,扩展 TensorRT 能力
第五阶段:工程实战 第26-30章 完整项目案例、CI/CD 集成、容器化部署、性能监控 具备独立交付生产级推理服务的能力

每一章都遵循"原理讲解 → 操作演示 → 案例拆解 → 误区复盘"的闭环设计。建议你按照顺序学习,因为后续章节会频繁引用前面章节建立的概念和工具。如果你已经对 TensorRT 有一定了解,也可以直接跳转到感兴趣的章节,但至少需要熟悉第 1-3 章的内容。

1.4 环境准备:CUDA、cuDNN 与 TensorRT 安装实战

环境安装是 TensorRT 开发的第一步,也是后续所有实验的基础。很多初学者在这一步就遇到了版本不匹配、驱动冲突等问题。本节将带你完成一套经过验证的安装流程,并给出常见问题的排查方法。

1.4.1 版本选型与兼容性矩阵

TensorRT 对 CUDA 和 cuDNN 的版本有严格的要求。以 TensorRT 10.x 为例,其官方支持 CUDA 12.x 和 cuDNN 8.9.x。在安装之前,务必确认你的 GPU 驱动版本是否支持目标 CUDA 版本。你可以通过 nvidia-smi 查看当前驱动版本,并对照 NVIDIA 官方文档确认驱动与 CUDA 的兼容关系。

重要提醒:不要盲目安装最新版本的 CUDA。TensorRT 的发布节奏通常滞后于 CUDA,最新版 CUDA 可能尚未被 TensorRT 支持。建议优先选择 TensorRT 官方文档中明确列出的"已验证组合"。例如:CUDA 12.2 + cuDNN 8.9.5 + TensorRT 10.0.1 是一套经过广泛验证的稳定组合。

1.4.2 CUDA 安装步骤

CUDA 的安装推荐使用 NVIDIA 提供的 runfile 方式,以便灵活选择安装路径和组件。以下是基于 Ubuntu 22.04 的安装流程:

  1. 检查驱动:运行 nvidia-smi,确认驱动版本 ≥ 525.60.13(CUDA 12.0 的最低要求)。如果驱动过旧,请先升级驱动。
  2. 下载 CUDA Toolkit:从 NVIDIA 官网下载 cuda_12.2.0_535.54.03_linux.run。
  3. 执行安装:
sudo sh cuda_12.2.0_535.54.03_linux.run --toolkit --silent --override
# 参数说明:
# --toolkit:仅安装 CUDA Toolkit,不覆盖驱动
# --silent:静默安装,使用默认选项
# --override:允许覆盖已存在的旧版本 CUDA
  1. 配置环境变量:将以下内容添加到 ~/.bashrc:
export PATH=/usr/local/cuda-12.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH
  1. 验证安装:
nvcc -V
# 输出应显示 Cuda compilation tools, release 12.2, V12.2.0

1.4.3 cuDNN 安装步骤

cuDNN 是 NVIDIA 的深度神经网络加速库,TensorRT 依赖它来执行卷积等底层算子。cuDNN 以压缩包形式提供,安装过程本质上是将头文件和库文件复制到 CUDA 目录中:

  1. 下载 cuDNN:从 NVIDIA 官网下载 cudnn-linux-x86_64-8.9.5.29_cuda12-archive.tar.xz(需注册 NVIDIA Developer 账号)。
  2. 解压并复制:
tar -xvf cudnn-linux-x86_64-8.9.5.29_cuda12-archive.tar.xz
cd cudnn-linux-x86_64-8.9.5.29_cuda12-archive
sudo cp include/cudnn*.h /usr/local/cuda-12.2/include/
sudo cp lib/libcudnn* /usr/local/cuda-12.2/lib64/
sudo chmod a+r /usr/local/cuda-12.2/include/cudnn*.h /usr/local/cuda-12.2/lib64/libcudnn*
  1. 更新动态链接库缓存:
sudo ldconfig
  1. 验证 cuDNN 版本:
cat /usr/local/cuda-12.2/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 输出应包含 #define CUDNN_MAJOR 8 和 #define CUDNN_MINOR 9

1.4.4 TensorRT 安装步骤

TensorRT 的安装推荐使用 tar 包方式,因为它提供了完整的库文件、头文件和工具链。安装步骤如下:

  1. 下载 TensorRT:从 NVIDIA 官网下载 TensorRT-10.0.1.6.Linux.x86_64-gnu.cuda-12.2.tar.gz。
  2. 解压到指定目录:
sudo tar -xzf TensorRT-10.0.1.6.Linux.x86_64-gnu.cuda-12.2.tar.gz -C /opt
sudo ln -s /opt/TensorRT-10.0.1.6 /opt/tensorrt
  1. 配置环境变量:在 ~/.bashrc 中追加:
export LD_LIBRARY_PATH=/opt/tensorrt/lib:$LD_LIBRARY_PATH
export PATH=/opt/tensorrt/bin:$PATH
  1. 安装 Python 包:
pip install /opt/tensorrt/python/tensorrt-10.0.1-cp38-none-linux_x86_64.whl
# 注意:根据你的 Python 版本选择对应的 wheel 文件
  1. 验证安装:
trtexec --version
# 输出应显示 TensorRT version: 10.0.1.6

python3 -c "import tensorrt as trt; print(trt.__version__)"
# 输出应显示 10.0.1.6

1.4.5 环境验证与常见问题排查

完成上述安装后,建议运行一个简单的 ONNX 模型转换来验证整个工具链是否正常工作。以下是一个最小验证示例:

# 创建一个简单的 ONNX 模型(2 层全连接)
python3 -c "
import torch
import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(10, 20)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(20, 5)

    def forward(self, x):
        return self.fc2(self.relu(self.fc1(x)))

model = SimpleNet().eval()
dummy_input = torch.randn(1, 10)
torch.onnx.export(model, dummy_input, 'simple.onnx', input_names=['input'], output_names=['output'])
print('ONNX model saved.')
"

# 使用 trtexec 转换
trtexec --onnx=simple.onnx --saveEngine=simple.engine --fp16
# 如果输出包含 "PASSED" 或 "Engine created",说明环境正常

经验提示:如果在转换过程中遇到 Error: Could not find a suitable TensorRT plugin 或 Unsupported layer 错误,不要慌张。这通常意味着模型中有 TensorRT 不原生支持的算子,后续章节(特别是插件编写部分)会专门解决这类问题。对于环境验证而言,只要上述简单模型能成功转换,就说明 CUDA、cuDNN、TensorRT 三者已经正确协同工作。

1.4.6 安装误区与复盘

根据大量学员的反馈,环境安装阶段最容易出现以下问题,请务必留意:

常见误区 典型表现 解决方案
驱动与 CUDA 版本不匹配 nvidia-smi 显示 CUDA 版本与 nvcc -V 不一致 驱动版本必须 ≥ CUDA 要求的最低版本;使用 nvidia-smi 查看驱动支持的 CUDA 版本
cuDNN 复制路径错误 TensorRT 初始化时报 libcudnn.so.8: cannot open shared object file 确认 cuDNN 库文件已复制到 /usr/local/cuda/lib64 且执行了 ldconfig
Python 包版本不匹配 import tensorrt 报错或版本号不对 确认 wheel 文件与 Python 版本对应;使用 pip list | grep tensorrt 检查
环境变量未生效 终端能运行 trtexec,但 Python 脚本找不到库 检查 LD_LIBRARY_PATH 是否包含 TensorRT 的 lib 目录;重启终端或 source ~/.bashrc