跳转至

BATQuant: Outlier-Resilient MXFP4 Quantization via Learnable Block-wise Optimization

会议: ECCV2026
Paper: https://eccv.ecva.net/virtual/2026/poster/4636
PDF: https://media.eventhosts.cc/Conferences/ECCV2026/pdfs/6793.pdf
作者: Ji-Fu Li, Manyi Zhang, Xiaobo Xia, Han Bao, Haoli Bai, Zhenhua Dong, Xianzhi Yu
领域: VLM效率 / 模型量化
关键词: 微缩放浮点、训练后量化、异常值抑制、块内仿射变换、Kronecker 分解

一句话总结

BATQuant 将可学习非正交变换限制在 MXFP4 的 32 元素量化块内,再用共享分解与局部裁剪降低部署开销及残余异常值影响,使 Qwen3-VL-8B-Instruct 在 W4A4KV16 下达到 96.43% 的多模态性能恢复率。

研究背景与动机

把模型权重和激活压到 4 位,并不是选择一种数值格式后直接舍入就能解决的问题。MXFP4 使用 E2M1 元素格式,每 32 个元素共享一个 UE8M0 缩放因子;它能表示的正值只有 0.5、1.0、1.5、2.0、3.0、4.0、6.0,另有负值和零。一个块里只要出现特别大的值,共享尺度就会被拉高,其余小值能利用的量化档位随之减少。因此,影响误差的不是整个张量看起来是否平滑,而是每个共享尺度的局部范围是否适合这个离散网格。

QuaRot、SpinQuant 等全局旋转方法在 INT4 上有效,但它们可能把少数异常通道的能量分散到原本平稳的其他量化块。BRQ 把 Hadamard 旋转限制在块内,避免跨块污染,却仍受正交变换保能量的约束;当一个极端值主导块内信号时,正负混合可能产生双峰分布,让中间档位利用不足。FlatQuant 放宽了正交约束,但其全局变换仍不能保证每个硬件量化块的局部统计不被其他块改变。

BATQuant 把这两个问题分开处理:变换范围必须局部化,变换形状则不必局限于旋转。核心 idea:让可学习仿射变换的作用范围精确匹配 MXFP 的共享尺度范围,在块内重新塑造数值分布,再用共享参数和局部裁剪使这种自由度可训练、可部署。

方法详解

整体框架

输入是预训练 BF16 模型和少量校准样本,输出是经过变换与量化的模型。校准阶段逐层学习块内变换及裁剪参数,使量化输出接近原始浮点输出;部署阶段把权重侧逆变换提前融合进线性层,激活侧则在线执行分解后的块内变换,再进入低位宽计算。

整体可以沿着“块内仿射变换 → 全局共享与块私有分解 → 块内可学习裁剪 → Transformer 等价接入”理解。这里的分解是仿射变换的参数化方式,不是变换完成后再追加一层网络;框架图展示的是构造和部署关系,而非四次独立前向计算。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    Input["BF16 模型与校准样本"] --> BAT["块内仿射变换<br/>范围对齐量化块"]
    BAT --> GPK["全局共享与块私有分解<br/>参数化块内矩阵"]
    GPK --> Clip["块内可学习裁剪<br/>约束残余异常值"]
    Clip --> Integration["Transformer 等价接入<br/>权重离线融合与激活在线变换"]
    Integration --> Output["量化模型与可选 KV 量化"]

关键设计

1. 块内仿射变换:限制异常值传播范围,但不限制为正交旋转

先看一个线性层:激活矩阵为 \(X\),权重矩阵为 \(W\),浮点输出为 \(Y=XW^\top\)。在激活侧乘上可逆矩阵 \(P\),并在权重侧吸收其逆变换,未量化时输出保持不变;量化以后,不同的 \(P\) 会改变数值落在离散档位上的方式。原文在方法开头给出的可辨认目标是:

\[ P^\star=\operatorname*{arg\,min}_{P}\left\|Y-Q(XP)Q(P^{-1}W^\top)\right\|_F^2. \]

这里 \(Q\) 表示量化操作,Frobenius 范数衡量整个输出矩阵的重构误差。真正的优化对象不是“让激活最大值尽可能小”,而是让变换后激活与权重量化的联合误差尽可能少地改变层输出。激活缩小的同时逆变换可能改变权重分布,所以只观察激活直方图不足以判断最终收益。

