1、定义fp32 (全精度) )占用4个字节,共32个比特,其中一个比特是已编码比特,8是指数比特,23是尾数比特。
f16 ) float,半精度)占用两个字节的总共16个比特,其中一个比特是已编码比特、5比特指数比特和10比特的有效数字比特。 因为FP16的接入功耗是FP32的1/2,所以FP16是适合于在移动终端侧进行AI计算的数据格式。
INT8、8位整数占用1个字节。 INT8是定点计算方法,表示整数运算,通常通过浮点运算进行数值化。 在二进制中,一个“0”或“1”表示1位,INT8表示一个数字,用8bit表示。 因此,INT8虽然比FP16精度低,但数据量小、功耗低、计算速度相对快,符合端运算的特点。
2、相对低精度技术(high speed reduced precision )。 在训练阶段,梯度的更新往往很小,需要比较高的精度,一般使用FP32以上。 对于inference,精度要求不是很高,可以使用一般的F16 (半精度),也可以使用INT8(8) 8位整数,精度的影响不是很大。 此外,低精度模型的占用空间变小,有利于嵌入模型的部署。
用fp16代替fp32
好处:
1 ) TensorRT的FP16,在GPU支持FP16 (最新的2070、2080、2080 ti等)的前提下,与FP32相比可以提高接近2倍的速度
2 )减少显存。
缺点:
1 )导致溢出
3、测试我在Jetson Xavier NX上测试了基于TensorRT加速的yolo算法在FP32、FP16、INT8三种精度下的数据:
Ref :
TensorRT模型转换和部署,FP32/FP16/INT8精度划分
Pytorch的cuda撒娇黑米过渡到cpu撒娇黑米需要时间怎么办?