tensorRT 7.0 学习笔记(五) |
您所在的位置:网站首页 › 五维度模型 › tensorRT 7.0 学习笔记(五) |
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 |