tensorRT 7.0 学习笔记(五)

您所在的位置:网站首页 五维度模型 tensorRT 7.0 学习笔记(五)

tensorRT 7.0 学习笔记(五)

2023-03-13 23:25| 来源: 网络整理| 查看: 265

1.int8 量化

首先需要为 Ibuilder 设置校准器(caliborator)主要作用就是通过一定的算法把每层的weights 和输出tensor 映射到 int范围,TRT提供了以下几种校准器:

需要在继承其中之一后实现 getBatch()方法,然后调用:

为builder设置校准器。

同时

实现 writeCalibrationCache() and readCalibrationCache() 缓存/载入校准表

 

builder内部的工作原理:

1.调用 getBatch Size()确定输入的batch Size

2.反复调用 getBatch()获得多个batch 输入,batchSize 一定要等于个体Batch Size(),如果没有数据了,那么getBatch()硬刚返回false

 

创建一个Int8 cudaEngine,builder需要以下几步:

1.创建一个32-bit的 engine,在 校准数据集上进行推理,收集每层响应向量的的张量分布直方图

2.根据直方图生成校准表

3.根据校准表和network definition建立Int8 cudaEngine

配置 int8量化注意的要点:

 

2.dynamic input shapes (动态输入维度)

 

1.先决条件

目前我搜集到的资料来看只有onnx模型支持,即需要转换成onnx模型时指定 dynamic_axes:

 

来源:https://blog.csdn.net/weixin_42365510/article/details/112088887

在trt7.0中如果想实现batch inference(批推理)要么再生成原始模型时(uff/onnx/caffe)设定一个固定的batchSize,要么按照以上方法将batch 维度设置为dynamic axes

2.trt设置步骤

创建 INetworkDefinition时要制定为EXPICIT_BATCH:

构建时,指定一个或多个:optimization profiles,在其中指定运行时允许的维度范围,以及维度由那个优化器进行优化

optimization profiles:

用于描述一个输入tensor维度范围,当使用运行时改变维度时,必须在build time创建至少一个 optimize profile

创建  optimize profile:

在推理时需要指定特定的optimize profile:

如果一个execution context 有关的cudaEngine 由动态shaoe的inputs。则必须至少指定一个唯一的(其他excution context 未使用的) profile的索引

setOptimizationProfile可以交换不同的profiles

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3