大模型4比特量化:把激活离群值转进量化器免费通道,精度能保住吗
你有没有想过一件事:给一个大语言模型做低比特量化的时候,工程师们拼命想办法把激活值里的"离群点"压平、削弱、转移,好像这些异常大的数值是万恶之源。但如果告诉你,问题根本不在于数值大不大,而在于这些大数值出现的位置对不对呢?这就是这篇论文想讲的故事。研究者们发现一个此前被忽略的事实:同样大小的激活异常值...
给大语言模型做低比特量化时,工程师们总在想办法把激活值里的“离群点”压平、削弱、转移,好像这些异常大的数值就是一切问题的根源。可要是问题压根不在数值大不大,而在这些大数值落在什么位置呢?
这篇论文讲的正是这件事。研究者发现了一个此前被忽略的事实:同样大小的激活异常值,搁在量化器“看得见”的地方和搁在它“看不见”的地方,造成的伤害完全两样。所谓“看不见”的地方并不玄乎,它就是每个分组量化方案里都存在的免费储物柜,只是过去几乎没人想到要专门往里面塞东西。
4比特量化卡在哪里
背景是这样的:把大语言模型的权重和激活值都压到4比特(即W4A4,KV缓存也压到4比特,简称W4A4KV4),业界公认这是“降本增效”的利器,内存占用和计算开销都能大幅下降。不过这条路一直不好走。
*激活各向异性*:模型内部的激活值分布很不均匀,少数几个通道或某些方向的数值特别大,其余大部分数值相对很小。好比给全班同学的分数打包统计,却有一两个人考了满分还加了附加题,把整个统计区间的量程拉爆,其他同学的真实分数差异全被淹没在这个超大量程里。
此前主流的解法是旋转变换:QuaRot用固定的Hadamard矩阵,SpinQuant训练一个可学习的旋转矩阵,DuQuant把通道重排和分块旋转结合起来。这些方法有一个共同点——都在设法把集中的能量“打散”,让原本几个突出的方向被摊平到整个空间,这样量化器就不会因为个别方向的极端值而浪费太多量化区间。
思路听着合理,但论文作者指出了一个反直觉的现象:打散能量并不等于对量化友好。他们观察到,如果一个激活分量在某个分组内部是均匀分布的(也就是这组里所有数值几乎相等),哪怕数值本身很大,它也几乎不会拉大这个组的量化范围。反过来,用Hadamard变换强行把一个原本集中的方向打散成类似高斯分布的噪声状,总能量没变,组内的极差反而更大,量化器得用更粗的刻度去覆盖这个更宽的范围,精度反而受损。
这就引出了论文标题里“Null-Space”(零空间/免费通道)这个说法的真正含义。
*非对称分组量化*:眼下激活量化最常走的就是这条路。做法是把一长串数值按固定大小切开,例如每128个一组,各组分别算自己的缩放系数(scale)和偏移量(zero-point),再以fp16格式存下来。偏移量的用途,是先把该组的最小值扣掉,好让量化起点落在0上。
关键观察在这里:如果一个组内所有数值完全相同,比如都是10,量化器根本不需要用编码位去表示这个“10”,直接把偏移量设成10,编码全部是0就搞定了,范围是0,缩放系数无所谓,信息完整保留还不占编码空间。换句话说,每个分组量化器天生自带一个“免费方向”,专门用来装下组内恒定不变的那部分数值,由偏移量买单,完全不占用那可怜的4比特编码空间。
论文里管它叫“组常量子空间”,简写为S。一个d维的激活向量,分成组大小为g的若干组,就有d/g个这样的免费方向。
把最大的能量塞进免费通道里
想明白这个免费通道的存在,接下来的问题就是:怎么把激活里能量最大的那部分,恰好旋转进这个通道?
论文给出了一个漂亮的数学处理,把问题变成了一个纯粹的谱分析(spectral)问题,专业说法叫Ky Fan迹最大化(Ky Fan trace maximization)。
*Ky Fan最大值原理*:矩阵理论里有个老结论:若要让某个矩阵的二次型(不妨看作一种“能量”)在一组正交方向上取得尽可能大的值,那么最优解必然落在该矩阵最大的那几个特征值所对应的特征向量上。
具体到这个问题,研究者第一步是统计激活值的二阶矩——粗略说就是激活的协方差结构——从中找出能量最集中的若干“主方向”,用特征向量来描述。接着构造一个旋转矩阵,把这些主方向准确地送进前面提到的组常量子空间。这一步属于纯数学的最优化,解可以被证明是最优的,用不着靠梯度下降反复试错调参。
这里必须打个比方,因为它能说明这个设计的必要性到底体现在哪里。
换个说法:假设你管着一间仓库,里面摆着许多货架(对应量化分组),每个货架都有一个免检额度——只要一整箱里装的是重量分布均匀、每件一样重的小件,就能整箱申报,不必逐件过秤登记。眼下你手上有一批特别沉的货(对应激活中能量最大的主方向)。要是随手把它们拆开、平摊到每个箱子的各个角落(也就是Hadamard的做法),每只箱子都会多出一点重量起伏,过秤时照样得细细称,免检额度等于白设。反过来,把这批沉货整箱打包,正好凑成一箱重量完全均匀的货(对应组常量方向),直接走免检通道报个总重就行,货架的称重精度可以全部留给剩下那些真正参差不齐的杂货。PrismQuant干的就是后一种:不把大数值打散藏起来,而是事先算准,让它刚好整箱打包走免检。
不这么设计会怎样?论文里的实验数据说得很清楚。在Llama-3.2-3B的下投影层(down-projection)输入上,PrismQuant相比Hadamard把组内平均量化范围从1.76降到了0.84,组内量化误差(NMSE)平均下降了40%。这不是几个百分点的优化,而是接近腰斩的效果。
*Householder反射*:构造正交矩阵有一种经典办法,就是接连做若干次镜面反射,从而把给定向量准确送到指定的坐标位置上。
*紧凑WY表示(compact-WY representation)*:是把多个Householder反射合并存储成两个瘦长矩阵的技巧,原本需要存储一个d×d的稠密矩阵,现在只需要O(dk)的存储量(k是对齐的方向数,通常远小于d),计算量也从O(d²)降到O(dk)。
落地时,研究者用Householder反射把前k个主特征方向逐个映射到坐标锚点,再用符号排列安放其余坐标,最后靠分块Hadamard矩阵把每个锚点坐标转成对应组的常量方向。这套变换的计算量只有O(dk + d log g),不用梯度训练,标定一次就固定。秩k(要显式对齐的主方向个数)可以调。论文实验里,k=8已能拿到大部分收益;继续加到k=max,边际收益因模型而异,并不总是单调上升。这说明对齐目标虽是数学上严格最优的,真落到具体模型和真实文本上,少数几个主导方向就吃掉了大头能量。
旋转怎么塞进Transformer各环节?理论上最优的旋转还不够,得把它装进真实推理流程,又不能带来太多额外开销。
论文把Transformer内部拆成几个关键位置分别处理。残差流上的旋转R1,因为每层都读写同一条流,能完全“折叠”进相邻权重矩阵,推理时不用额外算。value投影之后的R2类似,逆变换也能折进输出投影权重。麻烦的是下投影层的输入R4:它前面隔着SiLU激活这种非线性门控,旋转穿不过去合并,只能在线实时计算。
*折叠(fold)*:把一个旋转变换和相邻线性层权重矩阵直接相乘、合并成新权重,推理时就不必单独执行这个旋转,等于把它“消化”进原本就要做的矩阵乘法里,不增加步骤。
对必须在线算的R4,论文把它拆成分块Hadamard变换加一个秩为k的低秩修正项。这个结构刚好能映射成两个轻量的Tensor Core内核(GPU上专门加速矩阵乘法的硬件单元),几乎不产生额外开销。
KV缓存也得提一句。*KIVI*是此前针对键值缓存的量化策略:键按通道分组量化、值按token分组量化,同时保留最近若干个token的全精度值,减少误差累积。PrismQuant在此基础上给value加了一个按头维度对齐的旋转R2——每个注意力头正好是一个量化组,这里对齐一个主方向就够了。
再打个比方,说明R4为什么非在线算不可。假设你在搬家,大部分家具能提前打包进集装箱(对应折叠进权重),箱子怎么摆都定好了,直接运走。可有一件是可折叠躺椅,形状要等到了新家、根据房间朝光角度现场调整才能定型(对应SiLU这种非线性操作),出发前没法塞进箱子摆好,只能带着工具到现场临时调。硬要提前固定角度,新房间采光对不上,躺椅摆歪了反而占地方还不舒服。所以R4必须做成在线执行的轻量修正,不能像R1、R2那样提前打包合并进权重。
分组大小是双刃剑。论文还点出一个此前容易被忽略的联动:分组大小g不只决定量化精细程度,也决定免费通道的容量。
分组越小,每组的缩放系数和偏移量越多,组常量子空间的维度d/g越大,能装的对齐方向也越多。但分组变小意味着要存更多fp16元数据(每组一个scale加一个offset),存储开销跟着涨。
论文推导了一个*range law(量化范围法则)*,用来预测对齐之后量化步长大概会缩到什么程度。核心结论是:量化步长大致按根号下(1减去被对齐吸收的能量占比)缩放,而且这个规律只依赖一个经验测得的“波峰因子”比值,不用额外拟合参数。
有意思的是,论文用“账本匹配”实验直接对比了两种资源分配方式:同样存储预算下,把分组从256砍到128(元数据涨一倍,对齐容量也翻倍),和在分组256基础上多存两个额外对齐方向(元数据涨幅相同,但对齐容量增加没那么直接),哪个更划算。结果在两个测试的Llama模型上,分组减半都优于加两个方向。让免费通道变多,比在原有通道旁边硬塞几个收费的备用通道更有效。
打个比方,好比一个停车场面临两个选择:一是把车位重新规划得更密,单个车位变小但总车位翻倍(分组减半);二是车位大小不变,在旁边加盖两层立体车库(增加对齐方向)。立体车库听起来容量更大,可盖车库要额外占地和造价;如果车流本身分布有规律,更密的平面车位反而能用更低成本达到接近的利用率。研究者的实验说明,至少在他们测的场景里,细分车位性价比更高。
数据说话:从3B到70B全线验证。方法说得再漂亮,最终还得看效果。论文在Llama、Qwen、Mistral三个家族上做了大量实验,规模从0.6B一路测到70B,还专门测了一个30B参数的混合专家模型(MoE)。
在Llama-3.2-3B上,W4A4KV4量化下,PrismQuant拿到8.58的WikiText-2困惑度(越低越好)和61.23%的八任务零样本平均准确率,是所有对比方法里最好的。同样条件下,Hadamard基线是困惑度9.04、准确率59.29%,两项都被明显拉开。
到了Llama-3.1-70B,PrismQuant达到3.85的困惑度和72.46%的平均准确率,离全精度(bf16)基线只差0.22个百分点。这个数字意味着什么?一个700亿参数的模型压到4比特之后,精度几乎看不出损失。对实际部署来说很直接:同样的硬件能跑更大的模型,或者同样的模型跑得更快、更省显存。
混合专家模型Qwen3-30B-A3B上,PrismQuant给每个专家单独配一个旋转,路由器保持不变,结果找回了Hadamard损失掉的85%左右准确率,八个任务全部超过Hadamard,离全精度只差0.19个点。
论文在Llama-3.1-8B上跑了真实的GPU测速,部署层面的表现被单独拎出来讲。两核Tensor Core实现秩k修正,再集成进打包的INT4流水线,配合CUDA Graph重放机制,预填充吞吐相比FP16基线提升1.51倍,解码加速1.22倍。
解码阶段的峰值显存降了56.34%;与Hadamard基线相比,额外的解码延迟只多出2.35%。换句话说,旋转方案做得更精细,速度并没有被牺牲掉,这部分精度收益几乎是白拿的。
有几个细节出乎意料
论文里几组消融实验的结果值得单独拿出来说,因为它们正好回应了读者可能本能产生的疑问。
先看收益稳不稳,会不会对校准数据特别敏感。测试发现,校准序列从64条加到256条,或者直接换一个完全不同的语料库,从WikiText-2换成C4,困惑度的波动都在7%以内。这个方法对用什么数据来估计主方向并不挑剔,鲁棒性相当好。
第二个问题更有意思:对齐效果是不是非得靠那个免费的偏移量通道?论文专门做了对照,把量化器换成没有偏移量的对称量化格式,结果PrismQuant相对Hadamard的优势幅度几乎没变。真正起作用的,不只是“有没有免费仓库可以塞”,旋转本身就让残留下来的那部分信号变得更“平”,极差更小;量化器收不收这部分信号的存储费,残差本身都已经更友好了。偏移量确实还是贡献了大约四分之一的收益,在只用一个组覆盖整个token的极端情况下,它的贡献能占到接近七成。
第三点关乎校准subspace(子空间)怎么选。此前有一类方法(比如OffQ)只挑每个序列里数值最大的那个token来定义对齐方向,类似“擒贼先擒王”。论文做了严格对照,用全部校准token统计出来的方向,效果稳定优于只挑极端token的方案;极端token方案严重依赖BOS(句首)这个特殊token,一旦把BOS从候选集里剔除,效果直接掉到跟完全不做对齐的Hadamard差不多。少数极端token确实抓住了大部分收益,能拿到全token方案大约四分之三的效果,但剩下那部分,还是得靠全体token的统计信息。
写在后面
论文里那个 Ky Fan 最优化的证明做得很漂亮,但真正让我停下来想了一会儿的倒不是它。它点出了一件平时不太会去想的事:做系统优化时,我们往往先把“问题”定成“异常值太大”,接着就一门心思去压这些异常值。PrismQuant 把问题换了个问法——异常值大本身不算毛病,毛病在于它落在了不对的坐标系里。
这个转向挺能给人启发。不少工程优化里,目标函数默认就是“把某个指标压小”,可很少有人回过头去看看:这个指标的计算规则里,是不是本来就留了一条不用额外代价的通道。分组量化器的偏移量,起初只是个技术上的安排,目的是让每组数值对齐到 0,谁也没专门把它当作一处可以主动拿来用的资源位。这篇论文做的事,多少算是把一个早就存在、却一直没人留意的结构重新挖了出来。
还有一处细节出乎我意料:信号变“平”这件事,其实比信号能被免费存下来更要紧。它说明,系统里那些看着像“存储优化”的题目,底下可能是个“分布形状优化”的题目。这两件事未必相同,却很容易被当成一回事。
论文末尾还提了一个尚未解决的方向:要是将来出现一种原生支持分组非对称激活的 INT4 矩阵乘法内核,眼下测到的那点额外开销或许就完全没了,方案也就成了纯粹的检查点级别的系统设计。这个设想让人挺期待,可也留下一个疑问——硬件上的适配通常远比算法上的创新来得慢,这段滞后的时间,会不会让 PrismQuant 这类精巧的算法设计还没等到硬件跟上,就先被新的架构范式绕了过去?
Q&A
Q1:PrismQuant是什么?
A:PrismQuant 是一个面向大语言模型的量化旋转框架。它的核心做法是:激活值中能量最集中的那个方向,用数学上可证明最优的旋转,对齐到分组非对称 INT4 量化器本身就有的组常量子空间(用偏移量表示);存储开销不增加,组内量化范围却缩小了,4 比特量化的精度也就提上去了。
Q2:PrismQuant相比Hadamard旋转量化方法有什么优势?
A:在Llama-3.2-3B上,PrismQuant把组内平均量化范围降低约25%,激活量化误差降低约40%,困惑度和零样本准确率均优于Hadamard;在Llama-3.1-70B上准确率仅比全精度模型低0.22个百分点,部署时额外延迟开销仅2.35%,同时显存节省超50%。
Q3:PrismQuant需要训练吗,计算成本高不高?
A:不用梯度训练。旋转矩阵完全靠校准数据的二阶矩统计加闭式谱分解一次构造出来,以紧凑 Householder 变换实现,计算复杂度大约 O(dk),比稠密旋转的 O(d?) 低了不少,可以在线折叠,也能用低秩修正的方式高效跑起来。