1 TensorRT简介
TensorRT的核心是一个c++库,它促进了对NVIDIA图形处理单元(gpu)的高性能计算。它与TensorFlow,Pytorch等框架相辅相成。他可以快速高效的运行一个已经训练好的神经网络,并生成结果。它包括用于从Caffe、ONNX或TensorFlow导入现有模型的解析器,以及用于以编程方式构建模型的c++和Python api。TensorRT在所有支持的平台上提供c++实现,在x86上提供Python实现。
2 TensorRT的好处
训练神经网络之后,TensorRT使网络能够被压缩、优化并作为运行时部署,而不需要框架的开销。TensorRT结合了多个层,优化内核选择,并根据指定的精度(FP32、FP16或INT8)执行规范化和转换,以优化矩阵计算,从而提高延迟、吞吐量和效率。TensorRT通过将API与特定硬件细节的高级抽象以及专门针对高吞吐量、低延迟和低设备内存占用计算而开发和优化的实现相结合来解决这些问题。
注:1080TI支持fp32和int8精度的运算,而最新出的RTX2080TI系列则支持fp16。
3 TensorRT的使用说明
(1)TensorRT一般不用于训练阶段的任何部分。
(2)需要使用ONNX解析器、Caffe解析器或TensorFlow/UFF解析器将保存的神经网络从其保存的格式解析为TensorRT。(网络可以直接从Caffe导入,也可以通过UFF或ONNX格式从其他框架导入。)TensorRT 5.0.0附带的ONNX解析器支持ONNX IR(中间表示)版本0.0.3和opset版本7。
(3)考虑优化选项——批大小、工作区大小和混合精度。这些选项被选择并指定TensorRT构建步骤的一部分,在此步骤中,根据网络实际构建一个优化的计算引擎。
(4)验证结果,选择FP32 或 FP16结果应该更准确,INT8效果应该会差一点
(5)以串行格式写出计算引擎,称为计划文件
(6)要初始化推理引擎,应用程序首先将模型从计划文件反序列化为推理引擎。
(7)TensorRT通常异步使用,因此,当输入数据到达时,程序调用一个execute_async函数,其中包含输入缓冲区、输出缓冲区,TensorRT应该将结果放入其中的缓冲区。(用pycuda操作缓冲区)
注:生成的计划文件不能跨平台或TensorRT版本移植。并且针对特定的GPU。