跳转到主要内容

量化:从 Scale 到 W4A8 的完整坐标

从第一性原理解释量化对象、数值格式、Scale 粒度、PTQ/QAT、运行时 Kernel 与性能验收边界

· 约 8 分钟阅读

核心结论

量化是模型压缩与低精度执行技术,但它不是 zip 式无损压缩。它用更小的数值集合近似原始权重、激活或 KV Cache,并用 Scale 等元数据恢复数值范围。

只说“这是一个 FP4 模型”还不够。一个可复现的量化方案至少要写清六个坐标:

量化对象、配方、格式、Scale、运行时与验收组成的完整坐标

最常见的误解是把 W4A8 当成整个模型的完整描述。它只说明某次矩阵乘的权重是 4 bit、激活是 8 bit;没有说明使用 INT 还是 FP、Scale 粒度、累加精度、KV Cache 精度、具体 Kernel,以及质量和速度是否通过验收。

CPU 工程师入口:可以把量化先理解为“Scale/舍入 → packing/layout → VNNI/AMX 或 Tensor Core → 宽精度累加 → profiler 验证”。完整对应关系见从 AVX/AMX 到 Tensor Core

1. 量化在近似什么

1.1 权重、激活和状态

对象生命周期常见写法主要收益主要风险
权重 WCheckpoint 加载后长期驻留W4A16、W8A16降低模型容量和权重读取流量权重重构误差、Kernel fallback
激活 A每次 Forward 动态产生W8A8、W4A8降低矩阵乘输入流量并使用低精度计算单元Outlier、动态 Scale 成本
KV Cache State随序列长度持续增长KV8、FP8 KV降低长上下文容量和读取流量Scale 校准、敏感层和长上下文误差
累加与输出Kernel 内部或层间接口Acc=FP32、Out=BF16稳定归约与层间连接不能由 W/A 位宽自动推断

这三个对象可以独立选择精度。同一个模型里完全可能同时出现:

Linear:      W=FP4, A=FP8, Acc=FP32, Out=BF16
Attention:   Q/K/V=BF16, internal reduction higher precision
KV Cache:    State=FP8, read and convert according to kernel contract
Norm/Router: BF16 or FP32-sensitive path

1.2 最基本的映射

以对称整数映射为例:

q=clip(round(xs),qmin,qmax),x^=sqq = \operatorname{clip}\left(\operatorname{round}\left(\frac{x}{s}\right), q_{\min}, q_{\max}\right), \qquad \hat{x} = s \cdot q
  • xx 是原始高精度数值。
  • qq 是量化后的有限离散值。
  • ss 是 Scale,负责把有限编码映射到原始数值范围。
  • x^\hat{x} 是反量化后的近似值。

非对称整数方案还会加入 zero-point。浮点量化的编码方式不同,但同样需要回答“低精度值如何覆盖当前数据范围”。

2. 位宽不是完整格式

格式值本身常见用途必须额外确认
BF161 sign + 8 exponent + 7 mantissa层间激活、Attention、输出Kernel 是否在内部提升累加精度
FP8 E4M31 sign + 4 exponent + 3 mantissa权重或激活、部分 KV CacheCurrent/Delayed/Block scaling、Scale dtype
FP8 E5M21 sign + 5 exponent + 2 mantissa更大动态范围的训练张量推理引擎和硬件是否支持目标路径
INT8有符号整数W8A8、部分 CPU/GPU 路径对称/非对称、per-tensor/per-channel
INT44 bit 整数GPTQ/AWQ 等 weight-onlygroup size、zero-point、packing、Kernel
FP4 E2M11 sign + 2 exponent + 1 mantissaBlackwell NVFP4 等路径block/global Scale、动态量化与设备能力

INT4FP4 只定义值域;GPTQAWQNVFP4 定义的是不同层次的算法或量化方案;Marlin 等名称则更接近运行时 Kernel。不要把这些层级放进同一列直接比较。

3. Scale 粒度与 Outlier

Per-tensor、per-channel、per-token 与 per-block Scale 的误差和运行时权衡

Scale 粒度回答的是:多少个值共用同一把尺子?

粒度Scale 数量直觉常见位置
Per-tensor最少一个 outlier 可能拉大整个张量的量化区间简单 INT8/FP8 配方
Per-channel按通道每个输出通道独立适配范围权重量化
Per-token按 token动态适配当前激活Activation quantization
Per-group / block按固定小块更贴近局部分布,但增加元数据和 layout 约束INT4、MXFP8、NVFP4

更细的粒度通常能降低局部量化误差,但不是越细越好。真实成本还包括:

bytesquantizedPb8+scale metadata+zero-point+padding/alignment\text{bytes}_{\text{quantized}} \approx \frac{P \cdot b}{8} + \text{scale metadata} + \text{zero-point} + \text{padding/alignment}

