目录
“AWQ: ACTIVATION-AWARE WEIGHT QUANTIZATION”AWQ 的核心
“TINYCHAT: MAPPING AWQ ONTO EDGE PLATFORMS”
ABSTRACT
“On-device LLM is becoming increasingly important: running LLMs locally on edge devices can reduce the cloud computing cost and protect users’ privacy.”
必要性:在设备端运行大语言模型(LLM),省钱【以前用 AI,数据要传到云端处理,云端服务器运营成本会间接分摊到用户身上。模型在自己设备上跑,不用依赖云端,能减少这部分费用】+保护隐私【不用担心私密信息在传输或存储过程中被泄露】
难点:LLMs的巨大模型规模(如GPT-3达175B参数)与边缘设备有限的硬件资源(内存、算力)形成尖锐矛盾,导致部署困难。但是直接对所有权重进行低比特量化会导致较大误差,影响模型性能
解决方案:----提出AWQ:
大模型里的那些 “权重”只要看好 1% 最关键的部分,就能让误差小很多。
如何找到这1%显著权重通道??依据激活值分布(即权重处理的数据重要性)来识别,而非看权重本身的大小或范数【显著权重通道的关键在于其处理的数据的重要性,激活值分布能更准确地反映这一点】
补充知识点:权重大小 ≠ 通道重要性
假设有两个通道(Channel A 和 Channel B):
Channel A 的权重很大,但输入到它的数据几乎总是接近 0(激活很稀疏或者几乎不被触发)。
Channel B 的权重相对较小,但输入到它的数据在实际任务中频繁出现,激活值【激活值就是网络在处理数据时,某个神经元/通道的实际输出值】分布很活跃。
如果只看权重大小,可能觉得 A 更重要;
但实际上 B 对最终输出的贡献更大(因为它经常被“用到”),所以 B 是显著通道。
AWQ方案遇到的问题:采用混合精度量化( 1% 权重用高精度,其余用低精度),会导致硬件效率低下
补充知识点:硬件的并行计算模式,GPU/TPU/NPU 等加速器在做矩阵乘法时,往往要求数据在内存和计算单元中是 统一精度 的。不同精度破坏了计算单元的统一性、不能整齐批处理、存储不再连续。
解决方案:不是真的用高精度保存关键通道,而是用“等效变换”对显著权重通道进行缩放保护,让它们在低比特表示下也能减少量化误差。
补充知识点:权重被放大,能让它们在量化时 “占的比例更大”,被 “四舍五入” 的幅度就会减小(相对误差降低)。只放大权重,输出就会变大,所以要同时在输入激活上乘一个 $1/s$ 来抵消,这样输出结果保持不变。
等效替换遇到的问题:缩放因子s如何确定??
s 要根据“这个通道到底常用不用,用的时候大小如何”来决定。这里就需要用到 激活统计量
补充知识点:激活统计量是对激活值做一些统计汇总比如均值、方差、最大值、L2 范数,激活小 → 放大权重多一点,s大一点,保护量化后信息;激活大 → 权重几乎不变,所以不用放大太多。
EG:
通道
平均激活值
缩放因子 s = 1/平均激活值
1
0.01
100
2
1.0
1
AWQ的优点:
-
不依赖反向传播或重构:传统量化方法可能需要用训练数据反复调整(反向传播)或者重构模型输出,这容易让模型过度依赖校准数据。AWQ只靠统计激活信息就能决定权重缩放 → 所以它能 直接应用在不同类型的数据上(代码、数学、图文等),不会“记住”某个校准集的特性。
-
在各类任务上性能优越:即使把模型压缩到低位(如4位),AWQ保持的性能更好
-
泛化能力强 → 首次实现对指令微调模型(如Vicuna)和多模态模型(如OpenFlamingo)的高效量化。
什么是校准集?校准集是从原始训练/验证数据中挑出的一小部分数据
为什么需要?校准集提供了模型输入的真实分布信息,让量化过程能更合理地设置缩放参数和零点,从而降低精度损失,保持模型性能。校准集是一小部分真实输入数据,通过把这些数据喂给网络,记录各层激活的最大值、最小值或其他统计量。有了这些统计量,我们就能确定量化时的缩放因子(scale)和零点(zero-point),确保低比特表示尽可能保留原始信息。
其他贡献:TinyChat:专门针对 4位量化(4-bit)的大语言模型 LLM / 多模态模型 VLM 进行优化【内核融合 和 平台感知优化减少冗余操作和内存访问,提高推理速度】
内核融合:在深度学习中,一个操作通常会拆成很多小步骤(kernel),比如矩阵乘法 → 加偏置 → 激活函数。每个步骤都要读一次内存、写一次内存,很浪费时间。内核融合就是把这些小步骤合并成 一个大步骤,一次性完成所有操作,减少中间数据读写,提高速度。
平台感知权重打包:模型的权重其实是大块数据,如果直接用原始存储方式,硬件处理起来不够高效。“平台感知”就是根据你用的硬件特点来重新排列和压缩权重。
CONCLUSION
激活感知权重量化(AWQ),执行每通道缩放以减少显著权重的量化损失、AWQ不会过度适配校准集、TinyChat系统进一步将AWQ实现的理论内存节省转化为相对于Huggingface在台式机和移动GPU上的FP16实现的3.2-3.3倍速度加速。
“INTRODUCTION”
1、部署LLMs到边缘设备的重要性与挑战
重要性:
①消除将数据发送到云服务引起的延迟 ,使LLMS能离线操作
②减少集中式云服务的运维和扩展成本
③减少了数据泄露的机会
④Transformer的LLMs性能卓越
挑战,当前存在的问题:
低比特权重量化(如4位)能压缩模型大小,但精度损失严重。量化感知训练(QAT)需重新训练模型,成本极高。而后训练量化(PTQ)在极低比特(如INT3)下精度暴跌。--->GPTQ用二阶信息补偿误差,但易过拟合校准数据。
2、针对以上现paper提出了AWQ
并不是所有权重都一样重要,模型中只有 极少一部分权重(0.1%~1%)特别重要,称为 显著权重,要看激活(activation)分布,而不是权重分布。
不能简单地“跳过”这些权重,否则会变成硬件不友好的 混合精度量化--对显著通道做缩放【把这些通道的权重放大,再进行量化。放大之后,相对误差会变小,从而减少量化带来的精度损失】
3、TinyChat:系统落地
开发TinyChat框架,专为4位量化LLM设计。通过内核融合(合并计算步骤)和平台感知权重打包(按硬件优化存储),TinyChat比原版快3倍以上。
RELATED WORK
1、模型量化方法
QAT量化感知训练:在训练过程中模拟量化误差,通过反向传播微调模型,需重新训练大模型,难以扩展
PTQ后训练量化:无需重新训练,直接对预训练模型进行量化。通常使用PTQ来量化LLM
2、LLM特定量化方法
①W8A8量化(权重+激活均为INT8):SmoothQuant(Xiao 2022)、GPTQ(Frantar 2022)早期版本。同时压缩权重和激活值,减少内存占用
②低比特权重量化(W4A16,仅权重压缩):GPTQ(Frantar 2022):用二阶信息优化量化误差,需重构模型。LLM.int8()(Dettmers 2022):混合精度量化,硬件复杂。
AWQ和G[TQ较为接近,但是避免GPTQ的过拟合问题,提升了泛化能力。无需重构或重排序(GPTQ需对LLaMA等模型特殊处理)。支持多模态LLM(如OpenFlamingo),GPTQ无法直接应用。
3、对低比特量化LLMs的系统支持
背景:低比特量化(比如 3 位、4 位)是压缩 LLM 的主流方案,但需解决两个关键问题:IO优化、适配硬件特性计算加速,现有的系统支持:GPTQ、FlexGen / llama.cpp / exllama、FasterTransformer、LUT-GEMMMLC-LLM
“AWQ: ACTIVATION-AWARE WEIGHT QUANTIZATION”AWQ 的核心
1、保留1 %的显著权重
发现LLM 权重的重要性不均,存在少量关键权重对模型性能影响显著,跳过这些显著权重的量化可以帮助弥合由于性能下降造成的影响。---->做实验:测量了INT3量化模型的性能,同时保持FP16中一些权重通道的比例【通过权重幅值或 L₂ 范数判断重要性】---->发现:表1基于权重幅值选择关键权重(FP16% based on W)效果与激活值随机选择接近,无法显著提升量化性能----->改进:选择激活值幅值大的权重通道(对应处理重要特征的权重),可显著提升性能(表 1 绿色高亮结果)。

痛点:混合精度(如 1% FP16 + 99% INT4)虽能提升精度,但硬件支持复杂(需特殊内存布局和计算逻辑),系统实现变得困难,需要有一种方法保护重要权重但不必实际保持为FP16
补充知识点:在深度学习里有一个老想法大权重往往更重要,这就是为什么早期的剪枝/稀疏化方法都是基于权重大小或 L₂ 范数来判断是否重要。【忽略了“输入激活值的分布”】 AWQ 发现:基于 激活统计量 选权重更靠谱
PPL?PPL = Perplexity = 困惑度,PPL 越小,说明模型越“不困惑”,预测句子时更有把握;PPL 越大,说明模型更“迷糊”。PPL 常用来评估量化、蒸馏等压缩后的模型质量,量化前 PPL 很低 → 量化后如果 PPL 飙升 → 说明性能掉了。
假设一句话有 3 个词,模型预测每个词的概率:
正确词概率分别是:0.5, 0.25, 0.1
那么交叉熵比较大(说明模型信心不足)。
算出来的 PPL 可能是 5,意思就是:模型平均像在 5 个候选词里随机猜 才能对一个词。
如果 PPL = 1,说明模型每次预测都 100% 正确。
如果 PPL = 100,说明模型几乎像在 100 个选项里乱猜。
2、通过激活感知缩放保护权重,不必实际保持为FP16
工程意义:缩放后权重仍为低比特,可直接使用现有硬件加速指令,无需修改底层计算逻辑。
①基于权重量化的误差
-
线性层操作:“y = wx”【w是权重矩阵,x为输入】,
-
基本量化操作:将权重 ( w ) 量化为低比特整数 ( Q(w) ),量化函数Q(w)


N是量化比特数,△越小量化误差越小,但能表示的范围有限,这里选择 时,让最大权重能正好映射到整数范围的边界(即利用好所有整数区间)

为什么 2-bit 会有 4 个值?
-
缩放策略设计“Q(w · s)(x/s)”
考虑某个权重元素 w。若把它放大一个系数 s>1,同时把对应的输入激活 x 缩小同样的系数(即用 x/s),网络的理想输出不变:。
![]()
公式中Δ′ 是“放大后”再计算得到的新步长
-
量化误差如何写出来“Consequently, the quantization error from equation 1 and 2 can be expressed as”
不放大时(式 (1) 的误差):
放大并反向缩小时(式 (2) 的误差):
论文接着给出三个经验事实:
的分布特性不因线性缩放而改变,期望绝对误差仍约 0.25; 通常把单个元素或极少数元素放大 不会改变该组权重的最大值,因此
;s 和 x$用 FP16 存储与计算,不引入额外量化误差(它们不被离散到低比特整数)。
代入这三点就得到论文中的公式
在“(1) 误差分布不变、(2)
”的假设下,后者相比前者多了一个
的缩小因子,因此期望量化误差约缩小为原来的 1/s。
核心收益:对“重要/显著”的权重或通道放大 s>1,并在运行时用 x/s$抵消,功能不变、误差缩小约 1/s。
-
实验验证:设置OPT-6.7B 模型,INT3 量化(组大小 128),对 1% 关键权重通道缩放 ( s ) tab2,可以看出AWQ 的核心思想是“放大少数关键通道”。但是如果放大得太狠(s太大),会导致全局步长变大,从而让大多数普通通道的误差被放大,最终拖累整体精度。实验发现 s=2 是一个比较好的折中点。
②寻找最优缩放因子s
-
损失函数:目的是找到最好的参数
,让损失函数数
最小。这里的损失函数j就是拿 “先缩放量化权重,再反向缩放输入后计算的结果”,和 “原本没处理的结果” 比差距(用的是范数,类似计算两个结果的整体差异)
![]()
:Q 是权重量化函数。
是原来 FP16 精度的权重,diag(s) 是把缩放因子
变成对角矩阵(这样能对不同通道单独缩放)。所以这部分是先缩放权重,再量化。
是从一小部分校准数据里缓存的输入特征(用小校准集是为了不 “过拟合” 到特定任务)。这部分是对输入特征做反向缩放(因为前面权重缩放了,这里得对应调整输入,保持整体效果一致)。
:这是原本没量化、没缩放时,权重和输入特征计算的结果。
-
量化的难点:不可微分
因为量化函数 Q 不是 “可微分” 的(简单说,量化是把连续的数值变成离散的,这个过程没办法用导数来优化),所以直接用常规的 “反向传播” 来优化这个问题行不通。“Since the quantization function is not differentiable,”
-
解决办法:简化搜索空间“use a very simple search space:”
通道的 “重要程度” 其实是由激活值的缩放情况决定的(也就是 “激活感知”)。所以就用了一个很简单的搜索空间:
设定缩放因子为,接着需要寻找最优的超参数
,使损失函数
达到最小,即
其中,收集了所有通道的平均幅值,形成一个缩放基准。
是一个超参数,重要通道需要更细致的保留,而非重要通道则可以适当简化,
正是用来调节这种平衡的。
的确认策略:通过在区间 [0,1] 上做一个快速的网格搜索,找到最佳的
:
:表示完全不缩放;
:表示在搜索空间中最强烈的缩放。
另外,对权重做 裁剪(clipping),来尽量减少量化时的 MSE
-
消融研究:AWQ 一直比 “round-to-nearest” 量化效果更好,并获得了与混合精度( 1 % FP16 )相当的性能
RTN 是最常见、最朴素的一种后训练量化(Post-Training Quantization, PTQ)方法。
给定一个缩放因子 s,把浮点数权重 w 转换为整数:
其中
就是 四舍五入,所有权重通道都被同等对待
③AWQ优点
无需回归或反向传播:AWQ只需要简单地统计每个通道的激活平均幅值,就能计算缩放因子 → 计算成本低,训练步骤少。
对校准集依赖很小:AWQ 只需要测量每个通道的平均激活幅值,而不是拟合整个误差分布 → 防止过拟合
数据需求少:只用到了简单的平均值统计,不需要大量校准样本。并且量化过程不做过多拟合,也不会破坏模型原有的知识和能力
④总结AWQ过程
激活感知(Activation-aware)
-
在校准数据集上跑一遍前向,统计每个通道的激活平均幅值 $s_X$。
-
激活越大 → 该通道越重要。
缩放因子(Scaling)
给每个通道一个缩放因子:
这里 是一个超参数,用来平衡“保护重要通道”和“压缩不重要通道”。
权重缩放 + 剪裁(Weight Scaling & Clipping)
-
用这个缩放因子对权重列进行缩放,再量化,这样重要通道的量化误差就被减小了。
-
对极端值做裁剪,避免它们破坏量化精度。
搜索
-
在区间 $[0,1]$ 内做一个快速网格搜索,找到最优的 $\alpha$。
举例:
“TINYCHAT: MAPPING AWQ ONTO EDGE PLATFORMS”
AWQ 能显著压缩大模型(LLMs)的存储规模(如 W4A16:权重 4bit,激活 16bit),但与 W8A8(如 SmoothQuant,权重/激活都 8bit)不同,W4A16 使用不同精度的数据类型【反量化必须嵌入主计算循环,增加实现难度】---->提出TinyChat 系统,专为 AWQ 模型推理设计:前端基于 PyTorch,后端利用设备专属指令集(如 CUDA/PTX、Neon、AVX),实现高效推理。
1、为什么AWQ有助于加速LLMS
解释为什么 4-bit权重量化(W4A16) 能显著加速边缘设备推理 。
LLM推理两种阶段
-
上下文阶段(Context):比如把一段提示词输入模型,速度很快(200个词只要 10ms)。
-
生成阶段(Generation):让模型继续写字,速度很慢(生成20个词要 310ms)。
👉 所以瓶颈主要出在生成阶段。
为什么生成慢?
-
现代GPU(如RTX 4090)算力超强(165 TFLOPS),但内存带宽有限(1 TB/s)。
-
在生成阶段,模型每次只处理 1 个新 token,需要不断从显存里取出权重去计算。
-
结果:算力用不上,反而是“搬数据”太慢 → 内存带宽成了瓶颈。
权重访问是大头
-
详细分析发现:相比激活(中间计算结果),权重加载占了绝大多数内存流量。
-
所以如果能减少权重数据的体积,就能大幅加速。
总结:在边缘设备上,LLM 推理的瓶颈在于权重的内存访问,AWQ 通过将权重量化到 4bit 显著减少内存流量,从而提升算术强度并实现推理加速。证明了4比特权重量化可以带来4 ×理论峰值性能
算术强度(Arithmetic Intensity):指“每传输 1 个字节能做多少计算”。数值越大,越能充分利用 GPU 的算力。FP16 时只有 ≈1 FLOPs/Byte,W4A16 后能达到 ≈4 FLOPs/Byte。
内存瓶颈(Memory-Bound):当算力够用,但数据传输跟不上时,性能就受限于内存带宽。这是大多数 LLM 在推理阶段的主要问题
2、Deploy AWQ with TinyChat
证明了4比特权重量化可以带来4 ×理论峰值性能后进一步设计了TinyChat来实现这种加速
4-bit 权重量化 → 权重占用减少 4 倍 → 算术强度提高 → 理论峰值性能提升 4×。
TinyChat 结合 4-bit AWQ 权重量化 + 即时反量化 + SIMD-aware 打包 + 核融合,在 GPU 和 CPU 上都能显著减少内存访问开销与 kernel 调用次数,从而实现 边缘设备大模型推理的高效加速。
【这里我就不详细探索了….偷个懒】




1233

被折叠的 条评论
为什么被折叠?



