发布时间:2023-04-20 文章分类:电脑百科 投稿人:王小丽 字号: 默认 | | 超大 打印

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

使用fp32主要存在问题

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

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

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

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

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

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

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

自动:Tensor的dtype类型会自动变化,框架按需自动调整tensor的dtype
混合精度:采用不止一种精度的Tensor,torch.FloatTensor和torch.HalfTensor