DUAL GRAINED QUANTIZATION: EFFICIENT FINEGRAINED QUANTIZATION FOR LLM
概览(一句话总结)
Dual Grained Quantization(DGQ)把「组内 INT4 细粒度权重」在推理前无损抬升到「INT8 通道尺度」,再搭配 A8 动态/静态激活量化,实现 W4 × A8 模式既享受 Fine-grained 精度,又保留 INT8 GEMM 的硬件效率,并用“双阶段网格搜索 + 百分位裁剪”确保量化参数快速可得、精度几乎无损。
背景与挑战
粗粒度(通道/张量)量化 易映射到连续 INT8 GEMM,但精度差;细粒度(组 / token / vector)量化 精度高,却因“每组独立 scale”打断累加轴而无法用单一 INT8 核心高效执行。(arxiv.org)
现有 W4A16 或 W3A16 方法在显存占用上优于 FP16,却需 FP16 累加;W4A8 方案若直接 group-wise,仍要分段 GEMM + FP16 合并,速度受限。
核心设计思想
1. 双粒度权重量化(Dual-Grained)
离线:
对每个 group g 求 INT4 量化W_{u4} 与对应组尺度S'_{fp16}(细粒度)。
将S'{fp16} 分解 为 整型组尺度S^{(2)}{s8}(INT8 保存)和 通道尺度s^{(1)}_{fp16}(FP16)。
存储:
W_u4
(4 bit) +S^{(2)}_{s8}
(8 bit) +s^{(1)}_{fp16}
(16 bit)。
推理:
$W_{s8}=S^{(2)}{s8}\cdot(W{u4}+ZP)$ 再与 A8 激活做 一次性 INT8 GEMM;结果乘以s^{(1)}{fp16},s^{X}{fp16} 即回到 FP16 精度。
这样保留了组尺度的低误差,又让乘法仍可用通用 INT8 kernel。
2. 双阶段网格搜索(Two-Phase Grid Search)
直接同时搜索两级 scale{s^{(1)},S^{(2)}} 维度爆炸。DGQ:
Phase-1:只对每组搜索最优S'_{fp16}、ZP,复杂度O(n_g\sigma_g)。
Phase-2:在组 scale 固定后,再按通道搜索s^{(1)} 并离散S^{(2)}=\big\lfloor S'/s^{(1)}\big\rfloor,复杂度降低到O(\sigma_c)。
总复杂度O(n_g\sigma_g+\sigma_c),比一次性搜索的O(o,n_g,\sigma_g,\sigma_c) 快近两个数量级。
3. 百分位裁剪平滑(Percentile Clipping Smooth)
针对 LLaMA 中 GLU 放大激活离群值的问题,DGQ在每层按通道对激活做 p-th percentile 裁剪 + scale 回填,无需梯度或 Hessian 即显著抑制 outlier 对量化误差的影响。
4. 高效 CUTLASS INT8 Kernel
作者基于 NVIDIA CUTLASS 实现融合“INT4→INT8 dequant + GEMM”算子,在 长序列 情况下比 A16W4 实际推理 提速 ≈ 3.2×,同时显存仅为 A8W8 的一半。
实验结果速览
此外,DGQ 在六项 CSQA 零样本任务上与 FP16 误差 ≤ 0.5 pp;在长序列 4 k-token 情形,整体延迟与 A8W8 持平而显存继续下降。
与现有方法对比
适用场景与局限
适用:需要通用 GPU 推理、对显存/带宽敏感的在线生成、移动端 INT8 GEMM。GitHub 已提供一键脚本与 CUTLASS kernel。(github.com)
局限:
仍需保存两套 scale,参数量略高于纯组 INT4。
A8 激活对部分极端稀疏/高动态范围任务可能不足,需配合 SmoothQuant 或动态量化。
当前 kernel 针对 NVIDIA GPU;ARM/ASIC 需重新调度指令。
未来可能改进方向
自动分组大小 & 自适应双粒度拆分(可融合 Hessian 估计)。
将 DGQ 与 KV-Cache 量化(如 ZipCache)结合,统一显存压缩策略。
面向 H100 FP8 Pipe 的“FP8-INT4”混合版本,进一步降低能耗。
在编译器层做 Scale-Fusion & Kernel-Fusion,减少访存。(huggingface.co, papers.ssrn.com)
参考:arXiv 论文与 PDF 全文、OpenReview 提交、GitHub 实现、HuggingFace DailyPapers 摘要、SSRN & X-MOL 聚合页面等。感谢原作者与社区提供的公开材料。