解耦量化:为 LLM 预填充与解码分别定制的量化方案 Disaggregated Quantization: Specializing LLM Prefill and Decode
为预填充与解码两阶段分别定制量化格式、权重与存储,低比特下速度精度兼得
前置知识
Prefill 与 Decode 两阶段推理
自回归 LLM 推理分两步:prefill 一次性并行处理整段 prompt,为每个位置算出 K/V 写入 KV cache,是矩阵-矩阵乘(GEMM),规模随 token 数 $T$ 增大;decode 逐个生成 token,每步只做一次矩阵-向量乘(GEMV)并读取全部权重与历史 KV。两者共享同一套参数与架构,但访存/计算特性截然不同。
这是全文的核心前提:两个阶段硬件成本不同,因此值得用不同的量化格式、权重甚至存储位置分别对待。
计算受限与访存受限
每层耗时取决于搬数据与做运算谁更慢。线性层传输 $O(H^2+TH)$ 个元素、执行 $O(TH^2)$ 次运算:$T\gg1$ 时权重被跨 token 复用,算力是瓶颈(compute-bound);$T=1$ 时每个权重只贡献一次乘加,从显存搬运权重成为瓶颈(memory-bound),此时压缩位宽直接等效于加速。
它解释了为何 prefill 想要硬件原生 W4A4 快格式、decode 想要 1–3 比特紧凑 weight-only 权重,是整个方案设计的出发点。
Weight-only 与 W4A4 量化(NVFP4)
weight-only 量化只压缩权重(如 NVFP4A16、2–4 比特 LUT/GGUF 格式),激活保持 BF16,kernel 加载时反量化做 GEMV,精度高、适合 decode;W4A4 把权重和激活都压到 4 比特(NVFP4:E2M1 网格、16 元素分块、FP8-E4M3 块 scale 加 FP32 全局 scale),能跑 Tensor Core 原生 FP4 GEMM,吞吐高但精度损失更大。
论文的两类基本格式 NVFP4 与 LUT 及其速度/精度取舍都建立在这对概念上,format/full disaggregation 本质上就是把两者按阶段各取所长。
量化感知蒸馏与直通估计器
量化感知蒸馏(QAD)用未量化模型当冻结 teacher,最小化 $\mathrm{KL}(p_{\text{teacher}}\Vert p_{\text{student}})$ 来恢复量化损失的精度;量化算子不可导,训练时用直通估计器(STE)把梯度原样穿过量化操作去更新 FP32 master 权重(AdamW)。本文的 QADD 在此基础上加入 prefill/decode 相位掩码路由。
QADD 是论文所有精度结果的训练引擎,不理解 QAD/STE 就无法理解两条量化通路如何在一次前向反向中被联合优化。
PD 分离式服务
大规模部署中把 prefill 和 decode 跑在不同加速器实例上,二者之间只传 KV cache(如 Mooncake、vLLM 的 disaggregated serving + NIXL),各实例常驻自己的权重副本。这为两阶段使用不同权重提供了工程先例,也给出接口约束:decode 必须能直接消费 prefill 产生的 KV 表征。
本文精度评测就是在真实 vLLM PD 分离部署下完成的;full disaggregation 的可行性正来自「KV cache 是两阶段唯一接口」这一事实。
LUT 查找表量化与 GGUF
LUT 量化把每 $b$ 比特索引映射到 $2^b$ 个按权重分布预先优化的网格点(本文 LUT3 为 8 级、LUT2 为 4 级,针对高斯先验优化并含 0 与 +6),比均匀格点更贴合分布,是 AQLM/QuIP# 等极致压缩的基础;GGUF 是 llama.cpp 生态的量化权重容器,IQ1_S/IQ2_XXS 等即其中的 1–3 比特格式。
decode 端的 weight-only 方案用 LUT 编码实现;27B 实验则直接给 Unsloth 发布的 8 个 GGUF checkpoint 配 NVFP4 prefiller。
研究动机
LLM 推理天然分成两个硬件成本相反的阶段:prefill 一次性并行处理整个 prompt,对 $H\times H$ 权重与 $T\times H$ 激活做 GEMM,传输 $O(H^2+TH)$ 个元素、执行 $O(TH^2)$ 次运算,$T\gg1$ 时权重被跨 token 复用,属于计算受限;decode 每步只生成一个 token($T=1$),每个权重只贡献一次乘加,访存成为瓶颈。现有量化却对两阶段一视同仁:要么对权重和激活同时量化(INT4/NVFP4)换取硬件原生 GEMM 速度,要么把权重压到 1–3 比特的复杂编码省显存带宽,二者难以两全。论文用实验量化了这一矛盾:在 GSM8K/MATH-500/MMLU-Pro 等 decode 密集型基准上,仅量化 decode 造成的精度损失是仅量化 prefill 的 2–4 倍,Gemma3-1B 上高达 7 倍;而在长 prompt 短回答的 RULER 上,8 个模型中 7 个呈现反转,仅量化 prefill 的损失是 decode 的 1.1–4.1 倍。也就是说,任何统一的量化方案必然在某类任务上白付精度税。
本文的目标是本文的目标是把「prefill 与 decode 应该用不同量化表示」从工程直觉升级为系统化框架:在保持注意力架构与 KV cache 接口完全不变的前提下,让每个阶段的计算格式、权重、乃至权重的存放位置都按各自硬件成本专门化,同时两阶段仍被联合优化到同一个回复目标上。具体交付三件事:其一,训练方法 QADD,一次前向反向同时训练两条量化通路,并支持只训练 prefill、冻结现成 decode checkpoint 的「prefiller」模式;其二,一个覆盖不同显存预算的方案阶梯——共享权重的 format disaggregation、分离权重的 full disaggregation、以及把 prefill 权重放到 SSD 流式加载的 ODP;其三,在 Qwen 3、Gemma 3 全系列直至 2.8T 参数的模型、以及任意已发布的 GGUF 量化模型上验证精度与速度收益。
与已有工作不同的是,已有工作只触及该方向的单个侧面:Chen 等只做阶段特异的权重精度混合;Lu/Wei 等用低精度加速 prefill 但 decode 仍保留 BF16;Woo 等围绕冻结量化 decoder 微调任务专用 prefill 模块;Forys 等只在模拟器中允许两阶段独立量化。本文的独特切入有三点:第一,提出统一伞形概念 DQ,把「格式、权重、存储位置」三个正交轴纳入同一框架,而不是孤立调某一轴;第二,发现并复用 SFT 数据中现成的 user/assistant 标记掩码,在训练时逐 token 路由 prefill/decode 计算路径,使两阶段在同一 KL 目标下联合优化,训练开销与普通 QAD 几乎相同;第三,首次把存储放置作为量化设计的一等公民——prefill 权重只在处理 prompt 期间有用,可从 SSD 逐块流式加载并临时借用 decode 权重的显存,从而在不增加显存占用的前提下装备一个额外的专用 prefill 模型。
核心方法
直觉:工业界早已把 prefill 和 decode 部署在不同加速器上(PD 分离),两个阶段本就不必共享量化权重。prefill 计算受限,最想要 NVFP4 这类硬件原生 W4A4 格式;decode 访存受限,最想要 2–3 比特紧凑 weight-only 编码。DQ 据此给出递进方案阶梯:最轻的 format disaggregation——权重共享,只在 prefill 做激活量化,decode 跳过激活量化(即 NVFP4 prefill + NVFP4A16/LUT weight-only decode),存储与 prefill 速度不变;更进一步的 full disaggregation——用 QADD 从同一未量化模型联合训练两套权重:NVFP4 原生 prefill checkpoint 与 2–3 比特 LUT weight-only decode checkpoint,推理时 prefill 写各层 prompt KV、decode 在其上做注意力,KV cache 维度不变;最后 ODP 解决单卡装不下两套权重:prefill 权重按 transformer block 从 SSD 流式读入两个设备缓冲区,缓冲显存从 prefill 期间闲置的 decode 权重借出(carve-out),加载与计算重叠。对已发布、无法重训的量化模型,只训练一个 NVFP4「prefiller」适配冻结 decoder。
核心创新一是 QADD 的相位掩码路由与统一响应目标。SFT 阶段的 label mask 本来只用于损失屏蔽,QADD 把它复用为每个量化线性层的计算路径选择器:被忽略的 label(用户 prompt 位置)走 prefill 通路,assistant 位置走 decode 通路;由于因果移位,最后一个 prompt 位置在预测首个回复 token 时恰好走 prefill 通路。蒸馏损失 $\mathrm{KL}(p_{\text{teacher}}\Vert p_{\text{student}})$ 只监督回复 token,但梯度会经由 decode 所注意的 prompt keys/values 回传到 prefill 权重,于是一次前向反向就同时训练两条路径。核心创新二是把存储放置纳入量化设计:一个 transformer block 完成 prompt 处理后,其权重在整个回复期间不再被需要(只有 KV 留存),因此 prefill checkpoint 可以逐块从 SSD 流式进入仅两个设备缓冲区,缓冲区显存通过 carve-out 从 prefill 阶段不用的 decode 权重中临时借用、生成前再恢复,实现零额外设备显存占用,而加载成本被 prompt 长度摊薄。
方法步骤详情
流程:(1) 冻结 BF16 teacher,对 student 做 fake-quant,STE 反传梯度,FP32 master 权重用 AdamW 更新(lr $3\times10^{-6}$ 恒定、100 步 warmup、权重衰减 0.1、$\beta=(0.9,0.95)$),语料为 Tülu 3 SFT 的 1 亿 token,序列长 2048、全局 batch 64、约 2450 步。(2) 逐位置路由:SFT label mask 决定每个 token 走 prefill 或 decode 通路;NVFP4 用 E2M1 网格、16 元素分块、E4M3 块 scale(4.5 bit/权重),LUT3A16/LUT2A16 为 8/4 级查找表($b+0.5$ bit/权重),prefill 时把低比特权重 autocast 成 NVFP4 计算。(3) full disaggregation 为两阶段各维护一套 master 权重联合训练;27B prefiller 则冻结反量化的 GGUF decoder,只训 prefill 线性权重与 norm scale(embedding/lm_head/门控投影共享冻结),用 40K 条自蒸馏轨迹(约 9500 万 token、980 步、64 张 B300)。(4) 推理:format/full disagg 用 vLLM 真实 PD 分离传 KV cache;ODP 在 llama.cpp fork 中双缓冲流式加载 prefill 权重并与计算重叠,结束后恢复被借用的 decode 权重。
技术新颖性
单看每步不复杂,组合与定位却新。其一,「decode 激活量化是 decode 密集任务精度损失主因」这一诊断(2–7 倍相位敏感度差异)为相位分离提供量化证据;format disaggregation 是最保守的干预——只去掉 decode 的激活量化,就把 Qwen3 家族 NVFP4 的 decode-heavy 平均精度从 61.8 提到 63.7,不增加任何存储或 prefill 成本,decode 还快 2–3%。其二,full disaggregation 证明两阶段表征可彻底解耦训练而无需改注意力:prefill checkpoint 写 KV、decode checkpoint 读 KV,2 比特收益最大(decode-heavy +10.7/+7.4 点),且反超 weight-only 4.5–12.5 点。其三,与以往「围绕冻结量化 decoder 训任务模块」不同,prefiller 只要求最终 checkpoint,量化流水线可为黑盒,同时带来 prefill 加速;ODP 把 FlexGen 式「用传输换显存」搬到 prefill 并以 prompt 长度摊销。最后,无需重训的 4-bit 格式解耦在 8 个至 2.8T 参数模型上经配对显著性检验验证,属首次。
实验结果
核心发现:①相位敏感度——decode 密集基准上仅量化 decode 的精度损失是仅量化 prefill 的 2–4 倍(Gemma3-1B 达 7 倍),RULER 上反转为 1.1–4.1 倍。②格式解耦——decode-heavy 家族平均 NVFP4 +1.9/+3.1、LUT3 +4.5/+3.7、LUT2 +2.5/+1.8 点(Qwen3/Gemma3),prefill-heavy 影响 <1.3 点,decode 再快 2–3%。③完全解耦——LUT3 decode-heavy +6.3/+5.2、LUT2 +10.7/+7.4 点,prefill-heavy LUT3 +4.1/+4.3 点;2 比特反超 weight-only 4.5–12.5 点,同时保持 prefill 1.49×/1.67×(16K,vs BF16)与 decode 3.33–4.15× 加速。④ODP——>16K 时卸载开销 <5%/8%,16K 仍达 BF16 的 1.47×/1.58×。⑤27B prefiller——IQ1_S 的 MMLU-Pro 29.04→61.54、MMMU-Pro 24.39→59.65,双双翻倍;2 比特 +7.4/+6.3,3 比特轻微回退;TTFT 8K 从 12.27s 降至 6.90s(1.78×)。⑥大规模 PTQ——8 个至 2.8T 模型上 11/13 组合提升、6 个显著、无显著下降。⑦副作用——IQ1_S 在 MMMU-Pro 平均生成 14579→6582 token、截断率 24.57%→4.16%,但 MMLU-Pro 均值长度增 5–63%。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 文本推理(Qwen3.8-27B,1-bit IQ1_S decode + 训练的 NVFP4 prefiller) | MMLU-Pro 准确率(%,5-shot CoT,reasoning 开启) | 61.54(full disaggregation) | 29.04(weight-only IQ1_S) | +32.5 点,精度翻倍以上,且 decode checkpoint 完全不变 |
| 多模态推理(同上 IQ1_S 配置,训练语料中无任何多模态样本) | MMMU-Pro 准确率(%,vision 模式) | 59.65 | 24.39 | +35.3 点;平均生成长度 14579→6582 token,截断率 24.57%→4.16% |
| decode-heavy 推理(Qwen3 家族 0.6B–8B 平均,2-bit LUT2) | GSM8K/MATH-500/MMLU-Pro(think+no-think 六项)平均准确率(%) | 45.5(full disaggregation + NVFP4 prefill) | 34.8(非解耦 LUT2) | +10.7 点;并反超 weight-only 2-bit 的 38.4 达 7.1 点 |
| prefill-heavy 长上下文(RULER 13 任务 × 4K–32K,Qwen3 家族平均,3-bit LUT3) | 任务与上下文平均准确率(%) | 80.4(full disaggregation) | 76.3(非解耦 LUT3) | +4.1 点,接近 3-bit weight-only 的 79.8 且 prefill 快 1.49× |
| 首 token 延迟(llama.cpp,DGX Spark,Qwen3.8-27B IQ1_S,8K 上下文) | TTFT 秒(越低越好) | 6.90 s(ODP + NVFP4 prefiller,权重从 SSD 流式加载) | 12.27 s(weight-only IQ1_S 常驻处理) | 1.78×;4K–32K 区间为 1.38–1.78×,短 prompt 时被 SSD 加载拖慢 |
| decode 端到端延迟(vLLM,batch 1,Gemma3-12B) | 相对 BF16 的每 token 加速比 | LUT2 4.15×;format disaggregation 下 NVFP4A16 3.27× | 1.00×(BF16);非解耦 NVFP4 3.18× | LUT2 每权重 2.5 bit(比 BF16 少 6.4×);跳过激活量化再快 2–3% |
| 4-bit format disaggregation 大规模 PTQ(8 个模型,最大 Kimi-K3 2.8T) | MMLU-Pro/MMMU-Pro 逐样本配对显著性检验(4 次重复,α=0.05) | 13 个模型-基准组合中 11 个点估计提升,6 个显著为正 | W4A4 均匀量化(decode 也做激活量化) | 无显著下降;Gemma-4-31B MMMU-Pro +1.13、Qwen3.8-27B MMLU-Pro +0.35 |
局限与改进
作者承认:评测只覆盖 decode-heavy 推理与单轮 prefill-heavy 任务,decode 延迟仅在 batch 1 下测量,未测高并发吞吐;多轮与 agentic 行为未评估——多轮场景下缓存的 assistant token 保留 decode 产生的 KV,若经 prefill 重建会得到不同表征,对这种缓存策略依赖的鲁棒性未经验证。ODP 不适用于 MoE(计算/加载比随激活参数占比升高),短 prompt 时 TTFT 反而被 SSD 加载拖慢。我的补充观察:其一,full disaggregation 使总存储近乎翻倍(LUT3 设备占用 5.53→9.44 GB),磁盘紧张时 ODP 只是换了瓶颈位置;其二,3 比特以上 prefiller 轻微掉分(IQ3_S MMMU-Pro -2.77),方法只在 1–2 比特区间价值显著;其三,训练成本不低,27B prefiller 用了 64 张 B300;其四,误差棒只是单次训练内最后 5 个 checkpoint 的 2 倍标准差,不含种子方差;其五,27B 训练语料与 MMLU-Pro 存在少量重叠(1 条精确匹配、3 条 Jaccard≥0.3),虽经披露与规避,完全无污染无法保证。
独立分析的弱点
独立分析有六个弱点。①存储与下载成本翻倍:ODP 不占显存但用户仍需保存两份 checkpoint(如 Qwen3-8B 的 SSD 流量 3.64+0.20 GB),可探索低秩分解 prefiller 或共享量化级以减小 prefill 体积。②多轮 KV 一致性:decode 写入的 KV 与 prefill 重建的不互换,长程 agentic 会话可能漂移,可研究 KV 适配器或让 decode 周期性用 prefill 通路刷新缓存。③高并发失效:batch 增大后 decode 逐渐转向计算受限,weight-only LUT 的优势收窄,应评测 continuous batching 吞吐并设计按负载切换的混合策略。④MoE 无法用 ODP:可按专家激活率做选择性流式,或只流式 attention/共享权重部分。⑤prefiller 泛化有限:错配时明显掉分(IQ1_S decoder 配 IQ2_XXS prefiller 在 MMMU-Pro 从 59.65 跌到 47.05),可训练 bitwidth 条件化的通用 prefiller 覆盖一族 decoder。⑥生成长度不可控:MMLU-Pro 上均值长度 +5–63% 可能侵蚀 TTFT 收益,可在蒸馏目标中加入长度正则。
未来方向
作者提出的方向:把 ODP 的流式原则推广到其他独立输入处理网络,包括 encoder–decoder LLM 的编码器、以及通过学习式 KV-cache 适配器(Heo 等)与 decoder 连接的 prefill 模型;MoE 场景的流式策略留作开放问题。基于成果可延伸:其一,把 QADD 的相位掩码路由与 RL 后训练结合,在 agentic 轨迹数据上联合优化两阶段并研究多轮缓存策略;其二,设计原生支持查表的硬件或在 Marlin 类 kernel 中进一步融合,缩小 LUT2 的 6.4× 位宽缩减与 3.82× 实测加速之间的差距(目前 kernel 已达带宽上限的 96%,瓶颈在 BF16 lm head 与 attention 等未加速部分);其三,建立代价模型自动在 format/full/ODP 三档间按模型与负载选择;其四,把 prefiller 思路推广到视觉编码器与多模态 adapter 的分别量化;其五,在 vLLM/SGLang 等生产引擎中落地 full disaggregation 的高并发支持;其六,既然 1-bit decode 精度能从 29 提到 61,配合更强的 decoder 训练有望让 sub-2-bit 本地部署真正可用。
复现评估
复现条件较好。开源:论文在 GitHub 发布复现主结果的代码库和带 ODP 的 llama.cpp fork,在 Hugging Face Hub 发布训练好的 Qwen3.8-27B NVFP4 prefillers。数据全公开:Tülu 3 SFT 语料、Unsloth 的 8 个 GGUF checkpoint、faunix/Qwen3.8-27B-Distillation-40K 自蒸馏语料;模型为公开的 Qwen 3(0.6B–8B)与 Gemma 3。附录给出完整超参(lr $3\times10^{-6}$、batch 64、1 亿 token、约 2450 步)、并行配置(27B 用 64 张 B300,PP=2、DP=32)与评测协议(逐样本配对置换检验、四轮重复)。门槛在硬件:延迟测量依赖 DGX Spark(GB10,sm_121),训练与评测在 GB300,NVFP4 需 Blackwell 级 GPU;LUT kernel 与 vLLM/llama.cpp 集成为自定义代码。对只想使用的本地用户,下载 prefiller 加 GGUF decoder 放入 llama.cpp fork 即可,难度低;要完整复现训练与全部基准需数据中心级算力,整体难度中等偏上。
论文图表
Qwen3(0.6B–8B 平均,BF16 参考 66.2%/84.2%)与 Gemma3(1B–12B 平均,58.6%/72.0%)在 decode-heavy(上)与 prefill-heavy(下)任务上的家族平均精度,比较逐相量化(仅 NVFP4 量化 prefill 或仅 decode)、W4A4 均匀量化与 format-disaggregated NVFP4(NVFP4 prefill + NVFP4A16 decode)。仅 decode 量化在 decode-heavy 上伤害是仅 prefill 的 2–4 倍(Gemma3-1B 达 7 倍),prefill-heavy 上反转;格式解耦在两类任务上都不差于均匀 NVFP4。
全文的动机证据:量化敏感度依赖工作负载,且相位分离的收益可被分别监测,这一诊断直接引出 DQ 的设计。