每个步骤常用的方法和参数:
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开发环境