AWQ:Activation-aware Weight Quantization 用于LLM量化与加速-(1)背景与原理

一、背景

  • AWQ(Activation-aware Weight Quantization)是一种用于大型语言模型(LLM)的权重量化技术,旨在减少模型大小和加速推理过程,同时保持模型性能。AWQ的核心思想是权重对模型性能的重要性并不相同,因此通过保护更重要的权重(通常是较小的一部分,如0.1%-1%),可以显著减少量化误差。AWQ不依赖于反向传播或重构,有助于保持模型在不同领域和模态上的泛化能力。此外,AWQ还实现了一个高效的推理框架,显著提高了在桌面和移动GPU上的运行速度。

二、引言

  • 现状问题
    • QAT(量化感知训练)需要高训练成本。
    • PTQ low-bit 状态下,精度损失比较大,GPTQ使用二阶信息能一定程度缓解问题,但是容易过拟合,具体表现为重建模型的时候会扭曲分布外域上的学习特征。
  • 本文基于权重对LLM效果不是同样的重要的假设,提出AWQ:
    • 参考激活值,而不是权重值的方法来进行针对性量化,量化对象还是模型权重。
    • 所以,针对不同的权重,缩放范围也不一样,来达到最优量化的效果。
  • 本文还实现了一个高效的框架,用于推理,对比HF,实现3倍以上加速,AWQ已经可以用于vLLM、HuggingFace、LMDeploy等推理框架上。

三、实现原理

3.1 初步方案、推论和实验

  • 图a:RTN(round-to-nearest quantization),直接四舍五入量化,可以看到效果一般,PPL 43.2。
  • 图b:x是激活值,通过发现重要激活值,来找到右边蓝色的salient weights(指在模型中对最终输出或决策具有重要影响的权重)。保留着salient weights的FP16 channel,其他参数都进行了RTN量化,模型效果达到PPL 13.0。但是这种方案对硬件不友好,因为参数是混合精度存储的。
  • 图c:方案三,还是对W进行量化,只不过是针对x激活值来进行个性化的量化,所以可以看到右边Q(W)的矩阵,每一行不同颜色,代表每个通道缩放的范围都不一样。下面来看看具体的原理。
    在这里插入图片描述
    在这里插入图片描述
  • Table1 是通过实验来证明一个结论,基于activation(激活值的大小)来进行进行权重量化,比基于权重W,和random,更接近全是FP16的效果。并且保留0.1%-1%的channel,其他进行量化,模型效果已经十分接近FP16精度的效果。

3.2 对Weight进行放大对量化误差的影响

在这里插入图片描述

在这里插入图片描述

  • 这一段是证明w乘以一个系数s后,量化参数乘以x的结果与原来结果的误差会减少,因为:
    • Δ \Delta Δ Δ ′ \Delta' Δ是约等于关系,因为对小部分W进行scale up,刚好scale上最大的w概率很低,特别是选0.1% - 1%参数的情况下。
    • RoundErr中,对数据取round,也可以认为期望值不变,都是0.25。
    • 所以两者相乘等于s

在这里插入图片描述

  • 文中还对不同的s的影响进行统计,可以看到:
    • Δ \Delta Δ 变化的比例,s取值越大,变化越大,因为原来不是最大的w,通过乘以s,改变了最大的w,从而影响到 Δ \Delta Δ
    • s取1.5、2、4等值的时候,只有4使得 Δ \Delta Δ / Δ ′ \Delta' Δ的偏离1太多,此时PPL反而上升了,文中解释是因为使得非重要权重的量化损失过大。

3.3 个性化权重

  • 下面应该是本文原理最重要的部分,讲解了怎样进行个性化的量化。
    在这里插入图片描述
  • 首先最直观的方法就是定义一个目标loss,使得量化前后的WX差异越小越好,但是因为量化函数无法求导,所以无法使用原始的反向梯度传播方法来优化。有一些近似梯度的方法,但是也会面临收敛不稳定的问题。
  • 为了使得过程更加稳定,文章提出了一种最直观的方法,s只跟激活值相关,同时引入超参数 α \alpha α,来平衡重要显著的通道和非显著通道。意思就是通过在一个数据集上, s x s_{x} sx直接跟激活值x相关,搜参最优 α \alpha α来找到最好的 s x a s_{x}^{a} sxa组合,从而使得quantization error的MSE最小化。这种方法不依赖回归和反向传播,也不容易过拟合,因为只是借助calibration set来确定不同channel的“显著性”。
    在这里插入图片描述

今天先写到这,后续有时间再补充上实验和应用部分,欢迎关注。

  • 37
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
wandb: Tracking run with wandb version 0.15.5 wandb: W&B syncing is set to `offline` in this directory. wandb: Run `wandb online` or set WANDB_MODE=online to enable cloud syncing. /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/gym/envs/registration.py:556: UserWarning: WARN: The environment Ant-v2 is out of date. You should consider upgrading to version `v4`. f"The environment {id} is out of date. You should consider " Error compiling Cython file: ------------------------------------------------------------ ... See c_warning_callback, which is the C wrapper to the user defined function ''' global py_warning_callback global mju_user_warning py_warning_callback = warn mju_user_warning = c_warning_callback ^ ------------------------------------------------------------ /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx:92:23: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil' Error compiling Cython file: ------------------------------------------------------------ ... See c_warning_callback, which is the C wrapper to the user defined function ''' global py_error_callback global mju_user_error py_error_callback = err_callback mju_user_error = c_error_callback ^ ------------------------------------------------------------ /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx:127:21: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil' Compiling /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx because it changed. [1/1] Cythonizing /home/zhangmengjie/anaconda3/envs/torch1/lib/python3.7/site-packages/mujoco_py/cymj.pyx wandb: Waiting for W&B process to finish... (failed 1). wandb: You can sync this run to the cloud by running: wandb: wandb sync /home/zhangmengjie/PID/Python/ERL-Re2-main/wandb/offline-run-20230721_165346-awq1hazo wandb: Find logs at: ./wandb/offline-run-20230721_165346-awq1hazo/logs
07-22

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值