首页IT科技深度学习算法(深度学习模型精度fp16和fp32)

深度学习算法(深度学习模型精度fp16和fp32)

时间2025-06-14 17:36:22分类IT科技浏览5316
导读:当前的深度学习框架大都采用的都是fp32来进行权重参数的存储,比如Python float的类型为双精度浮点数fp64,PyTorch Tensor的默认类型为单精度浮点数fp32。...

当前的深度学习框架大都采用的都是fp32来进行权重参数的存储              ,比如Python float的类型为双精度浮点数fp64                  ,PyTorch Tensor的默认类型为单精度浮点数fp32              。

使用fp32主要存在问题

模型尺寸大      ,训练的时候对显卡的显存要求高; 模型训练速度慢; 模型推理速度慢                  。

解决方案:使用低精度计算对模型进行优化

1.推理过程中           ,模型优化目前比较成熟的方案就是fp16量化和int8量化;

2.训练方面的方案是混合精度训练                   ,它的基本思想很简单: 精度减半(fp32→ fp16)          ,训练时间减半      。与单精度浮点数float32(32bit       ,4个字节)相比                    ,半精度浮点数float16仅有16bit            ,2个字节组成           。

训练过程中   ,直接使用半精度进行计算会导致的两个问题

舍入误差(Rounding Error):对足够小的浮点数执行的任何操作都会将该值四舍五入到零                    ,在反向传播中很多甚至大多数梯度更新值都非常小               ,在反向传播中舍入误差累积可以把这些数字变成0或者nan,这会导致不准确的梯度更新                 ,影响网络的收敛                   。 溢出错误(Grad Overflow / Underflow):精度下降(小数点后16相比较小数点后8位要精确的多)会导致得到的值大于或者小于fp16的有效动态范围                  ,也就是上溢出或者下溢出         。

解决方案:使用混合精度训练(Mixed Precision)损失缩放(Loss Scaling)

基于apex的apm(Apex混合精度加速):

自动:Tensor的dtype类型会自动变化

   ,框架按需自动调整tensor的dtype

混合精度:采用不止一种精度的Tensor              ,torch.FloatTensor和torch.HalfTensor

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
电脑中记事本在哪里找(电脑记事本在哪个文件夹) 何为色拉油(SEO是什么?SEO为什么重要?)