一、TensorRT概述:什么是TensorRT、TensorRT在AI推理中的角色、TensorRT的核心优势
1.1 什么是TensorRT?
TensorRT,说白了就是NVIDIA推出的一个深度学习推理优化引擎。嗯,注意这里的关键词——推理。它不是用来训练模型的,而是把训练好的模型拿来,做各种优化,让它跑得更快、占得更少。
我个人习惯把TensorRT理解成一个「模型编译器」。你训练好的PyTorch、TensorFlow模型,在它眼里就是一堆待优化的原材料。它会做算子融合、精度校准、内存复用这些事,最后产出一个高度优化的推理引擎。
我记得刚接触TensorRT那会儿,有个同事问我:「这不就是个推理库吗?」其实没那么简单。它更像一个中间表示层,把你的模型图重新构建一遍,去掉冗余,合并计算。你想想看,一个模型在训练框架里可能有一百个算子,经过TensorRT优化后,可能只剩下四十个。这就是它的核心价值。
一句话总结:TensorRT = 模型编译器 + 推理运行时 + 硬件加速器。
1.2 TensorRT在AI推理中的角色
在AI推理的整个链条里,TensorRT扮演的是「最后一公里」的角色。模型训练完了,要部署到生产环境,这时候TensorRT就上场了。
我画过一张图,把AI推理流程分成四步:
- 模型训练(PyTorch/TF)—— 这是研发的事
- 模型导出(ONNX/权重文件)—— 这是中间件
- TensorRT优化(构建引擎)—— 这是我们的战场
- 推理部署(生产环境)—— 这是最终目标
你看,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