一、TensorRT概述:什么是TensorRT、TensorRT在AI推理中的角色、TensorRT的核心优势

1.1 什么是TensorRT?

TensorRT,说白了就是NVIDIA推出的一个深度学习推理优化引擎。嗯,注意这里的关键词——推理。它不是用来训练模型的,而是把训练好的模型拿来,做各种优化,让它跑得更快、占得更少。

我个人习惯把TensorRT理解成一个「模型编译器」。你训练好的PyTorch、TensorFlow模型,在它眼里就是一堆待优化的原材料。它会做算子融合、精度校准、内存复用这些事,最后产出一个高度优化的推理引擎。

我记得刚接触TensorRT那会儿,有个同事问我:「这不就是个推理库吗?」其实没那么简单。它更像一个中间表示层,把你的模型图重新构建一遍,去掉冗余,合并计算。你想想看,一个模型在训练框架里可能有一百个算子,经过TensorRT优化后,可能只剩下四十个。这就是它的核心价值。

一句话总结:TensorRT = 模型编译器 + 推理运行时 + 硬件加速器。

1.2 TensorRT在AI推理中的角色

在AI推理的整个链条里,TensorRT扮演的是「最后一公里」的角色。模型训练完了,要部署到生产环境,这时候TensorRT就上场了。

我画过一张图,把AI推理流程分成四步:

  1. 模型训练(PyTorch/TF)—— 这是研发的事
  2. 模型导出(ONNX/权重文件)—— 这是中间件
  3. TensorRT优化(构建引擎)—— 这是我们的战场
  4. 推理部署(生产环境)—— 这是最终目标

你看,TensorRT卡在第三步和第四步之间。它做的事情,就是把一个通用的模型,变成针对特定GPU硬件、特定batch size、特定精度格式的定制化引擎

我在项目中遇到过一种情况:同一个模型,在A100上跑和T4上跑,TensorRT生成的引擎完全不同。为什么?因为它会针对不同GPU的计算能力、显存带宽做针对性优化。说白了,TensorRT的引擎是「认卡」的

避坑指南:我曾经以为TensorRT引擎可以跨卡通用,结果在T4上生成的引擎拿到A100上直接报错。后来才明白,引擎文件里绑定了CUDA计算能力版本。所以,生产环境用什么卡,就在什么卡上构建引擎,别偷懒。

1.3 TensorRT的核心优势

聊完角色,咱们看看TensorRT到底牛在哪。我总结三个核心指标:延迟、吞吐量、内存占用。这三个指标,说白了就是「快、多、省」。

1.3.1 延迟(Latency)—— 快

延迟指的是单次推理的时间。TensorRT能把延迟压到多低?我做过一个对比实验:

模型 PyTorch推理 TensorRT FP32 TensorRT FP16 TensorRT INT8
ResNet-50 12.3 ms 6.8 ms 3.2 ms 1.9 ms
BERT-Base 28.7 ms 15.4 ms 8.1 ms
YOLOv5s 18.5 ms 9.2 ms 4.7 ms 2.8 ms

你看,FP16相比PyTorch原生推理,延迟能降一半以上。INT8更是夸张,直接降到原来的六分之一。为什么会这样?因为TensorRT做了三件事:

  • 算子融合:把多个小算子合并成一个kernel,减少kernel launch开销
  • 内存复用:减少显存分配和释放的次数
  • 精度校准:用更低的精度(FP16/INT8)做计算,硬件吞吐翻倍

注意:INT8不是所有模型都能用。我踩过坑,有些模型量化后精度掉得厉害,尤其是小模型和检测模型。建议先做校准集验证,再决定是否用INT8。

1.3.2 吞吐量(Throughput)—— 多

吞吐量指的是单位时间内能处理多少张图片或多少条数据。这个指标对线上服务特别重要。

TensorRT支持动态batch多流推理。什么意思?就是你可以把多个请求攒到一起,一次性丢给GPU处理。GPU的并行计算能力,说白了就是「一次处理一批,比一次处理一个快得多」。

我记得有个项目,客户要求单卡T4每秒处理500张1080p图片。用PyTorch推理,batch size=1时只能跑200张/s。后来我用了TensorRT,把batch size调到32,配合FP16,直接干到了680张/s。客户当场就满意了。

核心公式:吞吐量 = 1 / (单次推理延迟) × batch size。TensorRT能让你在延迟不翻倍的情况下,把batch size翻好几倍。

1.3.3 内存占用(Memory Footprint)—— 省

内存占用这块,TensorRT做得也很漂亮。它会把模型权重做权值压缩,还会做内存池化。什么意思?就是提前把显存申请好,推理过程中不再频繁分配和释放。

我做过一个对比:

  • PyTorch加载ResNet-50:显存占用约 350 MB
  • TensorRT FP32:显存占用约 180 MB
  • TensorRT FP16:显存占用约 95 MB
  • TensorRT INT8:显存占用约 55 MB

你想想看,INT8版本只有PyTorch版本的六分之一。这意味着什么?意味着同样的显存,你可以部署更多的模型实例,或者跑更大的模型。

我曾经在边缘设备Jetson Xavier上部署一个多模型服务,显存只有8GB。如果用PyTorch,最多跑两个模型就满了。换成TensorRT INT8,硬是塞下了五个模型,而且延迟还更低。这就是内存优化的价值。

个人经验:如果你在边缘设备上做部署,优先考虑TensorRT的INT8量化。但一定要做精度验证。我建议准备1000张左右的校准集,跑一遍精度对比,确保掉点不超过1%。

1.4 小结

好了,这一章的内容就这些。总结一下:

  • TensorRT是什么:一个推理优化引擎,本质是模型编译器
  • 它的角色:AI推理的最后一公里,把通用模型变成定制化引擎
  • 核心优势:延迟低、吞吐高、内存省,三个指标全面碾压原生框架

下一章,我会带你搭建TensorRT的开发环境。嗯,这一步其实有不少坑,尤其是版本匹配的问题。到时候我会把踩过的坑都告诉你。

公众号:蓝海资料掘金营,微信deep3321