1. TensorRT概述:什么是TensorRT、TensorRT在推理优化中的地位、TensorRT与CUDA的关系
各位同学好,我是你们这门课的主讲。今天咱们聊聊TensorRT,这个在AI推理优化领域绕不开的“硬核”工具。
说实话,我第一次接触TensorRT是在一个工业检测项目里。模型在GPU上跑,帧率死活上不去,老板天天催。后来一个老同事甩给我一句话:“试试TensorRT,能快好几倍。” 我当时半信半疑,结果一测,嗯,真香。从那以后,我就再也没离开过它。
1.1 什么是TensorRT?
TensorRT,全称NVIDIA TensorRT,是英伟达推出的一个高性能深度学习推理优化器。说白了,它就是一个能把训练好的模型“压缩”和“加速”的工具。
你想想看,我们平时用PyTorch或TensorFlow训练模型,那是在做“学习”。但模型学完了,要部署到线上、边缘设备上,这时候我们关心的是“跑得快不快”、“占内存多不多”。TensorRT就是干这个的。
它主要做三件事:
- 模型优化:把计算图做精简、合并,去掉没用的节点。
- 精度校准:支持FP16、INT8甚至INT4量化,用更少的比特数做推理。
- 内核自动调优:针对你的GPU型号,自动选择最快的CUDA kernel。
核心观点:TensorRT不是推理框架,而是推理优化引擎。它不负责训练,只负责把训练好的模型“榨干”性能。
1.2 TensorRT在推理优化中的地位
在AI推理这个圈子里,TensorRT的地位怎么说呢?有点像“行业标杆”。
我见过不少团队,模型训练完了,部署时直接用原生的PyTorch推理。结果呢?延迟高、吞吐低,GPU利用率不到30%。后来一上TensorRT,延迟直接砍半,吞吐翻倍。这不是玄学,是实打实的优化。
为什么它能做到?因为TensorRT做了几件“脏活累活”:
- 层融合:把多个小算子合并成一个大的kernel,减少显存读写。比如Conv+BN+ReLU,TensorRT会合成一个FusedConv。
- 内存复用:推理时显存分配是固定的,TensorRT会做静态内存规划,避免动态分配的开销。
- 多流执行:支持CUDA Stream并行,让GPU同时处理多个推理请求。
我举个例子。之前有个语音识别模型,原始模型在T4上跑一次推理要120ms。经过TensorRT优化后,降到35ms。你想想看,这中间差了将近4倍。在实时场景下,这4倍就是能不能用的区别。
个人经验:我建议你在做任何推理部署前,先跑一遍TensorRT的基准测试。很多时候,你不需要改模型结构,光靠TensorRT就能拿到不错的加速比。
1.3 TensorRT与CUDA的关系
这个问题,很多初学者会搞混。我直接说结论:TensorRT是建立在CUDA之上的。
CUDA是英伟达的并行计算平台,它提供了最底层的GPU编程接口。你可以用CUDA C++直接写kernel,控制线程块、共享内存、寄存器这些硬件资源。
而TensorRT呢?它是在CUDA之上封装了一层。它帮你自动生成最优的CUDA kernel,你不用手写。但它的底层,跑的还是CUDA。
我画个简单的层次图:
| 层次 | 说明 |
|---|---|
| 应用层 | 你的推理服务、API接口 |
| 推理引擎层 | TensorRT(优化、调度、执行) |
| 并行计算层 | CUDA(kernel执行、显存管理) |
| 硬件层 | NVIDIA GPU(SM、显存、总线) |
所以,你学TensorRT,本质上是在学怎么用好CUDA。如果你不懂CUDA,那TensorRT对你来说就是个黑盒。出了问题,你只能干瞪眼。
我记得有一次,一个同学问我:“为什么我的TensorRT模型跑起来比原版还慢?” 我一看,他用的GPU是GTX 1060,不支持INT8的硬件加速。TensorRT虽然生成了INT8的plan文件,但底层CUDA kernel跑的是模拟模式,反而更慢。这就是不懂底层硬件吃的亏。
避坑指南:我曾经遇到过有人把TensorRT当成“万能药”,什么模型都往里塞。结果有些算子TensorRT不支持,回退到原生CUDA,性能反而下降。记住,TensorRT不是万能的,它擅长的是CNN、Transformer这类规整的网络。对于动态形状、稀疏计算,你得自己掂量。
1.4 为什么我们要学“协同优化”?
市面上讲TensorRT的课不少,但大多只教你怎么用API。我为什么还要开这门课?
因为光会用API,你只能解决80%的问题。剩下20%的硬骨头,比如自定义算子、内存碎片、多流并发、量化精度损失,这些都需要你深入CUDA层面去调。
我举个实际场景。你在TensorRT里加了一个自定义的Layer,比如一个特殊的激活函数。TensorRT不认识它,只能回退到Plugin模式。这时候,如果你不懂CUDA,你连这个Plugin怎么写都不知道。就算写出来了,性能也可能很差。
所以,这门课的核心思路是:用TensorRT做上层优化,用CUDA做底层调优。两者结合,才能把GPU的性能榨干。
嗯,这一章就到这里。下一章,我会带大家搭建TensorRT的开发环境,顺便聊聊CUDA编程模型的基础。咱们一步步来,别急。
本章小结:
- TensorRT是推理优化引擎,不是训练框架。
- 它在推理优化中的地位,相当于“性能加速器”。
- TensorRT底层依赖CUDA,学好CUDA才能用好TensorRT。
公众号:蓝海资料掘金营,微信deep3321