tensorRT 7.0 学习笔记(一)——python api

8 篇文章 1 订阅

本系列为我在学习tensorRT 7.0 时的学习笔记主要参考了官方文档以及一些例子。


核心概念:


Tensorrt.INetWorkDefinition 可以由 parser(uff,tensorflow,caffe,等创建)tensorRT.Builder 可以创建空的Tensorrt.INetWorkDefinition 

Tensorrt.builder+Tensorrt.INetWorkDefinition 创建tensorrt.ICudaEngine
基于tensorrt.ICudaEngine创建tensorrt.IExecutionContext用于加速推理

 

类:


Tensorrt.logger 获取错误与告警
tensorrt.ICudaEngine 最基本的元件,用于创建tensorrt.IExecutionContext
Tensorrt.builder 输入Tensorrt.INetWorkDefinition  创建tensorrt.ICudaEngine
Tensorrt.INetWorkDefinition计算图

基本类型:


1.Tensorrt.DataType 略,就是 int16 int32 float32 bool 等等这些
Tensorrt.WeightRole 这些权重干什么用的:
    KERNEL  conv/deconv的卷积核 fc的权重w
    BIAS conv/deconv/fc 的偏差
   SHIFT 偏移量(IScaleLayer)
   SCALE:缩放量(IScaleLayer)
   CONSTANT:权重(IConstantLayer)

2.tensorrt.weights 权重数组
    dtype:DataType
    Size 数量
    Nbytes 总字节数

3.tensorrt.DimensionType
此维度数据组织的类型: SPATIAL,CHANNEL,INDEX,SEQUENCE

4.Dims
4.1 tensorrt.Dims 一个tensor的数据维度行为比较像 tuple
基于4.1派生出的:
    Dims2/DimsHW/Dims3/DimsCHW/Dims4/DimsNCHW

5.IHostMemory 处理库中分配的内存(user可访问,不可allocated/deallocated)

6.Core
 6.1Profiler 用于输出每层推理时消耗的时间
将其作为参数加入到IExecutionContext,当调用 IExecutionContext.execute()时会每层记录其所花时间。
report_layer_time(self: tensorrt.tensorrt.Profiler, layer_name: str, ms: float) → None

来自 <https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/infer/Core/Profiler.html> 

Execute()后调用,获取每层所花时间。

6.2 
tensorrt.IOptimizationProfile

来自 <https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/infer/Core/OptimizationProfile.html> 

可动态调整的输入张量和有固定大小的张量的配置。当创建有动态大小的输入张量的ICudaEngine(或者固定输入张量),用户与要制定至少一个Optimization profile。Profiles
的索引为0,1,2,3,4.(当没有特别指定时默认使用index=0的那一个),如果模型输入的大小都是固定的,在没有用户提供的情况下会自动创建一个默认的Optimization profile。
Optimization profile 用于指定输入动态大小张量/固定大小的输入张量 的最小输入维度,最大输入维度,最优输入维度。

6.3 IBuilderConfig
指定创建模型时的一些参数,设置Optimization profile

※6.4 tensorrt.builder
基于INetworkDefinition创建ICudaEngine

※6.5 ICudaEngine 
在创建好的network上进行推理,可用[]进行索引(返回绑定的name)绑定(将网络上一个张量与ICudaEngine进行绑定好进行 input/output)
※tensorrt.IExecutionContext
用于使用一个CudaEngine进行推理的上下文,一个CudaEngine可以有多个IExecutionContext进行同时推理调用execute/execute_async 进行同步/异步的推理。

6.6tensort.Runtime
用于将ICudaEngine反序列化
6.7tensorrt.Refitter
更新CudaEngine中的权重

7.NetWorkDefinition
可以调用api对网络增加层以及plugin
通过 api: mark_***将某个tensor设置为输出的tensor

※8plugin
7.1 tensorrt.PluginField 
存储插件属性相关
Tensorrt FiledCollection

IpluginCreator plugin生成器(用于自定义层)管理插件的生成和序列化

7.2 IpluginRegistry
用于注册IpluginCreator 

IpluginFactory
用于从序列化数据中反序列化出plugin

8 模型量化

8.1 
tensorrt.CalibrationAlgoType

来自 <https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/infer/Int8/Calibrator.html> 
 量化方法枚举

Tensorrt.IInt8Caliborator (interface)
用于量化校准的接口,量化由Builder操作。其必须提供方法来获取一系列图片进行量化,
(可选)实现一个方法


Parsers
1.uffParser
主要函数:parse 从uff buffer中生成netWork
Caffe Parser/Onnx Parser 类似。

 

例子:

参考github:

https://github.com/JDAI-CV/fast-reid/tree/master/tools/deploy

其中 trt_export.py 为如何导出onnx 模型(需要注意的是如果你的模型在导出模型时并没有指定dynamic_axes,则不能使用optimize_profile 来将模型的batchsize设置为动态的)

trt_inference.py 为如何利用trt模型进行推理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值