TensorRT int8 calibration table生成及解析

TensorRT int8推理的精度接近fp32, 但是存储空间更小,对memory的带宽消耗也少,同时推理速度也有一定的提升。是一项很重要的技术。

跟fp16和fp32不一样,使用int8推理必须先要做calibriation,其实就是再做浮点数定点化的一些操作,然后将一些关键数据保存下来,下次使用时,就不用重新生成了。这些数据会被记录到一个calibration table的文件中。为了生成calibration table需要准备一个calibration dataset, 通常要500-1000个samples, 这些samples要有代表性,task中的每个类别都要能涵盖住,最好时validation set的一个子集。

有了calibration dataset,使用一些常用的优化算法,比如nvidia介绍的,每一层的activation value 分布的KL散度,fp32的KL散度和int8对应的KL散度要很相似。优化算法跑完会输出一个calibration table或者calibration cache, TensorRT将优化封装到nvinfer library中了,只提供了几个简单的接口,将calibration table保存下来。

calibration table格式如下:

TensorRT: Performing Inference In INT8 Using Custom Calibration (ccoderun.ca)

 上图中layer name之后是一个float data, 将其十六进制持久化存储下来的结果。

activation scales = abs(max_dynamic_range) / 127.0f.

这个max_dynamic_range就对应到下图中的max

 到此,就将calibration table或者calibration cache中的东西详细解析出来了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值