HyQuant:面向大语言模型注意力的混合精度量化 HyQuant: Hybrid-Precision Quantization for LLM Attention
保留少数垂直线token和局部窗口为全精度,其余低比特量化,实现近无损长上下文推理加速
前置知识
注意力机制与注意力图
Transformer中每个查询向量 $q$ 与所有键向量 $k$ 计算相似度并经 $\mathrm{softmax}(QK^\top/\sqrt{d})$ 归一化得到注意力权重,再加权求和值向量。注意力图(heatmap)以行为query、列为key可视化权重大小,行内的亮斑表示该query强烈关注的key位置。
本文全部出发点建立在注意力图的可视化观察上:作者发现跨模型普遍存在垂直亮线(vertical-line)结构,即少数key位置被大量query反复高强度关注,这是设计混合精度分配的直接依据。
Prefill 与 Decode 两阶段推理
LLM推理分两阶段:Prefill 阶段一次性处理整个输入prompt,主要是大批量矩阵乘法,属于计算瓶颈;Decode 阶段逐token自回归生成,每步都要反复读写历史KV状态,属于内存容量与带宽瓶颈。两阶段的优化目标与手段截然不同。
HyQuant 的核心卖点之一是同时优化两个阶段:Prefill 用算子级量化降低计算误差与开销,Decode 用KV缓存量化+融合反量化降低带宽压力,理解两阶段差异才能理解其设计动机。
低比特量化与KV缓存量化
量化把FP16/BF16数值映射到低比特整数或浮点(如INT4/FP8),通常按分块做缩放 $s_K=\max(|K_T|)/c_B$($c_B$ 为该格式最大表示值,INT8取127、FP8取448)。KV缓存量化把历史的键值状态压缩存储,直接降低Decode阶段的内存占用与读取带宽。
本文对比基线 KIVI、KVTuner、SageAttention 都是量化方法,HyQuant 本身也是量化框架;理解 per-tile scale、对称/非对称量化等细节是读懂 Algorithm 2/3 的前提。
FlashAttention 与在线softmax
FlashAttention 通过分块计算注意力并用在线softmax(维护运行最大值 $m$、归一化和 $\ell$ 与输出累加器 $acc$,即 $O=acc/\ell$)避免实例化完整的 $L_q\times L_k$ 注意力矩阵,实现IO高效且数值精确的注意力。
HyQuant 的融合算子明确保持 FlashAttention 式的在线softmax分块扫描结构,把量化段、垂直线段、窗口段合并成单kernel顺序扫描并共享同一个softmax状态,这是其低开销的关键。
注意力汇聚与垂直线/垂直斜线模式
注意力汇聚指模型过度关注序列开头少数特殊token的现象。MInference 等工作进一步观察到两类稀疏模式:垂直线(某列key被许多query关注)和斜线(对角带状)。这些模式的共同本质是注意力质量高度集中于极少数位置。
本文与 MInference 的垂直线观察同源但用法完全不同:MInference 用它做稀疏mask丢弃低分token,HyQuant 用它做精度分配。区分这两种用法是理解本文创新点的核心。
GQA(分组查询注意力)
GQA 让多个查询头共享一组KV头(分组因子 $g=H_Q/H_{KV}$),大幅减小KV缓存。计算时需把 $g$ 个查询头堆叠后与共享KV头做einsum,避免显式复制KV头。
论文的垂直线识别算法(Algorithm 1)和解码kernel(Algorithm 3)都给出 GQA 原生实现:用 $\bar{Q}_g$ 与 $K_{pre}$ 做einsum得到列分数,解码时把 $g$ 个查询头打包成 $\tilde{q}_t$ 再与反量化KV相乘。
研究动机
低比特量化虽已广泛用于降低LLM推理成本,但把注意力模块激进压到很低比特(如4-bit)会引入大误差。作者在长上下文CoT推理设置下发现两个具体问题:其一,注意力分布高度不均衡,uniform token-wise量化对误差敏感度不同的token一视同仁,导致过度压缩关键token、又浪费预算在无关位置——实测 Qwen3-8B 上 KIVI(K4V4) 使 LongBench v1 平均分从全精度 FA2 的 44.59 跌到 37.68,SageAttention 也只有 38.13。其二,量化误差在高位注意力位置被放大:Query 3-8B 第28层的误差分析显示均匀4-bit量化的中间注意力输出MSE显著高于8-bit,因为少数高分工的位置会被大量后续query反复访问,微小的KV扰动被反复累积。作者测量注意力质量覆盖率发现,Llama-3.1-8B 全局top-1%的key位置就覆盖了58.83%的注意力质量,top-5%覆盖64.09%,再加上 $W=128$ 的局部窗口覆盖率达85.63%(Qwen3-8B分别为47.30%、54.10%、82.53%),而这一小撮关键token通常只占序列的不到5%。
本文的目标是论文要回答一个'推理中心'的混合精度设计问题:如何在长上下文CoT推理中,按token异质敏感性分配精度预算,在精度与效率间取得平衡。具体目标是:只保留极小一部分精度关键区域为全精度——即在线识别的垂直线token(约5%以内)和固定大小的局部滑动窗口 $W=128$——而把其余绝大多数KV压到低比特(INT8/FP8或INT4/FP4);在Prefill阶段把量化路径与全精度路径融合成一个FlashAttention式的量化注意力算子以控制计算误差;在Decode阶段用混合精度KV缓存压缩内存与带宽,并把反量化融合进注意力kernel避免额外显存搬运。最终希望在多个模型、多个基准上保持接近全精度的准确率,同时取得解码kernel级1.32倍至3.58倍、端到端1.04倍至1.17倍的加速,且垂直线识别带来的额外开销控制在3%-5%运行时以内。
与已有工作不同的是,与已有工作的本质区别在于'用途'而非'观察':垂直线结构 MInference 早已发现,但 MInference 把它用作稀疏mask,直接丢弃非垂直线token的注意力计算,在长CoT场景会永久丢失可能有用的长尾信息(论文Table 12显示vertical-only版本在narrativeqa上F1从31.49暴跌到14.69);而 HyQuant 把垂直线用于精度分配——关键token保FP16,长尾token仍以低比特保留全部信息,做到'降精度不删token'。与 KVTuner 的敏感性感知混合精度相比,KVTuner 在不同层之间分配精度,HyQuant 则在同一层的token粒度上分配。此外,已有方法通常只优化单一阶段(如SageAttention只管Prefill、KIVI只管Decode),HyQuant 提供了Prefill算子量化+Decode缓存量化的统一设计,并以'反量化融合进注意力'区别于KIVI/KVTuner的'先反量化再计算'路线。
核心方法
直觉层面:既然超过80%的注意力质量集中在不到5%的垂直线token加上 $W=128$ 的近期窗口上,而量化误差恰恰在这些高分工位置被放大,那么最划算的精度分配就是把这一小撮'锚点'保持全精度,其余压到低比特。技术路线分三步:第一步,把每层每头的key位置划分为三个互斥子集 $K = K_{VL} \cup K_{Win} \cup K_Q$,其中 $K_{Win}(t)=\{k \in [\max(0,t-W+1),\,t]\}$ 为固定大小局部窗口,$K_{VL}$ 为从非窗口前缀中选出的垂直线位置,$K_Q$ 为待量化的大多数。第二步,Prefill 阶段计算融合算子 $O=\mathrm{Softmax}\big([Q\hat{K}_Q^\top/\sqrt{d}\,\|\,QK_{FP}^\top/\sqrt{d}]\cdot[\hat{V}_Q\|V_{FP}]\big)$,量化路径与全精度路径在同一kernel内用在线softmax顺序扫描合并。第三步,Decode 阶段把KV缓存存成混合精度格式,扫描到量化块时在线反量化 $\hat{K}_b=\mathrm{DeQuant}(K^Q_b)$ 并立即参与打分与累加,不落地全精度中间结果。识别垂直线的分数定义为列注意力质量 $S(k)=\sum_{t\in T}a_{t,k}$,取非窗口前缀的top-$\rho$(实践中 $\rho=5\%$)。
核心创新是把'垂直线感知'从稀疏加速工具改造成精度分配信号:不丢弃任何token,只让不同token以不同精度参与注意力。这带来两个直接收益:一是误差侧,量化误差最大的高位注意力位置被完全保真(Fig. 2显示保留top-1%/top-5%高分工就能把4-bit误差压回接近8-bit水平);二是效率侧,因为绝大多数token仍是低比特,KV内存、带宽和计算量收益基本保留。第二个关键 idea 是算子级协同设计:Prefill 的三段式扫描(量化前缀→垂直线段→窗口段)和 Decode 的四段式扫描(量化前缀→垂直线→暂存缓冲→窗口)都共享同一个在线softmax状态 $(m,\ell,acc)$,量化与全精度路径融合成单个FlashAttention式kernel,附加开销极小;Decode进一步采用'dequantize-in-attention'——反量化在kernel内在线完成并即时消耗,而KIVI/KVTuner是'dequantize-then-attend'需要先展开缓存再跑标准注意力,这正是Table 8中端到端加速1.17倍对0.69倍差距的来源。
方法步骤详情
流程由四个算法组成。第一步垂直线识别(Algorithm 1):排除最近 $W=128$ 个token得到非窗口前缀,用尾部查询代理 $\bar{Q}=\frac{1}{t}\sum_{i}Q_{:,:,i,:}$ 计算列分数 $S=\bar{Q}K_{pre}^\top$(GQA模型按 $g=H_Q/H_{KV}$ reshape后做einsum),每64个token累积一次归约,取top-$\rho$(5%)得索引 $I_{VL}$,开销仅3%-5%运行时、辅助内存仅64个query向量。第二步Prefill算子(Algorithm 2):先按 $I_{VL}$ 重排KV,量化前缀按tile做 $s_K^T=\max(|K_T|)/c_B$($c_B=127$ INT8、448 FP8),然后量化前缀→垂直线段→窗口段三段扫描,共享在线softmax状态输出 $O_b=acc/\ell$。第三步FREEZE切换(Algorithm 4):Prefill结束冻结 $I_{VL}$,窗口与垂直线token保留FP,其余前缀量化打包进低比特KV buffer,初始化容量 $W_s=128$ 的暂存缓冲。第四步Decode(Algorithm 3):单token query分四段扫描——量化前缀按split-K分 $S$ 块并行、在线反量化 $\hat{K}_s,\hat{V}_s$ 并打包GQA查询 $\tilde{q}_t\in\mathbb{R}^{g\times d}$,经 $\mathrm{ReduceSoftmax}$ 归并后依次累加垂直线段、暂存段与全精度窗口段。
技术新颖性
技术新颖性体现在四个层面。第一,精度分配的粒度与依据是新的:KVTuner 的敏感性感知在层间分配精度,MInference 的垂直线用于稀疏剪枝,而本文首次把垂直线结构转译为token级的保留精度信号,且配套了开销可忽略的在线识别算法(尾部查询代理+周期性归约,3%-5%运行时)。第二,信息保留哲学不同:Table 12的消融直接量化了这一点,vertical-only稀疏在Qwen3-8B上平均分36.58,而保留低比特长尾的HyQuant达49.97,证明'低精度保留'显著优于'高精度丢弃'。第三,kernel协同设计:Decode端融合反量化避免了KIVI/KVTuner必须先展开整个量化缓存再计算的显存往返,使多批设置下唯一能在batch 16存活(231.6 tokens/s,其余全OOM)、并在batch 32仍能运行的方法。第四,Prefill+Decode一体化:同一垂直线集合在FREEZE时一次确定、两阶段复用,避免每个解码步重算全局重要性。这些都是系统与算法联合设计的产物,而非单一算法点子。
实验结果
端到端精度:LongBench v1 上 Qwen3-8B(thinking) 平均 45.04 vs FA2 44.59,大幅领先 KIVI 37.68、SageAttention 38.13、KVTuner 40.45;Llama-3.1-8B 46.73 vs FA2 46.63;GLM-4-9B 45.78 vs FA2 44.83;Qwen3-32B 48.46 vs FA2 48.61。数学推理上 GSM8K 达 96.52 反超 FA2 的 95.88,MATH500 78.73 略低于 FA2 的 80.14 但远高于 KIVI 的 72.89。Prefill误差(Fig. 5):以FA2为参考,HyQuant 前5层相对SageAttention的 $\mathrm{MSE}_{Sage}/\mathrm{MSE}_{HyQuant}$ 削减因子远大于1。Decode kernel延迟(Table 7):从1K前缀的0.170 ms/token(1.32×)到32K的1.775 ms/token(FA2为6.354,3.58×),上下文越长收益越大。端到端解码(Table 8):1.04×-1.17×,而KIVI仅0.69-0.73×、KVTuner 0.72-0.80×,均慢于FA2。高并发(Table 6):32K前缀batch 16时FA2/KIVI/KVTuner全部OOM,HyQuant独活达231.6 tokens/s;batch 8时155.6 vs FA2 152.7;但batch 4时84.2低于FA2的122.2。消融:窗口64/128/256对应准确率92.54/95.52/95.74、MSE 9.58/8.48/8.21;垂直线比例2%→10%平均分46.06升至51.91,故取5%折中。短上下文:HyQuant平均87.82 vs FA2 88.89、KIVI-K4V4 81.83。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| LongBench v1(Qwen3-8B,thinking模式,11任务平均) | 平均分 | HyQuant 45.04 | FA2全精度 44.59;KIVI(K4V4) 37.68;SageAttention 38.13;KVTuner(4bit) 40.45 | 较FA2 +0.45,较KIVI +7.36 |
| LongBench v1(Llama-3.1-8B-Instruct) | 平均分 | HyQuant 46.73 | FA2 46.63;SageAttention 45.68;KVTuner 45.66 | 较FA2 +0.10,为全部方法最高 |
| LongBench v1(GLM-4-9B-0414) | 平均分 | HyQuant 45.78 | FA2 44.83;SageAttention 45.75;KVTuner 45.63 | 较FA2 +0.95 |
| LongBench v1(Qwen3-32B,thinking模式) | 平均分 | HyQuant 48.46 | FA2 48.61;KIVI 41.98;KVTuner 48.22 | 较KVTuner +0.24,接近FA2(-0.15) |
| GSM8K 数学推理(Qwen3-8B) | 准确率% | HyQuant 96.52 | FA2 95.88;KIVI 92.48;KVTuner 93.69;SageAttention 94.99 | 较FA2 +0.64,超越全精度 |
| MATH500(Qwen3-8B) | 准确率% | HyQuant 78.73 | FA2 80.14;KIVI 72.89;SageAttention 77.60 | 较KIVI +5.84,接近FA2(-1.41) |
| Decode注意力kernel延迟(32K前缀,H100) | ms/token 及加速比 | 1.775 ms/token(3.58×) | FA2 6.354 ms/token | 1.32×(1K)至3.58×(32K) |
| 端到端Decode速度(32K前缀) | 相对FA2归一化速度 | HyQuant 1.17× | FA2=1.0×;KIVI 0.69×;KVTuner 0.72× | 唯一稳定快于FA2的量化方法(1.04×-1.17×) |
| 高并发吞吐(32K前缀,batch 16) | tokens/s | HyQuant 231.6 | FA2 / KIVI / KVTuner 全部OOM | 唯一在batch 16存活的可用方法 |
局限与改进
作者承认的局限有四点:垂直线保留的收益主要体现在长上下文任务,短上下文下提升有限(附录B.4的Table 13显示HyQuant 87.82仍略低于FA2的88.89);实验仅在NVIDIA H100上进行,高端GPU在短上下文时解码管线不完全受内存带宽约束,端到端加速会缩水;受显存限制未验证超过Qwen3-32B的更大模型(如Qwen3-80B);尚未评估agent/编码类任务中的有效性。我自己的补充观察:batch 4中等并行时吞吐84.2明显低于FA2的122.2,说明kernel在中小batch的长上下文区间外并无优势;混合精度保留带来约17.4%(32K)到24.4%(8K)的内存开销(vs 严格K4V4),部分抵消KV压缩收益;top-5%和 $W=128$ 是经验性超参,Table 11显示不同数据集对比例的敏感度方差很大(如HotpotQA从2%的47.50到6%的62.65);部分指标超过FA2(GSM8K 96.52 vs 95.88、GLM-4/LLaMA的LongBench)被作者归因于评估方差,也提示评测噪声不小;此外垂直线集合在FREEZE时一次性冻结,超长生成过程中重要性漂移的场景未做充分讨论。
独立分析的弱点
第一,中等batch区间性能塌陷:Table 6显示batch 4时HyQuant吞吐84.2 tokens/s,不仅低于FA2的122.2,甚至低于batch 1的相对水平,说明融合kernel在并行度不足时无法打满GPU,改进方向是引入persistent kernel或按SM占用自适应split数。第二,内存开销侵蚀收益:垂直线+窗口+暂存缓冲使KV总量比严格K4V4多17.4%-24.4%,可考虑对长尾token用更激进的2-bit(借鉴KIVI的非对称分组)或把垂直线token存FP8而非FP16,在几乎不损精度下收回一半开销。第三,垂直线集合静态冻结:FREEZE后在整段解码期不再更新 $I_{VL}$,而CoT推理中重要性可能漂移(论文自己在2.1节承认先前移除的内容可能重新变得关键),改进方向是每生成N个token后低成本重估列分数并做增量换入换出。第四,超参敏感且任务异质:Table 11中同一比例在不同任务间波动可达15分(HotpotQA 47.50→62.65),可探索按层/按头自适应 $\rho$ 或基于困惑度反馈的在线调节。第五,验证范围窄:仅H100、稠密模型、最长32B;MoE架构、多卡张量并行、非Hopper硬件(FP8/INT4吞吐特性不同)上的表现都是空白,工程上还需与vLLM/SGLang等服务的PagedAttention布局对接。
未来方向
作者方向:把HyQuant推广到agent与编码类长程任务、验证Qwen3-80B级更大模型、扩展到更多硬件平台。基于本文成果可延伸的研究包括:其一,与gated attention等消sink机制正交结合——若模型架构层面已削弱垂直线,精度分配信号需换成任务自适应的重要性估计;其二,把垂直线识别与KV驱逐/检索式稀疏统一成一个'精度-留存'联合调度器,动态决定每个token的精度与是否驻留;其三,训练时感知混合精度(QAT),让模型在预训练/微调阶段就适应量化前缀+全精度锚点的非均匀注意力;其四,与投机解码、 continuous batching 等服务技术在vLLM中的系统集成与端到端TPS评估;其五,理论上刻画在给定全精度预算 $b=\rho|K|$ 下最小化注意力输出MSE的最优分配,为top-$\rho$+窗口的选择提供原则性依据而非经验网格搜索。
复现评估
复现条件总体友好。代码已开源(https://github.com/jerrysfls/HyQuant);评测数据全部公开:LongBench v1、GSM8K、MATH500、C-Eval、MMLU;模型为开源权重(Qwen3-8B/32B、Llama-3.1-8B-Instruct、GLM-4-9B-0414)。硬件需求为单张NVIDIA H100 80GB——按Table 15的配置(batch 1、prefill至128K、生成至32K、KV统一4-bit、窗口128),消费级/ older 数据中心卡(A100)上INT4/FP8 kernel行为可能不同,端到端加速比需重新标定。算法伪代码(Algorithm 1-4)相当完整,包括GQA原生einsum、per-tile scale公式、split-K与在线softmax归并等实现细节,附录B.8还给出了统一实验配置。主要复现难点在Triton kernel工程:三段/四段扫描的融合kernel、低比特打包布局与FREEZE的缓存重排都属于系统细节,需要较强的GPU编程能力;精度侧复现(LongBench/GSM8K评测)则相对直接,约数个GPU天即可完成主表。
论文图表
展示Qwen3-8B、Gemma4-31B、Qwen3.5-4B、Llama3-8B四个模型家族的注意力热图。除局部对角带外,许多层和头出现明亮的垂直条纹:少数key位置被大量query反复高强度关注,这些位置通常只占token总数的不到5%,却携带了不成比例的注意力质量。
这是全文的观察基石:垂直线结构跨模型家族普遍存在且未被gated attention等新机制消除,直接催生了'保留垂直线为全精度'的核心设计。不看这张图就无法理解为什么精度分配要锚定在这些列上。
以全精度FlashAttention为参考,测量Qwen3-8B第28层中间注意力输出(o_proj输入)的MSE。均匀4-bit量化的MSE显著高于8-bit;而当其余位置量化到4-bit、仅保留top-1%/top-5%高分工位置为全精度时,误差大幅下降,在1K到32K不同序列长度下都稳定接近8-bit误差水平。
它把定性观察转化为定量证据,证明误差确实集中在高分工位置、且小预算全精度保留即可压制误差,是'混合精度优于均匀量化'这一主张的直接实验支撑。