模型量化:轻量化你的深度学习模型

诸神缄默不语-个人CSDN博文目录

在深度学习领域,模型的性能通常与其大小成正比。然而,大型模型在部署时面临资源限制和高效率要求的挑战,尤其是在移动设备和边缘计算设备上。这时,模型量化就显得尤为重要。

模型量化是指将神经网络的浮点算法转换为定点。

1. 什么是模型量化

模型量化是一种减少深度学习模型大小的技术,通过减少模型中参数的位数来降低模型的存储需求和计算复杂性。这通常涉及将浮点数参数转换为低位数的整数,例如从32位浮点数到8位整数。

模型量化的作用:

  • 减小模型大小: 如INT8相对于FP32减少了75%
  • 加速推理:访问一次 32 位浮点型可以访问四次 int8 整型,整型运算比浮点型运算更快,CPU对INT8计算更快
  • 用于只支持INT8计算硬件
  • 压缩网络参数,提升速度,降低内存占用

2. 量化的主要类型

1. 量化阶段

1. 静态量化

静态量化在模型训练后进行,不涉及重新训练。它通常用于不需要细粒度调优的场景。

2. 动态量化

动态量化在模型推理时进行,对权重进行量化,但保留中间激活的浮点数表示。它适用于那些需要保持较高推理精度的应用。

PyTorch动态量化入门教程可参考我撰写的另一篇博文:Dynamic Quantization PyTorch官方教程学习笔记

3. 量化感知训练

量化感知训练在训练过程中将量化考虑在内,通过模拟低精度的效果来训练模型。这种方法可以最大限度地减少量化对模型精度的影响。

2. 模型量化方案

  1. datafree:不使用校准集,传统方法直接将浮点数转为量化数,准换损失通常较大 ,但是高通最新的论文 DFQ 不使用校准集也得到了很高的精度。

  2. calibration:基于校准及方案,通过输入少量真是数据进行数理统计分析,很多芯片厂商都提供这样的功能,如 tensorRT、高通、海思、地平线、寒武纪

  3. finetune:基于训练finetune的方案,将量化误差在训练时仿真建模,调整权重使其更适合量化 优点是能到来精度提升,缺点要修改模型训练代码开发周期长

3. 量化方法

量化是否一定能加速计算?回答是否定的,许多量化算法都无法带来实质性加速。

已知提速概率较大的量化方法主要有如下三类

  1. 二值化,其可以用简单的位运算来同时计算大量的数。对比从 nvdia gpu 到 x86 平台,1bit 计算分别有 5 到128倍的理论性能提升。且其只会引入一个额外的量化操作,该操作可以享受到 SIMD(单指令多数据流)的加速收益。

  2. 线性量化(最常见),又可细分为非对称,对称和 ristretto 几种。在 nvdia gpu,x86、arm 和 部分 AI 芯片平台上,均支持 8bit 的计算,效率提升从 1 倍到 16 倍不等,其中 tensor core 甚至支持 4bit计算,这也是非常有潜力的方向。线性量化引入的额外量化/反量化计算都是标准的向量操作,因此也可以使用 SIMD 进行加速,带来的额外计算耗时不大。

    与非线性量化不同,线性量化采用均匀分布的聚类中心,原始浮点数据和量化后的定点数据存在一个简单的线性变换关系,因为卷积、全连接等网络层本身只是简单的线性计算,因此线性量化中可以直接用量化后的数据进行直接计算。

  3. 对数量化,一种比较特殊的量化方法。两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。目前 nvdia gpu,x86、arm 三大平台上没有实现对数量化的加速库,但是目前已知海思 351X 系列芯片上使用了对数量化。

3. 量化的挑战和应对策略

3.1 精度损失

量化可能会导致模型精度的降低。为了缓解这一问题,可以采用更精细的量化策略,如混合精度训练,或者使用量化感知训练来优化模型。

3.1.1 精度层级

低精度模型表示模型权重数值格式为 FP16(半精度浮点)或者 INT8(8位的定点整数),但是目前低精度往往就指代 INT8。
常规精度模型则一般表示模型权重数值格式为 FP32(32位浮点,单精度)。
混合精度(Mixed precision)则在模型中同时使用 FP32 和 FP16 的权重数值格式。 FP16 减少了一半的内存大小,但有些参数或操作符必须采用 FP32 格式才能保持准确度。

混合精度训练是一种同时使用单精度(32位)和半精度(16位)浮点数进行训练的技术。这种方法可以在减少计算资源需求的同时,保持或仅轻微影响模型的精度。在混合精度训练中,模型的关键部分,如权重更新,使用更高精度的计算来保证训练稳定性和模型质量,而其他部分则使用低精度计算以提高效率。

参考资料:
还没读:大模型基础(20)

3.2 硬件兼容性

并非所有的硬件都支持低精度的计算。因此,在进行量化时需要考虑目标硬件的兼容性。一些专用硬件和加速器被设计来支持低精度运算,从而加速量化模型的推理。

4. 模型量化的应用

模型量化在许多领域都有应用,例如:

  • 移动设备:在资源受限的移动设备上部署轻量化模型。
  • 边缘计算:在接近数据源的地方快速处理数据。
  • 云计算:减少存储和计算资源的需求,提高效率。

5. 最新进展

近年来,随着人工智能的迅速发展,模型量化领域也在不断进步。一些最新的研究集中在自动量化技术上,这些技术可以智能地选择最佳的量化策略。此外,一些研究致力于开发新的量化算法,以进一步减少精度损失和提高运行效率。

(2023 微软) FP8-LM: Training FP8 Large Language Models:FP8混合精度训练


在这篇文章中,我们简要介绍了模型量化的基本概念、主要类型、面临的挑战、应用场景和最新进展。这一领域的迅速发展正推动着深度学习模型在更广泛场景的应用,同时也为模型优化提供了新的方向。希望这篇文章能帮助你更好地理解模型量化,并在你的项目中找到合适的应用。

6. 参考资料

还没读懂:

  1. 闲话模型压缩之量化(Quantization)篇_ariesjzj的博客-CSDN博客_模型压缩量化
  2. 模型量化综述及应用-云社区-华为云
  3. Overview of natively supported quantization schemes in 🤗 Transformers

已经将内容融入本文:

  1. 模型量化是什么?方法有哪些?简短总结-CSDN博客
  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值