Skip to content

权重量化推理:从 FP16 到 INT8/INT4/FP8 的工程 ​

说明:本篇为综述/无第一手实验数据,采用公开实践与量化文献路线。

实验目标 ​

推理量化是"用显存和速度换精度"的生意:INT8 显存减半、INT4 减到 1/4,但量化损失从哪来、怎么控制、什么时候不值得——是推理工程的高频决策。本篇目标:拆解权重量化推理的完整框架——量化原理(PTQ/QAT)→ 校准数据与精度评估 → INT8/INT4/FP8 的选择矩阵 → 量化推理的显存/吞吐账本。读完能回答:我的模型该量化到几 bit、用什么方法、精度损失怎么验证。

代码逐段拆解 ​

第一段:PTQ 校准与量化(以 INT8 为例) ​

python
# 训练后量化(PTQ):不需要重训,用校准数据定缩放因子
from transformers import AutoModelForCausalLM
import torch

model = AutoModelForCausalLM.from_pretrained("your-model")
# 校准:用少量代表数据(数百条)统计激活范围,确定每层缩放因子
calib_texts = load_calibration_set(n=512)   # 代表训练分布,勿用测试集
# 实际接入量化库(GPTQ/AWQ 等),这里示意核心:
#   1) 逐层/逐张量统计 min/max 或百分位 → scale
#   2) 权重 round 到整数域:q = round(w / scale)
#   3) 反量化校验:重建误差 = ||w - q*scale|| 逐层检查

要点:

  1. PTQ 是主流起点:不需要重训,用数百条校准数据确定量化参数;GPTQ/AWQ 等算法进一步用"误差最小化"(Hessian 加权)减少逐层损失。
  2. 校准数据必须代表训练分布:用测试集或偏差分布做校准,量化参数会偏——校准集质量直接决定量化精度。
  3. 逐层重建误差是快速体检:量化后逐层检查 ||w - q*scale||,哪层误差大先定位(通常是少数敏感层,可保留高精度)。

第二段:INT4 与 FP8 的选择 ​

python
# INT4(如 GPTQ/AWQ 4bit):显存减到 1/4,推理吞吐大幅提升
#   适用:大模型显存受限、长上下文、高并发(KV 显存占比上升时)
# FP8(E4M3):训练/推理同精度,量化损失小,但显存只减半
#   适用:新硬件(H100 等原生支持)、精度敏感场景
# 选择矩阵(经验):
#   FP16 → 基线
#   INT8 → 通用折中(损失小、收益明确)
#   INT4 → 显存/并发优先(损失可接受时)
#   FP8  → 新硬件 + 精度敏感

要点:

  • INT4 的收益在"并发"而不只是显存:显存减到 1/4 后,同卡能装更多请求/更长上下文(KV 显存占比问题,12 章 KV 篇衔接)——量化决策要与容量规划(12 章)联动。
  • FP8 是精度与压缩的平衡点:原生支持的新硬件上损失小,但压缩率只有 2 倍(不如 INT4 的 4 倍)——精度敏感选 FP8,显存优先选 INT4。
  • 量化后必须实测:perplexity/下游任务分数对比(量化 vs FP16),掉点超阈值(如 ppl +1)就不值得。

原理讲解 ​

量化损失从哪来 ​

来源说明缓解
舍入误差权重取整的精度损失更高 bit、误差最小化算法(GPTQ)
激活范围激活分布过宽,量化步长浪费逐 token/逐通道量化、校准
敏感层个别层对量化极敏感敏感层保留高精度(混合量化)
离群值大值拉宽范围,小值精度丢失AWQ 按激活感知保护重要通道

核心认知:量化损失集中在"少数敏感层/敏感通道",所以"混合量化"(大部分层 INT4、敏感层 FP16)能以少量显存换大部分精度——别一刀切全量化,先定位敏感层。

训练后量化 vs 量化感知训练 ​

方法是否需要训练精度成本
PTQ(GPTQ/AWQ)否中-高(大模型可接受)低(小时级)
QAT(量化感知训练)是(微调/蒸馏)高中-高
蒸馏到低精度小模型是高(但模型变小)高

工程判断:大模型(70B+)PTQ 通常够用(参数量大、冗余度高);小模型/精度敏感场景才考虑 QAT 或蒸馏。PTQ 先试,不够再上 QAT。

显存与吞吐账本(估算口径) ​

精度权重显存(70B)相对吞吐精度风险
FP16~140GB基线无
INT8~70GB1.2-1.5×低
INT4~35GB1.5-2.5×中(可接受)
FP8~70GB1.2-1.8×低

(注:实际收益受 KV 显存、batch 大小与硬件影响,须实测。)

实验结果 ​

(估算口径,非实测)

方案显存吞吐ppl 变化(典型)
FP16 基线100%1×—
INT8 PTQ~50%1.2-1.5×+0.1-0.3
INT4 GPTQ~25%1.5-2.5×+0.3-1.0

工程启示 ​

  1. PTQ 先试:大模型 PTQ(GPTQ/AWQ)通常够用,小时级成本先验证;不够再 QAT/蒸馏。
  2. 校准集是精度的根:代表训练分布的校准集 + 逐层重建误差检查,量化质量一半在数据。
  3. 混合量化优于一刀切:先定位敏感层(重建误差/激活离群),敏感层留高精度——用少量显存换大部分精度。
  4. 量化决策与容量规划联动:INT4 的"同卡更多并发/更长上下文"要与 12 章容量公式一起算,别只看显存数字。

下一篇预告:推理侧量化讲完,回到网络基础——"InfiniBand 与 RoCE 选型:场景、成本与运维对比"。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com