← 返回题目列表

大模型推理中 Weight-only、W8A8 和 FP8 量化有什么区别?如何选型?

高频 中等 第 1 / 25 题 更新于 2026/07/25
推理量化Weight-onlyW8A8FP8

简化版

三种量化方案侧重不同:Weight-only(如 W4A16) 只压权重、计算前反量化回高精度再和 FP16 激活相乘,最省权重带宽/显存,适合 Decode、小 batchW8A8 权重和激活都 8 位,能用整数矩阵乘内核吃高吞吐,但激活有离群值、更难量化;FP8 是 8 位浮点,保留指数位、动态范围更友好,需要支持 FP8 的硬件。选型不能只看「模型变小」——要看硬件内核、模型质量、显存、batch、校准数据综合,模型小不等于一定更快。

详细版

常见方案:W8A16、W4A16、W8A8、FP8(权重+激活)、以及独立的 KV Cache 量化。配套算法:GPTQ(近似二阶逐层量化权重)、AWQ(按激活保护重要权重通道)、SmoothQuant(把激活离群值离线迁移一部分到权重,让 W8A8 更易落地)。

关键认知:精度格式只是第一步。若设备没有对应 Tensor Core 或高效 kernel,反量化、格式转换、变小的算子反而会抵消收益。必须用最终推理引擎 + 目标硬件 + 真实长度分布实测 TTFT、TPOT、吞吐和任务质量,不能只比模型文件大小。

完整版教学

一、先分清「量化对象」有哪些

不同方案量化的东西不同,收益也不同:

对象特点量化收益难点
权重静态、长期驻留显存直接减存储和带宽校准容易,相对好量化
激活每层动态产生能用整数矩阵乘加速有离群值,难量化
KV Cache随并发/上下文增长扩大缓存容量、提并发长上下文更受益
部分算子Embedding/归一化/输出头——敏感,常保留高精度

易错点:「4-bit 模型」通常只指部分张量(权重),不代表所有计算都用 INT4——激活、注意力、输出头往往还是高精度。

二、Weight-only(W4A16):省权重带宽,利于 Decode

Weight-only 把权重以低位(如 4 位)存储,计算前在寄存器/共享内存里解包、反量化回 FP16/BF16,再和高精度激活相乘:

存储:权重 INT4(省 4× 显存)
计算:读 INT4 → 反量化成 FP16 → 与 FP16 激活做矩阵乘

它显著降低权重的带宽和容量,最适合Decode 阶段和小 batch——因为那时瓶颈正是「反复读大权重只算一个 token」(访存受限)。

但有个关键边界:当 batch 很大、瓶颈从”权重带宽”转成”算力”(compute-bound)时,每次都要反量化的开销会凸显,加速会缩水。所以 Weight-only 的收益高度依赖负载——低并发单请求收益大,高并发大 batch 收益小。

三、W8A8 与 SmoothQuant:让整数矩阵乘用起来

W8A8 让矩阵乘两侧都是 8 位,从而能调用 GPU 的INT8 Tensor Core(高吞吐整数内核),比 Weight-only 更彻底地省算力。难点在激活

激活里存在少数"离群通道",幅值比其他通道大几十上百倍:
  正常通道:|值| ≈ 1
  离群通道:|值| ≈ 100
若整体用一个 scale 量化 → 离群值撑大 scale → 正常值被压成几个格子 → 精度崩

SmoothQuant 的解法很巧:用数学等价的 per-channel 缩放,把激活的离群幅度「搬」一部分到权重上(权重相应缩小)——(X/s)·(s·W) = X·W 结果不变,但激活变平滑了、更好量化:

原始: Y = X · W          (X 有离群,难量化)
平滑: Y = (X/s) · (s·W)   (X/s 平滑好量化,s·W 权重吸收难度)

于是 W8A8 才能在大模型上落地。缩放系数和校准样本影响误差,换领域数据要重新验证。

四、FP8:用浮点的动态范围换低精度

FP8 是 8 位浮点(常见 E4M3 / E5M2 两种格式,分别偏精度/偏范围)。相比 INT8 的均匀格子,FP8 有指数位,动态范围更大——对「值域跨度大、有离群」的激活更友好,往往比 INT8 更容易保持质量:

INT8:16→256 个均匀格子,范围固定,离群值撑大步长
FP8(E4M3):4 位指数 → 范围宽,能同时表达很大和很小的值

代价:FP8 仍需缩放和溢出管理,且依赖支持 FP8 的硬件与内核(如 H100)。它也不是天然无损——注意力、输出层、长上下文任务仍要做回归测试。

五、精度格式只是第一步:硬件和负载决定成败

这是选型最核心、也最反直觉的一点:「模型变小」不等于「一定变快」。真正决定收益的是「格式 + kernel + 硬件 + 负载」四者匹配:

  • 没有对应的高效 kernel/Tensor Core → 反量化和格式转换开销可能吃掉全部收益,甚至更慢;
  • 量化后单个算子变小 → 可能反而降低 GPU 利用率;
  • 负载不同收益不同 → Weight-only 利于小 batch/Decode,W8A8 利于大 batch/compute-bound。

所以务必用目标推理引擎 + 目标硬件 + 真实流量端到端实测,别拿别人的数字或纸面倍数下结论。

六、常见误区与追问

  • 误区:量化后模型更小,所以一定更快。 不一定,缺高效 kernel 时反量化开销会抵消甚至变慢。
  • 误区:W8A8 一定比 Weight-only 快。 大 batch 下 W8A8 用整数内核更优,但小 batch/Decode 下 Weight-only 省带宽更划算。
  • 误区:FP8 无损。 也有精度损失,需对注意力/输出层/长上下文做回归。
  • 追问:Weight-only 什么时候收益缩水? 大 batch、compute-bound 时,反量化开销凸显。
  • 追问:W8A8 的最大难点? 激活离群值;SmoothQuant 用等价缩放把离群难度迁移到权重解决。
  • 追问:FP8 相比 INT8 的优势? 有指数位、动态范围更宽,对离群激活更友好,但需 FP8 硬件。
  • 追问:怎么评估量化质量? 除困惑度,还要测生成一致性、数学、代码、长上下文、工具参数、领域任务;校准集要覆盖真实 prompt 长度和内容。

七、加强记忆

三种推理量化记「省什么、靠什么」:Weight-only(W4A16)省权重带宽/显存、反量化回高精度算、利于 Decode 和小 batch;W8A8 权重激活都 8 位、用整数 Tensor Core 吃吞吐、利于大 batch,难点是激活离群值(SmoothQuant 用等价缩放迁移到权重解决);FP8 是 8 位浮点、有指数位、动态范围更宽、对离群更友好,但需 FP8 硬件。最核心的一条钉死:「模型变小 ≠ 一定更快」——收益由「格式+kernel+硬件+负载」共同决定,必须端到端实测