BATQuant 将 \(P\) 限制为块对角结构,每个独立子矩阵仅处理同一量化块内的 32 个通道。这样,一个块的异常值不会通过变换直接传入另一个块,同时非正交自由度允许块内拉伸和压缩,不必像旋转那样保存能量。文中的“仿射”在可辨认计算中体现为矩阵变换,并未给出额外平移项,不能据名称自行添加偏置机制。作者用 down_proj 的分布图说明,相比 Hadamard 变换,BAT 可以减轻异常块的双峰形态;这是实证观察,不是对任意输入都成立的单峰保证。

2. 全局共享与块私有分解:共享变换基底,不混合不同块的数据

块对角矩阵虽然稀疏,但逐块保存完整矩阵仍昂贵。以隐藏维度 4096、块大小 32 为例,共有 128 个块,直接存储需要 131,072 个参数。普通 Kronecker 分解将每个块矩阵拆成两个小矩阵,尺寸分别为 8×8 和 4×4,仍需为每个块重复存储两份因子,参数量为 10,240。

GPK 进一步让所有块共用同一个 8×8 基底,而每块只保留自己的 4×4 私有矩阵,参数量降至 2,112;同一示例下 FlatQuant 为 8,192。这里“全局共享”只表示参数复用,输入元素仍在各自的块内处理,不会重新引入全局旋转的跨块能量传播。通过 Kronecker 的分步小矩阵乘法,可以避免显式构造每个完整块矩阵;不过缓存中的相关公式排版损坏,本笔记不补写其乘法方向或向量化约定。

这个设计也解释了为什么私有矩阵不能无限缩小:共享部分负责可复用的变换形状,私有部分负责每块不同的异常值位置与幅度。作者测试共享因子尺寸 1、2、4、8、16、32,最优点出现在 8 或 4,而不是私有参数越多越好;共享因子过大时局部适应能力不足,过小时则可能使少量校准数据下的优化更困难。

3. 块内可学习裁剪:在分布整形之后处理残余长尾

变换并不能保证所有残余异常值都消失,因此 BATQuant 为每个量化块分别学习上下界的裁剪比例。可辨认正文说明,比例由 sigmoid 映射到 0 与 1 之间,并分别作用于块内最小值和最大值;权重也采用类似处理。边界因此随当前块的数值范围变化,而不是用整个张量的一对阈值去覆盖统计差异很大的局部块。

裁剪允许牺牲少数极端值的精度,以减轻它们对共享尺度的支配,给大量普通值留出更有用的档位。比例并非人工预设,而是和仿射参数一起由输出重构误差来选择。它与块内变换是互补关系:前者处理仍然存在的长尾,后者先改变分布形状;消融也显示两者同时块内化比只块内化其中一个更好。缓存中裁剪公式的括号和符号不完整,此处仅依据相邻正文说明机制,不恢复损坏的原式。

4. Transformer 等价接入:把开销放到可融合的权重侧和必要的在线位置

在语言模型及多模态模型的文本部分,MLP 使用两组变换:一组位于 LayerNorm 后、up_proj 与 gate_proj 前,另一组位于 down_proj 前。视觉编码器的 MLP 对应为 linear_fc1 与 linear_fc2 前的两组变换。这些位置针对的是实际进入线性层的激活分布,不能把一次输入变换直接跨过非线性激活后继续视为等价。

文本自注意力使用四组变换:分别位于 qkv_proj 前、o_proj 前,以及按头处理 key 和 value 的缓存路径。图 3 还包含配套的逆变换,使低精度近似之外的运算保持原来的含义;RoPE 周围的准确放置应以原图为准。ViT 只有 qkv_proj 与 o_proj 两组,因为它不需要自回归 KV 缓存。所有线性层采用低位宽矩阵乘法,但 LayerNorm、量化前变换、RoPE 和 attention scores 保持 BF16,因此 W4A4 不意味着整个计算图处处都是 4 位。

一个完整示例

以论文参数规模示例中的 4096 维线性层输入为例,它被分成 128 个独立的 32 元素块。假设其中一个块存在明显异常值,这是解释性情景而非新增实验:全局旋转可能让原本正常的其他块也需要更大的尺度,BAT 则将这次重分布限制在该块内部。

校准时,该块使用共享的 8×8 因子和自己的 4×4 因子构成变换,并学习局部裁剪比例;其他块复用共享因子,但拥有各自的私有矩阵与裁剪参数。优化依据是最终层输出偏差,不是给这个异常值硬性规定一个目标幅度。

