1. TensorRT推理部署工程导论

训练好的深度学习模型,最终要落到真实业务里产生价值,中间隔着一道工程化的门槛:如何让模型在有限的算力、显存和延迟预算下稳定地跑起来。TensorRT 正是 NVIDIA 为这道门槛提供的核心工具。它不是训练框架,也不是通用推理框架,而是一个面向 NVIDIA GPU 的推理优化器与运行时。理解它的定位,是学好后续所有内容的前提。

TensorRT 的定位:从模型到引擎

一个 PyTorch 或 TensorFlow 训练出来的模型,本质上是一张由算子组成的计算图,加上一组浮点权重。直接把它放到 GPU 上推理,往往存在大量浪费:算子被逐个启动、精度冗余、内存反复读写、部分结构在推理阶段根本不需要。TensorRT 做的事情,是把这张图"重写"成一份针对特定 GPU 架构高度定制的推理引擎(Engine)。

这个过程包含几类关键优化。第一是精度量化:把 FP32 权重和激活降到 FP16 甚至 INT8,在精度损失可控的前提下大幅提升吞吐。第二是层融合:把 Conv + Bias + ReLU 这类连续小算子合并成一个内核,减少内核启动开销和显存往返。第三是内核自动调优:针对目标 GPU 的 SM 数量、显存带宽,从多个候选实现中挑选最快的那个。第四是动态形状与显存复用:为不同 batch、不同分辨率预先规划显存,避免运行时反复分配。

需要强调的是,TensorRT 的产物是与硬件和版本强绑定的。同一份 ONNX 模型,在 A100 上构建的 Engine 不能直接拿到 L4 上运行,跨 TensorRT 大版本通常也需要重新构建。这一点决定了部署流程中"构建"和"运行"必须被当作两个独立阶段来设计。

核心价值:为什么不用原生框架直接推理

用 PyTorch 直接做推理在原型阶段完全可行,但进入生产会遇到三个硬约束。其一是延迟:原生框架的算子调度和 Python 解释开销,让单次前向的延迟难以压到毫秒级。其二是吞吐:同样的 GPU,经过 TensorRT 优化后吞吐提升数倍是常见结果,具体倍数取决于模型结构和量化策略,需要实测确认。其三是资源确定性:生产环境要求显存占用可预测、可限制,而 TensorRT Engine 在构建时就固化了显存规划。

因此 TensorRT 的价值可以概括为一句话:把"能跑"变成"跑得省、跑得快、跑得稳"。它牺牲的是灵活性——Engine 不便于频繁改动结构,换来的是推理阶段的极致效率。

推理部署全流程概览

一个完整的 TensorRT 部署链路,通常包含模型导出、图优化、Engine 构建、运行时封装、服务化五个环节。下图展示了从训练产物到线上服务的整体数据流与关键产物,注意"构建"与"运行"是两条分离的路径。

TensorRT 推理部署全流程 ① 模型导出 ② 图优化与构建 ③ 运行时封装 ④ 服务化上线 训练框架模型 PyTorch / TF .pt / .pb ONNX 中间表示 统一算子图 .onnx TensorRT Engine 硬件绑定序列化 .plan / .engine 推理服务 Triton / 自研 HTTP / gRPC 构建阶段(离线,耗时较长,需目标 GPU) 运行阶段(在线,低延迟,显存已规划) 构建阶段关键参数 精度模式 FP32 / FP16 / INT8 影响速度与精度 最大工作空间 workspace size 影响可选内核数量 动态形状 min / opt / max 决定显存与优化档 目标 GPU 架构 SM / 计算能力 Engine 不可跨架构

图中最需要记住的一点是:构建阶段和运行阶段是分离的。构建可以放在有充足时间的离线环境甚至专门的构建机上完成,运行阶段只负责加载 Engine 并做前向计算。这种分离让线上服务可以做到极低的启动延迟和稳定的显存占用。

典型应用场景

TensorRT 最典型的落地场景集中在三类。第一类是云端高吞吐推理,例如推荐系统、搜索排序、大规模图像分类,追求的是单位 GPU 的 QPS 最大化,通常配合 Triton Inference Server 做动态批处理。第二类是边缘与嵌入式实时推理,例如自动驾驶感知、工业质检、机器人视觉,追求的是单帧延迟和功耗,常用 Jetson 平台,对 INT8 量化接受度更高。第三类是多模型流水线,例如视频分析中的检测 + 跟踪 + 识别串联,需要多个 Engine 协同调度并共享显存。

不同场景对参数的偏好差异很大。云端吞吐优先时,可以接受较大的 workspace 和更激进的 INT8;边缘延迟优先时,往往要限制 workspace、固定输入形状,并仔细校准量化精度。这些取舍会在后续章节逐一展开。

学习路线建议

本课程按"先建立全局、再深入局部、最后打通端到端"的顺序组织。建议的学习路径是:先理解 Engine 构建的完整流程与关键参数,再掌握 ONNX 导出与图优化中的常见坑,然后进入精度量化(FP16 / INT8 校准)这一最容易出问题的环节,接着学习运行时 API 与显存管理,最后通过 Triton 服务化和性能剖析把整条链路串起来。

初学者最容易犯的错误,是跳过"构建阶段"直接研究运行时 API。实际上,绝大多数部署问题——精度掉点、形状不匹配、显存溢出——都发生在构建阶段。把 Engine 构建这一环吃透,后面的工作会顺畅很多。

下一阶段的学习中,请始终带着三个问题去看每一节内容:这个环节的输入和输出分别是什么?有哪些参数会显著影响结果?出问题时应该从哪里观察和判断?带着这三个问题,TensorRT 的工程化能力才能真正建立起来。