引言
在深度学习领域,训练和推理是两个关键环节。训练过程通常需要大量的计算资源和时间来调整模型参数,而推理则是使用训练好的模型对新数据进行预测。随着深度学习模型的不断增大和复杂度的提高,推理的性能成为了一个重要的挑战。NVIDIA 的 TensorRT 就是为了解决这一问题而设计的高性能深度学习推理优化器。
什么是 TensorRT
TensorRT 是 NVIDIA 推出的一个用于高性能深度学习推理的 SDK。它可以对已经训练好的深度学习模型进行优化,从而显著提高推理的速度和效率。TensorRT 支持多种深度学习框架,如 TensorFlow、PyTorch、ONNX 等,这意味着我们可以将使用这些框架训练好的模型轻松地转换为 TensorRT 引擎,以获得更好的推理性能。
TensorRT用途
模型包括训练和推理两个阶段,训练的时候包含了前向传播和反向传播,推理只包含前向传播,所以预测时候的速度更重要。
现在大多数的深度学习网络模型结构复杂并且参数量巨大,需要使用多个高性能的 GPU 分布式训练才能获得全局最优的结果,这使得深度学习方法很难应用中在实际的生产环境中
为了降低生产成本,在实际应用中,模型通常都会部署在嵌入式开发板上,或者使用单个 GPU 甚至是嵌入式平台,其算力相对较低,对于结构复杂且参数量巨大的网络模型较难获取实时的推理速度
模型训练时采用的框架会不同,不同机器的性能会存在差异,导致推理速度变慢,无法满足高实时性。如果在使用深度学习方法时,部署应用的机器的深度学习环境要与网络模型训练时的环境相同,这增加了深度学习方法部署的复杂性。
而 TensorRT 就是推理优化器,把 ONNX 模型转换为 TensorRT 之后,就可以在相关边端部署了。
TensorRT 的优势:
- 与许多轻量级的深度学习网络模型相比,TensorRT 不仅可以大幅提高网络的推理速度,而且只损失些许的精度。
- 同时,使用 TensorRT 优化后的网络模型的部署不再需要与训练时相同的环境。
- 使用 TensorRT 优化之后的网络推理速度有了较大的提高

TensorRT 的工作原理
TensorRT包含两个阶段:编译build和部署deploy。
-
编译阶段对网络配置进行优化,并生成一个plan文件,用于通过深度神经网络计算前向传递。plan文件是一个优化的目标代码,可以序列化并且可存储在内存和硬盘中。
-
部署阶段通常采用长时间运行的服务或者用户应用程序的形式。它们接收批量输入数据,通过执行plan文件在输入数据上进行推理,并且返回批量的输出数据(分类、目标检测等)

为了优化你的推理模型,TensorRT将接受你的网络定义,执行优化,包括特定平台优化,并且生成一个推理引擎(inference engine)。这个过程被视作编译阶段(build phase)。编译计算可能耗费相当多的时间,尤其是在嵌入式平台中运行时。因此,一个典型的应用将会构建一个引擎,然后将其序列化为一个plan 文件,以供后续使用。(生成的plan文件并不能够跨平台/TensorRT版本移植)
编译阶段在图层中执行如下优化:
- 消除输出未被使用的层
- 消除等价于no-op的运算
- 卷积层,偏差和ReLu操作的融合
- 聚合具有足够相似参数和相同目标张量的操作(例如,Googlenet v5 inception 模型的1*1卷积)
- 通过直接将层输出定向到正确最终目的来合并concatenation 层