其中 PP 是参数量,bb 是低精度值的位宽。70B × 4 bit = 35 GB 只是裸权重下限,不是可运行实例的显存需求;运行时还需要 Scale、未量化层、KV Cache、activation、workspace 和通信缓冲。

Outlier 是激活量化尤其困难的原因。不同方法选择不同控制点:

  • AWQ 根据激活统计识别重要权重通道,通过等价缩放降低 weight-only 误差。
  • SmoothQuant 把激活量化难度离线迁移到权重,使 W8A8 更容易执行。
  • Rotation 类方法通过等价旋转重新分布 outlier。
  • 工程上还可以保留敏感层或特定 Attention 层为高精度。

4. 为什么量化可能加速,也可能不加速

4.1 三条独立收益路径

  1. 容量:权重或 KV 变小,模型能放入更少 GPU,或容纳更大 Batch/Context。
  2. 带宽:每步从 HBM 读取的权重和 KV 字节减少。
  3. 计算:硬件和 Kernel 支持时,低精度矩阵乘拥有更高峰值吞吐。

这三条路径不能合并成一个固定倍数。

4.2 Prefill 与 Decode 的差异

阶段常见主瓶颈更可能受益的方案为什么不能预设倍数
Prefill大矩阵计算、Attention IOW8A8、FP8、W4A8 等低精度计算路径取决于 Tensor Core、shape、fusion 和 Q/DQ 成本
小 Batch Decode权重与 KV 的 HBM 读取W4A16、W4A8、KV8Kernel 解包、Scale、访存效率和未量化算子会吃掉理论收益
大 Batch Decode逐步向 compute-bound 移动低精度计算 + 调度Batch 改变 Roofline 位置,不能套用单请求结论
长上下文KV 容量与 Attention 读取KV8、GQA/MLA 等质量对 Scale、层类型和上下文长度敏感

因此应把理论上限写成假设:

裸权重字节减少 4×
≠ 实例显存减少 4×
≠ TPOT 改善 4×
≠ 端到端吞吐改善 4×

只有在同一硬件、引擎版本、模型、并行配置、ISL/OSL、Batch 和 SLO 下实测,才能给出性能倍数。

5. PTQ、QAT 与动态量化

时机做什么优点代价
PTQ训练完成后,用权重和少量校准数据生成量化参数成本低、适合已有模型极低位或激活量化可能出现质量损失
QAT训练或微调时模拟量化误差模型可以适应低精度噪声需要训练数据、算力和稳定训练配方
Dynamic / online运行时根据当前激活计算 Scale能适应 token/block 的局部分布引入 amax、Scale 计算、cast 和额外 Kernel

典型方法的定位:

方法或方案主要对象典型精度核心控制点
GPTQWeight-only PTQW4A16 / W3A16近似二阶信息与逐列误差补偿
AWQWeight-only PTQW4A16激活感知的重要通道保护
SmoothQuantWeight + activation PTQW8A8把 activation outlier 难度迁移到权重
FP8 recipeWeight/activationW8A8E4M3/E5M2、Scale 时机与粒度
NVFP4 recipeWeight/activationFP4/FP8 mixedE2M1、16-element block Scale 与全局 Scale

没有稳定的 AWQ > GPTQ > 其他方法 总排序。结果会随模型、任务、位宽、group size、校准集、Kernel 和硬件变化。更完整的方法与实验设计见量化方法与评测

6. 部署时真正要核对什么

配置合同

Model identity:
  checkpoint + revision + model config

Quantization recipe:
  object + format + granularity + calibration + excluded layers

Runtime identity:
  engine version + kernel backend + hardware + TP/PP/EP

Workload identity:
  ISL/OSL + batch/concurrency + KV hit + SLO

验收顺序

  1. 配置回读确认加载了预期 recipe。
  2. 引擎日志和 trace 确认 operand dtype、Q/DQ 边界与 Kernel,没有静默 fallback。
  3. 与高精度基线做质量验收。
  4. 分别核对权重、Scale、KV、activation 和 workspace 的容量账本。
  5. 再比较 TTFT、TPOT、TPS/TPM 与成本。

7. 关键认知

  • 量化是一组近似和执行合同,不是单一 dtype。
  • W4A8 只描述某次矩阵乘的两个 operand 位宽。
  • Scale 粒度、Scale dtype 与 outlier 处理共同决定误差。
  • Checkpoint 更小不等于运行时一定使用低精度 Kernel。
  • 理论字节下降不等于实测延迟或吞吐同比例改善。
  • 质量、容量和性能是三个独立结果,必须分别验收。

相关页面

参考资料