把大模型权重从 16 比特压到 4 比特,文件和显存能小很多,量化误差也会随之出现。常见做法会看每组权重的最大值,再决定怎样切分数值区间。AWQ多看了一样东西,真实输入经过模型时,哪些通道产生了突出的激活。
我核对了 AWQ 原论文、MIT Han Lab 的公开代码和 TinyChat 说明。它属于训练完成后的权重量化,基础模型不需要重新训练。它也没有保证任何 4 比特文件都会更快,论文中的速度来自量化方法和专门推理实现一起工作。
激活帮助找出该保护的通道
AWQ研究发现,少量显著权重对量化误差影响很大。论文报告,保护约百分之一的显著权重就能明显降低误差。研究者判断显著通道时主要看激活分布,因为权重绝对值大,并不一定代表它在真实输入上最常影响输出。
直接把那百分之一保留成高精度,会得到混合精度矩阵,硬件很难整齐处理。AWQ采用等价缩放。它先放大重要通道的权重,让这些数值量化得更细,再在相邻计算中补偿缩放,保持原计算关系。缩放参数来自一小批校准数据的激活统计。
这项搜索不做反向传播,也不靠重建整层输出来拟合校准集。论文在语言、代码、数学和多模态模型上做过测试,说明方法可以跨任务使用。校准数据仍要覆盖实际输入。企业文档全是中文表格,却只拿英文百科做校准,得到的显著通道未必代表线上请求。
公开实现主要支持 3 比特和 4 比特的权重量化。常见的 W4A16 表示权重以 4 比特保存,激活计算仍用 16 比特。模型权重占用会下降,KV 缓存、临时张量和运行时本身不会跟着按四倍缩小。长上下文时,KV 缓存依旧可能成为主要显存支出。
文件变小以后还要看运行库
AWQ论文配套的 TinyChat 会重新打包权重并使用专门内核。论文报告,相比 Hugging Face 的 FP16 实现,在桌面与移动 GPU 上取得超过三倍的速度提升。当前代码库也列出 RTX 4090 和 Jetson Orin 的具体测试。换一张显卡、一个模型或另一套运行库,这些倍数都要重测。
实际选择量化文件时,我会保留三组对照。先量任务质量,比较原模型和量化模型在真实问答、长输入与少数难例上的差别。再量峰值显存、首字延迟和每秒生成词元。最后记录引擎、内核、批量大小与上下文长度,免得一次跑分快被误写成模型处处更快。
AWQ让校准输入参与权重保护,适合把已经训练好的模型压到低比特。它能否省到钱,要等目标机器真正加载量化权重,并让对应算子跑起来以后再算。