部署时,权重侧的逆变换已被融合,在线只需按块变换激活、执行裁剪与量化,再与处理后的权重相乘。128 个块总共只需 2,112 个变换参数,而不是 131,072 个完整块矩阵参数;这并不包含整个模型的权重、尺度或裁剪参数。

损失函数 / 训练策略

作者使用逐层浮点输出与量化输出之间的重构误差优化变换和裁剪参数,不重新进行全模型预训练。正文式 (5) 已损坏,无法确认完整求和与归一化写法,因此不另造一个“原文训练损失”;上面的线性层目标仅解释变换选择的基本原则。

优化器为 AdamW,初始学习率 2e-3,余弦退火,训练 5 个 epoch,batch size 为 4。GPK 默认共享尺寸为 8、私有尺寸为 4。Qwen3-8B 的校准输入来自 BF16 模型基于 Numina-Math-1.5 自生成的数据,随机抽取 128 条、每条长度 2048 的文本序列;Qwen3-VL-8B-Instruct 则使用 GQA 的 128 个图文对。

W4A4KV16 分别表示权重 4 位、激活 4 位、KV 缓存 16 位;另测 W4A8KV16、W4A8KV8 和 W4A8KV4。MXFP8 采用 E4M3。论文明确指出,除非另有说明,各方法结果默认结合 GPTQ 权重量化,因此不能把 BATQuant 的主结果解释为仅使用朴素舍入的独立收益。文中引用的附录算法、伪代码及更多实现细节未包含在当前缓存中。

实验关键数据

主实验

下表摘录原文表 2,模型为 Qwen3-VL-8B-Instruct。Recovery 是论文报告的相对 BF16 性能恢复率,跨不同量纲任务汇总,不能当作单一准确率,也不能把原始分数直接相加求比值;正文未展示完整计算式,此处保留原报告值。

配置 方法 MME OCRBench DocVQA RealWorldQA VLMBlind Recovery (%)
BF16 原模型 2377 906 95.81 70.98 73.98 100.00
W4A4KV16 RTN 2243 838 92.70 65.23 66.47 93.07
W4A4KV16 SpinQuant 1994 801 91.79 65.36 60.23 88.32
W4A4KV16 BRQ 2147 805 92.94 66.14 62.14 90.74
W4A4KV16 FlatQuant 2231 873 94.10 65.62 68.86 94.79
W4A4KV16 SmoothQuant 2264 862 93.93 68.89 66.26 95.01
W4A4KV16 GPTQ 2286 849 93.98 66.93 67.29 94.64
W4A4KV16 BATQuant 2360 864 94.31 67.32 69.70 96.43
W4A8KV16 BATQuant 2386 893 95.55 70.20 73.14 99.29
W4A8KV8 BATQuant 2368 890 95.47 69.93 72.82 98.89
W4A8KV4 BATQuant 2332 885 95.07 68.63 70.92 97.51

W4A4KV16 的恢复率比 FlatQuant 高 1.64 个百分点,但表中最强基线其实是 SmoothQuant,差距应为 1.42 个百分点。原文将 FlatQuant 称作最强基线与表格不一致。此外 BATQuant 并非每项都第一:OCRBench 低于 FlatQuant,RealWorldQA 低于 SmoothQuant。

下表摘录原文表 3 的 Qwen3-8B 推理结果,除 BF16 外均为 W4A4KV16。Avg. 为五项分数的平均值,Recovery 是原表另外报告的相对恢复指标,两者不是同一个量。

方法 GSM8K MATH-500 AIME24 AIME25 GPQA-D Avg. Recovery (%)
BF16 95.15 96.87 71.46 63.12 58.13 76.95 100.00
SpinQuant 93.40 91.67 38.57 35.63 45.66 60.99 76.35
BRQ 92.27 91.73 37.29 34.58 48.03 60.78 76.25
FlatQuant 93.40 94.33 58.96 43.54 50.51 68.15 86.78
SmoothQuant 94.69 95.33 60.71 47.29 52.42 70.09 89.60
GPTQ 94.24 95.73 57.50 52.08 52.12 70.33 90.10
BATQuant 94.77 95.60 62.08 52.92 54.19 71.91 92.45

BATQuant 相对 GPTQ 的 Avg. 增加 1.58 分、Recovery 增加 2.35 个百分点,但仍低于 BF16。原文关于其他方法在 GSM8K 和 MATH-500 上“严重崩溃”的描述过强,表中更显著的损失集中在 AIME24、AIME25 等较难任务。

消融实验

