1.TensorRT基本特性和用法

基本特性:

        用于高效实现已训练好的深度学习模型的推理过程的SDK

        内含推理优化器运行时环境

        使DL模型能以更高吞吐量更低的延迟运行

        有C++和python的API,完全等价可以混用

 8608179c15c507603c8bc922d6461196.png

2. 三种使用TensorRT的方式

2.1 Workflow:使用TensorRT API搭建

 

一些术语:

        Builder(网络原数据):模型搭建的入口,网络的tensorRT内部表示以及可执行程序引擎都是由该对象的成员方法生成的

        BuiderConfig(网络原数据的选项):负责设置模型的一些参数,如是否开始fp16模式,in8模式等等

        Network(计算图内容):网络的主体,在使用api搭建网络的过程当中,将不断地向其中添加一些层,并标记网络的输入输出节点,在其他两种workflow中,则使用Parser来加载来自Onnx文件中的网络,就无需一层一层手工添加

        SerializedNetwork:模型网络在TRT中的内部表示,可用它生成可执行的推理引擎或者把它序列化保存为文件,方便以后读取和使用

        Engine:推理引擎,是模型计算的核心,可理解为可执行程序的代码段

        context:用于计算GPU的上下文。类比于cpu上的进程概念进程,是执行推理引擎的主体

        buffer相关(数据的内存、显存相关):我们将需要把数据从cpu端搬到gpu端,执行推理计算后,再把数据由gpu端搬回cpu端。这些步骤涉及内存的申请、拷贝和释放,需要借助CUDA库或者扩大python库才能完成

        excute:调用计算核心执行推理计算的具体过程

        善后工作:还有一些外围的工作需要手工去完成

        下面介绍每个步骤常用的方法和参数:

        1. logger 日志记录器

        通常出现在代码的最开头,在一次会话中,多个builder可以共享同一个logger,通过传入参数的不同,可以产生不同详略的参数,通常使用Verbose和info(这两个等级可以获取一些网络优化过程和优化结果的相关信息)

        2.Builder 引擎构建器

        Builder紧随着logger出现,是用于构建推理引擎的核心对象,在比较旧的TRT版本中,builder常用于设置一些模式,比如开启int8和fp16,指定最大batch size和work space等等,但随着builder config的完善,这些设置都统一转到了builder config中,以后builder仅作为构建引擎的入口,而不再用于设置这些网络属性,其中相应的成员将被废弃(如上图所示)。

        此外dynamic shape模型下, 必须使用builder config及相关的API

        3. BuilderConfig 网络属性选项

        BuilderConfig是Builder中专门用于设置网络属性的一个对象,在比较新的TRT 版本中,可设置构建器最大workspace、开启fp16、int8模式等,另外builderconfig提供了一些高级工具,如限制算法实现的tarctic source、节约构建时间的timing cash、精确控制节点算法的algorithm selector等等

        4. Network

        network是计算图在TRT中的具体描述,由builder生成,在使用TRT原生api搭建网络的workflow中,我们需要不断地想network中添加一些层,并标记network的输入输出张量,而在使用parser导入onnx模型的workflow中,一旦模型解析完成,network的内容就会被自动填入。我们可以在构建期通过network来获取要设置网络的一些信息,如网络的层数、每层的名称和属性、每层的输入输出张量的名称和属性方便调试和其他工作。在使用TRT原生api搭建网络时,上面的三行黄色api使用最多

补充:

        Explicit Btach vs Implicit Batch(推荐使用前者)

        Dynamic Shape模式

出现原因:

  1. 实际场景中经常需要使用同一个模型来处理不同输入尺寸的数据(不同分辨率的图像,不同长短的句子)

  2. 每次调用模型处理的数据量的batch可能也是变化的

        向network中添加内容的方法(原生api搭建workflow独有)

        TRT中,需要区分layer和tensor,即区分计算节点和数据节点,与onnx中区分node和tensort类似

        从Network中打印所有层和张量的信息

使用API搭建模型的核心部分

TRT支持的两种低精度模式:FP16和INT8

 

怎么让一个网络跑起来?

        1)计算引擎的生成

        Binding的概念

        2)Context推理进程(相当于CPU中的一个进程)

 

        用于输入输出计算的数据怎么准备?

        可做的一些优化

        构建引擎需要时间,怎么构建一次,反复使用?

 

2.2 Workflow:使用Parser

 

2.3 Workflow:使用框架内TensorRT接口

        TensorRT开发环境

来源:lansfair

物联沃分享整理
物联沃-IOTWORD物联网 » 一、TensorRT简介与入门

发表评论