TensorRT下FP32转INT8的过程

本文介绍了NVIDIA TensorRT的INT8推理过程,旨在在不显著降低精度的情况下,将FP32的CNN网络转换为INT8以提高通量和减少内存需求。文章详细讨论了INT8校准表的生成、使用,以及计算方法,解释了INT8计算具有高通量的原因,并阐述了在精度和动态范围上的挑战以及解决策略。
摘要由CSDN通过智能技术生成

1. 关于TensorRT

      NVIDIA TensorRT是一种高性能神经网络推理(Inference)引擎,用于在生产环境中部署深度学习应用程序,应用有图像分类、分割和目标检测等,可提供最大的推理吞吐量和效率。TensorRT是第一款可编程推理加速器,能加速现有和未来的网络架构。TensorRT需要CUDA的支持。TensorRT包含一个为优化生产环境中部署的深度学习模型而创建的库,可获取经过训练的神经网络(通常使用32位或16位数据),并针对降低精度的INT8运算来优化这些网络。借助CUDA的可编程性,TensorRT将能够加速助推深度神经网络日益多样化、复杂的增长趋势。通过TensorRT的大幅度加速,服务提供商能够以经济实惠的成本部署这些计算密集型人工智能工作负载。

 

 

2.关于int8 inference

对于INT8 推断(Inference),需要生成一个校准表来量化模型。接下来主要关注INT8推断(Inference)的几个方面,即:如何生成校准表,如何使用校准表,和INT8推断(Inference)实例。

 

1) 如何生成校准表?

校准表的生成需要输入有代表性的数据集, 对于分类任务TensorRT建议输入五百张到一千张有代表性的图片,最好每个类都要包括。生成校准表分为两步:第一步是将输入的数据集转换成batch文件;第二步是将转换好的batch文件喂到TensorRT中来生成基于数据集的校准表,可以去统计每一层的情况。

 

2) 如何使用校准表?

校准这个过程如果要跑一千次是很昂贵的,所以TensorRT支持将其存入文档,后期使用可以从文档加载,其中存储和加载的功能通过两个方法来支持,即writeCalibrationCache和readCalibrationCache。最简单的实现是从write()和read()返回值,这样就必须每次执行都做一次校准。如果想要存储校准时间,需要实现用户自定义的write/read方法,具体的实现可以参考TensorRT中的simpleINT8实例。

下图是simple_int8 mnist实例

下面我将介绍一下tensorrt的int8 inference的方法

3.tensorrt的int8 inference基本介绍

  • 目标: 在没有明显准确度丢失的情况下将FP32的CNNs网络转换为INT8
  • 理由: INT8类型的存储方式有很高的通量和较低的内存需求
  • 挑战: 相对于FP32, INT8有明显较低的精度和动态范围
  • 解决方式: 在将权值以及计算时最小化有效信息损失.
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值