权重量化和激活量化有什么区别?
简化版
Weight-only 只压权重,如 W4A16:权重 INT4,激活和累加多为 FP16/BF16。它显著减少模型存储和 Decode 权重带宽,质量/部署相对容易。激活量化把中间激活也降到 INT8/FP8 等,可使用低精度矩阵单元并减少激活带宽,但输入相关、Outlier 多,校准和质量风险更高。
选择要看阶段与硬件:小 Batch Decode 常先做 Weight-only;大 Batch Prefill/吞吐场景可能从 W8A8/FP8 获益。必须说明权重、激活、累加和 KV 各自精度,并在目标 Kernel 上验证。
详细版
| 方案 | 权重 | 激活 | 典型收益 | 难点 |
|---|---|---|---|---|
| W8A16 | INT8 | FP16 | 权重带宽/容量 | 反量化 |
| W4A16 | INT4 | FP16 | 更强权重压缩 | 精度与解包 |
| W8A8 | INT8 | INT8 | 整数 GEMM | 激活校准 |
| FP8 | FP8 | FP8 | 新硬件高吞吐 | 硬件与格式 |
weight-only: low-bit W -> dequant/fused GEMM with high-precision A
W8A8 : quantize A + low-bit W -> integer/low-bit GEMM
Activation 可静态或动态量化;静态快但依赖校准,动态适应请求分布但增加运行时统计。最终比较质量、TTFT/TPOT、吞吐、显存、功耗和单位成功成本。
完整版教学
一、先把精度口径写完整
“INT4 模型”可能只指权重,Activation、累加、输出和 KV 仍是 FP16。面试和文档应写 W4A16、W8A8 等明确口径。
累加通常使用更高精度防止大量乘加误差溢出。
二、Weight-only 的工作方式
离线将权重分组量化,推理时融合解包/反量化与 GEMM,Activation 保持高精度。
它减少静态权重存储和每步读取字节,对自回归 Decode 的带宽瓶颈尤其有价值。
高效实现不会先把整份权重还原为 FP16,而是在 Tile 内解包并立即参与矩阵计算,以保留带宽优势。
三、Activation 量化的工作方式
Activation 可以用离线校准得到静态 Scale,也可以在每个 Token、每个通道或每组运行时计算动态 Scale。静态方案容易融合、延迟稳定,但遇到分布漂移会饱和;动态方案适应性更强,却增加归约、量化与 Cast 开销。
例如某层激活大多位于 [-1,1],偶发值达到 12,整张量 INT8 静态量化会让多数值分辨率变粗。按通道缩放或把离群通道保留 FP16 能降低误差,但最终是否更快取决于硬件是否提供对应的 W8A8 Kernel。
中间激活在运行时量化,低精度与权重一起进入整数/FP8 GEMM,输出按需转回高精度。
Activation 随请求变化,需要静态校准或动态计算 Scale,难度高于固定权重。
四、为什么 Decode 偏爱 Weight-only
自回归 Decode 每步只处理少量 Token,却要读取几乎全部模型权重,算术强度低,常受显存带宽限制。把权重从 FP16 压到 INT4 理论上把读取字节降到约四分之一,即使 Activation 保持 FP16,也可能明显缩短每 Token 时间。
它的收益不是固定四倍:反量化、元数据、KV Cache、调度和缺失 Kernel 都会吞掉一部分提升。应在目标 Batch 和上下文长度下比较 TPOT;Prefill 的大矩阵计算更可能受算力限制,结论不能直接照搬。
Decode 每序列每步 Token 少,矩阵较小且反复读取大权重,常受显存带宽限制。
W4A16 显著减权重字节,同时避免 Activation 量化开销,可能在低 Batch 更合算。
五、为什么 Prefill 可能偏爱 W8A8
Prefill 有大量 Token 和较大 GEMM,更容易计算受限。若硬件提供高吞吐 INT8/FP8 Tensor Core,Activation 量化能提高计算吞吐。
但量化/转换成本和 Shape 支持仍需实测,不能只看理论 TOPS。
六、静态和动态 Activation 量化
静态量化用校准集预先确定 Scale,运行时快;动态量化按输入计算范围,适应分布但增加归约与同步。
| 方式 | 适应性 | 运行时开销 | 风险 |
|---|---|---|---|
| 静态 | 低/中 | 低 | 分布漂移 |
| 动态 per-token | 高 | 中/高 | Kernel 复杂 |
| 动态 per-channel | 更高 | 高 | 元数据和访存 |
选择取决于硬件融合能力。
七、Outlier 为什么影响激活
Transformer Activation 常有少数异常通道,per-tensor Scale 被极值拉宽,普通值分辨率下降。
SmoothQuant、per-channel/group、裁剪或保留异常通道高精度可缓解,但都会改变权重分布或 Kernel。
校准需覆盖长尾输入;动态范围在新语言或长上下文中变化时,静态 Activation Scale 可能发生饱和。
八、权重量化也并非简单
Group Size、对称/非对称、Zero Point、舍入和 Outlier 都影响质量。INT4 解包效率与矩阵对齐决定性能。
AWQ/GPTQ 使用激活/二阶信息降低误差,所以 Weight-only 仍可能依赖校准数据。
九、KV 精度为什么独立
KV Cache 是运行时历史状态,不等同普通 Activation,也不由 W4A16 命名说明。它可保持 FP16 或另做 FP8/INT8/INT4。
precision config = W precision + A precision
+ accumulator + KV precision
完整配置才能复现实验。
十、质量风险如何比较
Weight-only 通常扰动较少;Activation 量化影响每层动态信号,长尾、长上下文和安全边界可能更敏感。
低位宽时可用 QAT、混合精度和细粒度 Scale;所有方案都需切片评测。
比较时固定相同权重位宽,单独开关 Activation 量化,才能归因额外质量损失;否则 W4A16 与 W8A8 同时改变两个变量。
十一、显存收益有哪些
Weight-only 主要减少权重;Activation 量化可减少中间激活/临时缓冲,但在线推理峰值还包含 KV 和工作区。
因此文件缩小 4 倍不代表总显存缩小 4 倍。按实际并发和序列长度 Profile。
十二、硬件与 Kernel 如何决定
设备需原生支持目标位宽、累加和融合路径。若 W4 每步先完整展开 FP16,带宽收益会缩水;W8A8 若回退也无法加速。
记录实际 Kernel、Cast 和数据类型,做版本化性能回归。
十三、如何选型与验收
先做 FP16 基线,再试硬件成熟的 Weight-only;若 Prefill/吞吐仍是瓶颈且质量允许,再评估 Activation 量化或 QAT。
在真实长度、Batch 和并发下比较任务/长尾/安全质量、TTFT、TPOT、吞吐、显存与功耗,并灰度回滚。
Weight-only 主要压缩静态权重与 Decode 带宽,Activation 量化进一步追求低精度计算吞吐,但付出更高的分布和实现风险。
十四、常见误区与追问
- 误区:INT4 模型所有张量都是 INT4。 常见只是 W4A16。
- 误区:Weight-only 不需要校准数据。 AWQ/GPTQ 等仍使用激活信息。
- 误区:Activation 量化一定更快。 动态 Scale 与 Cast 可能抵消收益。
- 误区:文件压缩比等于显存压缩比。 KV、工作区和 Activation 仍占空间。
- 误区:权重精度决定 KV 精度。 KV 是独立配置。
- 追问:Decode 先选什么? 通常先测成熟的 Weight-only 路径。
- 追问:Prefill 吞吐怎么提? 在硬件支持下评估 W8A8/FP8 与融合 Kernel。
十五、加强记忆
先读命名:W、A、累加、KV 分开说;再记 Weight-only:压存储与权重带宽;再记 Activation:追求低精度 GEMM,但分布更难;再分阶段:Decode 偏带宽,Prefill 可能偏算力。再分静动态:校准快路径对运行时自适应;再查硬件:Kernel、对齐、Cast 和回退;最后验收:质量切片与端到端性能共同达标。