下表来自原文表 4,均为 W4A4KV16。“全局”不是删除对应模块,而是使用其全局版本;非推理 Avg. 汇总 ARC-C、ARC-E、HellaSwag、PIQA 和 Winogrande。

变换范围 裁剪范围 Qwen3-8B 非推理 Avg. Qwen3-VL-8B Recovery (%)
块内 全局 68.51 96.18
全局 块内 68.24 95.59
块内 块内 68.70 96.43

在保留块内裁剪时,将全局变换换成块内变换,两个汇总指标分别增加 0.46 分与 0.84 个百分点;保留块内变换时,将全局裁剪换成块内裁剪,则增加 0.19 分与 0.25 个百分点。这里支持的是两个模块的粒度选择,不能声称完成了“有无变换”的消融;表中没有两者都全局的数值行。

关键发现

  • 变换块大小实验固定 MXFP 量化块为 32,两类模型都在变换范围同为 32 时最好;过小不能协调完整量化块,过大又会混合多个块。图 7 的具体坐标未完整提取,故只保留正文对 GPK 尺寸趋势的结论。
  • 效率证据需区分层级:代表性 GEMM 吞吐约为 BF16 的 4.7 倍;Qwen3-8B 端到端在 batch size 64、prefill 256、decode 16 时加速 1.82 倍,batch size 1 时只有 0.94 倍,并非所有负载都提速。
  • 显存测试采用 prefill 256、decode 32。batch size 1 时 BF16、BATQuant、MR-GPTQ 分别占 15.30、5.85、5.89 GB;batch size 64 时分别为 17.65、10.56、12.95 GB。不同 decode 长度的显存与延迟实验不能合并成同一测试条件。

亮点与洞察

  • 真正重要的是预处理粒度与共享尺度粒度一致。全局异常值统计变好,不代表每个硬件块的量化误差都会变小,这一判断适合迁移到其他分组低精度格式。
  • GPK 把参数共享和数据混合区分开了。共享一个变换基底可以减少存储,但无需让输入跨块交流,因而不会破坏最初的局部性约束。
  • 输出重构把分布整形和任务可用性联系起来。仅压低异常值或追求漂亮直方图可能牺牲权重侧精度,联合看层输出比孤立优化一个统计量更合理。

局限与展望

  • 正文没有独立局限章节;以下主要是依据实验范围的阅读判断。验证集中于 Qwen3-8B 和 Qwen3-VL-8B-Instruct,不能据此认定对其他模型家族、规模或 MoE 同样有效。
  • GPK 的最优容量依赖少量校准数据与优化设置。作者讨论了私有参数过多时的收敛困难,但没有在当前正文中提供广泛的校准集敏感性或重复运行误差条。
  • 在线变换仍有开销,小 batch 的端到端结果已经出现变慢。部署价值还需长上下文、更大 KV 缓存、其他硬件及多模态端到端负载的实测,而非只用 GEMM 峰值推断。
  • 可复现性受现有材料限制:缓存没有附录、多个公式损坏,效率段未明确硬件型号与完整内核设置。表格与正文也有基线排序和退化程度的表述出入,应优先核对逐项数据。

相关工作与启发

  • 相对 QuaRot / SpinQuant:它们主要通过全局正交旋转分散异常值;BATQuant 同时改变作用范围与变换约束。因此收益不能简单归因于“学到了更好的旋转”。
  • 相对 BRQ / MR-GPTQ:块旋转与格式适配已经说明 MXFP 需要局部处理;BATQuant 增加非正交分布整形及块内学习裁剪,但需要额外校准和在线变换。
  • 相对 FlatQuant:两者都使用可学习变换与 Kronecker 思路;本文主要区别是严格对齐量化块,以及全局共享基底与块私有参数的组织方式,而非首次使用仿射变换。
  • 相对 GPTQ:两者不是互斥替代品。BATQuant 负责构造更适合量化的表示,GPTQ 负责权重量化,主表默认把两者结合,后续复现应保持相同权重量化器进行比较。

评分

  • 新颖性: 4/5。把硬件块粒度、非正交整形和共享分解结合得具体,但建立在既有块旋转与仿射量化路线之上。
  • 实验充分度: 4/5。覆盖多模态、非推理、推理、模块粒度与部署效率,但模型家族和规模仍有限。
  • 写作质量: 3/5。机制链条清楚,但最强基线与部分退化描述不完全符合表格,缓存缺失也限制细节核验。
  • 价值: 4/5。为 MXFP4 的精度与部署提供了可操作路径,尤其提醒读者不要把 INT4 的旋转经验直接搬到微缩放格式。