tensorRT7.0学习笔记(⼀)——pythonapi 本系列为我在学习tensorRT 7.0 时的学习笔记主要参考了官⽅⽂档以及⼀些例⼦。
核⼼概念:
Tensorrt.INetWorkDefinition 可以由 parr(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)
dtype:DataType
Size 数量
Nbytes 总字节数
此维度数据组织的类型: SPATIAL,CHANNEL,INDEX,SEQUENCE
4.Dims
4.1 tensorrt.Dims ⼀个tensor的数据维度⾏为⽐较像 tuple
基于4.1派⽣出的:
Dims2/DimsHW/Dims3/DimsCHW/Dims4/DimsNCHW
5.IHostMemory 处理库中分配的内存(ur可访问,不可allocated/deallocated)
6.Core结论与展望>cursorlocation
6.1Profiler ⽤于输出每层推理时消耗的时间
将其作为参数加⼊到IExecutionContext,当调⽤ ute()时会每层记录其所花时间。
report_layer_time(lf: sorrt.Profiler, layer_name: str, ms: float) → None
来⾃ </deeplearning/tensorrt/api/python_api/infer/Core/Profiler.html>
Execute()后调⽤,获取每层所花时间。
6.2
tensorrt.IOptimizationProfile
来⾃ </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
adore什么意思中文
指定创建模型时的⼀些参数,设置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⽣成器(⽤于⾃定义层)管理插件的⽣成和序列化underlying
7.2 IpluginRegistry
headshot⽤于注册IpluginCreator
日语辞典IpluginFactory
致命诡计>silver⽤于从序列化数据中反序列化出plugin
8 模型量化
8.1
tensorrt.CalibrationAlgoType
来⾃ </deeplearning/tensorrt/api/python_api/infer/Int8/Calibrator.html>
量化⽅法枚举
Tensorrt.IInt8Caliborator (interface)
⽤于量化校准的接⼝,量化由Builder操作。其必须提供⽅法来获取⼀系列图⽚进⾏量化,
(可选)实现⼀个⽅法
Parrs
1.uffParr
主要函数:par 从uff buffer中⽣成netWork
Caffe Parr/Onnx Parr 类似。
例⼦:
参考github:
其中 trt_export.py 为如何导出onnx 模型(需要注意的是如果你的模型在导出模型时并没有指定dynamic_axes,则不能使⽤optimize_profile 来将模型的batchsize设置为动态的)
trt_inference.py 为如何利⽤trt模型进⾏推理。