TensorRT:FP16优化加速的原理与实践


一、FP16是什么?

在介绍FP16之前,我们先简单介绍一下FP32,FP32是深度学习模型训练与部署的默认精度类型,FP32包括1位符号位、8位指数位、23位小数位,其中指数位影响数值可表示范围,小数位影响精度。在学习C语言时,我们接触到了单精度浮点数、双精度浮点数、INT型整数等,这里的单精度浮点数Float,它在机内占4个字节、有效数字8位、表示范围:-3.40E+38 ~ +3.40E+38,其实它的精度类型就是FP32

所以这里的FP16也是一种精度类型,只不过它的位数只有16位,被称为半精度浮点数,它包括1位符号位、5位指数位、10位小数位,由于位数的减少,所以FP16的表示范围和精度都比FP32低,但是对于模型部署来说,数据位数的减少可以让计算复杂度降低,加速模型推理速度。

下面是FP32和FP16的直观表示图以及相应的转换公式:
在这里插入图片描述

详细的精度解析可以参考:
模型精度问题(FP16,FP32,TF32,INT8)精简版

二、FP16设置

1.设置FP16 Flag

在TensorRT中设置FP16其实特别简单,只需要我们在构建期设置一个FP16的flag,即可开启FP16的模型构建与推理。

相应代码如下:

logger = trt.Logger(trt.Logger.ERROR)
builder = trt.Builder(logger)
network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
profile = builder.create_optimization_profile()
config = builder.create_builder_config()
config.set_flag(trt.BuilderFlag.FP16)

2.查看是否支持FP16

代码如下:

if builder.platform_has_fast_fp16:
	builder_config.set_flag(trt.BuilderFlag.FP16)

注意:不同版本的TensorRT查看是否支持FP16的方法可能不同,可查阅官方API文档

在这里插入图片描述


总结

FP16优化加速的原理和实际设置都相对简单,大家在用TensorRT进行模型推理时可以尝试打开FP16模式进行实际推理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值