TensorRT+ int8官方论坛中有趣的讨论总结

  最近学习通过NVIDIA的显卡进行TensorRT加速及int8校准,遇到很多问题,准备认真学习下。关于int8校准的理论在论坛上已有很多介绍,这里对官方论坛中感觉有趣的讨论记录一下,便于后期翻阅。

1、自定义层的int8优化

  TensorRT INT8 plugin layer
  About use int8 model!
  官方开发人员只说了支持4种格式,未来会加入更多特性,没说能否自己实现自定义层的int8优化。

2、int8优化后检测准确度降低

  Int8 Calibration is not accurate … see image diff with and without
  convert a detect model to int8, the performance drops a lot
  有人发现检测网络在经过int8优化有存在差异,甚至准确度下降,但官方开发人员通过yolo测试认为没有这个问题,并提出用 legacy calibrator 代替entropy calibrator来校准模型,有利于提高准确度。不过按照官方文档的说法,legacy calibrator应该是要被废弃的方法。

3、int8优化后准确度提高

  Analyzing sampleInt8 accuracy
  有人实验发现通过int8优化后,模型的识别准确度提高了,有人分析可能是模型本身训练过程中过拟合,通过int8优化后降低了模型的过拟合程度,因此在测试集上表现出识别准确度提升。

4、int8校准表在不同设备上的使用问题

  Could TensorRT INT8 CalibrationTable be use on different Hardware platform?
  官方开发人员答曰,校准表如果使用相同的TensorRT版本时优化方法都是相同的,特别提到了如果使用5.1后的EntropyCalibrator2(官方文档中声明该方法需要DLA)则可以不同平台移植。
  Do tensorRT plan files are portable across different GPUs which have the same type
  需要注意的是TensorRT的文件在不同平台上还是慎用,可能出现警告!

5、int8优化fastrcnn

  “Engine buffer is full”
  官方安装包的sample有fastrcnn,但需要添加plugin,这个讨论是2018年8月的,提到fastrcnn的int8转换似乎有点困难,先Mark一下。

6、检查TensorRT优化后各层的精度

  How to check layer precision?
  使用nvprof。

7、某层输出为0,会导致int8校准失败

  Int8 Calibration failing when one layer’s output is uniformly zero
  如果模型某层权重全为0,会导致该层输出全为0,因此会提示int8校准失败。官方开发人员认为这不是推理模型中的常见问题,建议修改裁剪掉模型中的这个分支。

8、TensorRT模型的显存使用

  TensorFlow/TRT with multiple TF sessions - Dynamic INT8 engine memory allocation errors
  官方开发人员说TensorRT的背景就是要求使用所有的显存来构建最优的推理模型,如TensorFlow的显存指定不会在TensorRT生效。而setMaxWorkSpace(X)的API只是指定产生引擎的存储大小。

9、DLA

  How to use DLA with Tesla T4
  DLA是TensorRT的一项设置项,但目前官方文档中只有Jetson AGX Xavier标明支持DLA。这里有人回答说DLA只用在移动平台相关产品,桌面GPU产品没有这个单元。

10、大BatchSize可以提升TensorRT推断速度

  Why inference speedup increases with the increase of batch size in tensorrt int8?
  官方开发人员说大BatchSIze可以更高效的使用GPU,特别是使用32的倍数作为批大小可以在如V100、T4这类显卡上充分利用专有内核加速矩阵乘法和全连接层。

11、TensorRT加速没效果

  Dont see any speedups using TensorRT
  TensorRT的加速性能取决于将多少原网络的操作替换为TensorRT的优化操作,对于python+TensorFlow可以通过以下代码查看。

trt_engine_ops = len([1 for n in trt_graph.node if str(n.op)=='TRTEngineOp'])

  

  

  

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值